日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【DSP开发】C6000非多核非KeyStone系列DSP中断系统

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【DSP开发】C6000非多核非KeyStone系列DSP中断系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C6000系列DSP的中斷系統


上一篇介紹了C6455的GPIO系統,最后把GPIO4配置成了中斷/事件模式,本文將介紹C6455的中斷系統,介紹完基本概念后,給出把GPIO4映射到INT4的代碼。

完成了GPIO和中斷的配置,我們就可以開始著手DSP與FPGA之間的通訊了。廢話不多說,下面開始介紹C6455的中斷系統。


----------------------------------------------------華麗分割------------------------------------------------------


中斷模塊框圖

仔細觀察上圖,可以看出C6455有一下幾種中斷:

  • 1.???Reset
  • 2.???NMI 不可屏蔽中斷
  • 3.???EXCEP 硬件異常
  • 4. ? 12個普通中斷INT[15:4]
我們使用的最多的也就是普通中斷,所以這也是本文的重點。

----------------------------------------------------華麗分割------------------------------------------------------


接下來,沿著INT[15:4]往后退,看到的是Interrupt Selector,它的功能好比一個篩子(shuffle),對所有中斷事件進行選擇性映射。如下圖示:


看了這個圖,我們又不難發現,中斷選擇器是一個128-->12的映射,這也就意味著,有116個系統事件被過濾掉了。
接著往回走,可以看到,中斷選擇器有三個輸入,分別是:

  • RESET
  • Event[3:0]
  • Event[127:4]

??????

RESET不看了,硬件重啟。


EVENT[127:4]是系統事件,這個事件的編號根據芯片的不同而不同,拿6455來說,部分映射情況如下面兩個圖片所示:




不難看出,這些編號都是固定的,基本囊括了芯片上所有模塊的事件。

?

最后,比較特別的是Event[3:0],它是組合事件,通過下圖的介紹應該就一目了然了。




可見,Event0對應 4-31號事件的組合事件,Event2對應32-63號事件的組合事件,以此類推。

?

----------------------------------------------------華麗分割------------------------------------------------------


那么,怎么組合呢?

這就不得不從寄存器開始說起了。首先,先看如下3個寄存器組:




(注:每組都是4個32位寄存器,每一組的EVTxxx0[3:0]都不使用,故這里不涉及到組合事件)


????? 系統事件發生時(124個),它們在事件標志寄存器中(EVTFLAGx)的對應位會被置1,此時可以通過向EVTCLR寄存器中對應位寫入1來清除中斷標志,然后執行中斷服務程序。若不清除,那么相同事件再次發生時會產生問題。故,手動清除中斷標志是必須的!且只能通過向EVTCLR寄存器中寫入1來清除,不能直接向EVTFLAG寄存器寫入0,因為EVTFLAG寄存器是Read Only的。


? ? ? 另外,EVTSET寄存器的存在意義就是我們可以手動產生中斷,這一點可以讓我們測試中斷服務程序的功能。

?


????? 介紹完上面三個基本的寄存器組,我們可以開始討論組合事件的機制了。先看下圖:



可以明顯的看出,124個事件被分成了4組。然后經過兩個寄存器的運算,產生組合事件。


下面介紹EVTMASKMEVT FLAG兩個寄存器組。

  • ? ? ??EVT MASK寄存器組用于決定每一個組中的哪些事件被屏蔽掉。默認情況下,沒有事件被屏蔽(全0)。

  • ? ? ??鑒于最終的組合事件EVTx的發生機制是對Group中所有事件進行或運算,即只要Group中有一個事件發生,就代表組合事件發生。

?

舉個例子:

假如EVTMASK3=0x0FFFFFFF,那么代表只有事件124,125,126,127參與組合。其他事件96-123都被忽略。


  • ? ? ??MEVT FLAG寄存器同EVT FLAG寄存器的值相同,表示事件是否發生。這樣一旦知道了EVTMASK和MEVT FLAG兩個寄存器的值就可以斷定組合事件EVTx(0<=x<=3)是否發生了。


----------------------------------------------------華麗分割-----------------------------------------------------?


通過上面的介紹,應該已經很清楚C6455的中斷機制了,再貼一張圖來鞏固一下上面所說的內容:



說到這里,我們對上圖中紅色框以及它之前的東西了解的很清楚了,下面就是Interrupt Selector的機制了。

其實很簡單,為12個中斷分別配置對應的事件編號即可。只需要3個寄存器就OK啦。


分別是INTMUX1,INTMUX2,INTMUX3。貼一個圖就應該很明了了。



舉個例子:

假設我要讓INT4映射到GPIO4,那么通過查找前面的圖,發現GPINT4的事件編號是55,那么只要把INTMUX1的低7位設置成0x37即可。

?


此外,官方文檔里還說了下面一段話:


可見,INT4優先級最高,INT15優先級最低


----------------------------------------------------華麗分割------------------------------------------------------

中斷模塊CSL庫使用

上面介紹了很多,其實就是想說清楚C6455的中斷機制。實際使用還是CSL比較方便。

????? 使用CSL配置中斷需要如下幾個步驟:

  • 1.???初始化中斷模塊
  • 2.???使能NMI
  • 3.???全局中斷使能
  • 4.???打開中斷模塊
  • 5.???綁定中斷服務程序
  • 6.???使能相應事件

?

完整中斷配置例子----把GPIO4事件映射到INT4


[cpp]?view plaincopy
  1. CSL_Status??????????????????intStat;??
  2. CSL_IntcContext?????????????gpiocontext;??
  3. CSL_IntcEventHandlerRecord??isr_gpio;??
  4. CSL_IntcEventHandlerRecord??record[1];??
  5. CSL_IntcGlobalEnableState???state;??
  6. CSL_IntcParam???????????????vectId;??
  7. CSL_IntcHandle??????????????gpioIntcHandle;??
  8. CSL_IntcObj?????????????????gpioIntcObj;??
  9. ??
  10. ??
  11. static?void?HANDLE_INTR4(void?*arg)??
  12. {??
  13. ????//中斷服務程序??
  14. }??
  15. /*-----------------------------------------------------------------------------------?
  16. ?*??
  17. ?*??????????????????初始化外部中斷4?????
  18. ?*??
  19. ?-----------------------------------------------------------------------------------*/??
  20. void?InitAndEnableIntc4(void)??
  21. {??????
  22. ????//初始化??
  23. ????gpiocontext.numEvtEntries?=?1;??
  24. ????gpiocontext.eventhandlerRecord?=?record;??
  25. ????intStat?=?CSL_intcInit(&gpiocontext);?????
  26. ??????
  27. ????//使能NMI(不可屏蔽中斷)??
  28. ????intStat?=?CSL_intcGlobalNmiEnable();??
  29. ??????
  30. ????//全局中斷使能??
  31. ????intStat?=?CSL_intcGlobalEnable(&state);???
  32. ??????
  33. ????//打開中斷模塊(把GPIO4中斷事件映射到系統中斷INT4)??
  34. ????vectId?=?CSL_INTC_VECTID_4;??
  35. ????gpioIntcHandle?=?CSL_intcOpen(&gpioIntcObj,?CSL_INTC_EVENTID_GPINT4,?&vectId,?&intStat);??????
  36. ????????
  37. ????//綁定中斷服務程序??
  38. ????isr_gpio.handler?=?(CSL_IntcEventHandler)&HANDLE_INTR4;??
  39. ????CSL_intcPlugEventHandler(gpioIntcHandle,?&isr_gpio);?//綁定??
  40. ??????
  41. ????//使能該事件(開始監聽)??
  42. ????CSL_intcHwControl(gpioIntcHandle,?CSL_INTC_CMD_EVTENABLE,?NULL);??
  43. }??




通過本文以及上一篇文章,我們應該對DSP6000系列的GPIO和中斷系統有了一定的了解。(注,本文只是基本的介紹C6000的中斷系統,有不少部分沒有涉及,若要了解更多,請參考TI官方文檔)


接下來將介紹:

  • DSP的EDMA系統與EMIFA接口
  • FPGA的乒乓RAM應用
  • CCIR656視頻標準(PAL)
  • FPGA與DSP實現的視頻采集與傳輸實驗

最后,給出一些資源下載:
  • 1.C6000系列的GPIO與中斷系統筆記(即兩篇文章的PDF版本)
  • 2.C6455CSL庫文檔
  • 3.C6455的GPIO與中斷系統官方文檔

點此下載

轉載于:https://www.cnblogs.com/huty/p/8518522.html

總結

以上是生活随笔為你收集整理的【DSP开发】C6000非多核非KeyStone系列DSP中断系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。