S5PV210_UM_REV1.1.pdf
sec
tion 07_timer
1 PULSE WIDTH MODULATION TIMER
S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。
S5PV210的PWM定时器的相关I/O:
对于定时器,当然需要对时钟的配置,具体的配置可看帖子或者看datasheet的system章的CLOCK节。在S5PV210的PWM TIMER中有介绍到时钟的相关情况还有计算等:
程序编写思路
配置PWM TIMER,新增timer_init部分,对于interrupt部分的作用还是很重要,是根基。
配置思路:
1. 计算定时器的输入时钟:Timer Input Clock Frequency = PCLK / ( {prescaler value + 1} ) / {divider value}
2. 设置预分频系数
3. 设置TCON
4. 装载TCNTB、TCMPB0
5. 使能中断 TINT_CSTAT
2) OK210 硬件
3)代码如下:
void init_clock(void)
{
CLK_SRC0 = 0x0;// close PLL
APLL_LOCK= 0x0000FFFF;
MPLL_LOCK = 0x0000FFFF;
// set PLL
APLL_CON0 =APLL_VAL;//FOUT= MDIV * FIN / (PDIV*2^(SDIV-1)) = 1000 MHz
MPLL_CON = MPLL_VAL;// FOUT = MDIV*FIN/(PDIV*2^SDIV)=667 MHz
CLK_SRC0= 0x10001111;// FOUT = MDIV*FIN/(PDIV*2^SDIV)=667 MHz
}
void init_timer(unsigned long tcntb,unsigned long tcmpb)
{
TCON = 0;
TCFG0= (TCFG0 & ~0xff00ff)|0x41;//设置预分频系数65
TCFG1 =(TCFG1 & ~(0xf<<0))|0x04;// 16分频 输入时钟= PCLK /(prescaler+ 1) /divider =62500hz
TCNTB0 = tcntb;
TCMPB0 = tcmpb;
TCON |= 1<<1;// 更新TCNTB0 TCMPB0
TCON &= ~(1<<1);// 清手动更新位
TCON |= (1<<0)|(1<<3);// 选择自动加载并启动timer0
//TINT_CSTAT |= 1;
}
static void Delay(long count)
{
volatile int i, j = 0;
volatile static int loop = 800000000/10000;
for(;count > 0;count--)
for(i=0;i < loop; i++) { j++; }
}
void main(void)
{
GPD0CON = (GPD0CON & ~(0xF << 0))|0x2;
MP0_4CON= (MP0_4CON & ~0xFFFF0000) | 0x11110000;
MP0_4DAT|= 0xF0;
init_clock();//初始化时钟
init_timer(62500,40000);//初始wttimer
while(1)
{
}
//TCON = 0;
}