2440裸板程序之时钟初始化
程序员文章站
2022-06-08 21:30:47
...
LED对应的引脚是GPF4、GPF5、GPF6。
使用的编译器为arm-linux-gcc-4.5.1。
包括四个文件head.S main.c main.lds Makefile。
实验目的:把CPU主频提高到400Mhz。(FCLK:400 HCLK:100 PCLK:50)
2440使用MPLL和UPLL将来自晶振或外部时钟倍频至合适的频率,UPLL输出时钟供USB使用,MPLL输出时钟经过分频供CPU和AHB、APB使用。ARM920T使用FCLK,Memory、LCD、CAM等使用HCLK,PCLK供给WDT、PWM、ADC等使用。
ARM920T有三种工作方式,fastBus mode、synchronous、asynchronous。(异步总线和同步模式介绍 http://blog.csdn.net/qq_33160790/article/details/75668461)快总线时ARM920T运行在HCLK,当FCLK不等于HCLK时,必须切换至asynchronous模式。(通过设置协处理器CP15 http://blog.csdn.net/qq_33160790/article/details/75570898)
相关的寄存器:
只需要把http://blog.csdn.net/qq_33160790/article/details/78915744中的Head.S更新为以下即可。
@clock manegment
.equ MPLLCON ,0x4C000004
.equ CLKDIVN ,0x4C000014
@memory controller
.equ BWSCON ,0x48000000
.equ BANKCON0 ,0x48000004
.equ BANKCON1 ,0x48000008
.equ BANKCON2 ,0x4800000C
.equ BANKCON3 ,0x48000010
.equ BANKCON4 ,0x48000014
.equ BANKCON5 ,0x48000018
.equ BANKCON6 ,0x4800001C
.equ BANKCON7 ,0x48000020
.equ REFRESH ,0x48000024
.equ BANKSIZE ,0x48000028
.equ MRSRB6 ,0x4800002C
.equ MRSRB7 ,0x48000030
.text
.global _start
_start:
ldr r0, =0x53000000 @Close WATCHDOG
mov r1, #0x0
str r1, [r0]
ldr r0,=MPLLCON @Clock Init 400:100:50
ldr r1,=(192<<12)|(4<<4)|(1<<0)
str r1,[r0]
ldr r0,=CLKDIVN
ldr r1,=(2<<1)|(1<<0)
str r1,[r0]
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000//R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
ldr r0,=BWSCON @Init sdram
ldr r1,=0x22011110
str r1,[r0]
ldr r0,= BANKCON6
ldr r1,=0x00018005
str r1,[r0]
ldr r0,=REFRESH
ldr r1,=0x008c07a3
str r1,[r0]
ldr r0,=BANKSIZE
ldr r1,=0x000000b1
str r1,[r0]
ldr r0,=MRSRB6
ldr r1,=0x00000030
str r1,[r0]
mov r1,#0x400 @Relacate
ldr r2,=0x30000000
mov r3,#0x600
1:
ldr r4,[r1],#4
str r4,[r2],#4
cmp r1,r3
bne 1b
ldr sp, =1024*4 @Call C
ldr lr,=loop
@bl main
ldr pc,=0x30000000 @main @0x800
loop:
b loop
实验结果:
led闪烁频率明显加快。
推荐阅读