历史上的今天
今天是:2025年08月10日(星期日)
2021年08月10日 | MC9S12XET256之ECT模块(5)
2021-08-10 来源:eefocus
实验5:初识输入捕捉功能
所谓输入捕捉,简单的说就是感应输入引脚PTx上的电平的变化,如果发现电平变化,则:
l TCNT计数器的值被保存到到输入捕捉寄存器TCx中,状态标志位被置 1
l 如果中断允许,则向CPU发出中断请求
ECT 模块可以捕捉到的电平变化包括上升沿、下降沿或任意沿。简单的说就是可以捕捉任意一种变化,功能还是很强悍的。
TCx 寄存器(Timer Input Capture/Output Compare 0-7)
在介绍输出比较功能时已经提到过。在这里,用来记录外部事件发生时TCNT的值。通过读取两次相邻事件 TCx 的值就可以计算出两次事件的间隔时间了。
TCTL3/TCTL4 寄存器(Timer Control Register 3/4)
定时器控制寄存器TCTL3和TCTL4中的EDGxB和EDGxA位决定通道 x 有效跳变边沿是上升沿、下降沿或任意跳变。具体如何设置参见表格 2 的说明。
表格 2 输入捕捉跳变边沿类型
EDGxB | EDGxA | 类型 |
0 | 0 | 禁止 |
0 | 1 | 上升沿 |
1 | 0 | 下降沿 |
1 | 1 | 任意跳变 |
图 14 TCTL3/TCTL4 寄存器
TCxH寄存器(Timer Input Capture Holding Registers 0-3)
当开启输入捕捉功能时,对应事件发生时TCNT的值会被拷贝到TCx 寄存器中。对于输入捕捉的前4个通道,在这个拷贝发生之前还要完成一件事情,就是将TCx 的值拷贝到TCxH中。因此,当输入捕捉中断发生时,TCx 中存储的是发生当前事件时 的TCNT 的值,TCxH 中存放的则是上一次事件发生时TCNT 的值。这两个值的差可以计算出两次事件间隔的时间。
程序中还要使用到的寄存器包括TIOS寄存器(Timer Input Capture/Output Compare Select)、TSCR1寄存器(Timer System Control Register 1)、TFLG1寄存器(Main T
imer Interrupt Flag 1)和TIE寄存器(Timer Interrupt Enable Register)。在前面的介绍中已经提到过这些寄存器了,这里就不重复了。
下面是例子程序的部分代码,功能很简单。连续捕捉十次上升沿对应的TCNT,然后计算周期。
#include #include "derivative.h" /* derivative-specific definitions */ #include "sci.h" void ECTInit(void) { TIOS_IOS0 = 0; // channel 0 as output compare TIE_C0I = 1; // 使能 channel 0 中断 TCTL4_EDG0A = 1; TCTL4_EDG0B = 0; // 检测上升沿 TSCR1_TEN = 1; //timer enable } unsigned short buf[11]; char flag; void main(void) { long interval = 0; char i; SCIInit(); SCISetBaudRate (SCI0, 9600, 8192000L); ECTInit(); EnableInterrupts; flag = 0; for(;;) { if(flag == 1) { for( i = 0; i < 10; i++) { interval += buf[i+1] - buf[i]; } SCIPutShort(SCI0, interval >> 16); SCIPutShort(SCI0, interval & 0xffff); } _FEED_COP(); /* feeds the dog */ } /* loop forever */ } interrupt VectorNumber_Vtimch0 void ECT_0_ISR(void) { static int i = 0; TFLG1 = TFLG1_C0F_MASK; //clear channel 0 interrupt flag buf[i++] = TC0; if (i == 11) { flag = 1; i = 0; TIE_C0I = 0; //关闭中断 } } 信号源还是采用 USBee AX,利用通道7 输出的 7.8125KHz 方波。 串口传上来的数据为:10486 简单计算一下:T = 10486*1/8192.0/10 = 0.128 ms f : 1/T = 7.815 KHz 说明测量的结果还是很准确的。 
史海拾趣
|
linux内核对nor flash的驱动都是通过cfi的,我可不可直接不用cfi接口,直接把nor flash的驱动挂在mtd下面,另外对nor flash的地址是否需要ioremap?请高手们指教,谢谢!… 查看全部问答> |
|
请问如何测试VxWorks的中断响应时间、系统启动时间?? 我使用的是S3C2440的板子,系统是VxWorks5.5 知道的话说的详细点,谢谢了… 查看全部问答> |
|
急!!(evc4.0+ado3.1)create database 不成功 程序段如下: hr=CLSIDFromProgID(g_szADOCE30ConnProgID,&tClsid); hr= CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER,IID_Connection,(LPVOID*)&m_pADOCEC ...… 查看全部问答> |
|
今天收到了板子。先熟悉学习。再做个毕来设计。 有准备学习的兄弟可以给我留言,我们可以共同讨论共同进步。 有问题记得在这里留言哟。 [ 本帖最后由 zhiha258 于 2011-1-21 16:52 编辑 ]… 查看全部问答> |
|
官方有提供数据手册,编程手册。MDK4.13也支持了STM32L,但是没有模板怎么用啊? 不过我在MDK4.13里的BORD文件夹下找到STM32L的工程例子。还是不怎么放心。而且,现在STM32L似乎还买不到!… 查看全部问答> |
|
参考了很多应用及430的部分手册,都推荐上电复位的阻容组合为47K,0.1u,当然这个参数应该是没有问题的,430能可靠复位。这个参数组合能保证复位脚在上电时有足够的低电平时间。请教各位高手,我的理解不知对不对,当选择阻容组合为1k,4.7u,复位 ...… 查看全部问答> |
|
在测量尺寸较小样本时,样本安装基底可能会成为测量误差的主要来源,这是其体积和表面电阻率造成的。通过(可能被污染的)基底表面阻止漏电流[1]的方法是,使用两个分开的绝缘片,而不是将样本放置在一个绝缘片上。为了简化对不同尺寸小型样本的 ...… 查看全部问答> |




