Fork me on GitHub

【嵌入式学习分享】3.设置时钟(汇编)

start.s:

.global start start: /* 关看门狗 /     / 往WTCON(0x53000000)写0 */     ldr r0, =0x53000000     mov r1, #0     str r1, [r0]

    /* 设置时钟 /     bl init_clk          /* 设置栈 /     ldr sp, =41024     / 调用c */     bl czp

halt:     b halt

clock.s:

.globa

l init_clk init_clk:     /* 设置 (LOCKTIME) /     ldr r0, =0x4C000000     mov r1, #0x00FFFFFF     / 默认值,UPLL、MPLL都>300us */     str r1, [r0]

    /* 设置分频比 FCLK:HCLK:PCLK=1:4:8 */     ldr r0, =0x4C000014     ldr r1, =0x05     str r1, [r0]

    /* 修改CPU总线模式 异步总线模式 */     mrc p15, 0, r1, c1, c0, 0     orr r1, r1, #0xc0000000     mcr p15, 0, r1, c1, c0, 0

    /* 设置 (MPLLCON), 这里只用到 MPLLCON/     ldr r0, =0x4C000004     ldr r1, =0x5c011 / 400Mhz */     str r1, [r0]          mov pc, lr

led_test.c: void delay() {     volatile int j = 0x10000;     while(j –); }

int czp() {     int i = 0;     volatile unsigned long GPBCON = (volatile unsigned long )0x56000010;     volatile unsigned long GPBDAT = (volatile unsigned long )0x56000014;

    /* GPB5-7 输出 /     GPBCON = 0x15400;     GPBDAT = 0;     while(1)     {         GPBDAT = i;         i += (1 << 5);         if(i >= (16 << 5)) i = 0;         delay();     }     return 0; }

 

频率提升至400MHz,LED闪动的速度果然快了很多。

欢迎赞赏