關(guān)于ch582M的GPIO外部下降沿中斷,為什么把對(duì)應(yīng)的中斷腳的中斷位清零,再使能中斷,還是能進(jìn)入中斷一次

①GPIO_Pin_5下降沿中斷初始化:

GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeIN_PU );

GPIOA_ITModeCfg( GPIO_Pin_5, GPIO_ITMode_FallEdge );? ? ? ? // 下降沿喚醒

GPIOA_ClearITFlagBit( GPIO_Pin_5?);????????//清GPIO_Pin_5中斷標(biāo)志位

R16_PA_INT_EN &= ~GPIO_Pin_5;????????? ?//GPIO_Pin_5中斷不使能

PFIC_EnableIRQ( GPIO_A_IRQn );


②應(yīng)用程序:

中斷函數(shù)中:另一個(gè)腳中斷判斷狀態(tài)后打開GPIO_Pin_5中斷使能,代碼具體如下:

GPIOA_ClearITFlagBit(?GPIO_Pin_5?);????//清GPIO_Pin_5中斷標(biāo)志位

R16_PA_INT_EN |= GPIO_Pin_5;????????????//GPIO_Pin_5中斷使能


③現(xiàn)象:

打開該腳中斷使能前,該腳外部有脈沖輸入,打開使能后,這時(shí)即便外部沒脈沖輸入,中斷也能進(jìn)一次,這個(gè)比較危險(xiǎn)。


④怎么處理這記憶性的中斷?

注:打開中斷使能前已經(jīng)清該腳的中斷標(biāo)志了,怎么還會(huì)進(jìn)去?


你可以看一下我們的PM例程,結(jié)合睡眠的函數(shù),通過PA5喚醒,是正常的。

1.png


根據(jù)你的描述,我也寫了相似的代碼進(jìn)行測(cè)試,但沒有出現(xiàn)已經(jīng)清除標(biāo)志還能進(jìn)中斷的現(xiàn)象,只進(jìn)入了一次中斷,清除了pin5的中斷標(biāo)志,打開了pin5的中斷使能。(在pin5沒有使能中斷時(shí)產(chǎn)生下降沿標(biāo)志位會(huì)置,但中斷中清除即可)

emobile_2022-03-28_21-20-23.png

emobile_2022-03-28_21-21-45.png


我不知道你測(cè)試的外部條件是怎么樣的;初始化先設(shè)置PIN5腳為下降沿中斷,但先不使能中斷;這時(shí)給PIN5腳輸入一個(gè)脈沖,之后關(guān)閉脈沖輸入,再打開中斷使能,看看這時(shí)會(huì)不會(huì)有中斷進(jìn)入


就是按照你所說的情況測(cè)試的,中斷開啟前清除標(biāo)志則不會(huì)進(jìn)中斷,如果測(cè)試結(jié)果不同,可將測(cè)試工程貼出。


有可能是我模擬的外部輸入的脈沖太快了,超過了中斷處理速度


#define PK GPIO_Pin_14


int main()

{

? SetSysClock( CLK_SOURCE_PLL_80MHz );

? GPIOB_ModeCfg( PK , GPIO_ModeIN_Floating );? ? //PK=1M

? while( 1 )

? {

? ? if(? GPIOB_ReadPortPin(? PK? )? ?)? GPIOB_SetBits(LED);

? ? else? GPIOB_ResetBits(LED);

? }

image.png

請(qǐng)問:如上圖顯示,有脈沖丟失,如何用IO模擬4M高速采集端口數(shù)據(jù)?


在此帖已回復(fù)http://www.findthetime.net/bbs/thread-87084-1.html


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

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