局部子系统可以通过软件控制复位状态,一共有六个RM__RSTCTRL寄存器分别控制Always On之外的六个电源域下的局部子系统的复位:
● RM_ACTIVE_RSTCTRL控制DSP的复位;
●RM_DEFAULT_RSTCTRL控制PCIe,MMU和两个M3的复位。
● RM_SGX_RSTCTRL控制SGX的复位。
● RM_IVAHD0_RSTCTRL,RM_IVAHD1_RSTCTRL,RM_IVAHD2_RSTCTRL控制视频协处理的复位。
2.3 时钟管理
时钟经FAPLL(Flying Adder PLL)倍频后输入PRCM,PRCM对时钟的控制管理分为三个方面:
● 模块时钟频率的配置由CM__CLKSEL[CLKSEL]控制;
●时钟域的开关由CM___CLKSTCTRL控制;
● 模块时钟开关由CM___CLKCTRL控制;
由上可以看出系统架构的划分,首先是按电源域,然后按时钟域,最后才是对模块独立的时钟控制。为达到省电的目的,在不能对整个电源域关闭的情况下,要看时钟域是否有模块被使用,如果没有,则可将时钟域关闭,否则,就只能将相应的模块时钟关闭。
以系统中用到EMIF0,但不用EMIF1为例说明如何配置PRCM控制电源域,时钟域,以及模块时钟。
● EMIF属于Default电源域,PM_DEFAULT_PWRSTCTRL寄存器只有一个控制位控制整个default电源域的开关,因为EMIF0要使能,所以这个寄存器必需使能,也就是不能关闭整个default电源域。
WR_MEM_32(PM_DEFAULT_PWRSTCTR, 0x2);
while((RD_MEM_32(PM_DEFAULT_PWRSTCTR) & 0x3000)!=0x3000);
● 配置EMIF的时钟域,EMIF时钟属于L3_FAST_DEFAULT_GCLK时钟域,由寄存器CM_DEFAULT_L3_FAST_CLKSTCTRL 控制,DMM,EMIF_FW也属于这个时钟域,所以这个时钟域需要使能。
WR_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL, 0x2);
while((RD_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL) & 0x300)!=0x300);
● 配置EMIF模块时钟,EMIF0,EMIF1的模块时钟分别由CM_DEFAULT_EMIF_0_CLKCTRL和CM_DEFAULT_EMIF_1_CLKCTRL单独控制。
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)的作用是:
● 提供硬件机制的虚拟地址与物理地址转换;
● 提供硬件机制的内存访问权限授权。
对于支持多进程的HLOS(High Level Operation System),OS利用MMU的地址转换功能可以为每个进程提供独立的地址空间。但对于DSP来说,通常不运行HLOS, 这种功能得不到体现。
在ARM+DSP的双核SOC架构上,所有外设包括内存空间都是共享的,平等访问,这样的架构有很多好处,比如在两个核间共享数据很高效,只需要传递数据的指针,不需要做数据的拷贝;但是带来的问题是需要用户程序保证不会非法改写另一个核的程序数据空间,否则会导致系统崩溃,而且这种问题导致的现象不确定,通常难以精确定位。
ARM上的HLOS如Linux的内存管理,可以保证不会非法访问系统管理之外的空间。在以往的DaVinci系列芯片上DSP没有MMU,需要用户保证DSP程序不会非法访问ARM的程序和数据空间。DM8168的DSP上使用MMU以硬件方式提供了内存访问授权,使内存访问越界问题的定位变得格外容易, MMU的错误状态寄存器会记录越界访问,并且MMU_FAULT_AD会记录最近通过MMU的访问地址。
MMU可以工作在旁通模式,即不对地址做映射,但是在DM816x上GPMC的系统地址空间于0x0地址开始,与DSP的片内地址空间重叠,如果DSP需要访问GPMC,必需要通过MMU将GPMC的空间映射到虚拟空间。
MMU的TLB(Translation Look-aside Buffer)配置分为两种:TWL(Table Walking Logic)模式,和静态TLB模式;TWL模式功能灵活,静态TLB模式转换效率高[5].
通常DSP上不运行HLOS,建议采用静态TLB模式。一张超级映射表可以映射16MByte空间,TLB共可容纳32张表,最多可以映射512MByte空间。由于外设通常由ARM控制,DSP访问部分GPMC和部分DDR空间,以及部分外设,所以512MByte空间能满足绝大多数应用的DSP访问空间需求。目前UBoot中没有DSP MMU的配置,用户在DSP访问片外空间之前完成MMU的配置即可。
4 DDR配置
DM816x的DDR控制器兼容支持DDR2和DDR3;有两个独立的控制器,各有两个片选;每个DDR控制器的地址空间为1GByte;与TI以往处理器不同的是在DM816x上片选与地址空间的映射是可配置的,每个片选上的地址空间大小也是可配置的。所以在DM816x上的DDR配置分为三部分:
●DDR时钟配置
●DDR地址空间映射,
●DDR时序配置
4.1 DDR时钟配置
DDR时钟FAPLL配置计算方法参见前面时钟配置部分。DDR时钟包括两部分:接口时钟,模块功能时钟。
接口时钟即FDDR_CLK由DDR FAPLL的Fvco经DDRPLL_DIV1分频输出。
DDR模块功能时钟FSYSCLK8固定为400MHz以与内部总线L3时钟同步, 无论DDR接口时钟多少,都将SYSCLK8配置为400MHz.
DDR时钟计算公式:
4.2 DDR地址空间映射
DDR空间寻址范围共2GB,最多可分为4段,通过DMM的DMM_LISA_MAP0~3分别配置EMIF0的CS0,CS1和EMIF1的CS0和CS1的首地址映射,及两个DDR控制器之间的寻址方式。两个DDR控制器之间的寻址方式有两种模式:非交织访问,交织访问。
非交织访问,即两个控制器的寻址在各自的映射范围内线性递增。如果希望将ARM与DSP的内存空间在物理上分开,可以选择这种模式。当只使用一个控制器时,只能使用非交织的线性寻址模式。
交织访问,即双通道内存技术,当访问在控制器A上进行时,控制器B为下一次访问做准备,数据访问在两个控制器上交替进行,从而提高DDR吞吐率。支持128byte,256byte,512byte的交织模式。如果要使用交织模式,要保证两个控制器上有对称的物理内存:即两块内存大小一致;在各自的控制器上的地址映射一致。
以两个控制器上的CS0,CS1各接512MByte内存,共2GByte内存为例,非交织线性访问模式的配置为:
/*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);
示意图见4.1.
图4.1 线性访问模式
评论
查看更多