注册会员
- 积分
- 40
- 威望
- 23
- 贡献
- 11
- 兑换币
- 10
- 注册时间
- 2013-7-24
- 在线时间
- 3 小时
- 毕业学校
- 南昌大学
|
1贡献
/*
** ==================================================================
** Timer0_IC_Init()
**
** 定时器 0 输入捕捉
** ==================================================================
*/
void Timer0_IC_Init() {
PTTRR |= (1 << 5)| // IOC0_7--PR1
(1 << 4); // IOC0_6--PR0;
/* “输入捕捉 / 输出比较” 功能选择
IOSx: 0--输入捕捉 \ 1--输出比较
*/
TIM0_TIOS &= ~(1<<7); // IC7 输入捕捉
TIM0_TIOS &= ~(1<<6); // IC6 输入捕捉
TIM0_TIOS |= 1<<0; // IC0 输出比较
TIM0_CFORC |= 1<<0; // 强制比较输出关联到通道IC0
TIM0_OC7M |= 1<<0;
/* TCTL1,TCTL2 寄存器,控制定时器与OC”输出比较端口”的连接
OMx:OLx = 00 定时器断开和OC的连接
01 OCn 输出翻转
10 OCn 输出低电平 0
11 OCn 输出高电平 1
*/
TIM0_TCTL1 = 0x00;
TIM0_TCTL2 = 0x00;
/* TCTL3,TCTL4 寄存器,控制定时器与IC“输入捕捉断开端口“的连接
EDGxA:EDGxB = 00 定时器断开和IC的连接,禁止输入捕捉
01 ICn 仅捕捉上升沿
10 ICn 仅捕捉下降沿
11 ICn 同时捕捉上升沿,下降沿
*/
TIM0_TCTL3 = 0xa0; //IC7捕捉上升沿, IC6捕捉下降沿
TIM0_TCTL4 = 0x00;
/* ”输入捕捉 \ 输出比较“中断标志 */
TIM0_TFLG1 = 0xFF;
/* 定时器溢出中断标志 */
TIM0_TFLG2 = 0x80;
/* 对于 IC“输入捕捉”,将计数器的值捕捉到TCx
对于 OC“输出比较”,将预设值放入TCx和计数器的值比较
*/
TIM0_TC0 = (uint16)((Fbus / 128) / 8);//输出频率4Hz
TIM0_TC1 = 0x0000;
TIM0_TC2 = 0x0000;
TIM0_TC3 = 0x0000;
TIM0_TC4 = 0x0000;
TIM0_TC5 = 0x0000;
TIM0_TC6 = 0x0000;
TIM0_TC7 = 0x0000;
/* 预计定时250ms */
TIM0_TCNT = 0;
/* 对应的管脚 ”输入捕捉 / 输出比较“ 中断使能 */
TIM0_TIE = 0xC1; //IC7,IC6 输入捕捉中断使能
//IC0,输出比较中断使能
/* TOI=1,TCRE=0,PR2=1,PR1=1,PR0=1 (最大 128 分频) */
TIM0_TSCR2 = 0x87; // 定时器溢出中断使能,时钟 128 分频
//TIM0_TSCR1 = 0x80; // 定时器 使能
TIM0_TSCR1 = (TIM0_TSCR1 & (unsigned char)~0x70) | (1<<7);
}
/*** ===================================================================** Interrupt handler : Timer0_IOC0_ISR** 定时器 OC1 匹配中断 ** ===================================================================*/ #pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 Timer0_IOC0_ISR(void) {
// _asm SEI; static uint8 tpn = 0; TIM0_TFLG1 |= 1<<0; PTU ^= (1<<6); // 飞思卡尔单片机的TCNT寄存器傻瓜式的从0一直到0xFFFF,不灵活 TIM0_TC0 += (uint16)((Fbus / 128) / 10);//输出频率10Hz tachoPulse[tpn] = tachoPulse_t; tpn++; if(tpn > 5) tpn = 0; tachoPulse_t = 0; // _asm CLI; }
#pragma CODE_SEG DEFAULT
每次在主循环中单步执行就进入了比较中断
路过的兄弟们帮忙看看是什么原因
|
|