16位输入边沿定时捕获.docx

上传人:鲁** 文档编号:564403896 上传时间:2023-02-22 格式:DOCX 页数:5 大小:19.41KB
返回 下载 相关 举报
16位输入边沿定时捕获.docx_第1页
第1页 / 共5页
16位输入边沿定时捕获.docx_第2页
第2页 / 共5页
16位输入边沿定时捕获.docx_第3页
第3页 / 共5页
16位输入边沿定时捕获.docx_第4页
第4页 / 共5页
16位输入边沿定时捕获.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《16位输入边沿定时捕获.docx》由会员分享,可在线阅读,更多相关《16位输入边沿定时捕获.docx(5页珍藏版)》请在金锄头文库上搜索。

1、源程序清单见程序清单1,其中黄色背景红色字体为错误的代码。该程序的功能是测量方波信号的频率,由串口输出显示。基本思路是:利用Timer0的TimerB的16位PWM功能产生一个方波作为被测信号,利用Timer2的TimerA定时捕捉功能捕捉被测信号的相邻两个上升沿,利用两次捕捉时的计数值计算出被测信号的频率。程序清单1实验源程序(有误)#includesystemInit.h#includeuartGetPut.h#include#include#definePART_LM3S1138#include/在CCP1管脚产生1KHz方波,为Timer2的16位输入边沿定时捕获功能提供时钟源void

2、 pulseInit(void)SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0);/使能TIMER0模块SysCtlPeriEnable(CCP1_PERIPH);/使能CCP1所在的GPIO端口GPIOPinTypeTimer(CCP1_PORT, CCP1_PIN);/配置相关管脚为Timer功能TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |/配置TimerB为16位PWMTIMER_CFG_B_PWM);TimerLoadSet(TIMER0_BASE, TIMER_B, 6000);/设置TimerB初

3、值TimerMatchSet(TIMER0_BASE, TIMER_B, 3000);/设置TimerB匹配值TimerEnable(TIMER0_BASE, TIMER_B);/定时器16位输入边沿定时捕获功能初始化void timerInitCapTime(void)SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2);/使能Timer模块SysCtlPeriEnable(CCP4_PERIPH);/使能CCP4所在的GPIO端口GPIOPinTypeTimer(CCP4_PORT, CCP4_PIN);/配置CCP4管脚为脉冲输入TimerConfigure(TI

4、MER2_BASE, TIMER_CFG_16_BIT_PAIR |/配置Timer为16位事件定时器TIMER_CFG_A_CAP_TIME);TimerControlEvent(TIMER2_BASE,/控制TimerA捕获CCP正边沿TIMER_A,TIMER_EVENT_POS_EDGE);TimerControlStall(TIMER2_BASE, TIMER_A, true);/允许在调试时暂停定时器计数TimerIntEnable(TIMER2_BASE, TIMER_CAPA_EVENT);/使能TimerA事件捕获中断IntEnable(INT_TIMER2A);/使能Tim

5、erA中断IntMasterEnable();/使能处理器中断/定义捕获标志volatile tBoolean CAP_Flag = false;/测量输入脉冲频率并显示void pulseMeasure(void)unsigned short i;unsigned short usVal2;char s40;TimerLoadSet(TIMER2_BASE, TIMER_A, 0xFFFF);/设置计数器初值TimerEnable(TIMER2_BASE, TIMER_A);/使能Timer计数for (i = 0;i 2;i+)while (!CAP_Flag);/等待捕获输入脉冲CAP_

6、Flag = false;/清除捕获标志usVali = TimerValueGet(TIMER2_BASE, TIMER_A);/读取捕获值TimerDisable(TIMER2_BASE, TIMER_A);/禁止Timer计数sprintf(s, %d Hzrn, (usVal0 - usVal1) / 6);/输出测定的脉冲频率uartPuts(s);/主函数(程序入口)int main(void)jtagWait();/防止JTAG失效,重要!clockInit();/时钟初始化:晶振,6MHzuartInit();/UART初始化pulseInit();timerInitCapTi

7、me();/Timer初始化:16位定时捕获for (;)pulseMeasure();SysCtlDelay(1500 * (TheSysClock / 3000);/Timer2的中断服务函数void Timer2A_ISR(void)unsigned long ulStatus;ulStatus = TimerIntStatus(TIMER2_BASE, true);/读取当前中断状态TimerIntClear(TIMER2_BASE, ulStatus);/清除中断状态,重要!if (ulStatus & TIMER_CAPA_EVENT)/若是TimerA事件捕获中断CAP_Flag = true;/置位捕获标志在源程序中,用两次捕捉时的计数值计算频率的公式有误。原公式为:f = (usVal0 - usVal1) / 6正确的公式应为:f = 6000000/(usVal0 - usVal1)

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

当前位置:首页 > 生活休闲 > 社会民生

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