想将汇编操作改成C操作,其他的都差不多,可是时钟配置的这里看不懂,求大仙指点
[ PLL_ON_START
; Added for confirm clock divide. for 2440.
; Setting value Fclk:Hclk:Pclk
1 ldr r0,=CLKDIVN
2 ldr r1,=CLKDIV_VAL ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.
3 str r1,[r0]
;program has not been copied, so use these directly
4 [ CLKDIV_VAL>1 ; means Fclk:Hclk is not 1:1.
5 mrc p15,0,r0,c1,c0,0
6 orr r0,r0,#0xc0000000 ;R1_nF:OR:R1_iA
7 mcr p15,0,r0,c1,c0,0
8 |
9 mrc p15,0,r0,c1,c0,0
10 bic r0,r0,#0xc0000000 ;R1_iA:OR:R1_nF
11 mcr p15,0,r0,c1,c0,0
12 ]
其中CLKDIV_VAL=7,按照书上说的mrc p15,0,r0,c1,c0,0功能为将协处理器c1中内容读入到ARM处理器r0,而mcr p15,0,r0,c1,c0,0功能为将ARM处理器r0中内容读入到协处理器c1,现在有两个问题
①如果用C语言改写,这个协处理器CP15地址怎么定义,貌似s3c2440数据手册也没说啊,
②上述第5-7和9-11为什么内容一样,不是说[ | ]作用相当于if else endif吗,if else 怎么能够去干同样的事呢
|