您好,我想請(qǐng)問一下關(guān)于CH573定時(shí)器輸入捕獲的問題

請(qǐng)問一下CH573PA9引腳用作TMR0功能可以做輸入捕獲用來進(jìn)行紅外解碼嗎?解碼NEC需要判斷高低電平的持續(xù)時(shí)間,是需要用另一個(gè)定時(shí)器的計(jì)數(shù)功能才可以實(shí)現(xiàn)嗎?如果要判斷低電平是否持續(xù)560us,那這個(gè)計(jì)數(shù)器計(jì)的數(shù)值為多少時(shí)才是560us呢?


CH57x CH58x 系列的芯片的26bit定時(shí)器的時(shí)鐘直接來自 系統(tǒng)時(shí)鐘,

當(dāng)系統(tǒng)跑到32M 情況下, 每32代表1us, 在60M情況下每60代表1us;

上帖低電平持續(xù)560us, 當(dāng)CH573 跑在60M的情況下, 560us captrue得到的值將會(huì)是60*360 = 33600這樣

另外一個(gè)注意的地方是, capture工作模式下,timer的輸出值的第26bit 指示的是采樣時(shí)候的電平;


如下是在主頻60Mhz下,timer開啟雙邊沿captrue下,中斷里面得到 us的處理(這里測試用到了打印,注意給合適的測試信號(hào),避免打印速度影響結(jié)果)

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void?TMR3_IRQHandler(?void?)????????//?TMR3?定時(shí)中斷
{
????uint32_t?cap_data;
????if?(?TMR3_GetITFlag(?TMR0_3_IT_DATA_ACT?)?)?{
????????TMR3_ClearITFlag(?TMR0_3_IT_DATA_ACT?);??????//?清除中斷標(biāo)志
????????cap_data?=?TMR3_CAPGetData();
????????
????????if(cap_data&(1<<25)){?//高電平
????????????cap_data?=?cap_data&((1<<25)-1);
????????????PRINT("H?gap=%d?us\r\n",cap_data/60);
????????}else{
????????????PRINT("L?gap=%d?us\r\n",cap_data/60);
????????}
????}
}



初始化這樣寫對(duì)嗎,用定時(shí)器0輸入捕獲

????GPIOA_ResetBits(?GPIO_Pin_9?);?????????????//?配置PA9
????GPIOA_ModeCfg(?GPIO_Pin_9,?GPIO_ModeIN_PU?);

????TMR0_CapInit(?Edge_To_Edge?);
????TMR0_CAPTimeoutCfg(?0xFFFFFFFF?);????//?設(shè)置捕捉超時(shí)時(shí)間
????PFIC_EnableIRQ(?TMR0_IRQn?);



還需要使能?? TMR0_ITCfg( ENABLE, TMR0_3_IT_DATA_ACT );


void?Init(void)
{
????GPIOA_ResetBits(?GPIO_Pin_9?);?????????????//?配置PA9
????GPIOA_ModeCfg(?GPIO_Pin_9,?GPIO_ModeIN_PU?);

????TMR0_CapInit(?Edge_To_Edge?);
????TMR0_CAPTimeoutCfg(?0xFFFFFFFF?);????//?設(shè)置捕捉超時(shí)時(shí)間
????TMR0_ITCfg(?ENABLE,?TMR0_3_IT_DATA_ACT?);
????PFIC_EnableIRQ(?TMR0_IRQn?);

}

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void?TMR0_IRQHandler(?void?)
{
????uint32_t?cap_data;
????if?(?TMR0_GetITFlag(?TMR0_3_IT_DATA_ACT?)?)
????{
????????TMR0_ClearITFlag(?TMR0_3_IT_DATA_ACT?);??????//?清除中斷標(biāo)志
????????cap_data?=?TMR0_CAPGetData();

????????if(cap_data&(1<<25)){?//高電平
????????????cap_data?=?cap_data&((1<<25)-1);
????????????PRINT("H?gap=%d?us\r\n",cap_data/60);
????????}else{
????????????PRINT("L?gap=%d?us\r\n",cap_data/60);
????????}
????}
}

這是定時(shí)器輸入捕獲的代碼,連接的是一個(gè)紅外接收器,當(dāng)我按下遙控器時(shí)串口打印的信息如下

QQ截圖20211215103754.png

邏輯分析儀捕捉的圖像如下

QQ截圖20211215092651.png

任意邊沿觸發(fā)首先打印的應(yīng)該是 L gap=9398 us嗎,而且打印的高低電平與圖像也對(duì)不上。請(qǐng)問這是什么問題。



打印的波特率是多少?如果是115200的話,中斷里面打印的時(shí)間都比采樣脈寬要寬,會(huì)影響采樣。


這是9600波特率的打印,但是第一個(gè)被采樣的電平不應(yīng)該是低電平嗎

QQ截圖20211215111148.png


你是上電同時(shí)有邊沿輸入,還是芯片先上電在輸入的電平信號(hào),你可以先測單個(gè)脈寬試試,打印的話,9600太慢了,1個(gè)字節(jié)就差不多1ms,影響采樣。


方便給我發(fā)一下CH573觸摸按鍵的嗎



方便給我發(fā)一下CH573觸摸按鍵的嗎



方便給我發(fā)一下CH573觸摸按鍵的嗎



留個(gè)郵箱發(fā)給你


您好,我這里做了測試不在中斷中打印,

????while(1)
????{
????????for(i=0;i<10;i++)
????????{
????????????TMR1_Disable();
????????????TMR1_PWMActDataWidth(?0?);??????????????//?占空比
????????????TMR1_Enable();
????????????DelayMs(9);
????????????TMR1_Disable();
????????????TMR1_PWMActDataWidth(?10000?);??????????????//?占空比
????????????TMR1_Enable();
????????????if(cap_data&(1<<25))?//高電平
????????????{
????????????????cap_data?=?cap_data&((1<<25)-1);
????????????????PRINT("H?gap=%d?us\r\n",cap_data/60);
????????????}
????????????else
????????????????PRINT("L?gap=%d?us\r\n",cap_data/60);
????????????DelayMs(1000);
????????}
????????TMR1_PWMInit(?Low_Level,?PWM_Times_1?);
????????for(i=0;i<10;i++)
????????{
????????????TMR1_Disable();
????????????TMR1_PWMActDataWidth(?0?);??????????????//?占空比
????????????TMR1_Enable();
????????????DelayMs(9);
????????????TMR1_Disable();
????????????TMR1_PWMActDataWidth(?10000?);??????????????//?占空比
????????????TMR1_Enable();
????????????if(cap_data&(1<<25))?//高電平
????????????{
????????????????cap_data?=?cap_data&((1<<25)-1);
????????????????PRINT("H?gap=%d?us\r\n",cap_data/60);
????????????}
????????????else
????????????????PRINT("L?gap=%d?us\r\n",cap_data/60);
????????????DelayMs(1000);
????????}
????????TMR1_PWMInit(?High_Level,?PWM_Times_1?);
????}
????__attribute__((interrupt("WCH-Interrupt-fast")))
????__attribute__((section(".highcode")))
????void?TMR0_IRQHandler(?void?)
????{

????????if?(?TMR0_GetITFlag(?TMR0_3_IT_DATA_ACT?)?)
????????{
????????????TMR0_ClearITFlag(?TMR0_3_IT_DATA_ACT?);??????//?清除中斷標(biāo)志
????????????cap_data?=?TMR0_CAPGetData();

????????????if(cap_data&(1<<25)){?//高電平

????????????}else{

????????????}
????????}
????}

串口打印的信息如圖

QQ截圖20211215151638.png

每次前四組數(shù)不太正確,這個(gè)要怎么保證第一次的數(shù)據(jù)就是正確的呢


個(gè)人信息保護(hù),已隱藏




已發(fā),請(qǐng)查收


您好,能否麻煩幫我看一下那個(gè)問題


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频