stm32中斷無電平觸發的解決辦法


  這幾天在用stm32讀取FPGA中FIFO里的數據,遇到了不少的問題。這里就其中的一個問題寫寫,比較簡單,就當做是打發一下時間。

  問題就是,stm32的中斷沒有電平觸發方式。stm32讀取FIFO中的數據,當FIFO數據非空時給stm32中斷信號——將對應的中斷線拉高/低,這時stm32取FIFO中數據直至讀完,FIFO將中斷線電平拉低/高。然后當FIFO中又有數據時,在次發出中斷信號,如此循環。

  結合圖說。這里簡單看看FIFO的結構,如圖一所示。當FIFO數據非空,給stm32信號,比如將wr_full這個引腳拉高/低。然后就讓這個信號觸發stm32進入中斷函數中去讀數據,直到stm32將數據讀出后拉低/高。讀取時序如圖二。這樣就需要將中斷設置成電平觸發,只要低就一直重復進中斷函數里讀數據。但就像前面說到的stm32不能將中斷設置成電平觸發的方式。                                                        rd_clock:時鍾信號         wr_full:半滿信號

                                                        rd_en:  使能信號           tx_data: 數據

                                                                                  圖一

                                                                                   圖二  

  怎么解決呢?我的做法是這樣的。如圖三所示: 在箭頭1處,用while循環,里面的判斷條件是讀取的中斷輸入引腳(我設置為GPIOE_Pin4)的值,如果這個引腳的值是1的話,就繼續讀數據。如果值為0的話就退出while循環,清中斷(箭頭2處),再退出中斷函數。

                                                                                  圖三

  好了,這樣就解決了我的問題。下面可以開始驗證了。如圖四所示,是為驗證編寫的主函數,很簡單,就不說了。按照預期,應該出現的現象是:程序下載后,stm32的LED閃爍,代表程序程序運行正常。然后讓FPGA給里面的FIFO寫數據,半滿后給出中斷信號。串口調試助手可以看到,當半滿信號給出被拉高后,串口調試助手中顯示出事先寫入FIFO中的數據,此時LED停止閃爍。半滿信號拉低后,無數據顯示,LED燈開始閃爍。下面,我就把程序下進去觀察一下。

                                                                                  圖四

  從圖五里可以可以看到,讀出了數據,而且就是事先寫入FIFO里的數據。另外,LED燈在串口調試助手printf出數據時,停止閃爍。數據printf完后,有開始閃。和預期一樣                                                                                   圖五

  比較簡單,見笑了...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM