《嵌入式硬件(十二):基于IMX6ULL的时钟操作》

一、时钟基本概念

PLL:phase locked loop 倍频

Prescaler:预分频器

PFD:相位分数分频器(可升可降)

7个pll,pll2、pll3一共有8个pfd

二、时钟原理

1.核心版原理图

2.时钟树

2,3,4,为分频因子展开所占二进制位数,值要加一,因为要作为分母使用

参数配置如下

3.ARM PLL配置方法

1)CCSR寄存器

第一二四步

2)ARM_PLL寄存器

第三步

配置pll

3)CCM_CACRR寄存器

第三步

设置分频因子

4.PLL2 配置(528)

5.AHB_CLK_ROOT(绿色的线)

1)CBCMR

2)CBCDR

6.PERCLK_CLK_ROOT

1) CSCMR1(修改一分频)

7.IPG_CLK_ROOT

AHB_CLK_ROOT(绿色的线)设置好后,通过CBCDR进行二分频

三、代码

结构不变

1.bsp

1)clock.c
cs 复制代码
#include "clock.h"
#include "led.h"
#include "MCIMX6Y2.h" 
#include "core_ca7.h"

void init_clock(void)
{
    unsigned int t;
    CCM->CCSR &= ~(1 << 8);
    CCM->CCSR |= (1 << 2);
    t = CCM_ANALOG->PLL_ARM;
    t &= (~(3 << 14));
    t |= ((1 << 13));
    t &= (~(0x7f << 0));
    t |= (88 <<0);
    CCM_ANALOG->PLL_ARM = t;
    CCM->CACRR |= (1 << 0);
    CCM->CCSR &= (~(1 << 2));

    t = CCM_ANALOG->PFD_528;
    t &= (~(0x3f << 0) | (0x3f << 8) | (0x3f << 16) | (0x3f << 24));
    t &= (~((1 << 7) | (1 << 15) | (1 << 23) | (1 <<31)));
    t |= ((27 < 0) | (16 << 8) | (24 << 16) | (32 << 24));
    CCM_ANALOG->PFD_528 = t;

    t = CCM_ANALOG->PFD_480;
    t &= (~(0x3f << 0) | (0x3f << 8) | (0x3f << 16) | (0x3f << 24));
    t &= (~((1 << 7) | (1 << 15) | (1 << 23) | (1 <<31)));
    t |= ((12 < 0) | (16 << 8) | (17 << 16) | (19 << 24));
    CCM_ANALOG->PFD_480 = t;

    t = CCM->CBCMR;
    t &= ~(3 << 18);
    t |= (1 << 18);
    CCM->CBCMR = t;

    CCM->CBCDR &= ~(1 << 25);
    t = CCM->CBCDR;
    t &= ~((7 << 10) | 3 << 8);
    t |= ((2 << 10) | (1 << 8)); 
    CCM->CBCDR = t;

    CCM->CSCMR1 &= ~(1 << 6);
    CCM->CSCMR1 &= ~(0x3f << 0);

    enable_clocks();
}
2)clock.h
cs 复制代码
#ifndef _CLOCK_H_
#define _CLOCK_H_

extern void init_clock(void);

#endif

2.project

1)main.c
cs 复制代码
#include "beep.h"
#include "led.h"
#include "key.h"
#include "MCIMX6Y2.h" 
#include "core_ca7.h"
#include "gpio.h"
#include "interrupt.h"
#include "clock.h"


int main(void)
{
    init_clock();
    system_interrupt_init();
    init_led();
    init_beep();
    //init_key();   
    while(1)
    {
        led_nor();
        delay(0x0FFFFF);
    }
    return 0;
}
2)start.S
cs 复制代码
.global _start


_start:
	ldr pc, =_reset_handler
	ldr pc, =_undefine_handler
	ldr pc, =_svc_handler
	ldr pc, =_prefetch_abort_handler
	ldr pc, =_data_abort_handler
	ldr pc, =_reserved_handler
	ldr pc, =_irq_handler
	ldr pc, =_fiq_handler

_undefine_handler:
	ldr pc, =_undefine_handler

_svc_handler:
	ldr pc, =_svc_handler

_prefetch_abort_handler:
	ldr pc, =_prefetch_abort_handler

_data_abort_handler:
	ldr pc, =_data_abort_handler

_reserved_handler:
	ldr pc, =_reserved_handler

_irq_handler:
 subs lr, lr, #4

    mrc p15, 4, r1, c15, c0, 0
    add r1, r1, #0x2000
    ldr r0, [r1, #0x0C]

    stmfd sp!, {r0-r12, lr}

    stmfd sp!, {r0, r1}

	cps #0x1f
	stmfd sp!, {lr}

    bl system_interrupt_handler

	ldmfd sp!, {lr}
    ldmfd sp!, {r0, r1}
    str r0, [r1, #0x10]


    ldmfd sp!, {r0-r12, pc}^

_fiq_handler:
	ldr pc, =_fiq_handler

_reset_handler:
    //mrs r0, cpsr
    //bic r0, r0, #0x1F
    //orr r0, r0, #0x12   //irq
	//bic r0, r0, #(1 << 7)
    //msr cpsr, r0
	cps #0x12

    ldr sp, =0x86000000	//起始地址80000000,ram大小为512mb(20000000)	80000000~A0000000-1

    //mrs r0, cpsr
    //bic r0, r0, #0x1F
    //orr r0, r0, #0x1F   //system
    //msr cpsr, r0   
	cps #0x1f
	cpsie i

    ldr sp, =0x84000000	//给irq分配的栈指针空间
	
	bl _enable_icahce
	bl _set_vbar


	bl _bss_clear
	b main

_enable_icahce:
	mrc p15, 0, r0, c1, c0, 0
	bic r0, r0, #(1 << 13)
	orr r0, r0, #(1 << 12)
	mcr p15, 0, r0, c1, c0, 0
	bx lr

_set_vbar:
	ldr r0, =0x87800000
	mcr p15, 0, r0, c12, c0, 0
	bx lr


_bss_clear:
	ldr r0, =__bss_start
	ldr r2, =__bss_end
loop:	
	mov r1, #0
	str r1, [r0]
	add r0, r0, #4
	cmp r0, r2
	blt loop
	bx lr

finished:
	b finished
相关推荐
单片机杂货铺12 小时前
【单片机毕业设计选题】基于单片机的智能牛奶保鲜箱设计
人工智能·stm32·单片机·物联网·毕业设计·课程设计
莫浅子1 天前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
恒锐丰科技韩生1 天前
SS8844T|8.2‑40V 四通道独立半桥驱动 ETSSOP28 带散热焊盘 工业自动化机器人专用
嵌入式硬件·硬件工程
Hello_Damon_Nikola1 天前
INMP441从入门到精通
单片机·嵌入式硬件·物联网
恒锐丰小瑞1 天前
率能SS6810H 32V/1A/双通道H桥驱动芯片,PWM电流控制与混合衰减模式,用于POS打印机/安防相机/机器人
嵌入式硬件·数码相机·机器人·硬件工程
恒锐丰科技林技术员1 天前
SS8812T 双通道 H 桥电机驱动芯片应用解析
经验分享·嵌入式硬件·硬件工程
ye150127774551 天前
12V转3V-5V2A电位器无极调光调速WT7027
stm32·单片机·嵌入式硬件
恒锐丰-罗生1 天前
国产电机驱动 SS6635E|宽压大电流单通道 H 桥芯片全面总结
驱动开发·嵌入式硬件·硬件工程
无损检测小白白1 天前
STM32F407 串口3 DMA收发-标准库
stm32·单片机·嵌入式硬件
greatriver0071 天前
e2studio R7FA6M5 卡死 rtc 需要如何配置时钟
单片机·瑞萨单片机