系统设备模块包括状态和控制两种寄存器需要配置。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。 |