系统时钟和定时器简单记录

发布者:cxx7848653最新更新时间:2016-07-25 来源: eefocus关键字:系统时钟  定时器 手机看文章 扫描二维码
随时随地手机看文章
    S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号,包括CPU的FCLK,AHB总线外设的HCLK以及APB总线外设的PCLK。S3C2440A 包含两个锁相环(PLL):一个提供给 FCLK、HCLK 和PCLK,另一个专用于USB模块(48MHz)。时钟控制逻辑可以不使用PLL来减慢时钟,并且可以由软件连接或断开各外设模块的时钟,以降低功耗。
    锁相环(PLL):时钟发生器之中作为一个电路的MPLL,参考输入信号的频率和相位同步出一个输出信号。用于生成与输入直流电压成比例的输出频率的压控振荡器(VCO)、用于将输入频率(Fin)按p分频的分频器 P 、用于将VCO输出频率按m分频并输入到相位频率检测器(PFD)中的分频器M用于将VCO输出频率按s分频成为Mpll(输出频率来自MPLL模块)的分频器S、鉴相器、电荷泵以及环路滤波器。
    鉴相器(PFD ):PFD检测 Fref 和Fvco之间的相位差,并在检测到相位差时产生一个控制信号(跟踪信号)。Fref 意思为参考频率。
   
电荷泵(PUMP ) 
        电荷泵将PFD 控制信号转换为一个按比例变化的电压并通过外部滤波器来驱动 VCO。
环路滤波器 
        PFD产生用于电荷泵的控制信号,在每次 Fvco与Fref 比较时可能产生很大的偏差(纹波)。为了避免 VCO过载,使用低通滤波器采样并且滤除控制信号的高频分量。滤波器是一个典型由一个电阻和一个电容组成的单极性RC滤波器。 
压控振荡器(VCO) 
        从环路滤波器的输出电压驱动 VCO,引起其振荡频率线性增大或减小,如同均匀变化电压的功能。当Fvco与Fref 频率和相位都在限期内相匹配时,PFD 停止发送控制信号给电荷泵,并转变为稳定输入电压给环路滤波器。VCO频率保持恒定,PLL 则保持固定为系统时钟。
PLL和时钟产生器的通常条件 (参见文档)
    如何控制锁相环PLL的输出频率呢?MPLLCON(FCLK和Fin的比例关系)和CLKDIVN寄存器(FCLK、HCLK和PCLK之间的比例关系):FCLK=(2*m*Fin)/(p*2^s)
    m=MDIV+8,p=PDIV+2,s=SDIV。(MPLLCON寄存器中)。注意:在系统初始化阶段应该先初始化UPLL(USB时钟),然后等待大约7个nop指令之后,再初始化MPLL.这也就是启动代码时,需要注意的。同时最好按照官方给出的系统时钟配置参考。
 
例子:已知系统外部晶振输入为12MHz,要求FCLK输出为200MHz,经过计算可以得到MDIV=92,PDIV=4,SDIV=1。
M_MDIV EQU 92   //Fin=12.0MHz,Fout=200MHz
M_PDIV EQU 4
M_SDIV EQU 1
ldr r0 ,=MPLLCON
ldr r1 ,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)
str r1,[r0]
下面配置CLKDIVN寄存器,实现FCLK、HCLK、PCLK之间的分频比。其中HDIVN用于控制FCLK和PCLK的比例关系;PDIVN主要用于控制HCLK和PCLK的比例关系。
定时器原理与应用
   S3C2440有5个16位定时器,定时器0、1、2、3被称为PWM定时器。定时器 4 是一个无输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。(时钟源是PCLK)
   定时器原理相同,寄存器TCMPBn和TCNTBn用于缓存定时器n的比较值和初始化值;TCON用于控制定时亲的开启与关闭;可以通过读取寄存器TCNTOn得到定时器的当前计数值。
   TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定时器控制逻辑改变输出电平。因此,比较寄存器决定 PWM 输出的开启时间(或关闭时间)。
   定时器工作原理概述:
   首先、将定时器的比较值和初始值装入寄存器TCMPBn和TCNTBn中。 
   然后、设置定时器控制器TCON启动定时器。此时、TCMPBn和TCNTBn中的值会加载到寄存器TCMPn和TCNRn中。
   此时、定时器会减1计数,即TCNTn进行减1计数,当TCMPn=TCNTn时,TOUTn引脚输出取反。TCNTn继续减1计数。
   当TCNTn的值到达0时,其输出管脚TOUTn再次发转,并触发定时器n的中断。(如果中断使能的话)
   当TCNTn的值到达0时,如果在TCON寄存器中将定时器n设置为“自动取反”,则自动加载初值,下一轮计数流程开始。
可以通过读取TCNTOn读取观察定时器当前的值。PCLK经过两级分频器,输出频率作为定时器的工作频率。
定时器配置寄存器TCFG0用于控制第1级分频器的分频系数,分频器输出频率为:
             PCLK/(prescaler value+1),其中prescaler value=0~255.
定时器配置寄存器TCFG1用于控制多路开关。
   定时器的输入时钟=PCLK/(prescaler value+1)/(divider value)
prescaler value=0~255;divider value=2、4、8、16
例子:设置适当的分频系数,使定时器0的输入时钟为62.5kHz
 假如PCLK为50MHz,则50MHz/62.5kHz=800,可以是第一级分频系数为100,第2级的分频系数为8即可满足要求。
rTCFG0 &= ~(0xFF);
rTCFG0 |=99;
rTCFG1 &=~(0xf);
rTCFG1 |=0x02;
总体思路是先将这几位清零,然后将数据写入这几位。
  
   WATCHDOG定时器可以像16位定时器一样用于产生周期性的中断,也可以用于发出复位信号以重启失常的系统。
关键字:系统时钟  定时器 引用地址:系统时钟和定时器简单记录

上一篇:bootloader和RO,RW,ZI在ARMC语言中
下一篇:ARM_linux开发环境建立(2)

推荐阅读最新更新时间:2024-03-16 15:01

MSP432(Keil5)——4.系统时钟频率修改及查看
本实验将给出系统时钟频率的查看方法,以及修改的方法。真正的想要了解这款单片机的时钟树还得自己去啃手册。 如何修改系统时钟频率 在system_msp4329401r.c文件中,在64~71行处,定义了一个宏,修改这个宏即可。 查看系统时钟频率 sys_fre.c #include sys_fre.h /*在此定义了一些时钟源频率变量,在main函数中声明并调用该函数查看频率*/ /*可通过调试查看*/ extern uint32_t aclk, mclk, smclk, hsmclk, bclk; //得到系统各时钟频率 void Get_Sys_Fre(void) { aclk = CS_getACLK(
[单片机]
MSP432(Keil5)——4.<font color='red'>系统</font><font color='red'>时钟</font>频率修改及查看
基于stm32的通用定时器详解
TM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 时钟源问题: 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在 APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,
[单片机]
基于stm32的通用<font color='red'>定时器</font>详解
STM32——系统滴答定时器
一、SysTick【内核中】 【风格:先描述一下库对寄存器的封装,再举例实现某些功能】 SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号: 15)。在以前,操作系统还有所有使用了时基的系统,都必须一个硬件定时器来产生需要的“滴答”中断,作为整个系统的时基。滴答中断对操作系统尤其重要。例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 Corte
[单片机]
STM32——<font color='red'>系统</font>滴答<font color='red'>定时器</font>
STM32复习笔记(二) 时钟系统
一、时钟系统框图: 二、时钟系统知识总结: 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。   ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。    ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时 钟源,频率范围为4MHz~16MHz。    ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG    ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC    ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。 倍频可选择为2~16倍,但是其输出频
[单片机]
STM32复习笔记(二) <font color='red'>时钟</font><font color='red'>系统</font>
STM32学习笔记3——stm32系统时钟
①HSI 是内部高速时钟, RC 振荡器, 频率为 8MHz。 可作为系统时钟或 PLL 锁相环的输入。 ②HSE 是外部高速时钟。 可通过外接一个频率范围是 4-16MHz 的时钟或者晶振。 HSE 可以作为系统时钟和 PLL 锁相环输入, 还可以经过 128 分频后输入给 RTC。 ③LSI 是内部低速时钟, RC 振荡器, 频率大约为 40K, 可供独立看门狗和 RTC 使用, 并且独立看门狗只能使用 LSI 时钟。 ④LSE 是外部低速时钟,芯片上有相应的外部低速时钟管脚。 通常在此管脚上外接一个 32.768KHz 的晶振, 供 RTC使用。 ⑤PLL 是锁相环, 用于倍频输出。
[单片机]
STM32学习笔记3——stm32<font color='red'>系统</font><font color='red'>时钟</font>树
基于msp430单片机定时器的使用方法解析
通过计算设置周期。 #include void main( void ) { // Stop watchdog timer to prevent TIme out reset WDTCTL = WDTPW + WDTHOLD; //WDTCTL = 0X5A80;关狗 CCTL0 = CCIE; //使能CCR0中断 CCR0 = 4095; //设置周期为0.5s TACTL = TASSEL_2 + ID_2 + MC_1; //时钟源的选择,分频,模式 P2DIR = 0XFF; // P2OUT = 0XFF; _EINT(); LPM0; } #pragma vector = TIMERA0_VECTOR __inter
[单片机]
基于msp430单片机<font color='red'>定时器</font>的使用方法解析
TIM_(二)_高级定时器 (Code)
基本定时器输出PWM 信号 在该例程中,我将PWM 信号输出管脚连接至LED 管脚,以此观察PWM 信号输出是否正常。 注意:若要对LED 管脚进行初始化配置,对应LED 不能设置为熄灭,否则PWM 信号不能点亮LED bsp_tim_advanced.h /** ****************************************************************************** * @file bsp_tim_advanced.h * @author Waao * @version V1.0.0 * @date 30-Jan-2019 * @brief Thi
[单片机]
读入独立键,并点亮相应的LED灯
*************************************************************************** 006.asm 读入独立键盘上的按键,并把相应的LED灯点亮,若一段时间无按键,刚循环点亮LED 接线:P0口接八位LED P2口接八位独立按键 定时器T0计时,中断方式 ***************************************************************************/ ORG 0000H LJMP MAIN ORG 000BH LJMP INT_T0 ORG 0100H MAIN: ;主程序入口 MO
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved