S5P4418裸机开发(五):时钟

这里写图片描述

  • 4个PLL,生成一些列时钟

这里写图片描述

  • PLL计算公式 :PLLx = (m * Fin) / (p * 2^s) 文档上写的有点问题;
  • m = MDIV; p = PDIV; s = SDIV;

这里写图片描述

  • 修改PLL的值后,PWRMODE.CHGPLL必须置‘1’
  • 还有CLKMODEREG0.UPDATE_PLL[x]也要置‘1’

这里写图片描述
这里写图片描述

寄存器
功能
CLKMODEREG0 更新PLL[x]的PMS值
CLKMODEREG1保留
PLLSETREG0PLL0设置寄存器
[30] PLL扩频使能,忽略non-dithered PLL
[29] 电源
[28] 旁路PLL输出
[27:24] 预分频
[23:0] PMS
PLLSETREG1PLL1
PLLSETREG2PLL2
PLLSETREG3PLL3
CLKDIVREG0FCLK/HCLK设置寄存器; FCLK:HCLK = 4:1
[14:9] HCLK分频系数
[8:3] FCLK分频系数
[2:0] 选择时钟源PLL[x]
CLKDIVREG1BCLK/PCLK设置寄存器; BCLK:PCLK = 2:1
CLKDIVREG2MDCLK/MCLK/MBCLK/MPCLK设置寄存器;
MDCLK:MCLK:MBCLK:MPCLK = 4:4:2:1
CLKDIVREG3GR3DBCLK/GR3DPCLK设置寄存器;和GPU有关
CLKDIVREG4MPGBCLK/MPGPCLK设置寄存器;和MFC有关
PLLSETREGx_SSCG扩频
GPIOWAKEUPRISEENB上升沿检测使能寄存器
GPIOWAKEUPFALLENB下降沿检测使能寄存器
GPIORSTENBGPIO重置使能寄存器
GPIOWKENBGPIO唤醒使能寄存器
INTENBGPIO中断使能寄存器
GPIOINTPENDGPIO中断挂起寄存器
RESETSTATUS复位相关寄存器
The priority of Reset - POR > GPIO > Watchdog > Software
INTENABLE中断使能寄存器
INTPEND中断挂起寄存器
PWRCONT电源管理控制寄存器
[4] 外部晶振电源模式选择
[3] 软件复位使能
[1] RTC唤醒使能
PWRMODE电源管理模式寄存器
[15] R:PLL是否稳定 W:PLL是否改变
PADSTRENGTHGPIOALSCRATCH REGISTER
SYSRSTCONFIGSYSTEM RESET COFIGURATION REGISTER
时钟配置

SD卡烧的是友善的安卓镜像,2nboot部分帮我们做了PLL的配置,打印出来看看;
这里写图片描述

  • PLL0:550MHz ----- PMS:3 275 2
  • PLL1:800MHz ----- PMS:3 200 1
  • PLL2:800MHz ----- PMS:3 200 1
  • PLL3:612MHz ----- PMS:2 102 1
  • FCLK:为CPU核提供时钟;
    • 手册推荐使用PLL0来生成FCLK,友善使用的是PLL1;
    • FCLK分频系数是1,即不分频,FCLK = 800MHz;
  • HCLK:分频系数4,HCLK = 200MHz;
  • BCLK由PLL2生成,PCLK由BCLK分频后得到,上图中PCLK的分频系数是2,这个分频是在BCLK的基础上再进行分频,所以BCLK : PCLK = 2 : 1。PCLK = 200MHz。HCLK同理。
修改CPU运行速度

LED点灯的基础上修改,CPU默认频率是800MHz,我们让灯闪烁的慢一些;
两种方式;

  • 修改PMS值,将PLL的频率降下来;

    • 相关寄存器PLLSETREG1, PWRMODE, CLKMODEREG0
    void chg_pll(){
    
        PLLSETREG1 &= ~((0x3F << 18) | (0x3FF << 8) | (0xFF << 0));
        PLLSETREG1 |= (3 << 18) | (96 << 8) | (4 << 0);    // 修改PMS
    
    
        PWRMODE |= (1 << 15);           //写1表示要修改PLL值
        CLKMODEREG0 |= (1 << 1);        // Update P,M,S values for PLL[1]
        while((PWRMODE >> 15) & 1);     //等待PLL稳定
    }
    
  • 修改FCLK分频系数,注意FCLK和HCLK的比例;

    • 相关寄存器CLKDIVREG0, PWRMODE.chgpll,修改分频系数也要将PWRMODE.chgpll置位,要不然不起效果,或者着说只要动频率都要改这一位;
    void chg_div(){
        CLKDIVREG0 &= ~((0x3F << 3)  | (0x3F << 9));        // (0x7 << 0) | 
        CLKDIVREG0 |= (((1 - 1) << 3) | ((4 - 1) << 9));    // FCLK = 800 / 10;  HCLK = 800 / 40;
        PWRMODE |= (1 << 15); 
    
        while((PWRMODE >> 15) & 1);
    

}
```

工程文件:
码云_3_chgpll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值