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