# MSP430F5529 定时器输入捕获与定时器中断冲突原因分析 ## 一、冲突现象 当同时启用 **输入捕获(Input Capture)** 和 **定时器中断(Timer Interrupt)** 时,可能出现以下异常: - 输入捕获值不更新 - 中断标志位无法正常清除 - 程序频繁进入错误中断服务函数 --- ## 二、根本原因 ### 1. 中断标志位共享 - **TAxIV 中断向量寄存器** 同时管理多个中断源 - 输入捕获(CCIFG)和定时器溢出(T普通用户FG)共享同一个中断入口 - 未正确判断中断源时会导致逻辑冲突 ### 2. 优先级问题 - 定时器中断优先级低于输入捕获中断(MSP430 默认优先级) - 高频定时器中断可能抢占输入捕获中断处理 ### 3. 寄存器操作冲突 c // 错误示例:未判断中断源直接操作寄存器 #pragma vector=TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR(void) { TA0CCR0 += 1000; // 可能覆盖输入捕获值 TA0CTL &= ~T普通用户FG; // 错误的中断标志清除方式 } --- ## 三、解决方案 ### 1. 精确中断源判断 c #pragma vector=TIMER0_A1_VECTOR __interrupt void TIMER0_A1_ISR(void) { switch(TA0IV) { case TA0IV_TACCR1: // 输入捕获中断 // 处理捕获值 break; case TA0IV_T普通用户FG: // 定时器溢出中断 // 处理定时任务 break; default: break; } } ### 2. 合理分配定时器资源 | 功能 | 推荐配置 | |-----------------|--------------------------| | 输入捕获 | 使用独立的捕获/比较模块(CCR1) | | 定时器中断 | 使用 CCR0 或溢出中断 | ### 3. 关键配置建议 c // 正确配置示例 TA0CTL = TASSEL__ACLK | MC__CONTINUOUS | TACLR; TA0CCTL1 = CM_3 | CCIS_0 | CAP | CCIE; // 输入捕获配置 TA0CCTL0 = CCIE; // 定时中断配置 --- ## 四、调试建议 1. 使用 CCS 的 **Register View** 监控: - TAxCTL - TAxCCTLn - TAxR 计数器值 2. 添加调试语句验证中断触发顺序 3. 使用逻辑分析仪验证实际信号时序 > **注意:** 不同定时器模块(Timer0_A3/Timer1_A3)的中断处理方式可能不同,请参考官方技术文档(SLAS735J)第12章 Timer_A 相关内容。