时钟配置
我们使用s3c2440,主频12M,查看用户手册
通过锁相环抬升到400MHZ,分成三条通路,通过HHDIVN和PDIVN配置频率比,这个频率比配置手册已经给出。
配置MPLL主频400Mhz,
通过这个公式算出MPLL
s、p、m都已经给出,事实上手册已经给出了一些普遍的值。
这里我们选择127-2-1
代码如下
void clock_init(void)//PCLK频率设置50Mhz
{
//设置HDIVN为10
CLKDIVN |= (0x2 << 1);
//设置PDIVN为1
CLKDIVN |= 0x1;
//设置UPLL为400M
UPLLCON |= (0x7f << 12) | (0x10 << 4) | (0x1);
}
pwm配置
我们结合框图和概述来理解
与我们配置stm32时不同,计数缓冲计数器是向下计数的,当到0时,重装载计数值。
当我们配置定时器1预分频值24(+1)后,时钟由50M变为2M,再经过定时器配置寄存器TCFG1选择1/2分频,变为1Mhz,我们的周期就是我们配置的计数缓冲器
占空比为1/2
void pwm_init(void)
{
//配置TOUT0输出端口GPB0
GPBCON &= ~(0x3);
GPBCON |= 0x2;
//配置定时器0的预分频值为24+1
TCFG0 |= 24;
//PWM定时器0选通1/2分频
TCFG1 |= 0x0;
//设置定时器0重装载值与计数比较值
TCNTB0 = 2000;
TCMPB0 = 1000;
//配置定时器0
TCON |= (0x1 << 3);
TCON &= ~(0x1 << 2);
TCON |= (0x1 << 1);
TCON |= 0x1;
TCON &= ~(0x1 << 1);
}