Example program supporting the USB MSD bootloader that comes pre-loaded on the MAX32620FTHR

Dependencies:   MAX32620FTHR MAX77650

Fork of MAX32620FTHR_Pmic by Maxim Integrated

Committer:
gsteiert
Date:
Sat May 26 06:33:28 2018 +0000
Revision:
1:840590377447
Parent:
0:1b50d5674f92
Example program using the USB MSD bootloader that comes loaded on the MAX32620FTHR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jessexm 0:1b50d5674f92 1 #include "mbed.h"
jessexm 0:1b50d5674f92 2 #include "MAX32620FTHR.h"
jessexm 0:1b50d5674f92 3 #include "MAX77650.h"
jessexm 0:1b50d5674f92 4
jessexm 0:1b50d5674f92 5 // Configure GPIO voltage
jessexm 0:1b50d5674f92 6 MAX32620FTHR max32620fthr(MAX32620FTHR::VIO_3V3);
jessexm 0:1b50d5674f92 7
jessexm 0:1b50d5674f92 8 // LEDs connected to MAX32620
jessexm 0:1b50d5674f92 9 DigitalOut redLed(LED_RED, LED_OFF);
jessexm 0:1b50d5674f92 10 DigitalOut grnLed(LED_GREEN, LED_OFF);
jessexm 0:1b50d5674f92 11 DigitalOut bluLed(LED_BLUE, LED_OFF);
jessexm 0:1b50d5674f92 12
jessexm 0:1b50d5674f92 13 // I2C master 2
jessexm 0:1b50d5674f92 14 I2C i2c2(I2C2_SDA, I2C2_SCL);
jessexm 0:1b50d5674f92 15
jessexm 0:1b50d5674f92 16 // MAX77650 PMIC and Charger
jessexm 0:1b50d5674f92 17 MAX77650 max77650(i2c2);
jessexm 0:1b50d5674f92 18
jessexm 0:1b50d5674f92 19 // MAX77650 IRQ
jessexm 0:1b50d5674f92 20 InterruptIn max77650IntIn(P2_3);
jessexm 0:1b50d5674f92 21
jessexm 0:1b50d5674f92 22 // Configure PMIC LEDs to rotate colors
jessexm 0:1b50d5674f92 23 static const char ledRotate[] = {
jessexm 0:1b50d5674f92 24 MAX77650::CNFG_LED0_A,
jessexm 0:1b50d5674f92 25 0x44, 0x44, 0x44,
jessexm 0:1b50d5674f92 26 0x17, 0x37, 0x77,
jessexm 0:1b50d5674f92 27 0x01,
jessexm 0:1b50d5674f92 28 };
jessexm 0:1b50d5674f92 29
jessexm 0:1b50d5674f92 30 // Configure PMIC to drive green LED
jessexm 0:1b50d5674f92 31 static const char ledGreen[] = {
jessexm 0:1b50d5674f92 32 MAX77650::CNFG_LED0_A,
jessexm 0:1b50d5674f92 33 0x04, 0x44, 0x04,
jessexm 0:1b50d5674f92 34 0x0F, 0x0F, 0x0F,
jessexm 0:1b50d5674f92 35 0x01,
jessexm 0:1b50d5674f92 36 };
jessexm 0:1b50d5674f92 37
jessexm 0:1b50d5674f92 38 // Disable LED's connected to PMIC
jessexm 0:1b50d5674f92 39 static const char ledNone[] = {
jessexm 0:1b50d5674f92 40 MAX77650::CNFG_LED0_A,
jessexm 0:1b50d5674f92 41 0x04, 0x04, 0x04,
jessexm 0:1b50d5674f92 42 0x0F, 0x0F, 0x0F,
jessexm 0:1b50d5674f92 43 0x01,
jessexm 0:1b50d5674f92 44 };
jessexm 0:1b50d5674f92 45
jessexm 0:1b50d5674f92 46 // Cycle through PMIC LED's with every button push
jessexm 0:1b50d5674f92 47 void max77650IrqHandler(void)
jessexm 0:1b50d5674f92 48 {
jessexm 0:1b50d5674f92 49 char irqStatus;
jessexm 0:1b50d5674f92 50 static char ledPhase = 0;
jessexm 0:1b50d5674f92 51 static char ledData[] = {
jessexm 0:1b50d5674f92 52 MAX77650::CNFG_LED0_A,
jessexm 0:1b50d5674f92 53 0x44, 0x04, 0x04,
jessexm 0:1b50d5674f92 54 0x0F, 0x0F, 0x0F,
jessexm 0:1b50d5674f92 55 0x01,
jessexm 0:1b50d5674f92 56 };
jessexm 0:1b50d5674f92 57
jessexm 0:1b50d5674f92 58 while (!(max77650.readReg(MAX77650::INT_GLBL, &irqStatus))) {
jessexm 0:1b50d5674f92 59 if (irqStatus) {
jessexm 0:1b50d5674f92 60 if (irqStatus & 0x04) {
jessexm 0:1b50d5674f92 61 ledPhase++;
jessexm 0:1b50d5674f92 62 switch (ledPhase % 4) {
jessexm 0:1b50d5674f92 63 case 0: ledData[1] ^= 0x40; break;
jessexm 0:1b50d5674f92 64 case 1: ledData[1] ^= 0x40; ledData[2] ^= 0x40; break;
jessexm 0:1b50d5674f92 65 case 2: ledData[2] ^= 0x40; ledData[3] ^= 0x40; break;
jessexm 0:1b50d5674f92 66 case 3: ledData[3] ^= 0x40; break;
jessexm 0:1b50d5674f92 67 }
jessexm 0:1b50d5674f92 68 if (!(max77650.writeReg(ledData, sizeof(ledData)))) {
jessexm 0:1b50d5674f92 69 break;
jessexm 0:1b50d5674f92 70 }
jessexm 0:1b50d5674f92 71 }
jessexm 0:1b50d5674f92 72 } else {
jessexm 0:1b50d5674f92 73 break;
jessexm 0:1b50d5674f92 74 }
jessexm 0:1b50d5674f92 75 }
jessexm 0:1b50d5674f92 76 }
jessexm 0:1b50d5674f92 77
jessexm 0:1b50d5674f92 78 // MAX77650 IRQ configuration
jessexm 0:1b50d5674f92 79 void max77650IrqInit(void)
jessexm 0:1b50d5674f92 80 {
jessexm 0:1b50d5674f92 81 // Configure MAX77650 to generate an interrupt request when push buton SW2 is pressed
jessexm 0:1b50d5674f92 82 max77650.writeReg(MAX77650::CNFG_GLBL, MAX77650::SBIA_LPM | MAX77650::DBEN_30_MS);
jessexm 0:1b50d5674f92 83 max77650.writeReg(MAX77650::INTM_GLBL, MAX77650::NEN_FALL);
jessexm 0:1b50d5674f92 84
jessexm 0:1b50d5674f92 85 // Manually invoke the MAX77650 interrupt handler to service any pending interrupts
jessexm 0:1b50d5674f92 86 max77650IrqHandler();
jessexm 0:1b50d5674f92 87
jessexm 0:1b50d5674f92 88 // Configure InterruptIn object to service MAX77650 IRQ signal
jessexm 0:1b50d5674f92 89 max77650IntIn.mode(PullUp);
jessexm 0:1b50d5674f92 90 max77650IntIn.fall(max77650IrqHandler);
jessexm 0:1b50d5674f92 91 max77650IntIn.enable_irq();
jessexm 0:1b50d5674f92 92 }
jessexm 0:1b50d5674f92 93
jessexm 0:1b50d5674f92 94 int main()
jessexm 0:1b50d5674f92 95 {
jessexm 0:1b50d5674f92 96 int state = 0;
jessexm 0:1b50d5674f92 97
jessexm 0:1b50d5674f92 98 // Turn off Low-Dropout Linear Regulator (LDO); unused on MAX32620FTHR platform
jessexm 0:1b50d5674f92 99 max77650.disableLDO();
jessexm 0:1b50d5674f92 100
jessexm 0:1b50d5674f92 101 // Set SIMO Buck-Boost Regulator 2 target voltage; provides VDDIOH
jessexm 0:1b50d5674f92 102 max77650.setSBB2Voltage(3.3f);
jessexm 0:1b50d5674f92 103
jessexm 0:1b50d5674f92 104 // Turn PMIC green LED on, red and blue off
jessexm 0:1b50d5674f92 105 max77650.writeReg(ledGreen, sizeof(ledGreen));
jessexm 0:1b50d5674f92 106
jessexm 0:1b50d5674f92 107 Thread::wait(3000);
jessexm 0:1b50d5674f92 108
jessexm 0:1b50d5674f92 109 // Configure PMIC LED's to cycle between colors
jessexm 0:1b50d5674f92 110 max77650.writeReg(ledRotate, sizeof(ledRotate));
jessexm 0:1b50d5674f92 111
jessexm 0:1b50d5674f92 112 Thread::wait(3000);
jessexm 0:1b50d5674f92 113
jessexm 0:1b50d5674f92 114 // Turn off PMIC LED's
jessexm 0:1b50d5674f92 115 max77650.writeReg(ledNone, sizeof(ledNone));
jessexm 0:1b50d5674f92 116
jessexm 0:1b50d5674f92 117 // Enable PMIC push button interrupt
jessexm 0:1b50d5674f92 118 max77650IrqInit();
jessexm 0:1b50d5674f92 119
jessexm 0:1b50d5674f92 120 // Cycle MAX32620FTHR LED's
jessexm 0:1b50d5674f92 121 for (;;) {
jessexm 0:1b50d5674f92 122 Thread::wait(500);
jessexm 0:1b50d5674f92 123 switch (state++ & 0x3) {
jessexm 0:1b50d5674f92 124 case 0: redLed = LED_ON; break;
jessexm 0:1b50d5674f92 125 case 1: redLed = LED_OFF; grnLed = LED_ON; break;
jessexm 0:1b50d5674f92 126 case 2: grnLed = LED_OFF; bluLed = LED_ON; break;
jessexm 0:1b50d5674f92 127 case 3: bluLed = LED_OFF; break;
jessexm 0:1b50d5674f92 128 }
jessexm 0:1b50d5674f92 129 }
jessexm 0:1b50d5674f92 130 }