<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Freescale 9S12 系列單片機應用筆記(ECT 模塊) 5

Freescale 9S12 系列單片機應用筆記(ECT 模塊) 5

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏

實(shí)驗5:初識輸入捕捉功能

所謂輸入捕捉,簡(jiǎn)單的說(shuō)就是感應輸入引腳PTx上的電平的變化,如果發(fā)現電平變化,則:

本文引用地址:http://dyxdggzs.com/article/201611/318818.htm

lTCNT計數器的值被保存到到輸入捕捉寄存器TCx中,狀態(tài)標志位被置1

l如果中斷允許,則向CPU發(fā)出中斷請求

ECT模塊可以捕捉到的電平變化包括上升沿、下降沿或任意沿。簡(jiǎn)單的說(shuō)就是可以捕捉任意一種變化,功能還是很強悍的。

TCx寄存器(TimerInputCapture/OutputCompare0-7)

在介紹輸出比較功能時(shí)已經(jīng)提到過(guò)。在這里,用來(lái)記錄外部事件發(fā)生時(shí)TCNT的值。通過(guò)讀取兩次相鄰事件TCx的值就可以計算出兩次事件的間隔時(shí)間了。

TCTL3/TCTL4寄存器(TimerControlRegister3/4)

定時(shí)器控制寄存器TCTL3和TCTL4中的EDGxB和EDGxA位決定通道x有效跳變邊沿是上升沿、下降沿或任意跳變。具體如何設置參見(jiàn)表格2的說(shuō)明。

表格2輸入捕捉跳變邊沿類(lèi)型

EDGxB

EDGxA

類(lèi)型

0

0

禁止

0

1

上升沿

1

0

下降沿

1

1

任意跳變

圖14TCTL3/TCTL4寄存器

TCxH寄存器(TimerInputCaptureHoldingRegisters0-3)

當開(kāi)啟輸入捕捉功能時(shí),對應事件發(fā)生時(shí)TCNT的值會(huì )被拷貝到TCx寄存器中。對于輸入捕捉的前4個(gè)通道,在這個(gè)拷貝發(fā)生之前還要完成一件事情,就是將TCx的值拷貝到TCxH中。因此,當輸入捕捉中斷發(fā)生時(shí),TCx中存儲的是發(fā)生當前事件時(shí)的TCNT的值,TCxH中存放的則是上一次事件發(fā)生時(shí)TCNT的值。這兩個(gè)值的差可以計算出兩次事件間隔的時(shí)間。

程序中還要使用到的寄存器包括TIOS寄存器(TimerInputCapture/OutputCompareSelect)、TSCR1寄存器(TimerSystemControlRegister1)、TFLG1寄存器(MainTimerInterruptFlag1)和TIE寄存器(TimerInterruptEnableRegister)。在前面的介紹中已經(jīng)提到過(guò)這些寄存器了,這里就不重復了。

下面是例子程序的部分代碼,功能很簡(jiǎn)單。連續捕捉十次上升沿對應的TCNT,然后計算周期。

#include /* common defines and macros */
#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; //關(guān)閉中斷
}
}

信號源還是采用 USBee AX,利用通道7 輸出的 7.8125KHz 方波。

串口傳上來(lái)的數據為:10486

簡(jiǎn)單計算一下:T = 10486*1/8192.0/10 = 0.128 ms

f : 1/T = 7.815 KHz

說(shuō)明測量的結果還是很準確的。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>