工具/软件:Code Composer Studio
一直在尝试为 MSP430F2274器件调试一个简单的示例程序。 该示例在连续模式下使用 timerA、并在发生中断时(TAIV = 10时为 a.k.a)切换和 LED。 在`interrupt void Timer_A (void)`函数内、我已经在一个 switch 语句中设置了一个断点、该语句根据 TAIV 的值选择要执行的运算。 当进入调试模式时、程序永远不会在断点停止、这使得它看起来永远不会达到中断。 查看寄存器后、我可以根据 TAIV 寄存器中的变化确认是否发生了中断。 是否可以在中断函数中设置断点? 如果是、是否有理由说明为什么在我的调试会话期间不会触发该中断? 如果不是、是否有另一种调试方法来确认已到达 ISR? 理想情况下、如果 ISR 可以分步执行、它将对使用此器件的未来项目工作更有帮助。
此外、一旦从调试器运行程序、在器件断开连接并重新连接到电源之前、不会执行预期的功能。 问题是、当从 USB 断开连接时、调试器停止工作、因为它不再具有可用于调试目的的器件。 发生这种情况是有原因的、还是所有 MSP430器件都存在这种情况? 如果没有、是否有任何选项可更改、以便在调试器开始运行后使器件正常工作、而无需断开/重新连接它?
代码:
#include int main (void) { WDTCTL = WDTPW + WDTHOLD; //停止 WDT P1DIR |= 0x01; // P1.0输出 TACTL = tassel_2 + MC_2 + TAIE; // SMCLK、contmode、interrupt __bis_SR_register (GIE); //为 (;)输入 LPM0并中断; } // Timer_A3中断矢量(TAIV)处理程序 #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=TIMERA1_vector __interrupt Timer_A (void) #elifed (__TI_RA1_)(void)(void Timer_A (void)(void)(timer_a!(void)(tom_priter_prateger_)(void)(t1)(void)(t1)(ten_transl_ timer_a #endif { switch (TAIV) //高效的开关实现 { 案例2: 中断; //未使用 TACCR1 案例4: 中断; //未使用 TACCR2 案例10: P1OUT ^= 0x01; //溢出 中断; }
