LM3S9B92定时器的16位输入下降沿捕获模式怎么配置?

2019-03-24 13:09发布

哪位大虾能看看我这段代码配置出现什么问题了,代码完全按照datasheet上的配置步骤进行配置,但是下降沿捕获模式无法进入中断处理函数(引脚外部提供下降沿脉冲

),但超时中断却能进入中断处理函数。MCU是TI的LM3S9B92,使用PB0的复用功能CCP0,想利用其16位定时器定时捕获模式。PB0连接至红外接收器的输出引脚,由遥控器提供下降沿脉冲触发信号。
下面是我初始化函数:
voidTimer0IntCapture(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 编辑 ] 此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章