28
28
#define I2C_SERCOM_APBCMASK PM_APBCMASK_SERCOM0
29
29
30
30
static uint8_t txBuffer [2 ];
31
- static uint8_t rxBuffer [1 ];
31
+ uint8_t rxBuffer [1 ];
32
32
static uint8_t txBufferLen = 0 ;
33
33
static uint8_t rxBufferLen = 0 ;
34
34
static uint8_t txAddress ;
@@ -327,7 +327,7 @@ static inline bool sendDataMasterWIRE(uint8_t data)
327
327
return true;
328
328
}
329
329
330
- static inline void i2c_init (uint32_t baud ) {
330
+ void i2c_init (uint32_t baud ) {
331
331
//Master Mode
332
332
initMasterWIRE (baud );
333
333
enableWIRE ();
@@ -336,7 +336,7 @@ static inline void i2c_init(uint32_t baud) {
336
336
pin_set_peripheral_function (PINMUX_PA09C_SERCOM0_PAD1 );
337
337
}
338
338
339
- static inline void i2c_end () {
339
+ void i2c_end () {
340
340
disableWIRE ();
341
341
}
342
342
@@ -425,219 +425,4 @@ uint8_t i2c_write(uint8_t ucData)
425
425
return 1 ;
426
426
}
427
427
428
- uint8_t readRegister (uint8_t reg ) {
429
- i2c_beginTransmission (PMIC_ADDRESS );
430
- i2c_write (reg );
431
- i2c_endTransmission (true);
432
-
433
- i2c_requestFrom (PMIC_ADDRESS , 1 , true);
434
- return rxBuffer [0 ];
435
- }
436
-
437
- uint8_t writeRegister (uint8_t reg , uint8_t data ) {
438
- i2c_beginTransmission (PMIC_ADDRESS );
439
- i2c_write (reg );
440
- i2c_write (data );
441
- i2c_endTransmission (true);
442
-
443
- return 2 ;
444
- }
445
-
446
- bool disableWatchdog (void ) {
447
-
448
- uint8_t DATA = readRegister (CHARGE_TIMER_CONTROL_REGISTER );
449
- writeRegister (CHARGE_TIMER_CONTROL_REGISTER , (DATA & 0b11001110 ));
450
- return 1 ;
451
- }
452
-
453
- bool setInputVoltageLimit (uint16_t voltage ) {
454
-
455
- uint8_t DATA = readRegister (INPUT_SOURCE_REGISTER );
456
- uint8_t mask = DATA & 0b10000111 ;
457
-
458
- switch (voltage ) {
459
-
460
- case 3880 :
461
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000000 ));
462
- break ;
463
-
464
- case 3960 :
465
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00001000 ));
466
- break ;
467
-
468
- case 4040 :
469
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00010000 ));
470
- break ;
471
-
472
- case 4120 :
473
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00011000 ));
474
- break ;
475
-
476
- case 4200 :
477
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00100000 ));
478
- break ;
479
-
480
- case 4280 :
481
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00101000 ));
482
- break ;
483
-
484
- case 4360 :
485
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00110000 ));
486
- break ;
487
-
488
- case 4440 :
489
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00111000 ));
490
- break ;
491
-
492
- case 4520 :
493
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01000000 ));
494
- break ;
495
-
496
- case 4600 :
497
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01001000 ));
498
- break ;
499
-
500
- case 4680 :
501
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01010000 ));
502
- break ;
503
-
504
- case 4760 :
505
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01011000 ));
506
- break ;
507
-
508
- case 4840 :
509
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01100000 ));
510
- break ;
511
-
512
- case 4920 :
513
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01101000 ));
514
- break ;
515
-
516
- case 5000 :
517
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01110000 ));
518
- break ;
519
-
520
- case 5080 :
521
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b01111000 ));
522
- break ;
523
-
524
- default :
525
- return 0 ; // return error since the value passed didn't match
526
- }
527
-
528
- return 1 ; // value was written successfully
529
- }
530
-
531
- bool setInputCurrentLimit (uint16_t current ) {
532
-
533
-
534
- uint8_t DATA = readRegister (INPUT_SOURCE_REGISTER );
535
- uint8_t mask = DATA & 0b11111000 ;
536
-
537
- switch (current ) {
538
-
539
- case 100 :
540
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000000 ));
541
- break ;
542
-
543
- case 150 :
544
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000001 ));
545
- break ;
546
-
547
- case 500 :
548
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000010 ));
549
- break ;
550
-
551
- case 900 :
552
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000011 ));
553
- break ;
554
-
555
- case 1200 :
556
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000100 ));
557
- break ;
558
-
559
- case 1500 :
560
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000101 ));
561
- break ;
562
-
563
- case 2000 :
564
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000110 ));
565
- break ;
566
-
567
- case 3000 :
568
- writeRegister (INPUT_SOURCE_REGISTER , (mask | 0b00000111 ));
569
- break ;
570
-
571
- default :
572
- return 0 ; // return error since the value passed didn't match
573
- }
574
-
575
- return 1 ; // value was written successfully
576
- }
577
-
578
- bool setChargeCurrent (bool bit7 , bool bit6 , bool bit5 , bool bit4 , bool bit3 , bool bit2 ) {
579
-
580
- uint8_t current = 0 ;
581
- if (bit7 ) current = current | 0b10000000 ;
582
- if (bit6 ) current = current | 0b01000000 ;
583
- if (bit5 ) current = current | 0b00100000 ;
584
- if (bit4 ) current = current | 0b00010000 ;
585
- if (bit3 ) current = current | 0b00001000 ;
586
- if (bit2 ) current = current | 0b00000100 ;
587
-
588
- uint8_t DATA = readRegister (CHARGE_CURRENT_CONTROL_REGISTER );
589
- uint8_t mask = DATA & 0b00000001 ;
590
- writeRegister (CHARGE_CURRENT_CONTROL_REGISTER , current | mask );
591
- return 1 ;
592
- }
593
-
594
- bool setChargeVoltage (uint16_t voltage ) {
595
-
596
- uint8_t DATA = readRegister (CHARGE_VOLTAGE_CONTROL_REGISTER );
597
- uint8_t mask = DATA & 0b000000011 ;
598
-
599
- switch (voltage ) {
600
-
601
- case 4112 :
602
- writeRegister (CHARGE_VOLTAGE_CONTROL_REGISTER , (mask | 0b10011000 ));
603
- break ;
604
-
605
- case 4208 :
606
- writeRegister (CHARGE_VOLTAGE_CONTROL_REGISTER , (mask | 0b10110000 ));
607
- break ;
608
-
609
- default :
610
- return 0 ; // return error since the value passed didn't match
611
- }
612
-
613
- return 1 ; // value was written successfully
614
- }
615
-
616
- bool disableCharge ()
617
- {
618
- uint8_t DATA = readRegister (POWERON_CONFIG_REGISTER );
619
- uint8_t mask = DATA & 0b11001111 ;
620
-
621
- writeRegister (POWERON_CONFIG_REGISTER , mask );
622
-
623
- return 1 ;
624
- }
625
-
626
- void apply_pmic_newdefaults ()
627
- {
628
- disableWatchdog ();
629
-
630
- //disableDPDM();
631
- disableCharge ();
632
- setInputVoltageLimit (4360 ); // default
633
- setInputCurrentLimit (900 ); // 900mA
634
- setChargeCurrent (0 ,0 ,0 ,0 ,0 ,0 ); // 512mA
635
- setChargeVoltage (4112 ); // 4.112V termination voltage
636
- }
637
-
638
- void configure_pmic () {
639
- i2c_init (100000 );
640
- apply_pmic_newdefaults ();
641
- }
642
-
643
- #endif
428
+ #endif
0 commit comments