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

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

????????而實(shí)際上寫入的位根本不對。

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