tiny210开发板,PWM定时器TCON寄存器读写不了。为什么?
PWM定时器控制寄存器TCON、TCFG0、TCFG1、TCNPB(2)等配置寄存器为什么读写不了?
使用的读写指令为:__raw_readl 和__raw_writel
TCON地址为0xE2500000,
TCFG0地址为0xE2500004,
TCFG1地址为0xE2500008,
TCNPB(2)地址为0xE2500024,
TCMPB(2)地址为0xE2500028,
通过测试程序执行这一段,超级终端会刷好几次屏幕,报错最后一行内容为:Segmentation fault
请大侠支持!!
附程序如下:
static int pwmSetup(unsigned long pwm_freq)
{
unsigned long tcon, tcfg1, tcfg0;
unsigned long flags,g_tcnt, g_tcmp;
unsigned long tcnt, tcmp;
local_irq_save(flags);
tcnt = 0xffffffff;
tcon = __raw_readl(S5PV210_PA_TIMER);
tcfg1 = __raw_readl(S5PV210_PA_TIMER + 0x0008);
tcfg0 = __raw_readl(S5PV210_PA_TIMER + 0x0004);
printk("tcnt = %lu, tcon = %lu, tcfg1 = %lu, tcfg0 =%lu \n", tcnt, tcon, tcfg1, tcfg0 );
*/
pclk = getpclk();
g_tcnt = pclk/pwm_freq/4 - 1; //pwm_freq:PWM频率(Hz)
g_tcmp = g_tcnt/2;
s3c_gpio_cfgpin(S5PV210_GPD0(2),1);
tcon &= ~(7<<12);
tcon |= S3C2410_TCON_T2RELOAD;
__raw_writel(tcon, S3C2410_TCON);
printk("tcon = %lu, \n",tcon );
tcnt = g_tcnt;
__raw_writel(tcnt, S5PV210_PA_TIMER + 0x0024);
tcmp = g_tcmp;
__raw_writel(tcmp, S5PV210_PA_TIMER + 0x0028);
/* tcon |= S3C2410_TCON_T2MANUALUPD;
__raw_writel(tcon, S3C2410_TCON);
printk("tcon = %lu, \n",tcon );
tcon |= S3C2410_TCON_T2START;
tcon &= ~S3C2410_TCON_T2MANUALUPD;
__raw_writel(tcon, S3C2410_TCON);
printk("tcnt = %lu, tcon = %lu, tcmp = %lu \n", tcnt, tcon, tcmp );*/
pwm_enable(pwm4IC);
local_irq_restore(flags);
return 0;
}