哪位大虾能看看我这段代码配置出现什么问题了,代码完全按照datasheet上的配置步骤进行配置,但是下降沿捕获模式无法进入中断处理函数(引脚外部提供下降沿脉冲
),但超时中断却能进入中断处理函数。MCU是TI的LM3S9B92,使用PB0的复用功能CCP0,想利用其16位定时器定时捕获模式。PB0连接至红外接收器的输出引脚,由遥控器提供下降沿脉冲触发信号。
下面是我初始化函数:
void
Timer0IntCapture(void)
{
// 开启Timer0时钟门控控制
HWREG(SYSCTL_BASE + 0x104) |= (0x1 << 16);
// 开启GPIOB时钟门控控制
HWREG(SYSCTL_BASE + 0x108) |= (0x1 << 1);
// 禁用定时器Timer0A
HWREG(TIMER0_BASE + TIMER_O_CTL) &= (~0x1);
// 将GPIOB端口的PB0配置为复用功能
HWREG(GPIO_PORTB_BASE + 0x420) |= 0x1;
// 将PB0配置为CCP0管脚
HWREG(GPIO_PORTB_BASE + 0x52C) &= ~0xf;
HWREG(GPIO_PORTB_BASE + 0x52C) |= 0x1;
// 16位定时器配置
HWREG(TIMER0_BASE + TIMER_O_CFG) = 0x4;
// 配置为边沿计时模式
HWREG(TIMER0_BASE + TIMER_O_TAMR) |= (0x1 << 2);
// 将TimerA配置为捕获模式
HWREG(TIMER0_BASE + TIMER_O_TAMR) |= 0x3;
// 定义Timer0为下降沿捕获方式
HWREG(TIMER0_BASE + TIMER_O_CTL) &= ~(0x3 << 2);
HWREG(TIMER0_BASE + TIMER_O_CTL) |= (0x3 << 2);
// 往TimerA间隔加载寄存器装入初值
HWREG(TIMER0_BASE + TIMER_O_TAILR) = 0xFFFF;
// 开启Timer0A捕获下降沿中断和超时中断
HWREG(TIMER0_BASE + TIMER_O_IMR) |= (0x1 << 2);
HWREG(TIMER0_BASE + TIMER_O_IMR) |= 0x1;
// 使能Timer0A事件捕获中断
TimerIntEnable(TIMER0_BASE,TIMER_CAPA_EVENT);
// 使能Timer0A中断
IntEnable(INT_TIMER0A);
//开启定时器Timer0A开始计时和捕获逻辑
HWREG(TIMER0_BASE + TIMER_O_CTL) |= 0x1;
// 使能处理器中断
IntMasterEnable();
}
[
本帖最后由 梦归魂 于 2012-11-28 17:43 编辑 ]