完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的处理器是LPC2292的。需要用定时器捕获一个外部的频率,
利用本身LPC2292的定时时间内获得的上升沿个数,通过计算得到外部的频率 可是我还是新手,写了很多次的不是很成功,特意发帖希望各位有时间看看 代码贴上来。 /********************************************************************************************************* ** Function name: timer0Init ** Descriptions: 定时器0初始化程序 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void timer0Init (void) { PINSEL0|= 0xc00; //将P0.20管脚选择为 CAP1.3 功能 T0TCR = 0x02; //复位计数定时 T0IR =0x10; //清除中断 //T0CTCR = 0; //定时模式 T0TC = 0; //计数清零 T0PR = 0; //预分频 T0MR0 = Fpclk/2; // 匹配寄存器 0.5秒定时 T0MCR=0x03; //设置T0MR0匹配后产生中断并且复位T0TC T0CCR = 0x05; //上升沿捕获,捕获事件中断 timer0Isr(); // 设置中断并使能 T0TCR = 0x01; // 还没启动定时器 } /********************************************************************************************************* * Function Name: timer0Isr * Description: * Input: 这个函数就是用来计算这个频率的函数 * Output: 无 * Return: 无 *********************************************************************************************************/ void timer0Isr (void) { char j,i; unsigned char HZ_FLG2=0; INT32U temp; FP32 F2; INT32U cap_cou[10],cap_i; if(HZ_FLG2==0) { if(cap_i<10) cap_cou[cap_i]=T0CR0; //计数得到的上升沿个数 cap_i++; if(cap_i>=10) { for(j=0;j<10;j++) { for (i=0;i<10-j;i++) if(cap_cou>cap_cou[i+1]) { temp=cap_cou; cap_cou=cap_cou[i+1]; cap_cou[i+1]=temp; } } cap_cou[0]=(cap_cou[3]+cap_cou[4]+cap_cou[5]+cap_cou[6])/4 ; F2=24000000/(FP32)(cap_cou[0]); cap_i=0; HZ_FLG2=255; } } T0TC = 0; T0IR = 1<<4; } 希望帮忙看下,或是有做个这个方面的同仁帮忙。。邮箱:liwenkede@126.com 不甚感激! |
|
相关推荐
1 个讨论
|
|
INT32U tempwjj,wujiajin,cap;
fp32 WBJZ; /**************************************************************************** * 名 称:IRQ_Time0() * 功 能:定时器0中断服务程序,取反BEEPCON控制口。 * 入口参数:无 * 出口参数:无 11/12/2013 liwenke ******************************************************* *********************/ /* void DoubleInterlockTimer(BYTE byClkTick500ms); //单位 500ms void DoubleMeasureTimer(BYTE byClkTickms); */ void IRQ_Time0(void) __irq { wujiajin = T0TC; cap=T0CR0; WBJZ=((cap/12)/32); T0IR = 255; T0TC = 0; VICVectAddr=0X00; // 通知VIC中断处理结束 } /**************************************************************************** * 名 称:Time0Init() * 功 能:初始化定时器0,定时时间为2mS,并使能中断。 * 入口参数:无 * 出口参数:无 11/12/2013 liwenke ****************************************************************************/ void Time0Init(void) { PINSEL1 |= (2<<12); //捕获方式 P0.22 CAP0.0 PINSEL1 定时器0 PCONP |= 3<<1; T0IR = 1<<4; //复位计数定时 T0TC = 0; //计数清零 T0PR = 0; //预分频 T0MR0 = 0XFFFFFFFE; // 匹配寄存器 T0MCR = 1; // 匹配后不中断、复位、停止 T0CCR = 0X05; //上升沿捕获,捕获事件中断 T0TCR = 0x03; T0TCR =0x01; VICVectCntl4 = 0x24; // 定时器0中断通道分配最高优先级(向量控制器0) VICVectAddr4 = (uint32)IRQ_Time0; // 设置中断服务程序地址向量 VICIntEnable |= 0x00000010; // 使能定时器0中断 } |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1934个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36421 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4928 浏览 1 评论
6109 浏览 1 评论
6819 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4249 浏览 0 评论
653浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
646浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
647浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
736浏览 2评论
848浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 11:11 , Processed in 1.088533 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号