时钟
时钟和电源管理模块由三部分组成:时钟控制,USB 控制和电源控制。
S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号,包括 CPU 的 FCLK,AHB 总线外设的 HCLK 以及 APB 总线外设的 PCLK。S3C2440A 包含两个锁相环(PLL):一个提供给 FCLK、HCLK 和 PCLK,另一个专用于 USB 模块(48MHz)。
使用外部晶振作为主时钟源
配置 F :H :P = 1 : 4 : 8
FCLK:400
HCLK:100
PCLK:50
配置Fclk为400M
输入12M,输出400M,配置MPLL的 M:127 P:2 S:1
代码
void clk_init(void)
{
//配置 F : H : P =1 : 4 : 8;
CLKDIVN = (2 << 1) | (1 << 0);
//配置Fclk为400M
MPLLCON |=(127 << 12) | (2 << 4) | (1 << 0);
}
PWM:脉宽控制
周期:一次高电平开始到下次高电平开始之间的时间频率: 1/T占空比:高电平占整个周期的时间比
PWM控制蜂鸣器
蜂鸣器驱动电路
接口为GPB0
需要配置GPB0引脚功能为TOUT0
//配置GPB0(蜂鸣器接口)引脚功能为TOUT0
GPBCON &= ~(0x3<<0);
GPBCON |= (0x2<<0);
定时器原理图![](https://i-blog.csdnimg.cn/direct/1b13fc17a559471995dca923a0e1070a.png)
选择定时器0
设置预分频值(TCFG0)
TCFG0 &= ~(0xff<<0);
TCFG0 |= (24<<0); //预分频值24(24+1=25)
设置分频值(TCFG1)
TCFG1 &= ~(0xf<<0); //分频1/2
设置计数器(TCNTB0)
设置比较器(TCMPB0)
TCNTB0 =2000; //配置计数器
TCMPB0 =1000; //配置比较器
设置定时器的控制器
TCON &= ~(1<<4); //关闭死区(死区发生器就是电流放大器)
TCON |= (1<<3); //开启自动重载
TCON |= (1<<2) ; //开启变换极性
TCON |= (1<<1); //更新比较器和计数器
TCON |= (1<<0); //启动定时器
TCON &= ~(1<<1); //清除更新位
代码
void pwm_init(void)
{ //配置GPB0(蜂鸣器接口)引脚功能为TOUT0
GPBCON &= ~(0x3<<0);
GPBCON |= (0x2<<0);
TCFG0 &= ~(0xff<<0);
TCFG0 |= (24<<0); //预分频值24 (24+1=25)
TCFG1 &= ~(0xf<<0); //分频1/2
TCNTB0 =2000; //配置计数器
TCMPB0 =1000; //配置比较器
TCON &= ~(1<<4); //关闭死区(死区发生器就是电流放大器)
TCON |= (1<<3); //开启自动重载
TCON |= (1<<2) ; //开启变换极性(默认起始为低电平,需要修改为起始高电平)
TCON |= (1<<1); //更新比较器和计数器
TCON |= (1<<0); //启动定时器
TCON &= ~(1<<1); //清除更新位
}