# 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 相关内容。