MINI210有几个PWM timer,小弟想设置timer2作为PWM信号输出。
通过调用/plat-samsung/pwm.c的接口函数来对timer2进行config。但是,配置完毕后,GPIOD0_2一直输出高电平,无PWM信号。
PWM的申请,配置TOUT,enable等流程,均已经按流程运行。
在调用pwm_config函数的时候发现,寄存器写入失败。以下贴源码及log:
local_irq_save(flags);
__raw_writel(tcmp, S3C2410_TCMPB(pwm->pwm_id));
__raw_writel(tcnt, S3C2410_TCNTB(pwm->pwm_id));
printk("====TCON_BASE = %d====\n", pwm->tcon_base); LOG:[ 2.399695] ====TCON_BASE = 12====
tcon = __raw_readl(S3C2410_TCON);
printk("====tcon = %lu;====\n",tcon); LOG:[ 2.403059] ====tcon = 0;====
printk("====S3C2410_TCON = %x====\n", S3C2410_TCON); LOG:[ 2.406005] ====S3C2410_TCON = fd300008==== //这个地址应该是虚拟地址,
DS上是E2500028
tcon |= pwm_tcon_manulupdate(pwm);
tcon |= pwm_tcon_autoreload(pwm);
printk("====tcon2 = %x;====\n",tcon); //实际写入值 LOG:[ 2.410164] ====tcon2 = a000;====
__raw_writel(tcon, S3C2410_TCON);
mdelay(500);
ret = __raw_readl(S3C2410_TCON); //再次读出TCON的值进行确认
printk("====ret = %lu====\n", ret); LOG:[ 2.910525] ====ret = 0==== //再次读出仍为0,寄存器控制失败。
至于PWM_Request等函数的功能,小弟在别处已经验证,没有发现申请失败等问题。
经过逐步打印流程点,才发现寄存器的读写像是有问题,写入后再读出的数仍为0。看起来像是无法写入。
请教各位大侠,这个是什么问题?如何正确配置timer2使之能够正确输出PWM信号?