局部子系統(tǒng)可以通過(guò)軟件控制復(fù)位狀態(tài),一共有六個(gè)RM__RSTCTRL寄存器分別控制Always On之外的六個(gè)電源域下的局部子系統(tǒng)的復(fù)位:
● RM_ACTIVE_RSTCTRL控制DSP的復(fù)位;
●RM_DEFAULT_RSTCTRL控制PCIe,MMU和兩個(gè)M3的復(fù)位。
● RM_SGX_RSTCTRL控制SGX的復(fù)位。
● RM_IVAHD0_RSTCTRL,RM_IVAHD1_RSTCTRL,RM_IVAHD2_RSTCTRL控制視頻協(xié)處理的復(fù)位。
2.3 時(shí)鐘管理
時(shí)鐘經(jīng)FAPLL(Flying Adder PLL)倍頻后輸入PRCM,PRCM對(duì)時(shí)鐘的控制管理分為三個(gè)方面:
● 模塊時(shí)鐘頻率的配置由CM__CLKSEL[CLKSEL]控制;
●時(shí)鐘域的開(kāi)關(guān)由CM___CLKSTCTRL控制;
● 模塊時(shí)鐘開(kāi)關(guān)由CM___CLKCTRL控制;
由上可以看出系統(tǒng)架構(gòu)的劃分,首先是按電源域,然后按時(shí)鐘域,最后才是對(duì)模塊獨(dú)立的時(shí)鐘控制。為達(dá)到省電的目的,在不能對(duì)整個(gè)電源域關(guān)閉的情況下,要看時(shí)鐘域是否有模塊被使用,如果沒(méi)有,則可將時(shí)鐘域關(guān)閉,否則,就只能將相應(yīng)的模塊時(shí)鐘關(guān)閉。
以系統(tǒng)中用到EMIF0,但不用EMIF1為例說(shuō)明如何配置PRCM控制電源域,時(shí)鐘域,以及模塊時(shí)鐘。
● EMIF屬于Default電源域,PM_DEFAULT_PWRSTCTRL寄存器只有一個(gè)控制位控制整個(gè)default電源域的開(kāi)關(guān),因?yàn)镋MIF0要使能,所以這個(gè)寄存器必需使能,也就是不能關(guān)閉整個(gè)default電源域。
WR_MEM_32(PM_DEFAULT_PWRSTCTR, 0x2);
while((RD_MEM_32(PM_DEFAULT_PWRSTCTR) & 0x3000)!=0x3000);
● 配置EMIF的時(shí)鐘域,EMIF時(shí)鐘屬于L3_FAST_DEFAULT_GCLK時(shí)鐘域,由寄存器CM_DEFAULT_L3_FAST_CLKSTCTRL 控制,DMM,EMIF_FW也屬于這個(gè)時(shí)鐘域,所以這個(gè)時(shí)鐘域需要使能。
WR_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL, 0x2);
while((RD_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL) & 0x300)!=0x300);
● 配置EMIF模塊時(shí)鐘,EMIF0,EMIF1的模塊時(shí)鐘分別由CM_DEFAULT_EMIF_0_CLKCTRL和CM_DEFAULT_EMIF_1_CLKCTRL單獨(dú)控制。
WR_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL, 0x2); // Enable EMIF0 Clock
while(RD_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL)!=0x2);
WR_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL, 0x0); // Disable EMIF1 Clock
while((RD_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL) & 0x3000)!=0x3000);
3.DSP MMU配置
DM816x DSP上首次使用了MMU,MMU(Memory Management Unit)的作用是:
● 提供硬件機(jī)制的虛擬地址與物理地址轉(zhuǎn)換;
● 提供硬件機(jī)制的內(nèi)存訪問(wèn)權(quán)限授權(quán)。
對(duì)于支持多進(jìn)程的HLOS(High Level Operation System),OS利用MMU的地址轉(zhuǎn)換功能可以為每個(gè)進(jìn)程提供獨(dú)立的地址空間。但對(duì)于DSP來(lái)說(shuō),通常不運(yùn)行HLOS, 這種功能得不到體現(xiàn)。
在ARM+DSP的雙核SOC架構(gòu)上,所有外設(shè)包括內(nèi)存空間都是共享的,平等訪問(wèn),這樣的架構(gòu)有很多好處,比如在兩個(gè)核間共享數(shù)據(jù)很高效,只需要傳遞數(shù)據(jù)的指針,不需要做數(shù)據(jù)的拷貝;但是帶來(lái)的問(wèn)題是需要用戶程序保證不會(huì)非法改寫(xiě)另一個(gè)核的程序數(shù)據(jù)空間,否則會(huì)導(dǎo)致系統(tǒng)崩潰,而且這種問(wèn)題導(dǎo)致的現(xiàn)象不確定,通常難以精確定位。
ARM上的HLOS如Linux的內(nèi)存管理,可以保證不會(huì)非法訪問(wèn)系統(tǒng)管理之外的空間。在以往的DaVinci系列芯片上DSP沒(méi)有MMU,需要用戶保證DSP程序不會(huì)非法訪問(wèn)ARM的程序和數(shù)據(jù)空間。DM8168的DSP上使用MMU以硬件方式提供了內(nèi)存訪問(wèn)授權(quán),使內(nèi)存訪問(wèn)越界問(wèn)題的定位變得格外容易, MMU的錯(cuò)誤狀態(tài)寄存器會(huì)記錄越界訪問(wèn),并且MMU_FAULT_AD會(huì)記錄最近通過(guò)MMU的訪問(wèn)地址。
MMU可以工作在旁通模式,即不對(duì)地址做映射,但是在DM816x上GPMC的系統(tǒng)地址空間于0x0地址開(kāi)始,與DSP的片內(nèi)地址空間重疊,如果DSP需要訪問(wèn)GPMC,必需要通過(guò)MMU將GPMC的空間映射到虛擬空間。
MMU的TLB(Translation Look-aside Buffer)配置分為兩種:TWL(Table Walking Logic)模式,和靜態(tài)TLB模式;TWL模式功能靈活,靜態(tài)TLB模式轉(zhuǎn)換效率高[5].
通常DSP上不運(yùn)行HLOS,建議采用靜態(tài)TLB模式。一張超級(jí)映射表可以映射16MByte空間,TLB共可容納32張表,最多可以映射512MByte空間。由于外設(shè)通常由ARM控制,DSP訪問(wèn)部分GPMC和部分DDR空間,以及部分外設(shè),所以512MByte空間能滿足絕大多數(shù)應(yīng)用的DSP訪問(wèn)空間需求。目前UBoot中沒(méi)有DSP MMU的配置,用戶在DSP訪問(wèn)片外空間之前完成MMU的配置即可。
4 DDR配置
DM816x的DDR控制器兼容支持DDR2和DDR3;有兩個(gè)獨(dú)立的控制器,各有兩個(gè)片選;每個(gè)DDR控制器的地址空間為1GByte;與TI以往處理器不同的是在DM816x上片選與地址空間的映射是可配置的,每個(gè)片選上的地址空間大小也是可配置的。所以在DM816x上的DDR配置分為三部分:
●DDR時(shí)鐘配置
●DDR地址空間映射,
●DDR時(shí)序配置
4.1 DDR時(shí)鐘配置
DDR時(shí)鐘FAPLL配置計(jì)算方法參見(jiàn)前面時(shí)鐘配置部分。DDR時(shí)鐘包括兩部分:接口時(shí)鐘,模塊功能時(shí)鐘。
接口時(shí)鐘即FDDR_CLK由DDR FAPLL的Fvco經(jīng)DDRPLL_DIV1分頻輸出。
DDR模塊功能時(shí)鐘FSYSCLK8固定為400MHz以與內(nèi)部總線L3時(shí)鐘同步, 無(wú)論DDR接口時(shí)鐘多少,都將SYSCLK8配置為400MHz.
DDR時(shí)鐘計(jì)算公式:

?
4.2 DDR地址空間映射
DDR空間尋址范圍共2GB,最多可分為4段,通過(guò)DMM的DMM_LISA_MAP0~3分別配置EMIF0的CS0,CS1和EMIF1的CS0和CS1的首地址映射,及兩個(gè)DDR控制器之間的尋址方式。兩個(gè)DDR控制器之間的尋址方式有兩種模式:非交織訪問(wèn),交織訪問(wèn)。
非交織訪問(wèn),即兩個(gè)控制器的尋址在各自的映射范圍內(nèi)線性遞增。如果希望將ARM與DSP的內(nèi)存空間在物理上分開(kāi),可以選擇這種模式。當(dāng)只使用一個(gè)控制器時(shí),只能使用非交織的線性尋址模式。
交織訪問(wèn),即雙通道內(nèi)存技術(shù),當(dāng)訪問(wèn)在控制器A上進(jìn)行時(shí),控制器B為下一次訪問(wèn)做準(zhǔn)備,數(shù)據(jù)訪問(wèn)在兩個(gè)控制器上交替進(jìn)行,從而提高DDR吞吐率。支持128byte,256byte,512byte的交織模式。如果要使用交織模式,要保證兩個(gè)控制器上有對(duì)稱的物理內(nèi)存:即兩塊內(nèi)存大小一致;在各自的控制器上的地址映射一致。
以兩個(gè)控制器上的CS0,CS1各接512MByte內(nèi)存,共2GByte內(nèi)存為例,非交織線性訪問(wèn)模式的配置為:
/*Program the DMM to Access EMIF0*/
WR_MEM_32(DMM_LISA_MAP__0, 0x80500100);
WR_MEM_32(DMM_LISA_MAP__1, 0xA0500120);
/*Program the DMM to Access EMIF1*/
WR_MEM_32(DMM_LISA_MAP__2, 0xC0500200);
WR_MEM_32(DMM_LISA_MAP__3, 0xE0500220);
示意圖見(jiàn)4.1.

?
圖4.1 線性訪問(wèn)模式
評(píng)論