系统设备模块包括状态和控制两种寄存器需要配置。DM6437 设备有4种不同的模块状态—Enable, Disable, SyncReset, or SwRstDisable
1. boot sequence & boot modes
boot过程中,程序和数据段从设备内存中load出来,同时某些设备的内部寄存器由预先设定的值进行编程。每一个设备级的全局reset后boot就被自动启动。有几种内存和寄存器初始化的方法,此即是boot模式。DM6437的boot模式分为三类—Non-Fastboot Modes, Fixed-Multiplier Fastboot Modes, and User-Select Multiplier Fastboot Modes. 具体模式由BOOTCFG寄存器的以下几个位域决定:
BOOTMODE[3:0]、 PCIEN 这两个联合决定boot类型,如I2C BOOT, EMIFA BOOT, HPI BOOT, PCI BOOT >FASTBOOT---->决定是否使能PLL以加速boot进程。
AEM[2:0]、PLLMS[2:0]这两个联合,在FASTBOOT=1时决定PLL倍频器。
有一点要注意:除了EMIFA ROM Direct Boot模式的DSPBOOTADDR=0x42000000外,其他boot模式下缺省的DSPBOOTADDR=0x00100000.且bootloader程序会去禁止所有c64x+的cache,包括L2,L1P,L1D,故在bootloader后,c64x+的所有内存都被配置成RAM,如果需要,则需自己手动配置cache.
由上述三类boot模式,在设备reset后,boot控制器缺省下有两个启动地址DSPBOOTADDR,由boot模式而定,在任何一种boot模式下,c64x+立即从reset状态下释放,并开始从DSPBOOTADDR所给的地址处开始执行。【读取一下DSPBOOTADDR寄存器(0x01C4 0008),看看其中的值】
Internal Bootloader ROM (0x0010 0000): 对大多数boot模式,DSPBOOTADDR缺省下均是内部bootloader ROM地址,使得DSP可以在内部ROM中迅速执行bootloader代码。bootloader code解码从BOOTCFG寄存器中获取到的BOOTMODE,FASTBOOT,PCIEN,default AEM(DAEM)以及PLLMS信息以决定随后恰当的boot操作。【读取下BOOTCFG Register(0x01C4
0014)的值,分析当前采用的是哪种boot模式】
EMIFA Chip Select Space 2 (0x4200 0000): EMIFA ROM Direct Boot是唯一的例外,此时DSPBOOTADDR的地址指向EMIFA Chip Select Space 2,DSP从外部ROM的EMIFA空间开始执行。
注意,某些boot 模式必须配置成FASTBOOT=1,以使对应的外设可以以合理的速率运行,完成外部设备间的通信,比如PCI BOOT。
2. configuration at/after reset
MSTPRI0 Register—0x01C4 003C: 配置C64X+_CFGP master port priority in System Infrastructure.
MSTPRI1 Register—0x01C4 0040: 配置PCIP,HPIP,VLYNQP,EMACP等外设的优先级
HPICTL Register —0x01C4 0030: HPI控制寄存器,修改时需确保HPI FIFO为空且无on-going HPI交互
TIMERCTL Register—0x01C4 0084:对Timer0/Timer2提供额外的控制
EDMATCCFG Register—0x01C4 0088:配置EDMA TC0~TC2三个通道的缺省burist尺寸(DBS). 注意每个传输通道有自己不同的FIFI size,并服务的侧重点不同,如TC2DBS缺省为64byte,FIFO为128bytes,主要服务于PCI或一些杂七杂八的传输;TC1则主要用于高吞吐量的大批量传输,TC0主要用于有严格的时间限制的短burst传输,如McBSP, McASP的传输。
以上寄存器均只能在设备初始化时修改一次,且对应设备需为未使用状态。
3. multiplexed pin configurations
DM6437充分利用多重引脚的寄存器来满足大量外设功能配置的需要,提供极为灵活的终端应用。PINMUX0和PINMUX1两个引脚复合寄存器负责控制所有多重引脚功能,这两个寄存器的某些位域的缺省设置在reset时已经配置好了,但在after reset,可以通过对这两个寄存器进行软件编程来切换某些引脚功能.DM6437的以下设备拥有多重功能引脚:
VPSS (VPFE/VPBE), EMIFA, PCI, HPI, VLYNQ, EMAC,McASP0, McBSP0, McBSP1, PWM0, PWM1, PWM2, Timer0, Timer1, UART0, UART1, HECC, and GPIO.
PINMUX0 Register— 0x01C4 0000
PINMUX1 Register— 0x01C4 0004 (具体位域描述及如何对其编程以选择需要的外设功能110)
4. VPSS_CLKCTL Register— 0x01C4 0044: 通过这个寄存器控制VPSS的时钟