長(zhǎng)文分享丨TI AM5718的PRU開發(fā)詳解
PRUSS簡(jiǎn)介
TI AM5718 系列 OK5718開發(fā)板 有兩個(gè)PRU-ICSS(ProgrammableReal-Time Unit Subsystem and Industrial CommunicationSubsystem),可以獨(dú)立編程實(shí)現(xiàn)一些實(shí)時(shí)性要求高的個(gè)性化需求,實(shí)現(xiàn)產(chǎn)品的差異化。
本文介紹PRU處理器架構(gòu),開發(fā),調(diào)試方法。在系統(tǒng)架構(gòu)上,PRUSS是連接L3_MAIN內(nèi)部總線上的一個(gè)模塊,與系統(tǒng)中其它主模塊如ARM,DSP一樣,可以訪問芯片上的其它外設(shè)。
PRUSS包括兩個(gè)PRU,通過自己的32-bitinterconnect總線與子系統(tǒng)的中斷控制器、指令內(nèi)存、數(shù)據(jù)內(nèi)存、共享內(nèi)存、外設(shè)模塊相連。
PRU不是一個(gè)加速器,它是32-bitLoad/Store RISC架構(gòu)小端處理器,每個(gè)PRU有32個(gè)通用寄存器R0~R31,12Kbyte指令RAM,8Kbyte數(shù)據(jù)RAM和32byte共享RAM。指令RAM是獨(dú)立的,互相之間不能訪問,但數(shù)據(jù)RAM可以通過映射地址互相訪問;專用的21個(gè)輸入引腳和21個(gè)輸出引腳。
設(shè)備中的pru-icss1和pru-icss2集成功能:
?PD_L4PER power domain instantiation
– 2events to each PRU core (events 0 and 1) |
PART 01 ▼ PRU內(nèi)存映射
1.1 指令空間
每個(gè)PRU獨(dú)立的指令空間為0x00000000~0x00002FFF。指令空間由外部主處理ARM/DSP初始化,程序指針PC是32bit字地址,不是字節(jié)地址,如PC=2,代表指令地址0x08。
▲PRU指令空間映射表
1.2 數(shù)據(jù)空間
每個(gè)PRU獨(dú)立的8Kbyte數(shù)據(jù)RAM空間為0x0000~0x01FF,因?yàn)閿?shù)據(jù)RAM連接在PRU子系統(tǒng)的內(nèi)部總線上,所以子系統(tǒng)中的其它主模塊也可以訪問到這塊空間,這段內(nèi)存空間在另一個(gè)PRU上的映射地址為0x2000~0x21FF。位于數(shù)據(jù)空間的還有共用的中斷控制器寄存器;PRU控制/狀態(tài)寄存器等,有各自的地址空間。
▲PRUSS本地?cái)?shù)據(jù)空間內(nèi)存映射表
1.3 全局地址空間映射
PRU_ICSS1局部地址在系統(tǒng)全局地址空間基地址(L3_MAINbase address)為0x4B2A0000,PRU_ICSS2局部地址在系統(tǒng)全局地址空間基地址(L3_MAINbase address)為0x4B28E000。表3表示PRU_ICSS局部地址空間的偏移量(OffsetAddress)。
▲PRUSS全局空間內(nèi)存映射表
PRU可以通過表2的局部地址,也可以通過全局地址訪問PRUSS的數(shù)據(jù)空間,通過全局地址空間訪問要經(jīng)過系統(tǒng)L3_MAINdevice,比通過局部地址空間訪問要慢。
PRUSS外部主模塊如ARM,DSP等可通過系統(tǒng)全局地址空間映射端口+全局地址空間訪問(表3的OffsetAddress + L3_MAIN base address)PRU資源。詳情參考《AM571xTechnical Reference Manual》中30.4.4.2PRU-ICSS Global Memory Map章節(jié)內(nèi)容。
PART 02 ▼ 控制/狀態(tài)寄存器
PRU0的控制/狀態(tài)寄存器地址位于0x00020000~0x0002_3FFF,PRU1的控制/狀態(tài)寄存器地址位于0x0002_4000~0x0002_5FFF,寄存器列表如表4所示,各寄存器的詳細(xì)說明請(qǐng)參閱[1]。
▲PRU控制/狀態(tài)寄存器表
2.1 PRU_CONTROL控制寄存器
外部主模塊ARM/DSP通過控制寄存器可以控制PRU的運(yùn)行狀態(tài)。
▲表5 PRU控制寄存器說明表
2.2 PRU_STATUS狀態(tài)寄存器
狀態(tài)寄存即PRU的程序指針寄存器,與程序的真正運(yùn)行狀態(tài)有一個(gè)周期的延時(shí)。
2.3 PRU_WAKEUP_EN喚醒使能寄存器
在程序執(zhí)行SLP指令進(jìn)入睡眠狀態(tài)之前,使能WAKEUP寄存器相應(yīng)的位,當(dāng)輸入狀態(tài)寄存器R31相應(yīng)的位置1時(shí),即WAKEUP&R31!=0時(shí),喚醒PRU。
2.4 PRU_CYCLE周期計(jì)數(shù)器
當(dāng)CONTROL[ENABLE]=1和CONTROL[COUNTENABLE]=1時(shí),CYCLECNT以PRU時(shí)鐘周期計(jì)數(shù)。當(dāng)CONTROL[ENABLE]=0或CONTROL[COUNTENABLE]=0時(shí),計(jì)數(shù)停止。當(dāng)重新使能時(shí),恢復(fù)繼續(xù)計(jì)數(shù)。
2.5 STALLCNT取指停止計(jì)數(shù)器
當(dāng)CONTROL[ENABLE]=1和CONTROL[COUNTENABLE]=1,且由于某種原因PRU不能取指令時(shí),STALLCNT開始以PRU時(shí)鐘周期計(jì)數(shù)。其值總是小于,或等于CYCLECNT的值。
2.6 PRUSS_DBG_GPREG 0~31調(diào)試通用寄存器
PRUSS_DBG_GPREG0~31與通用寄存器R0~R31對(duì)應(yīng),為外部主模塊提供一個(gè)調(diào)試窗口。當(dāng)PRU停止時(shí),ARM/DSP讀/寫INTGPR0~31直接讀/寫寄存器R0~R31。
PART 03 ▼ PRU通用寄存器
3.1 PRU事件/狀態(tài)寄存器R31
R31是一個(gè)特殊的寄存器,讀與寫操作時(shí)的功能是不一樣的。寫R31寄存器時(shí),寫一個(gè)0到15之間的通道號(hào)到R31_PRU_VEC[3:0],同時(shí)設(shè)置R31_PRU_VEC_VALID,將產(chǎn)生相應(yīng)的中斷輸出事件到中斷控制器的系統(tǒng)事件。兩個(gè)PRU輸出的斷事件相“或”輸出到同一個(gè)中斷控制器系統(tǒng)事件。
讀R31寄存器時(shí),R31[29:0]反映PRU的輸入管腳PRU_R30[29:0]的狀態(tài)。R31[31:30]是映射到中斷控制器的INTR_IN[0]和INTR_IN[1]的狀態(tài)。
3.2 通用輸出寄存器R30
每個(gè)PRU有32個(gè)獨(dú)立的輸出管腳PRU0_R31[31:0]和PRU1_R31[31:0],寫到寄存器R30[31:0]的值直接輸出到PRUn_R31[31:0]管腳。
PART 04▼PRU中斷控制器
PRU中斷控制器支持64個(gè)系統(tǒng)事件,10個(gè)中斷通道,10個(gè)主機(jī)中斷。
▲圖2 PRU中斷控制器框圖
PRU-ICSS1_INTC/PRUSS2_INTC的中斷0~31對(duì)應(yīng)著PRU-ICSS集成模塊產(chǎn)生的事件。系統(tǒng)事件16~31由寫R31產(chǎn)生。
PRU_ICSS系統(tǒng)事件32~55(中斷輸入),可以通過系統(tǒng)配置寄存器PRUSS_MII_RT[0]選擇標(biāo)準(zhǔn)的或者M(jìn)II_RT系統(tǒng)事件,PRUSSEVTSEL=0時(shí)選擇PRU-ICSS專用IRQ_CROSSBAR輸出的事件作為中斷源,PRUSSEVTSEL=1時(shí)選擇MII_RT模塊產(chǎn)生的事件作為中斷源。如下圖所示:
10個(gè)通道可以由任意64個(gè)系統(tǒng)事件映射,可以多個(gè)系統(tǒng)事件映射到一個(gè)通道,但不要將一個(gè)系統(tǒng)事件映射到多個(gè)通道。
設(shè)置PRUSS_INTC_CMR實(shí)現(xiàn)通道和64個(gè)系統(tǒng)事件的映射,PRUSS_INTC_CMRi(i為0~15)寄存器用于實(shí)現(xiàn)i*4到i*4+k號(hào)系統(tǒng)事件映射到相應(yīng)的通道。通過寄存器相應(yīng)位設(shè)置的通道號(hào)映射到相應(yīng)的系統(tǒng)事件。
10個(gè)主機(jī)中斷與10個(gè)通道之間可以任意映射,可以多個(gè)通道映射到一個(gè)主機(jī)中斷,但不要將一個(gè)通道映射到多個(gè)主機(jī)中斷,推薦按x號(hào)通道映射到x號(hào)主機(jī)中斷方式映射。
PRUSS_INTC_HMR寄存器主機(jī)中斷和通道的映射。PRUSS_INTC_HMRi(i為0~3)寄存器用于實(shí)現(xiàn)0-9號(hào)通道映射到0-9號(hào)主機(jī)中斷。通過寄存器相應(yīng)位設(shè)置主機(jī)中斷號(hào),將住中斷號(hào)與通道號(hào)建立映射。
主機(jī)中斷0輸出到R31.b30,主機(jī)中斷1輸出到R31.b31。主機(jī)中斷2~9接輸出PRUSS到ARM和DSP的中斷控制器的系統(tǒng)事件PRUSS_EVTOUT0~7。PRU不支持中斷向量表,產(chǎn)生的0,1主機(jī)中斷可用來喚醒PRU,或?yàn)镻RU軟件提供狀態(tài)查詢。PRU中斷控制器寄存器說明請(qǐng)參考文獻(xiàn)[2]。
看點(diǎn)05▼PRU代碼包
飛凌嵌入式 AM571x 系列 OK5718開發(fā)板 用戶資料中提供了大量的實(shí)例源碼,目錄結(jié)構(gòu)如圖3所示。
關(guān)于例程的編譯和測(cè)試,詳見《OK5718-C_軟件手冊(cè)_》7.4Ti 官方例程編譯及測(cè)試和7.5飛凌例程編譯及測(cè)試。
PART06▼PRU軟件調(diào)試
6.1 調(diào)試工具
調(diào)試工具我們使用TI官方推出的仿真器XDS100V2 ,XDS100V2是一款USBJTAG仿真器。
6.2 硬件連接
步驟一:
將XDS100V2仿真器相關(guān)引腳通過飛凌調(diào)試轉(zhuǎn)接板與0K5718-C開發(fā)板 的JTAG
接口使用排線進(jìn)行連接。連接方式如下:
步驟二:
使用USB數(shù)據(jù)連接線連接XDS100V2到PC機(jī)USB接口。
6.3 軟件調(diào)試
本實(shí)例使用飛凌pru測(cè)試程序PRU_LED0做仿真調(diào)試,將項(xiàng)目導(dǎo)入到ccs后,右擊PRU_LED0,選擇Properties。
選擇使用仿真器和編譯器版本,設(shè)置完成后點(diǎn)擊ok。
右擊PRU_LED0,選擇DebugConfigurations。
選擇PRU_LED0,去掉相應(yīng)的勾選之后如下圖。點(diǎn)擊Apply,最后點(diǎn)Debug。
點(diǎn)擊run菜單,選擇debug。
以下方式也可以進(jìn)入debug。
如果編譯通過的話,會(huì)是這個(gè)樣子。
進(jìn)入仿真后光標(biāo)會(huì)停在主函數(shù)開始處。
下面對(duì)上圖的按鈕做一下說明
按鈕1,運(yùn)行按鈕,全速運(yùn)行。如果為灰色,說明一直在執(zhí)行代碼,也可能是死循環(huán),點(diǎn)暫停鍵看看。
按鈕2,暫停運(yùn)行。
按鈕3,退出仿真。
按鈕4,單步運(yùn)行,遇到子函數(shù)進(jìn)入子函數(shù)。
按鈕5,單步運(yùn)行,遇到函數(shù)會(huì)當(dāng)成語(yǔ)句,直接一步過,不進(jìn)入函數(shù)內(nèi)部。
按鈕6,單步運(yùn)行,如果程序在子函數(shù)中運(yùn)行,點(diǎn)擊此按鈕,跳出子函數(shù)。
按鈕7,匯編單步,遇到子函數(shù),進(jìn)入子函數(shù)。
按鈕8,匯編單步運(yùn)行,遇到函數(shù)會(huì)當(dāng)成語(yǔ)句,直接一步過,不進(jìn)入函數(shù)內(nèi)部。
在軟件調(diào)試過程中,進(jìn)行如下操作可以查看變量,寄存器值。
點(diǎn)擊view菜單,選擇Expressions項(xiàng)。
出現(xiàn)以下界面
▼ 選中要觀察的變量名,右擊選中AddWatch Expression 項(xiàng)。
點(diǎn)擊ok。
Expressions 窗口中加入變量gpio的值。
點(diǎn)擊Addnew expression 輸入R30,在Expressions窗口中顯示R30值。
當(dāng)進(jìn)入調(diào)試界面后,當(dāng)要程序運(yùn)行到某一行時(shí),右擊某一行,點(diǎn)擊runto line 。則運(yùn)行到此行,右擊57行。
運(yùn)行到57行g(shù)pio值發(fā)生變化,轉(zhuǎn)化為16進(jìn)制為0xffffffff。
右擊60行,選擇runto line,R30值發(fā)生變化。
---- END ----
長(zhǎng)按識(shí)別二維碼加關(guān)注 飛凌嵌入式 專注于智能設(shè)備核心平臺(tái)研發(fā)與制造
|
■ 關(guān)注“飛凌嵌入式”公眾號(hào),不定期分享行業(yè)干貨及產(chǎn)品一線資料。 ■ 直接微信回復(fù)產(chǎn)品平臺(tái),如“LS1043A”,即可快速獲取對(duì)應(yīng)產(chǎn)品信息。 ■ 想要了解飛凌更多信息,歡迎與我們聯(lián)系: 銷售工程師:400-699-6866 國(guó)際業(yè)務(wù)部:0312-3102650-854 技術(shù)服務(wù)部:0312-3119192 方案定制類:17713286015 (杜工),18633238067(王工) ■ 實(shí)時(shí)技術(shù)支持: AM 9:00—11:30,PM 13:30—17:00(周一至周五) |
相關(guān)產(chǎn)品 >
-
OK5718-C2開發(fā)板
CortexA15、M4、DSP多核異構(gòu)|飛凌AM5718開發(fā)板基于ARM+DSP雙核架構(gòu) ARM Cortex-A15 AM5718+DSP C66x芯片設(shè)計(jì)開發(fā),ARM Cortex-A15 AM5718+DSP C66x 二合為一開發(fā)平臺(tái)。 AM5718作為多核異構(gòu)開發(fā)板提供 CortexA15、M4、DSP、PRU多核協(xié)同工作,效率更高。 飛凌AM5718開發(fā)板針對(duì)當(dāng)前應(yīng)用的復(fù)雜性,為更好滿足應(yīng)用和媒體的需求,集成眾多資源接口,用ARM進(jìn)行多樣化的應(yīng)用操作,DSP進(jìn)行算法加速,加上其強(qiáng)大的處理能力,滿足不同工作需求,靈活性更高。由于ARM+DSP 的雙核架構(gòu)嵌入式板塊的復(fù)雜行,飛凌提供了一些列資料,如ARM工程師如何使用 DSP 的資源? ARM與DSP如何協(xié)同工作? 了解詳情 -
OKT507-C 開發(fā)板
CPU: T507 工業(yè)級(jí)處理器,超低功耗,10年+生命周期|推薦全志工業(yè)級(jí)T507開發(fā)板系列,飛凌OKT507-C開發(fā)板采用全志T507 四核工業(yè)級(jí)處理器 T507設(shè)計(jì)開發(fā),Cortex-A53架構(gòu),工業(yè)級(jí)寬溫,性能強(qiáng),低功耗,是一款高性價(jià)比的工業(yè)級(jí)產(chǎn)品,提供豐富的開發(fā)設(shè)計(jì)資料,提供產(chǎn)品規(guī)格書,軟硬件手冊(cè)等,全志的T507適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域。
了解詳情 -
OKMX8MP-C開發(fā)板
內(nèi)置NPU、ISP,AI計(jì)算能力高達(dá)2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發(fā)板 基于高性能低功耗工業(yè)級(jí)iMX8MP核心板設(shè)計(jì),支持多種多種高速通信接口。iMX8MP開發(fā)板內(nèi)置NPU,AI計(jì)算能力2.3TOPS,支持4K,支持雙圖像信號(hào)處理器(ISP),是一款支持LinuxQT/android操作系統(tǒng)的iMX8MP開發(fā)板。
了解詳情 -
OK3568-C開發(fā)板
強(qiáng)而穩(wěn),國(guó)產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國(guó)產(chǎn)工業(yè)級(jí)AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計(jì)。RK3568作為國(guó)產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊(cè)_原理圖等,