主题中讨论的其他器件:ENERGYTRACE、 ADS1220
工具/软件:Code Composer Studio
您好!
我在´m MSP432 Launchpad 开发低功耗应用时遇到了一些问题。 想法是将微控制器保持在 LPM3下、每分钟唤醒一次以打开某些传感器、使用 SysTick 延迟、测量、关闭传感器电源、最后返回休眠状态。 这种´s 不是什么,而且运行良好。
当我´m CCS8调试模式时、一切都正常。 但是、当我重新启动 launchpad 并尝试使用 EnergyTrace 测量功耗时、情况开始发生故障。 传感器电源引脚永远不会再次变为低电平。
我´ve 了´m 位的代码、因此我不再使用传感器、而是每分钟从 LPM3唤醒、在引脚5.2上打开 LED、在 SysTick 延迟并关闭 LED。 LED 仅在使用调试模式时关闭... 我´ve ^了 MAP_GPIO_setOutputLowOnPin 和 P5OUT´m = 0x04;此时我完全丢失。
void main (void) { // ULP 模式 WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;//停止看门狗计时器 PADIR = 0xFFFF; PBDIR = 0xFFFF; PCDIR = 0xFFFF; PDDIR = 0xFFFF; pedir = 0xFFFF; PJDIR = 0xFFFF; PAOUT = 0; PBOUT = 0; PCOUT = 0; PDOUT = 0; PEOUT = 0; PJOUT = 0; MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK1); //将频率降级到12MHz CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 12); /* el modo ULP pone TODOS pines a 0。 ESO Hace que los canales I2C consuman。 很棒的一家餐馆值得推荐 * ADS1220_init(); //调试 int epoch = 1552733990; TIME_startRTC (epoch); /* Bucle Infiniband。 Mantiene el micro en Estado de ultra bajo consumo * while (1) { MAP_Interrupt_enableSlepOnIsrExit(); MAP_Interrupt_enableMaster(); _enable_interrupt (); __LOW_POWER_MODE_3(); } } void activateSysTick (int delay) { //将 SysTick 配置为在6.000.000处触发是1秒 MAP_SysTK_enableModule(); MAP_SysTK_setPeriod (延迟); MAP_Interrupt_enableSlepOnIsrExit(); MAP_SysTK_enableInterrupt (); } void active_sensors (void) { GPIO_setOutputHighOnPin (ADS1220_POWER_PORT、ADS1220_POWER_PIN);//引脚5.2 //ADS1220_Beginptr (); stateMeasure = true; ActivateSysTick (1500000); } void shutdown 传感器(void) { //ADS1220_shutdown (); P5OUT ^= 0x04; //map_GPIO_setOutputLowOnPin (ADS1220_POWER_PORT、ADS1220_POWER_PIN);//引脚5.2 } void measure_sensors (void) { int hora = 0; Hora = time_secondsSinceEpchh (); SHUTDOWN_SENSORS (); } void SysTick 处理程序(void) { map_SysTick disableModule(); IF (状态测量) { stateMeasure = false; measure_sensors(); } } /********* * RTC ISR * Atiende las interruptiones generadas por / void RTC_C_IRQHandler (void) { uint32_t status; STATUS = MAP_RTC_C_getEncableInterruptStatus(); MAP_RTC_C_clearInterruptFlag (status); if (status & RTC_C_TIME_EVENT_INTERRUPT){ activate_sensors(); } }
在这里确实会得到一些帮助。