一、概念解析
1、什么是时钟脉冲信号,起什么效果?
时钟脉冲信号时有必定电压承认和必定的时刻距离并接连宣布的脉冲信号。时钟脉冲信号是时序逻辑的根底,它用于决议逻辑单元中的状况何时更新。数字芯片中的很多晶体管都作业在开关状况,它们的导通和关断动作都是依照时钟信号的节奏进行的。也便是说嵌入式系统是依照时钟来组织CPU的使命。
2、时钟脉冲信号的频率是指单位时刻内发生的时钟脉冲个数。
3、怎么发生时钟信号?
时钟信号一般有晶振或晶振与PLL发生。
晶振的包围便是用石英晶体经精细切开磨削并镀上电极焊上引线就做成了。这种晶体假如给它通上电,它就会发生机械振动,其频率和他们的形状,资料,切开方向等密切相关。
咱们石英晶体化学功能十分安稳,热膨胀系数十分小,其振动频率也十分安稳,咱们操控几许尺度能够做到很精细,因而,其谐振频率也很准确。
4、晶振和锁相环(PLL)
晶体振动器时钟的长处:结构简略,噪声低。缺陷:咱们其频率仅由晶体决议,通常是特定晶体被制成客户所需求的振动器,导致生产本钱高、交货周期较长,不利于客户加速产品上市时刻,并且难以获得非标准的频率。
PLL(锁相环)合成器是一种更为杂乱的系统时钟源。通用的PLL合成器需求一个外部晶体并包括一个能够对晶体的特定频率加倍或分频的集成锁相环(PLL)电路。
5、信号发生比照
5.1、关于特定的时钟频率,选用PLL合成器能够运用较廉价以及较低频率晶振来替代贵重的高频晶振;
5.2、关于需求多个时钟频率的系统,选用PLL合成器经过分频即可完成,而此刻选用晶振模块则需求多个不同频率的晶振。
因而相关于晶体振动器模块,经过PLL合成器供给准确时钟具有本钱更低、占板面积更小等一系列长处。
二、时钟系统
学习时钟系统学什么
1、晶振频率 2、PLL 3、PLL发生了哪些时钟 4、发生的时钟是供给给谁的
2440:
1、12MHZ晶振
2、MPLL、UPLL
3、MPLL(FCLK,HCLK,PCLK)
UPLL(UCLK)
4、
时钟 | 运用场合 | 运用举例 |
FCLK | 处理器 | ARM9 |
HCLK | AHB BUS | LCD DMA |
PCLK | APB BUS | UART GPIO |
UCLK | USB | USB主从口 |
AHB是高功能模块之间衔接总线
APB是低带宽的周边外设之间的衔接总线
DMA的概念:DMA(Direct memory access)是在专门的硬件( DMA)操控下,完成高速外设和主存储器之间主动成批交流数据尽量削减CPU干涉的输入/输出操作方法。
6410:
1、12MHZ
2、APLL、MPLL、EPLL
3、APLL(ARMCLK) MPLL(HCLK PCLK) EPLL(SCLK)
4、
时钟 | 运用场合 | 运用举例 |
ARMCLK | ARM | ARM11 |
HCLK | AHB BUS | LCD DMA |
PCLK | APB BUS | UART GPIO |
SCLK | 特殊情况 | USB主从口 |
210:
1、24MHZ
2、4个PLL:APLL,MPLL,EPLL,VPLL
3、210与2440和6410都有所不同:
时钟系统 | 所属时钟 | 运用举例 | 锁相环 |
MSYS | ARMCLK HCLK_MSYS PCLK_MSYS |
ARM核
内存操控器 中止
|
APLL |
DSYS | HCLK_DSYS PCLK_DSYS | 显现相关部件,如FIMC | MPLL |
PSYS |
HCLK_PSYS
CLK_DPM
|
外设,如Uart,i2C | EPLL |
视频相关 | VPLL |
三、思想导图的规划
软件规划辅导:
1、时钟初始化流程
从上图的时序咱们能够看到
1、上电几毫秒后,晶振输出安稳,FCLK=晶振频率,nRESET信号康复高电平后,CPU开端碑文指令。
2、咱们的程序最初发动MPLL,设置MPLL的寄存器
3、在设置MPLL的寄存器后,需求等候一段时刻(Lock Time),MPLL的输出才安稳。在这段时刻(Lock Time)内,FCLK停振,CPU停止作业。Lock Time的长短由寄存器LOCKTIME设定。
4、Lock Time之后,MPLL输出正常,CPU作业在新的FCLK下。
时钟初始化流程(芯片手册):
1、设置Lock Time
2、设置分频系数
3、设置CpU到反常形式
4、设置FCLK
开端写代码
2440:
1、在芯片手册查找Locktime -register,一般咱们都运用默认值,所以能够疏忽不做
2、设置分频系数
参阅Uboot中的分频系数为FCLK:HCLK:PCLK = 1:4:8
时钟初始化程序要坐落led点亮程序之前,这样便于调试。
#define CLKDIVN 0x4c0000004
clock_init:
ldr r0, =CLKDIVN
mov r1, 0x5
str r1, [r0]
3、设置CPU到异步作业形式
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, 0xc0000000
mcr p15, 0, r0, c1, c0, 0
4、设置FCLK
#define MPLLCON 0x4c000004
#define MPLL_405MHZ ((127<<12) | (2<<4) | (1<<0))
ldr r0, =MPLLCON
mov r1, =MPLL_405MHZ
str r1, [r0]
mov pc, lr
6410:
1、相同,Lock time不变,坚持本来值。
2、设置分频系数
ARMCLK = APLLout/(DIVARM+1)HCLKX2 = MPLLout/(DIVHCLKX2+1)HCLK = HCLKX2/(DIVHCLK+1)PCLK = HCLKX2/(DIVPCLK+1)
参阅Uboot能够设置DIVpclk = 3 DIVhclk = 1 DIVhclkX2 = 1 DIVARM = 0
代码如下:
#define CLK_DIV0 0x7e00f020#define DIV_VAL ((0x0<<0)|(0x1<<9)|(0x1<<8)|(0x3<<12))init_clock:ldr r0, =CLK_DIV0ldr r1, = DIV_VALstr r1, [r0]
3、设置CPU作业在反常形式下
#define OTHERS 0x7e00f900ldr r0, =OTHERSldr r1, [r0]bic r1, r1, #0xc0str r1, [r0]
4、设置FCLK为533MHZ
#define MPLL_CON, 0x7e00f010#define APLL_CON, 0x7e00f00c#define PLL_Val ((1<<31)|(266<<16)|(3<<8)|(1<<0))ldr r0, =APLL_CONldr r1, =PLL_Valstr r1, [r0]ldr r0, =MPLL_CONldr r1, =PLL_Valstr r1, [r0]
5、6410还有个特殊性便是设置一下选择器CLK_SRC设置PLL发生时钟为时钟源。
#define CLK_SRC 0x7e00f01cldr r0, =CLK_SRCmov r1, #0x3str r1, [r0]
然后运转后下载到开发板运转
全代码为:
.text.global _start_start:b resetldr pc, _undefined_instructionldr pc, _software_interruptldr pc, _prefetch_abortldr pc, _data_abortldr pc, _not_usedldr pc, _irqldr pc, _fiq_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiqundefined_instruction:nopsoftware_interrupt:nopprefetch_abort:nopdata_abort:nopnot_used:nopirq:nopfiq:nopreset:bl set_peri_portbl set_svcbl disable_watchdogbl disable_interruptbl disable_mmubl init_clockbl light_ledset_peri_port:ldr r0, =0x70000000orr r0, r0, #0x13mcr p15,0,r0,c15,c2,4mov pc, lr set_svc:mrs r0, cpsrbic r0, r0, #0x1forr r0, r0, #0xd3msr cpsr, r0mov pc, lr#define pWTCON 0x7E004000disable_watchdog:ldr r0, =pWTCON /*mov的操作数最多为8位*/mov r1, #0x0str r1, [r0]mov pc, lrdisable_interrupt:mvn r1, #0x0ldr r0, =0x71200014str r1, [r0]ldr r0, =0x71300014str r1, [r0]mov pc, lrdisable_mmu:mcr p15, 0, r0, c7, c7, 0mrc p15, 0, r0, c1, c0, 0bic r0, r0, #0x00000007mcr p15, 0, r0, c1, c0, 0mov pc, lr #define CLK_DIV0 0x7e00f020#define DIV_VAL ((0x0<<0)|(0x1<<9)|(0x1<<8)|(0x3<<12))#define OTHERS 0x7e00f900#define MPLL_CON 0x7e00f010#define APLL_CON 0x7e00f00c#define PLL_Val ((1<<31)|(266<<16)|(3<<8)|(1<<0))#define CLK_SRC 0x7e00f01cinit_clock:ldr r0, =CLK_DIV0ldr r1, =DIV_VALstr r1, [r0]ldr r0, =OTHERSldr r1, [r0]bic r1, r1, #0xc0str r1, [r0]ldr r0, =APLL_CONldr r1, =PLL_Valstr r1, [r0]ldr r0, =MPLL_CONldr r1, =PLL_Valstr r1, [r0]ldr r0, =CLK_SRCmov r1, #0x3str r1, [r0]mov pc, lr #define GPKCON0 0x7f008800#define GPKDAT 0x7f008808light_led:ldr r0, =GPKCON0ldr r1, =0x11110000str r1, [r0]ldr r0, =GPKDATldr r1, =0xa0str r1, [r0]mov pc, lr