主题中讨论的其他器件:MSP430F5529
你(们)好!
我使用 CCS 和 MSP430开发板已经有一段时间了、因此我一直在引用我的旧代码来加快速度。 我使用的是 C++。 我当前正在使用 while (1)循环、该循环以 LPM0结束并启用全局中断。 然后、会触发计时器中断、切换 GPIO 引脚、我预期会发生的是 while (1)循环返回到开头、执行所有代码、然后在再次命中 LPM0线路时返回睡眠状态。
以下是 main()函数:
void main (void){ const uint8_t Testdata[]={0x05、0xF1、0x7D、0x18}; WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P1DIR |= 0x01; P1DS |= 0x01;//设置高驱动强度 时钟设置(); i2c 测试(0x50、100e3) ;while tACCLR_+ TA0200_+ tACCLR_+ tACTRL (tACTRUARTAC_0+ tACTRL) test.transact ((uint8_t *) Testdata、4、write); console.debugInfo((char *)"测试...\n"、11); _bis_SR_register (LPM0_bits + GIE); __NO_OPERATION (); } #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=TIMER0_A1_vector __interrupt void TIMER0_A1_ISR (void) #Elif defined (__GERISR__) 支持的__attribute TIMER0_a1_vector (void TIMER0_A1_ISR)(void TI_a1_ERROR)(void TI_COMPLETE)(void TI_COMPLETE)#TI_TRISR_(void)(void TI_COMPLE #endif { switch (__evo_in_range (TA0IV、14)) { 案例14://溢出 P1OUT ^= 0x01; 中断; 默认值:break; } }
所以,定时器中断的运行正常(虽然我花了一段时间--我仍然不理解不同的 A0/A1矢量,但这是另一个时间)。 MSP430进入睡眠模式、触发计时器中断、GPIO 切换、但 while (1)循环中不执行任何操作。 基本上、它应该只发送一个 I2C 数据包、然后是"测试..."这一词 发送到 UART。 这是第一次通过循环、所有操作都有效。 但在它进入睡眠状态后、它不会执行。 我是积极的、我错过了一些我忽略过的小东西、但我会尽力去弄清楚它。
我还有一个与计时器中断有关的问题、但我将进行更多的读取、看看我是否无法自行解决。 clockSetup()将 MCLK 设置为以20MHz 运行的 DCO,SMCLK 被4分频以获得5MHz,ACLK 被设置为用于计时器的 REFOCLK。 为了获得更高的时钟速度、它还将 VCORE 置于其最高设置中。 我已经尝试添加_BIC_SR_register (LPM0_BITS);在 ISR 结束时、这没有什么不同(中断不应该自动将其从 LPM0中取出?)。
非常困难、阅读数据表/系列参考指南(以及查看 MSP430F5529示例、如 MSP430F55xx_ta0_04.c、没有帮助、因为它们在 LPM 入口后没有任何代码)。