bootloader---11.设置系统时钟

原创 2016年08月29日 13:54:15
初始化系统时钟
1. start.S

点击(此处)折叠或打开

  1. .text
  2. .global _start
  3. _start:
  4.     /*disable watchdog*/
  5.     ldr r0, =0x53000000    
  6.     mov r1, #0x0
  7.     str r1, [r0]
  8.     
  9. #define COCKTIME    0x4C000000    
  10. #define MPLLCON        0x4C000004
  11. #define UPLLCON        0x4C000008
  12. #define CLKCON        0x4C00000C
  13. #define CLKSLOW        0x4C000010
  14. #define CLKDIVN     0x4C000014
  15. #define CAMDIVN     0x4C000018
  16.     /*FCLK:HCLK:PCLK=1:4:8*/
  17.     ldr r0, =CLKDIVN
  18.     mov r1, #0x05
  19.     str r1, [r0]

  20.     mrc p15, 0, r0, c1, c0, 0
  21.     orr r0, r0, #0xc0000000
  22.     mcr p15, 0, r0, c1, c0,0

  23.     /*MPLL=(2*m*Fin)/(P*(1<<S)), m=(MDIV+8), p=PDIV+2 s=SDIV*/
  24.     ldr r0, =MPLLCON 
  25.     ldr r1, =((0x5C<<12)|(0x01<<4)|(0x01))
  26.     str r1, [r0]
  27.     
  28.     ldr r0, =0x10000
  29. 1:
  30.     sub r0, r0, #1
  31.     bne 1b

  32.     /*UPLL=(m*Fin)/(P*(1<<S)), m=(MDIV+8), p=(PDIV+2), s=SDIV*/
  33.     ldr r0, =UPLLCON
  34.     ldr r1, =((0x10<<12)|(0x01<<4)|(0x01))
  35.     str r1, [r0]

  36.     ldr r0, =0x10000
  37. 1:
  38.     sub r0, r0, #1
  39.     bne 1b

  40.     /* set up the stack    */
  41.     ldr sp, =1024*4
  42.     bl main

  43. loop:
  44.     b loop

2. main.c 

点击(此处)折叠或打开

  1. #define GPBCON (*(volatile unsigned int *) 0x56000010)
  2. #define GPBDAT (*(volatile unsigned int *) 0x56000014)

  3. static inline void delay (unsigned long loops)
  4. {
  5.     __asm__ volatile ("1:\n"
  6.             "subs %0, %1, #1\n"
  7.             "bne 1b":"=r" (loops):"0" (loops));
  8. }

  9. void main()
  10. {
  11.     int i = 1;
  12.     GPBCON = 0x15400;
  13.     while(1)
  14.     {
  15.         GPBDAT = 0x7FF&(~i<<5);
  16.         i *= 2;
  17.         if(16==i)
  18.             i = 1;
  19.         delay(400000);
  20.     }
  21.     return ;
  22. }
3. Makefile 只需要把原先的OBJS :=  start.o修改为OBJS :=  start.o main.o即可
烧到板子上之后流水灯的闪烁的速度明显变快了好多。
二、
 2.1 s3c2440有两个PLL(MPLL,UPLL):MPLL用于产生FCLK HCLK PCLK,UPLL用于产生USB时钟(48Mhz)
 2.2 FCLK、HCLK、PCLK的关系
     FCLK 用于cpu
     HCLK 用于AHB总线及其外围设备
     PCLK 用于APB总线及其外围设备
 2.3 
    CLKDIVN用于设定FCLK HCLK PCLK三者的比例关系,
    当CAMDIVN=0时, CLKDIVN=0x05,则FCLK:HCLK:PCLK=1:4:8,(因为CAMDIVN默认值为0,所以此处不用设定)
    即,当FCLK=400M时,HCLK=100M PCLK=50M
2.4 计算公式
 Fout=(2 * m * Fin)/(p*2的s次方) m=MDIV+8,p=PDIV+2,s=SDIV 
 MDIV PDIV SDIV 都是通过MPLLCON设定的,Fin是tq2440的晶振频率12MHZ
 例子中: MDIV=0x5C PDIV=0x01 SDIV=0x01
 Fout=(2*(0x5c+8)*12MHZ)/((0x01+2)*2)=400MHZ
2.5
  1.     mrc p15, 0, r0, c1, c0, 0
  2.     orr r0, r0, #0xc0000000
  3.     mcr p15, 0, r0, c1, c0,0
手册上说"If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions",当HDIVN (CLKDIVN的D1-D2)不为零时,需要通过这三条指令将cpu从fast bus mode 切换到asynchronous mode。

注意:如果在编译时出现
warning: function declaration isn't a prototype时,例如 void main(),修改成void main(void) 即可。
版权声明:本文为博主原创文章,转载请注明出处。 举报

相关文章推荐

STM32系统时钟设置,采用外部有源晶振相关配置问题

今天在调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变。程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢。 查...

STM32 系统时钟设置

1、使用3.5.0的库,系统自动设置为外部时钟8M的时钟,72M工作频率,无需再进行配置。 2、若要自定义时钟时不要用SystemInit函数,把启动代码的SystemInit函数注释掉,m...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

STM8 设置系统时钟

硬件平台:stm8s103 编译环境:IAR for stm8#include #include // // Setup the system clock to run at 16MHz usi...
  • zpzyf
  • zpzyf
  • 2016-08-14 22:03
  • 1030

时钟设置

自己总结一下系统时钟的设置,有哪里不对的,说得不全的,请大家指教啊~~ 为什么要设置系统时钟?不是有外部晶振可以给cpu提供工作的频率吗?是这样的,外部晶振提供的频率一般是十几兆,而我们cpu才不同...

STM32时钟设置

MCU需要在时钟的驱动下才能正常工作,STM32F407 的工作主频最高能达到168MHz,而其外接晶振只有4-26MHz,需要通过内部的数字PLL电路进行配置,才能将内核时钟频率提升至168MHz,...

LPC1788系统时钟的设置

LPC1788系统时钟的设置  LPC1788有3个独立的振荡器。他们是主振荡器,内部RC振荡器,RTC振荡器。复位后,LPC1788将用内部的RC振荡器运行,直到被软件切换。这样就能在没有任何外部...
  • joqian
  • joqian
  • 2012-12-17 14:30
  • 2207

S3C2440系统时钟

系统时钟 MINI2440开发板在没有开启时钟前,整个开发板全靠一个12MHz的晶振提供频率来运行,也就是说CPU,内存,UART等需要用到时钟频率的硬件都工作12MHz下,而S3C2440A可以正常...

ARM裸机编程系列----系统时钟与定时器

S5PV210时钟体系 S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解)、显示相关的时钟domain (DSYS)、外围设备的时...

s3c2440系统时钟

1、FLCK、HCLK和PCLK的关系 一般来说,MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振。在正确情况下,系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于外部时...

S5PV210时钟配置案例

#ifndef _CLOCK_H_ #define _CLOCK_H_ /*System Clock Pins*/ #define APLL_LOCK ( *(volatile unsig...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)