完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
鄙人新手,对这个几乎什么都不懂,想要对外部输入的信号进行捕捉,测得两个信号之间的时间差,照着数据手册,自己瞎写了一个程序,编译是不报错的,但是运行也没任何效果。 希望能有老师帮忙看看那里出了问题。 网上也找不到关于TPM输入捕捉的例
程,实在是很苦恼。 谢谢!!! #include #include "derivative.h" /* include peripheral declarations */ void PTBDD_INIT(void); long i,j,a,b,c,x; void main(void) { DisableInterrupts;//关闭中断 SOPT1=0x03;//关狗 PTBDD_INIT(); //对管脚初始化 x=TPM1SC; TPM1SC_TOF=0;//对TPM1SC溢出标志清除 TPM1SC_TOIE=1; //TPM1可以中断 TPM1SC_CPWMS=0;//加法计数器方式 TPM1SC_CLKSB=0; //总线时钟 TPM1SC_CLKSA=1; TPM1SC_PS0=0;//1分频 TPM1SC_PS1=0; TPM1SC_PS2=0; TPM1CNT=0x0000;// TPM计数器清零 TPM1MOD=0x0000; //自由计数模式 a=TPM1C1SC; //将1.2通道标志位清除 b=TPM1C2SC; TPM1C1SC_CH1F=0; TPM1C2SC_CH2F=0; TPM1C1SC_CH1IE=1; //1.2通道中断使能 TPM1C2SC_CH2IE=1; TPM1C1SC_MS1B=0; //通道输入捕捉 TPM1C1SC_MS1A=0; TPM1C2SC_MS2B=0; TPM1C2SC_MS2A=0; TPM1C1SC_ELS1B=1;//下降沿捕捉 TPM1C1SC_ELS1A=0; TPM1C2SC_ELS2B=1; TPM1C2SC_ELS2A=0; EnableInterrupts; /* enable interrupts */ /* include your code here */ c=j-i; for(;;) { //__RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } void PTBDD_INIT(void){ PTBDD_PTBDD4=0; //4管脚设为输入,在电路板上是连接着按键的 PTBDD_PTBDD5=0;//5管脚也连接一个按键 PTBDD_PTBDD0=1;// 0管脚设为输出,在电路板上连接LED PTBDD_PTBDD1=1;//1管脚也连接一个LED PTBD_PTBD0=1; PTBD_PTBD1=1;//将两个LED置为不亮状态。 } void interrupt 10 tpm_isr1(){ // 此处是想用TPM1的ch1的中断来着,中断号里关于ch1的只有这一个,也不知道这么用对不对。 i=TPM1C1V; //如果中断是对的,读此时捕捉到的计数器数值 a=TPM1C1SC; TPM1C1SC_CH1F=0;//清楚中断标志位? PTBD_PTBD0=0;//点亮LED } void interrupt 11 tpm_isr2(){ j=TPM1C2V; b=TPM1C2SC; TPM1C2SC_CH2F=0; PTBD_PTBD1=0; } |
|
相关推荐
5个回答
|
|
有没有好心的老师帮忙看一下,谢谢谢谢!!!
|
|
|
|
你没有描述清楚问题呢,什么芯片,要实现什么功能?
|
|
|
|
谢谢~~ 是MC9S08JM60的板子, 想要做一个输入捕捉,目前的想法是用按键(PTBD4和5)去提供低电平,然后用TPM的通道1.2去捕捉下降沿,进入中断,如果进入中断就把LED点亮(PTBD0和1) 现在好像是不能进中断,灯点不亮。 我把程序修改了一些,还是不行。 |
|
|
|
这是修改之后的程序,把主计数器的中断关掉了,只打开了TPM1的通道1和2的中断。
#include #include "derivative.h" /* include peripheral declarations */ void PTBDD_INIT(void); long i,j,c,x; void main(void) { DisableInterrupts;//关闭中断 SOPT1=0x03;//关狗 PTBDD_INIT(); //对管脚初始化 x=TPM1SC; TPM1SC_TOF=0;//对TPM1SC溢出标志清除 TPM1SC_TOIE=0; //TPM1中断禁止 TPM1SC_CPWMS=0;//加法计数器方式 TPM1SC_CLKSB=0; //总线时钟 TPM1SC_CLKSA=1; TPM1SC_PS0=0;//1分频 TPM1SC_PS1=0; TPM1SC_PS2=0; TPM1CNT=0x0000;// TPM计数器清零 TPM1MOD=0x0000; //自由计数模式 TPM1C1SC_CH1F=0; TPM1C2SC_CH2F=0; TPM1C1SC_CH1IE=1; //1.2通道中断使能 TPM1C2SC_CH2IE=1; TPM1C1SC_MS1B=0; //通道输入捕捉 TPM1C1SC_MS1A=0; TPM1C2SC_MS2B=0; TPM1C2SC_MS2A=0; TPM1C1SC_ELS1B=1;//下降沿捕捉 TPM1C1SC_ELS1A=0; TPM1C2SC_ELS2B=1; TPM1C2SC_ELS2A=0; EnableInterrupts; /* enable interrupts */ /* include your code here */ //c=j-i; for(;;) { //__RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } void PTBDD_INIT(void){ PTBDD_PTBDD4=0; PTBDD_PTBDD5=0; PTBDD_PTBDD0=1; PTBDD_PTBDD1=1; PTBD_PTBD0=1; PTBD_PTBD1=1; } void interrupt 10 tpm_isr1(){ i=TPM1C1VH*256+TPM1C1VL; PTBD_PTBD0=0; TPM1C1SC=TPM1C1SC&0x48; //TPM1频道1中断标识清除 } void interrupt 11 tpm_isr2(){ j=TPM1C2VH*256+TPM1C2VL; PTBD_PTBD1=0; TPM1C2SC=TPM1C2SC&0x48; //TPM1频道2中断标识清除 } |
|
|
|
搞个外部触发中断不就可以了吗?就像51那样,检测到外边按键按下,有电平变化,进入中断,点亮LED
|
|
|
|
只有小组成员才能发言,加入小组>>
1911个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36361 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4400 浏览 0 评论
6054 浏览 1 评论
6765 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4216 浏览 0 评论
620浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
617浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
609浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
799浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 17:10 , Processed in 2.309228 second(s), Total 89, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号