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) 即可。
版权声明:本文为博主原创文章,转载请注明出处。

STM8 设置系统时钟

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

STM32 系统时钟的配置

1.时钟的驱动 有三种不同的时钟源可被用来驱动系统时钟: ● 内部高速 (HSI)8MHz RC 振荡器时钟 ● 外部高速 (HSE) 振荡器时钟 ● PLL 时钟 ...
  • Flylily9997
  • Flylily9997
  • 2017年04月25日 18:45
  • 567

STM32时钟配置方法详解

一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率...
  • kevinhg
  • kevinhg
  • 2013年12月24日 00:38
  • 98642

STM32F4如何设置系统时钟,非常重要

STM32F4的系统时钟非常重要,涉及到整个系统的运行结果,无论是什么操作,都需要时钟信号,不同型号的微控制器的默认系统时钟配置是不同的,这里,给出两种配置STM32F407系统时钟的方法。 方法一...
  • jdsnpgxj
  • jdsnpgxj
  • 2017年05月15日 14:58
  • 4703

TMS320F28335之系统时钟

TMS320F28335时钟(1) PLL作用就是对外部时钟进行倍频,降低产生高频时钟信号的成本。但是倍频配置的时候,需要在特定的条件下更改,因此需要检测PLL工作的各种状态信号,因此PLL有两个配...
  • hmf1235789
  • hmf1235789
  • 2016年07月12日 14:05
  • 2180

STM32F407系统时钟配置

STM32F407系统时钟配置时钟树方法一,采用官方库提供的配置(这里外部晶振25MHz,系统配置为168MHz) STM32F4启动与STM32F10X不同,时钟已经默认配置好 启动代码,文件:st...
  • u012075442
  • u012075442
  • 2016年12月25日 20:05
  • 4711

STM32系统时钟配置

STM32启动后的第一步对于开发者来说就是系统时钟(RCC)的配置了,STM32系统默认用户外接8M晶振,经过倍频后,系统可以跑到72M。时钟的配置过程或者是初始化过程(当用户不配置时,使用默认外接8...
  • itccccc
  • itccccc
  • 2015年06月09日 17:49
  • 998

单片机系统时钟与实时时钟有什么区别?为什么有的系统时钟晶振使用12M,而实时时钟使用32.768K

1、大多数单片机都只有系统时钟一个。就是CPU的各节拍工作时序的驱动源了。这个频率一般为几MHz。速度比较快,其目的无非是让单片机快点干活。那为啥不是GHz数量呢,这个是集成电路工艺决定的。根据工艺反...
  • u012252959
  • u012252959
  • 2017年06月30日 01:06
  • 992

Linux时钟介绍和修改系统时间

http://www.itpub.net/thread-233738-1-1.html http://blog.itpub.net/post/5700/493847
  • changyanmanman
  • changyanmanman
  • 2013年07月23日 10:20
  • 2483

STM32F103系统时钟配置

STM32F103系统时钟配置时钟树的理解确定分频倍频之后再做 STM32F103时钟树假设外接晶振8MHz,现在需要配置出系统72MHz时,需要 配置代码(外部晶振8MHz配置系统时钟为72MHz)...
  • u012075442
  • u012075442
  • 2016年12月31日 11:17
  • 905
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bootloader---11.设置系统时钟
举报原因:
原因补充:

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