飞思卡尔定时中断程序3

上传人:wt****50 文档编号:37650482 上传时间:2018-04-20 格式:PDF 页数:16 大小:144.30KB
返回 下载 相关 举报
飞思卡尔定时中断程序3_第1页
第1页 / 共16页
飞思卡尔定时中断程序3_第2页
第2页 / 共16页
飞思卡尔定时中断程序3_第3页
第3页 / 共16页
飞思卡尔定时中断程序3_第4页
第4页 / 共16页
飞思卡尔定时中断程序3_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《飞思卡尔定时中断程序3》由会员分享,可在线阅读,更多相关《飞思卡尔定时中断程序3(16页珍藏版)》请在金锄头文库上搜索。

1、Created with SmartPrinter trail version www.i-2D64 定时器中断和频率捕捉中断冲突问题 一、首先大致功能: 1:四路频率捕捉中断,要求可同时输入四路,也可任意输入一路、两路或者三路(102.5KHz)。 2、将捕捉到的频率通过四路 PWM依次输出,要求实时、稳定、输入多少输出就为多少(误差:千分之二)。 3:定时器中断,1 毫秒中断一次。利用定时器屏蔽 10Hz(100ms)以下的频率或者无频率输入时,置为 0,屏蔽输出。 二、调试过程 1、开始使用定时器中断和频率捕捉中断,频率捕捉中断开通方法:初始化四路全部开通, 进入第一路捕捉中断,开通第二

2、路捕捉中断,关闭第一路捕捉中断 进入第二路捕捉中断,开通第三路捕捉中断,关闭第二路捕捉中断 进入第三路捕捉中断,开通第四路捕捉中断,关闭第三路捕捉中断 进入第四路捕捉中断,开通第一路捕捉中断,关闭第二路捕捉中断形成一个环状,只有当频率全部有输入时才能采集正常,有任意一路没有输入时都将停止中断的执行。 存在问题,当四路频率全部输入时,捕捉正常,但当只有一路或者两路或者三路输入时,能进入中断的那几路也只能响应一次中断。程序如下: #pragma CODE_SEG _NEAR_SEG NON_BANKED interrupt void MDC_ISR() /定时器 1ms中断一次 CpuCounte

3、r+; /工作指示灯计数器,500ms 翻转一次 if(ptflag0=1) /10Hz 以下或者无输入时计数,进入捕捉中断标志和计数清零,中断结束时打开标志 ptcount0+; if(ptflag1=1) ptcount1+; if(ptflag2=1) ptcount2+; Created with SmartPrinter trail version www.i-Created with SmartPrinter trail version www.i-if(ptflag3=1) ptcount3+; if(ptcount0100) /10Hz 以下或者无输入时不允许输出 ptcoun

4、t0=0; /计数清零 flagECT0=0; /标志清零 fin1=0; /频率置为 0 PTH_PTH7=0; /指示灯熄灭 PWME=PWME /不允许输出 if(ptcount1100) ptcount1=0; flagECT1=0; fin2=0; PTH_PTH6=0; PWME=PWME if(ptcount2100) ptcount2=0; flagECT2=0; fin3=0; PTH_PTH5=0; PWME=PWME if(ptcount3100) ptcount3=0; flagECT3=0; fin4=0; PTH_PTH4=0; Created with Smart

5、Printer trail version www.i-Created with SmartPrinter trail version www.i-PWME=PWME if(CpuCounter=500) /处理器工作指示灯 cpuflag=1; CpuCounter=0; MCFLG_MCZF=1; interrupt void PT3_isr() DisableInterrupts; /总中断关闭 ptflag3=0; /清除无输入或者 10Hz 以下频率标志 ptcount3=0; /清除无输入或者 10Hz 以下频率计数器 TIE_C0I = 1; /开放 ECT0 局部中断 TFLG

6、1_C3F=1; /中断标志寄存器对 C3F 清零 /newcount3=TC3; /读一次 TCx if(TC3TC3H) count3=TC3-TC3H; else count3=65535-TC3H+TC3; if(count3148) else count2=65535-TC2H+TC2; if(count2148) PWME=PWME|0x30; else flagECT2=0; Created with SmartPrinter trail version www.i-Created with SmartPrinter trail version www.i-fin3=0; PTH

7、_PTH5=0; PWME=PWME ptflag2=1; ptcount2=0; EnableInterrupts; TIE_C2I = 0; /关闭 ECT2 局部中断 interrupt void PT1_isr() DisableInterrupts; ptflag1=0; ptcount1=0; TIE_C2I = 1; /开放 ECT2 局部中断 TFLG1_C1F=1; /中断标志寄存器对 C1F 清零 /newcount1=TC1; if(TC1TC1H) count1=TC1-TC1H; else count1=65535-TC1H+TC1; if(count1148) PW

8、ME=PWME|0x0c; else flagECT1=0; fin2=0; Created with SmartPrinter trail version www.i-Created with SmartPrinter trail version www.i-PTH_PTH6=0; PWME=PWME ptflag1=1; ptcount1=0; EnableInterrupts; TIE_C1I = 0; /关闭 ECT1 局部中断 interrupt void PT0_isr() DisableInterrupts; ptflag0=0; ptcount0=0; TIE_C1I = 1;

9、 /开放 ECT1 局部中断 TFLG1_C0F=1; /中断标志寄存器对 C0F 清零 /newcount0=TC0; if(TC0TC0H) count0=TC0-TC0H; else count0=65535-TC0H+TC0;/溢出 if(count0148) PWME=PWME|0x03; else flagECT0=0; fin1=0; PTH_PTH7=0; Created with SmartPrinter trail version www.i-Created with SmartPrinter trail version www.i-PWME=PWME ptflag0=1;

10、 / ptcount0=0; EnableInterrupts; TIE_C0I = 0; /关闭 ECT0 局部中断 #pragma CODE_SEG DEFAULT void main(void) InitPort(); InitECT(); InitPWM(); InitMDC(); EnableInterrupts; for(;) if(cpuflag=1) PORTK_BIT1=PORTK_BIT1; cpuflag=0; siout(); /PWM 输出 show(); /显示函数 / void InitMDC(void) MCCTL=0xEF; MCCNT=750; /定时 1m

11、s=750*16/(24/2) /初始化 ECT void InitECT() Created with SmartPrinter trail version www.i-Created with SmartPrinter trail version www.i- TIOS=0; /0:设置为输入捕捉 1:设置为输出比较 TFLG1=0xff; /定时器中断寄存器 1 ,写 1 清零。 TSCR1=0x80; /10000000 定时器允许位,允许定时器工工作 TSCR2=0x05; /0.375m 定时器控制寄存器 2,32 分频 TCTL4=0x55; /设置为单上升沿捕捉 ICOVW=0

12、x00; /输入控制修改寄存器,=0,当新值被所存时, /自动用新值覆盖对应寄存器 ICSYS=0x02; /启动输入捕捉和脉冲累加器保持器寄存器 TIE=0x0f; /0.1.2.3 允许中断 /初始化 PWM void InitPWM() PWMCAE=0xaa; /pwm 居中对齐允许寄存器,10101010,1 为居中对齐,0 为左对齐 PWMCTL=0xf0; /pwm 控制寄存器;01,23,45,67 联合为四个 16 为 pwm 通道,PFRZ=1,冻结模式时pwm 计数停止,=0 冻结模式时 依然计数 PWMPOL=0x00; /pwm 极性寄存器 8 个通道:1 首先输出高

13、电频,占空比计数器完毕后变低电频 PWMCLK=0x00; /pwm 时钟选择寄存器 PWMPRCLK=0x44; /pwm 预分频时钟选择寄存器, 01000100:clka 和 clkb 都是总线的 16 分频 PWME=0xaa; /pwm 允许寄存器,允许或禁止各个通道输出 2、着手解决只有三路或者三路一下的问题,利用定时器 1 毫秒中断一次,第一毫秒开通第一通道中断捕捉,第二毫秒开通第二通道中断捕捉,第三毫秒开通第三通道中断捕捉,第四毫秒开通第四通道中断捕捉,依次循环,在捕捉中断中屏蔽掉 ECT 局部中断的开和关。 存在问题:捕捉到的频率正确,但在低频率 150Hz 以下某些频率段(125,112.5,100,50,25 等,还挺有规律)输出不允许,造成输出跳跃,原因:在这某些频率段执行了 10Hz 以下或者无输入时不允许输出的限制程序,不加限制的话 ptcount0ptcount3 计数能够计到九千多,差不多是 10 秒的时间,所以输出跳变也正常。但是不知为何在这某些频率段会计数计到那么大。程序如下: #pragma CODE_SEG _NEAR_SEG NON_BANKED in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑机械

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号