JZ2440系统时钟和定时器

系统时钟

首先看下各个模块与时钟总线的关系:


芯片刚开始上电时, 运行的时钟就等于晶振的时钟Fin, 通过设置MPLL和UPLL可以提升运行频率.

MPLL计算方法:

例: Fout = (2 * (MDIV + 8) * Fin) / ((PDIV + 2) * (2^SDIV))
Fout = 200MHz = (2 * (92 + 8) * 12) / (1 + 2) * (2^2)
MDIV = 92
PDIV = 1
SDIV = 2 
#define S3C2440_MPLL_200MHZ ((0x5c << 12) | (0x01 << 4) | (0x02))
也可以使用官方推荐的值: 


CLKDIVN = 0x03; // FCLK:HCLK:PCLK=4:2:1, HDIVN=1,PDIVN=1

补充: LockTime是指配置了MPLL/UPLL之后时钟需要一段时间来稳定下来, 这段时间就是locktime
PWM定时器

S3C2440A 有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。

以PWM定时器的寄存器说明:

工作原理:

(1)TCMPBn 和 TCNTBn 分别装入定时器 n 的比较值和初始值

(2)设置 TCON 来启动定时器 n. 这时 TCMPBn / TCNTBn 分别自动装入 TCMPn / TCNTn 中, 然后 TCNTn开始递减

(3)当 TCMPn == TCNTn , TIMn输出引脚的电平翻转

(4)当 TCNTn == 0, TIMn 输出引脚再次翻转, 并且申请中断

(5)当 TCNTn == 0, 且 TCON 配置了定时器为自动重装, 则TCMPBn / TCNTBn 自动装入 TCMPn / TCNTn中, 开始新一轮的递减. 


TCFG0: TIMn 的 预分频值

TCFG1: TIMn 的 分频值

例: timer0_clock = 100MHz / (99+1) / 16 = 62500Hz

void timer0_init(void)
{
    TCFG0  = 99;        // 预分频器0 = 99        
    TCFG1  = 0x03;      // 选择16分频
    TCNTB0 = 31250;     // 0.5秒钟触发一次中断
    TCON   |= (1<<1);   // 手动更新
    TCON   = 0x09;      // 自动加载,清“手动更新”位,启动定时器0
}
1
2
3
4
5
6
7
8
看门狗定时器


(1) 首先是两级分频, 和TIM一样, 看门狗模块分为两个模式, 1. 普通定时器 2. 看门狗. 如果当做普通定时器时则应使能中断且禁止看门狗定时器

(2) 在 WTDAT 中装入初值, 因为一旦使能WTD之后, WTDAT的值不能自动加载到WTCNT中, 所以必须一开始就为 WTCNT 装载初值, 开始递减。减到0的时候,需要手动重新赋值。

(3)如果WTD作为普通定时器, WTCNT==0时, 产生中断. 如果作为WTD, WTCNT==0时则产生复位信号
--------------------- 
作者:种瓜大爷 
来源:CSDN 
原文:https://blog.csdn.net/czg13548930186/article/details/75425759 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/yilongdashi/article/details/83374382
今日推荐