本文主要是關于TMS320C6455的相關介紹,并著重對TMS320C6455外部中斷實現進行了詳盡的闡述。
TMS320C6455
TMS320C6455是TI公司推出的的一款新型高性能單核定點DSP.它是TI公司基于第三代先進VeloviTI VLIW(超長指令字)結構開發出來的新產品,在通信,醫療圖像,無線傳輸方面都可以大有作為.TMS320C6455主頻達到了1GHz,1ns的指令周期.每周期執行8條32位指令,最大峰值速度達到8000MIPS.這意味著.在1G時鐘頻率下,8000個16位“16位的MACs能在1秒鐘發生.TMS320C6455還帶有Seria/RapidlOfr)總線,互連速率每秒高達25Gbits,實現了極高的多處理性能,降低了系統消耗,比此前的外部存儲器接口快12倍,這使得多DSP級連變得十分方便.TMS320CC6455片內是基于C64xx內核的L1/L2存儲結構.片上集成有大量的存儲空間.L1P為32K字節,L1D為32K字節 L2為2M字節、比此前C64x器的存儲器容量件翻一番,其中L1P和L2都可直接映射到存儲空間。
TMS320C6455的外圍總線包括:一個內部集成電路總線(I2C).兩個多路緩沖串口總線fMcBSPs),兩個64位通用定時器(可以配置成4個32位定時器),一個可配置的16位或32位主機接口(HPI6/HPI32).一個PCI總線,一個16管腳的通用輸入/輸出端口(GPIO),一個10/100/1000M 以太網媒體訪問控制器(EMAC)。一個無縫外部存儲器接口(64一bit EMIFA),一個32位DDR2 SDRAM接口。
C6455由于自帶千兆EMAC,外接PHY物理層芯片即可實現一個千兆以太網口。千兆以太網的實現使得C6455嵌入式處理器與臺式機等設備的數據傳輸變得異常方便。TI為C6455等處理器提供了NDK(Network Develop Kit),通過NDK的使用可以簡化C6455中TCP/IP或者UDP等數據傳輸協議的實現。
外部中斷
外部中斷和其他模塊中斷中斷原理一樣,也是先設置中斷級,然后PIE級,最后CPU級,外部中斷的中斷寄存器在中斷頭文件中,中斷觸發設置在中斷C文件中,外部中斷作為一個單獨的模塊使用。28335支持8 個可屏蔽的外部中斷(XINT1–XINT7, XNMI)。XNMI 可設置成INT13 或者CPU 的NMI 中斷。每一個中斷可設置成負邊沿、正邊沿或者正負邊沿觸發,并且設置啟用或禁用(包括XNMI 在內)。XINT1, XINT2,和XNMI 還包含一個16 位自由運行的遞增計數器,當檢測到一個有效的中斷邊沿時,該計數器復位為0。這個計數器可被用于中斷精確計時。與281x 器件不同,28335沒有專用的外部中斷引腳。XINT1,XINT2 和XINT 中斷可設置成GPIO0-GPIO31 引腳的輸入。XINT3–XINT7 中斷可設置成GPIO32-GPIO63 引腳的輸入。外部中斷控制寄存器的位定義如下圖所示。
由上可知,配置外部中斷的步驟為:
1、配置GPIO為外部中斷引腳。
2、設置外部中斷觸發條件。
3、開啟PIE中斷。
4、設置中斷向量表。
5、開啟CPU中斷。
6、編寫中斷函數,清除PIE中斷標志位。
TMS320C6455外部中斷實現
中斷模塊CSL庫使用
上面介紹了很多,其實就是想說清楚C6455的中斷機制。實際使用還是CSL比較方便。
使用CSL配置中斷需要如下幾個步驟:
1. 初始化中斷模塊
2. 使能NMI
3. 全局中斷使能
4. 打開中斷模塊
5. 綁定中斷服務程序
6. 使能相應事件
完整中斷配置例子----把GPIO4事件映射到INT4
CSL_Status intStat;
CSL_IntcContext gpiocontext;
CSL_IntcEventHandlerRecord isr_gpio;
CSL_IntcEventHandlerRecord record[1];
CSL_IntcGlobalEnableState state;
CSL_IntcParam vectId;
CSL_IntcHandle gpioIntcHandle;
CSL_IntcObj gpioIntcObj;
static void HANDLE_INTR4(void *arg)
{
//中斷服務程序
}
/*-----------------------------------------------------------------------------------
*
* 初始化外部中斷4
*
-----------------------------------------------------------------------------------*/
void InitAndEnableIntc4(void)
{
//初始化
gpiocontext.numEvtEntries = 1;
gpiocontext.eventhandlerRecord = record;
intStat = CSL_intcInit(&gpiocontext);
//使能NMI(不可屏蔽中斷)
intStat = CSL_intcGlobalNmiEnable();
//全局中斷使能
intStat = CSL_intcGlobalEnable(&state);
//打開中斷模塊(把GPIO4中斷事件映射到系統中斷INT4)
vectId = CSL_INTC_VECTID_4;
gpioIntcHandle = CSL_intcOpen(&gpioIntcObj, CSL_INTC_EVENTID_GPINT4, &vectId, &intStat);
//綁定中斷服務程序
isr_gpio.handler = (CSL_IntcEventHandler)&HANDLE_INTR4;
CSL_intcPlugEventHandler(gpioIntcHandle, &isr_gpio); //綁定
//使能該事件(開始監聽)
CSL_intcHwControl(gpioIntcHandle, CSL_INTC_CMD_EVTENABLE, NULL);
}
CSL_Status intStat;
CSL_IntcContext gpiocontext;
CSL_IntcEventHandlerRecord isr_gpio;
CSL_IntcEventHandlerRecord record[1];
CSL_IntcGlobalEnableState state;
CSL_IntcParam vectId;
CSL_IntcHandle gpioIntcHandle;
CSL_IntcObj gpioIntcObj;
static void HANDLE_INTR4(void *arg)
{
//中斷服務程序
}
/*-----------------------------------------------------------------------------------
*
* 初始化外部中斷4
*
-----------------------------------------------------------------------------------*/
void InitAndEnableIntc4(void)
{
//初始化
gpiocontext.numEvtEntries = 1;
gpiocontext.eventhandlerRecord = record;
intStat = CSL_intcInit(&gpiocontext);
//使能NMI(不可屏蔽中斷)
intStat = CSL_intcGlobalNmiEnable();
//全局中斷使能
intStat = CSL_intcGlobalEnable(&state);
//打開中斷模塊(把GPIO4中斷事件映射到系統中斷INT4)
vectId = CSL_INTC_VECTID_4;
gpioIntcHandle = CSL_intcOpen(&gpioIntcObj, CSL_INTC_EVENTID_GPINT4, &vectId, &intStat);
//綁定中斷服務程序
isr_gpio.handler = (CSL_IntcEventHandler)&HANDLE_INTR4;
CSL_intcPlugEventHandler(gpioIntcHandle, &isr_gpio); //綁定
//使能該事件(開始監聽)
CSL_intcHwControl(gpioIntcHandle, CSL_INTC_CMD_EVTENABLE, NULL);
}
結語
關于TMS320C6455外部中斷相關介紹就到這了,如有不足之處歡迎指正。
-
dsp
+關注
關注
552文章
7962瀏覽量
348256 -
TMS320C6455
+關注
關注
0文章
12瀏覽量
11442
發布評論請先 登錄
相關推薦
評論