各位老师,求教TQ6410板子PWM问题:
想用板子上的S3C64XX_GPF15_PWM_TOUT1做频率发生源。遇到问题,各方面设置感觉都没错误,就是没有波形输出,运行后观察tcnto1的值一直为0,不会变。printk("tcnto1 =%x\n",__raw_readl(S3C2410_TCNTO(1)));
代码如下: /* 读取TCON,TCFG0以及TCFG1寄存器的数值*/
tcon = __raw_readl(S3C2410_TCON);
tcfg1 =__raw_readl(S3C2410_TCFG1);
tcfg0 =__raw_readl(S3C2410_TCFG0);
/*定时器输入频率 = PCLK / ( {预分频数值 + 1} ) / {分割数值}
*{预分频数值} = 1~255,由TCFG0配置寄存器来配置
*{分割数值} = 1, 2, 4, 8, 16, TCLK,由TCFG1配置寄存器来配置
*/
printk("old value tcon=%lx,tcfg1=%lx,tcfg0=%lx\n",tcon,tcfg1,tcfg0);
//配置GPF15为输出
s3c_gpio_cfgpin(S3C64XX_GPF(15),S3C64XX_GPF15_PWM_TOUT1);
//清零TCFG1[4:7]
tcfg1 &= ~S3C2410_TCFG1_MUX1_MASK;
//设置分割值为2
tcfg1 |= S3C2410_TCFG1_MUX1_DIV4;//set [4:7]== 1/2
//清零预分频位TCFG0[0:7]
tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
//设置预分频数值,这里是254
tcfg0 |= (PRESCALER1) << S3C6410_TCFG_PRESCALER0_SHIFT;//66625000/255/2=130637hz
//将配置好的TCON,TCFG0,TCFG1的数值写回寄存器
__raw_writel(tcfg1, S3C2410_TCFG1);
__raw_writel(tcfg0, S3C2410_TCFG0);
printk("ini tcfg0 =%x,write=0xFE;tcfg1=%x,write=0x10\n",__raw_readl(S3C2410_TCFG0),__raw_readl(S3C2410_TCFG1));
//清零TCON[8:10]
tcon &= ~(7<<8); //set bit [8:10] to zero
//设置定时器工作模式为自动加载模式(auto-reload)
tcon |= S3C2410_TCON_T1RELOAD|S3C2410_TCON_T1INVERT;
__raw_writel(tcon, S3C2410_TCON);
//下面是设置计数初值和脉宽初值
tcon = __raw_readl(S3C2410_TCON);
//准备更新TCMPB1数值,先置1 TCON[9]
tcon |= S3C2410_TCON_T1MANUALUPD;
__raw_writel(tcon, S3C2410_TCON);
printk("set tcon =%x,write=0xE00, tcfg0=%x,tcfg1=%x\n",__raw_readl(S3C2410_TCON),__raw_readl(S3C2410_TCFG0),__raw_readl(S3C2410_TCFG1));
//TCNTB1==200,改数值决定了PWM的频率
//tcnt = 1000;
tcmp=Val;
__raw_writel(tcmp, S3C2410_TCNTB(1));
//改变TCMPB1的数值,改数值决定PWM的频宽
tcmp = Val/2;
__raw_writel(tcmp, S3C2410_TCMPB(1));
//下面启动定时器
tcon = __raw_readl(S3C2410_TCON);//读取时钟控制寄存器
tcon &= ~S3C2410_TCON_T1MANUALUPD;//之前已经设置好了TCNTB1 以及 TCMPB1,这里无须任何操作
tcon |= S3C2410_TCON_T1START;//开始位置1,让定时器开始工作
//设置定时器工作模式为自动加载模式(auto-reload)
// tcon |= S3C2410_TCON_T1RELOAD;
__raw_writel(tcon, S3C2410_TCON);//将设置写回寄存器
s3c_gpio_cfgpin(S3C64XX_GPF(15),S3C64XX_GPF15_PWM_TOUT1);
请版主和各位老师帮忙啊,已经几天了,也不知道原因何在?代码也参考了tq6410板子的蜂鸣器驱动程序。
|