完整的初始化代碼
?。踓pp] view plain copyvoid signal_capture_Init(void)
{
TIM1_CNTRH = 0x00;//清零計數(shù)器高8位
TIM1_CNTRL = 0x00;//清零計數(shù)器低8位
TIM1_PSCRH = 0x00;//計數(shù)器時鐘分頻高8位
TIM1_PSCRL = 0x10;//計數(shù)器時鐘分頻低8位16分頻
TIM1_CCER1 &= (unsigned char)~0x01;//清零TIM1_CCER1中的CC1E位,之后才可配置TIM1_CCMR1
TIM1_CCMR1 = 0x01;//配置TIM1_CCMR1中的CC1S位為1,CC1通道配置為輸入,IC1映射到TI1FP1上
//無濾波器、無預(yù)分頻器(捕獲輸入口上檢測到的每一個邊沿都觸發(fā)一次捕獲)
TIM1_CCER1 &= (unsigned char)~0x02;//上升沿或者高電平觸發(fā)
TIM1_IER |= 0x02;//CC1IE=1,使能捕獲/比較1中斷
TIM1_CCER1 |= 0x01;//捕獲使能
TIM1_CR1 |= 0x01;//使能定時/計數(shù)器
}
當(dāng)發(fā)生一個輸入捕獲時,計數(shù)器的值被傳送到TIM1_CCR1寄存器中,計時器的時鐘源在程序中我們設(shè)置為16分頻
分頻過后計數(shù)器的頻率為1MHz,這里采用分頻主要是避免計數(shù)器溢出,這樣同時也降低了精度,同時設(shè)置計數(shù)器的初值為0,計數(shù)器默認計數(shù)方式是向上計數(shù),計到最大值后又從0開始計數(shù),
中斷處理代碼如下
[cpp] view plain copy@far @interrupt void signal_capture_irq (void)
{
if(TIM1_SR1&0x02)
{
TIM1_SR1 &= (unsigned char)~0x02;//清除CC1IF標(biāo)志
if(vsync_cap_data_old == 0x00)
{//第一次捕獲中斷來臨
vsync_cap_data_old = TIM1_CCR1H;//先讀取高8位數(shù)據(jù)
vsync_cap_data_old = (unsigned int)(vsync_cap_data_old《《8) + TIM1_CCR1L;//再讀取低8位數(shù)據(jù)
}
else
{
//第二次捕獲中斷來臨
vsync_cap_data_new = TIM1_CCR1H;//先讀取高8位數(shù)據(jù)
vsync_cap_data_new = (unsigned int)(vsync_cap_data_new《《8) + TIM1_CCR1L;//再讀取低8位數(shù)據(jù)
TIM1_IER &= (unsigned char)~0x02;//禁止通道1捕獲/比較中斷
TIM1_CR1 &= (unsigned char)~0x01;//停止計數(shù)器
if(vsync_cap_data_new 》 vsync_cap_data_old)
vsync_period = (vsync_cap_data_new - vsync_cap_data_old);
else
vsync_period = 0xFFFF + vsync_cap_data_new - vsync_cap_data_old;
vsync_cap_data_old = 0x00;
isCaptureOver = 1;
}
}
}
我們捕獲兩次中斷計算時間差,
?。踓pp] view plain copyif(isCaptureOver)
{
//如果捕獲完成則對數(shù)據(jù)進行處理
cmd_puts(“period:”);
cmd_hex((unsigned char)(vsync_period》》8));
cmd_hex((unsigned char)vsync_period);
TIM1_CNTRH = 0x00;//清零計數(shù)器高8位
TIM1_CNTRL = 0x00;//清零計數(shù)器低8位
TIM1_IER |= 0x02;//CC1IE=1,使能捕獲/比較1中斷
TIM1_CR1 |= 0x01;//使能定時/計數(shù)器
isCaptureOver = 0;
}
這里只從串口輸出了周期,結(jié)果如下
可以看到周期在一個范圍內(nèi)波動我們?nèi)∫粋€值0x79ED來計算,它所對應(yīng)的頻率f=1000000/0x79ED=32.0379Hz還是比較接近我們的實際輸入頻率30Hz,誤差是大了些,可以通過代碼繼續(xù)改進
評論
查看更多