查看: 3789|回复: 3

[S12] MC9S12有时进不了ECT中断

[复制链接]

该用户从未签到

2

主题

17

帖子

0

新手上路

Rank: 1

积分
14
最后登录
2020-4-3
发表于 2011-12-5 16:52:37 | 显示全部楼层 |阅读模式
请教各位,单片机是MC9S12XDP512,利用ECT进行转速测量。需2路输入捕捉同时工作。一路工作正常,另一路有时能采集到正确频率,但过段时间就进不了中断。有时只进一次中断就再也进不去了。有时采集到的计数值很乱。不知道原因出在哪里,请明白人指点下,谢谢。程序代码如下:
            void ECT_Init (void)                  //输入捕捉初始化函数
            {
               TSCR1=0x90;                        //主定时器使能,快速清除标志
               TSCR2=0x07;                        //分频因子为128
               ICSYS = 0x02;                      //IC缓冲使能
               TIOS_IOS0=0;                       //通道0为输入捕捉
               TIOS_IOS1=0;                       //通道1为输入捕捉
               TCTL4_EDG0A=1;                     //捕捉通道0上升沿
               TCTL4_EDG0B=0;
               TCTL4_EDG1A=0;                     //捕捉通道1上升沿
               TCTL4_EDG1B=1;
               TIE_C0I=1;                         //通道0中断使能
               TIE_C1I=1;                         //通道1中断使能
               TFLG1=0xFF;                        //清中断标志位
            }
            
            #pragma CODE_SEG NON_BANKED
            
            void interrupt 8 Int_TimerCapture_C0(void)
            {
                DisableInterrupts;
               TFLG1_C0F = 1;   //中断标志清除
               //CountOverFlowTimes();
               
               SpeedCount1[1]=TC0; //通过读TC0寄存器来响应中断
               //nn = TC0;
               
               if(SpeedCount1[1]>=SpeedCount1[0])
               {  
                  SpeedCount1[2]=SpeedCount1[1]- SpeedCount1[0];
               }
               else
               {
                  SpeedCount1[2]=65536- SpeedCount1[0];
                  SpeedCount1[2]+= SpeedCount1[1];
               }
               SpeedCount1[0]= SpeedCount1[1];
               
               EnableInterrupts;
            }
            //#pragma CODE_SEG NON_BANKED
            void interrupt 9 Int_TimerCapture_C1(void)
            {
               DisableInterrupts;
               TFLG1_C1F = 1;   //中断标志清除
               
               //CountOverFlowTimes();
               
               mm=TC1; //通过读TC1寄存器来响应中断
              
               SpeedCount2[1]=mm;
               
               if(SpeedCount2[1]>=SpeedCount2[0])
               {  
                  SpeedCount2[2]=SpeedCount2[1]- SpeedCount2[0];
               }
               else
               {
                  SpeedCount2[2]=65536- SpeedCount2[0];
                  SpeedCount2[2]+= SpeedCount2[1];
               }
               SpeedCount2[0]= SpeedCount2[1];
              EnableInterrupts;
            }
            #pragma CODE_SEG DEFAULT
我知道答案 目前已有2人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-5 21:58:42 | 显示全部楼层

    RE:MC9S12有时进不了ECT中断

    DisableInterrupts;
    如果你接收的频率基本相等,就可能是这个问题导致的。恰好一个进入中断,另外一也产生了中断,所以后面不会产生中断了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    14
    最后登录
    2020-4-3
     楼主| 发表于 2011-12-7 20:07:11 | 显示全部楼层

    回复:MC9S12有时进不了ECT中断

    disableinterrupts是出现此问题后加上的,原来代码中没有。而且2个传感器的频率一个是290多,一个是960多。以前也是这个程序,没遇到问题。已排除硬件问题。如果CodeWarrior版本不一样的话,会不会出现编译的问题啊以后用4.6版本编译的,现在是5.2版本。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    5
    最后登录
    1970-1-1
    发表于 2012-3-16 07:35:35 | 显示全部楼层

    回复:MC9S12有时进不了ECT中断

    大侠, 能分享一下,cw5.2吗? 急需
     
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-12 21:41 , Processed in 0.095238 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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