时钟控制逻辑给整个芯片提供3种时钟:FCLK用于CPU核;HCLK用于AHB总线设备,比如CPU核、存储器控制器、中断控制器、DMA和USB主机模块等;PCLK用于APB总线上的设备,比如WATCHDOG、IIS、IIC、PWM、MMC、ADC、RTC等等。
S3C2440 CPU核的工作电压为1.2V时,主频可以达到300MHz;工作电压为1.3V时,主频可以达到400MHz。开发板为12MHz,需要通过时钟控制逻辑的PLL提高系统时钟。
S3C2440有两个PLL:MPLL和UPLL。UPLL专用于USB设备,MPLL用于设置FCLK、HCLK、PCLK。
图1 上电后MPLL的启动过程
LocK Time的长短由寄存器LOCKTIME设定。一般采用默认值。
查看芯片手册,MPLL计算公式如下图:
其中 m=MDIV+8, p=PDIV+2, s=SDIV
CLKDIVN寄存器:用于设置FCLK、HCLK、PCLK 三者比例。各种时钟比例对应的寄存器设置如下图所示:
1、 PWM(Pulse Width Modulation)定时器
S3C2440 有5个16位定时器。其中定时器0、1、2、3有PWM功能,即他们都有一个引脚,可以用过定时器来控制引脚周期性的高低电平变化;定时器4没有输出引脚。定时器时钟源为PCLK。内部结构如图所示:
定时器0 、1 共用第一个预分频器,定时器2 、3、 4 共用第2个预分频器。预分频器的输出进入第二级分频器,它有5种频率的时钟:2、4、8、16分频。预分频通过TCFG0设置,分频值(2、4、8、16)通过TCFG1设置。
现在我们可以归结启动一个PWM功能可以分为以下几步:
1、设置TOUT0-TOUT3,这需要配置相关外部引脚为TOUT模式。外部引脚GPB与TOUT为复用引脚
2、设置定时器的输出频率,并且通过TCFG0设置prescaler(预分频)的值。通过TCFG1设置divider的值。
3、具体脉冲宽度要通过TCMPBn与TCNTBn两个寄存器的设置来完成。这步涉及到寄存器内部逻辑的工作流程。如下:
将TCMPBn和TCNTBn装入初始值,在设置TCON寄存器之后会启动定时器,这时将过TCMPBn与TCNTBn两个寄存器的值装入内部寄存器TCMPn和TCNTn中,在定时器n的工作频率下,TCNTn开始减一计数,在TCNTn的值等于TCMPn的值的时候,TOUTn翻转,当TCNTn的值达到0的时候,再次翻转,就这样周而复始,形成了脉冲。并且触发定时器n的中断(如果设置中断的话)。
4、具体控制要交给TCON寄存器。它有以下几个功能:(先看一下数据手册)
1、定时器的开始/停止。TCON[0]
2、手动更新。用于手动更新TCNTBn和TCMPBn,这里要注意的是在开始定时时,一定要把这位清零,否则是不能开启定时器。TCON[1]
3、输出反转。TOUTn不反转(0)/反转(1) TCON[2]
4、自动加载。当定时器计数到0时,TCMPBn和TCNTBn寄存器的值自动装入内部寄存器TCMPn和TCNTn中。TCON[3]
程序分析如下:(这程序是赵春江老师的程序)
上图是频率上升时的大致波形图。由此可以看出高电平在每个周期中维持的时间越来越长,低电平时间越来越短。频率下降时的波形图正好相反。
关键字:系统时钟 定时器 PWM定时器
引用地址:
系统时钟和定时器——PWM定时器
推荐阅读最新更新时间:2024-03-16 15:04
51单片机-定时器中断函数的使用
1.定时器与延时的区别 大家可能会觉得我们用延时函数照样可以实现上一讲代码的实验现象,但是定时器与延时的概念不同,延时函数需要占用CPU的使用权,正在延时的时候其他任务没有CPU的使用权就会拖慢执行效率。 而定时器是不需要占用CPU的使用权的,它是独立自己运行的,就像我们在第一讲的时候提到调好5分钟的闹钟,在这5分钟里我们可以随意执行任务,也可以什么事都不做,但是5分钟过后闹钟响了就要执行相关的任务了。 所以上一讲的代码的实现原理就是每隔51微秒,有个变量会自加1,过了1000个51微秒的时候LED的状态才会改变,可以说CPU在51ms的时间里基本没什么事做,只是在51微秒到了的时候做了“cnt++;”这样简单的任务,然
[单片机]
STM32定时器学习笔记
TIMx是由16位计数器,预分频器,自动装载寄存器构成 计数器:16位(0-65535) 预分频器16位(寄存器控制的计数器) 预分频为1是每一个时间脉冲计数器加1,预分频为2每两个时间脉冲计1. 自动装载寄存器:每次溢出事件的自动装载设置的计数值。 深度剖析:、 计数器的范围(0-65535) 预分频器的范围(0-65535) 由于STM32F103最大支持的频率是72Mhz,所以设置的时候应该注意二者之间的,一般自动装载计数器设置较大若设置10000-1,将预分频书设置为72-1,可以实现1s的计时。可以理解为每72个时钟脉冲计数器加1,计数器加到10000-1的时候定时器产生一次溢出事件。
[单片机]
stm32f103基本定时器,定时器中断服务程序里面输出脉冲波形
main.c /**定时器中断TIM3方式,(当基本定时器不用PWM输出) 设计两路输出两路脉冲波: 周期:100us,占空比80% 周期:100us,占空比20%**/ int main(void) { LED_Init();//pc14引脚初始化 BEEP_Init();/pc13引脚初始化 TIME_Init();//定时器初始化 while(1); } time.c #include stm32f10x.h #include time.h #include delay.h #include beep.h #include stdio.h void TIME_Init(void) {
[单片机]
MSP430F249_TimerA定时器
/****************************************************************** ** ** File : TimerA.c | Timer Interrupt | ** Version : 1.0 ** Description: TimerA Interrupt ** Author : LightWu ** Date : 2013-4-16
[单片机]
stm32F40x系统滴答定时器计算方法及应用
系统滴答定时器计算方法,在这记录一下,防止时间久了遗忘 下图是:时钟树的一小部分:在STM32F4xx中文参考手册.pdf文档第107页可以找到。 框架图: 控制状态寄存器: SysTick- CTRL 自动重装载寄存器:SysTick- LOAD 当前值寄存器: SysTick- VAL 校准值寄存器: SysTick- CALIB 上面框架图是来自于:Cortex M3权威指南(中文).pdf 文档第282-315页 1、换算与时钟源选择 外部时钟源: HCLK = 168MHz / 8 内核时钟: HCLK = 168MHz 这里选择了 168MHz / 8 = 21MHz
[单片机]
系统时钟和定时器——看门狗定时器
看门狗定时器和普通定时器一样。只是普通定时器一般是段一段时间,待时间结束后,进入中断处理程序中,而看门狗在定义的时间结束时,并不希望中断发生,为了防止中断发生,就要在中断发生前,对看门狗定时器某些寄存器进行重新赋值,使它重新开始计数,俗称喂狗操作。 WATCHDOG定时器所涉及的寄存器如下: 1、WTCON寄存器 用于设置预分频系数、选择工作频率、决定是否使能中断、是否启用WATDOG功能(即是否输出复位信号)。 WATDOG定时器工作频率=PCLK/(prescaler value+1)/(divider value) prescaler value=0~255; divider value=16,32,64,128;
[单片机]
利用定时器0写秒表(注释)
利用定时器定时出秒表时间,通过共阴数码管将所定时的时间显示出来。 #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//共阴段码表 uchar code table_SMG = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选 //------------------------变量区----------------
[单片机]
AT89S52的看门狗定时器详情分析
AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。 AT89S52主要性能: 1、与MCS-51单片机产品兼容; 2、8K字节在系统可编程Flash存储器; 3、1000次擦写周期; 4、全静态操作:0Hz-33MHz; 5、三级加密程序存储器; 6、32个可编程I/O口线; 7、
[单片机]