zoukankan      html  css  js  c++  java
  • arm9的时钟和定时器

    时钟

    两种能够提供时钟的方式:

    1) 晶振

    2) PLL(也就是锁相环):通用PLL需啊一个晶振,和对晶体特定频率分频或倍频的锁相环电路。

     

     

     

    学习ARM9时钟的四步

    1) 晶振:12MHZ

    2) 有多少个PLL:两个,MPLLUPLL

    3) PLL产生了哪些时钟:

    MPLLFCLK HCLK PCLK

    UPLLUCLK

    4) 时钟都用来做什么了:

    FCLK:用于CPU核。

    HCLK:用于AHB总线设备,如cpu核,存储控制器,中断控制器,DMA等。

    PCLK:用于APB总线设备,如watchdogi2ciis等。

    UCLK:用于USB设备。

     

     

    下面是开机流程图

     

    注:刚开机的时候,cpu核的频率为外部输入时钟的频率。

    初始化流程如下:

    1) 设置LOCKTIME

    2) 设置MPLLCON寄存器,用于设置FCLKfin(外部输入的时钟)的倍数。

    3) 设置CLKDIVN寄存器,用于设置FCLKHCLKPCLK三者的比例。

    4) 设置CAMDIVN寄存器,用于将CPU的总线模式变为异步模式(因为FCLKHCLK不相等,按照芯片手册,应该做这个变化)。

     

    定时器

     

    从上图可以看出,arm9共有516位定时器,时钟源是PCLK

    0号和1号使用一个预分频器,2,3,4号使用一个预分频器。第二级分频器功能输出5种频率的时钟:2分频,4分频,8分频,16分频或者外部时钟TCLK0/TCLK1

    0-3号定时器有一个输出pin,故他们可以输出PWM,而4号定时器不能。

     

    定时器的工作流程如下:

    1) 程序初始的时候,设定TCMPBn(定时器的比较值),TCNTBn(初始计数值)这两个寄存器。

    2) 设置TCON启动寄存器来启动定时器。这时TCMPBnTCNTBn的值被装入其内部寄存器TCMPnTCNTn中。在定时器n的工作频率下,TCNTn开始减一计数,其值可以通过读取TCNTOn得出。

    3) TCNTn的值等于TCMPn的值时,定时器n的输出管脚TOUTn反转。

    4) TCNTn的值等于0时,输出管脚再次反转。

    5) TCNTn的值等于0时,如果TCON寄存器设置定时器n为自动加载,则TCMPBnTCNTBn的值被从新装入其内部寄存器TCMPnTCNTn中。

    寄存器介绍:

    1) TCFG0寄存器:设置预分频。

    2) TCFG1寄存器,设置分频。

    3) TCNTBn寄存器:初始计数值。

    4) TCMPBn寄存器:保存比较值。

    5) TCNTOn寄存器:读此寄存器可知道计数器目前值。

    6) TCON寄存器:控制寄存器





  • 相关阅读:
    Android上传文件到服务器(转)
    Android -- 利用Broadcast开启Service(转)
    【转】实践最有效的提高Android Studio运行、编译速度方案
    Android Studio3.x新的依赖方式(implementation、api、compileOnly)
    Drawable子类之——StateListDrawable (选择器)
    解决android studio引用远程仓库下载慢(JCenter下载慢)
    跳槽季,面试官:能接受加班吗?
    PHP 底层的运行机制与原理
    PHP程序员如何突破成长瓶颈
    VirtualBox启动虚拟机报错0x80004005
  • 原文地址:https://www.cnblogs.com/dchipnau/p/5256032.html
Copyright © 2011-2022 走看看