s3c2410初始化(下)
[ 2006-5-10 16:09:00 | By: ly_zw ]
C
|
B
|
具体含义
|
0
|
0
|
无cache,无写缓冲,任何对memory的读写都反映到ASB总线上。对memory的操作过程中CPU需要等待。
|
0
|
1
|
无cache,有写缓冲,读操作直接反映到ASB总线上。写操作CPU将数据写入到写缓冲后继续运行,由写缓冲进行ASB操作。
|
1
|
0
|
有cache,写通模式,读操作首先考虑cache hit;写操作时直接将数据写入写缓冲,如果同时出现cache hit,那么也更新cache。
|
1
|
1
|
有cache,写回模式,读操作首先考虑cache hit;写操作也首先考虑cache,如果hit,则只修改cache,并将cache对应半行的dirty比特置位;如果miss,则写入写缓冲,触发ASB总线操作。
|
虽然MMU只是使用了逻辑地址到物理地址的linear transfer(值不改变),但是由于MMU能够引入cache&write buffer,因此系统性能有很大的提高!
l 配置时钟比、重新设置PLL
2410内部有三个时钟:FCLK、HCLK、PCLK,分别供CPU、AHB总线和
APB总线使用,为了降低功耗,一般都选择周期比为1:2:4的合理配置。同时将PLL配置为运行环境时钟,一般都达到最高202M。
l IO初始化
将IO口配置为对应的功能选项,同时一般会点亮相应的LED灯。
l 中断初始化
2410的内存空间没有remap的机制,应该中断入口时钟位于零地址。因此中
断服务机制可以描述如下:
首先,不管使用那种启动方式,必须确保一下代码段位于内存的0x0地址:
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
除ResetHandler外,其余各项都是由如下的宏定义的一段代码:
HandlerFIQ HANDLER HandleFIQ
MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
sub sp,sp,#4 ;decrement sp(to store jump address)
stmfd sp!,{r0} ;PUSH the work register to stack
ldr r0,=$HandleLabel ;load the address of HandleXXX to r0
ldr r0,[r0] ;load the contents
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
MEND
这段代码的含义是通过堆栈将中断向量表中的内容赋给PC指针(如HandleFIQ是存放着FIQ服务程序入口地址的地址),自然程序就跳到相应的入口地址。
可见,中断向量表存放的是各个中断服务程序的入口地址,它是用来被加载的,而并不是可执行代码。为了统一,所有示例程序都将中断向量表放在0x33ffff00开始的地址,并根据入口地址依次排列。
需要注意的是如果各种模式的服务程序用C语言定义,那么类型必须用__irq定义,以保证能够正确返回。
l 初始化串口
串口统一选用UART0,模式采用115200、1bit STOP、No Parity。