智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1421|回复: 0
打印 上一主题 下一主题

[单片机] 飞思卡尔定时器问题

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
40
威望
23
贡献
11
兑换币
10
注册时间
2013-7-24
在线时间
3 小时
毕业学校
南昌大学
跳转到指定楼层
1#
发表于 2013-7-24 21:33:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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


每次在主循环中单步执行就进入了比较中断
路过的兄弟们帮忙看看是什么原因

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 13:44 , Processed in 0.062679 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表