為什么DMA中斷不能觸發(fā)
????????試用國產(chǎn)單片機,測試IIS的DMA功能,參考了固件庫例子的IIS發(fā)送功能,而DMA功能的測試方法各種國產(chǎn)單片機粒子無一例外的使用查詢DMA中斷標志位方式,開啟DMA傳送之后while等待DMA中斷標志,之后逐個對比數(shù)據(jù)驗證。
????????實際應用中往往需要根據(jù)DMA的半中斷等中斷第一時間處理大量連續(xù)數(shù)據(jù)的不間斷傳送功能,因此就需要在中斷回調(diào)函數(shù)中判斷中斷類型以及處理相應的邏輯或重新開啟DMA、清除中斷標志等等。
????????自己嘗試開啟DMA中斷功能,查詢到可用函數(shù)為DMA_ConfigInt,打開DMA的中斷功能及中斷響應程序如下。
????????IIS2的DMA通道為DMA1的CH5。

????????測試了很多次,DMA發(fā)送過程都沒問題,但就是沒法進入中斷,嘗試修改DMA中斷使能程序的開啟位置也沒有效果。難道還需要同時開啟IIS的發(fā)送完成中斷,測試也不行。
????????直接看DMA_CH5->CFG的值,一直是沒有打開中斷使能,根據(jù)數(shù)據(jù)手冊和固件庫源碼計算DMA_CH5的基地址。 結(jié)果是完全一致的,那就是寫如的值不對。
????????開段中斷本質(zhì)上就是寫寄存器的值,只是簡單的位操作,那么結(jié)果只有一個,寫入的值不對。發(fā)送完成中斷就是將1位寫1。

????????而實際上寫入的位根本不對。

????????手動寫一個0x02就正常了,也就是上方的DMA_INT_TXC,顯然下方的一堆命名什么具有迷惑性,這么高的有效位實際上只有中斷標志位和清除中斷標志位用得到,也就是下方這些標志位宏定義。
