CH573 TMR0 捕獲的問題

我TMR0想捕捉脈沖里高電平的持續(xù)時間

我的配置如下:

void Cap_Init( void )
{
??? GPIOA_ResetBits( GPIO_Pin_9 );????????????????????????????????? // 配置PWM口 PA9
??? GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeIN_Floating );

??? TMR0_CapInit( Edge_To_Edge );?????????????????????????????????? // 邊沿
??? TMR0_CAPTimeoutCfg( 0xFFFFFFFF );?????????????????????????????? // 設(shè)置捕捉超時時間
??? TMR0_ITCfg( ENABLE, TMR0_3_IT_DATA_ACT );?????????????????????? // 開啟有效電平結(jié)束中斷
??? PFIC_EnableIRQ( TMR0_IRQn );
}


中斷判斷是高電平還是低電平:

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void TMR0_IRQHandler( void )??????????????????????????????????????? // TMR0 定時中斷
{
??? if( TMR0_GetITFlag( TMR0_3_IT_DATA_ACT ) )
??? {
??????? TMR0_ClearITFlag( TMR0_3_IT_DATA_ACT );???????????????????? // 清除中斷標(biāo)志
??????? if( ( TMR0_CAPGetData(? ) >> 25 ) != 0 )
??????? {
??????????? PRINT( "CAP_H:%.1f\r\n", ( TMR0_CAPGetData(? ) & 0x1FFFFFF )/60000.0 );
??????? }
??? }
}



但是為啥我捕捉到的是低電平時間?

6666666666666.png

TMR0不支持DMA的功能,其他和TMR1的使用方式一樣,這里提供一個不帶DMA功能的博客,按照其修改就可以:

CH579_TMR定時器邊沿捕獲 - SweetTea_lllpc - 博客園 (cnblogs.com)


我知道問題了

我在中斷里面讀取cap值并判斷完高低電平之后再次讀取判斷持續(xù)時間的時候讀到的值 已經(jīng)是低電平的了,應(yīng)該是這樣:

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void TMR0_IRQHandler( void )??????????????????????????????????????? // TMR0 定時中斷
{
??? if( TMR0_GetITFlag( TMR0_3_IT_DATA_ACT ) )
??? {
??????? UINT32 temp = TMR0_CAPGetData(? );
??????? if( ( temp >> 25 ) != 0 )
??????? {
??????????? PRINT( "CAP_H:%.1f\r\n", ( temp & 0x1FFFFFF )/60000.0 );
??????? }
??????? TMR0_ClearITFlag( TMR0_3_IT_DATA_ACT );???????????????????? // 清除中斷標(biāo)志
??? }
}


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

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