如何解决5121 GPT外设上的PWM丢失中断
我正在尝试为用作PWM的MCP5121 GPT外围设备操作定制的Linux驱动程序。驾驶员设置了中断服务,目的是在每次命中时重新加载新的占空比。
我已经使用IPIC强制中断寄存器 SIFCR (0x50)检查了GPT中断向量是否已正确安装和服务。
我运行的是相对较旧的Linux内核,并且pwm设备驱动程序模型不可用。因此,pwm软件的可用性界面与 write 系统调用结合在一起。一个32位的参数编码窗口时间,周期和占空比/ 1000。
在低于测试值的情况下,驱动程序将涉及的寄存器设置如下,我们以IPS时钟运行到66Mhz(15ns):
# echo 0xff0fffff >/dev/mpc5121-pwm
mpc5121-pwm( pwm_open)
mpc5121-pwm( pwm_write)
Mode (0x010) : 0x00000103( 0b0000000100000011 )
pwm.command 0xff0fffff vs 0xff0fffff : Scheduling(4)
Single Shot of 6200(msec) 65104(Hz) duty 783/1000,15 nsec/tick
PWMOffset (0x018) : duty/1000 783 encoded as 0x03210000: 12015(nsec)
Counter (0x014) : Freq 65104(Hz) encoded as 0x00010400: 15360(nsec)
模式(0x010)GPT寄存器的值如下所示,应该启用中断生成,只需将 INTEN 位切换到 TIMER_MS 字段的值为 PWM (0x03)操作值
在通过 read 驱动程序调用在Linux shell上打勾后,我看到以下内容:
# cat /dev/mpc5121-pwm
mpc5121-pwm( pwm_open)
mpc5121-pwm( pwm_read)
Deadline of 6200 msec vs measurement of 0 -> missed (overrun 0)
Mode (0x010) : 0x00000103( 0b0000000100000011 )
Counter (0x014) : 0x00010400
PWM (0x018) : 0x03210000
Status (0x01c) : 0x00006004
IPIC
SIPNR_H (0x008) : 0x00000000
SIMSR_H (0x020) : 0x008011f9
SIPRR_D (0x1ca) : 0x70105770
# cat /dev/mpc5121-pwm
mpc5121-pwm( pwm_open)
mpc5121-pwm( pwm_read)
Deadline of 6200 msec vs measurement of 0 -> missed (overrun 0)
Mode (0x010) : 0x00000103( 0b0000000100000011 )
Counter (0x014) : 0x00010400
PWM (0x018) : 0x03210000
Status (0x01c) : 0x00002004
IPIC
SIPNR_H (0x008) : 0x00000000
SIMSR_H (0x020) : 0x008011f9
SIPRR_D (0x1ca) : 0x70105770
# cat /dev/mpc5121-pwm
mpc5121-pwm( pwm_open)
mpc5121-pwm( pwm_read)
Deadline of 6200 msec vs measurement of 0 -> missed (overrun 0)
Mode (0x010) : 0x00000103( 0b0000000100000011 )
Counter (0x014) : 0x00010400
PWM (0x018) : 0x03210000
Status (0x01c) : 0x00001004
IPIC
SIPNR_H (0x008) : 0x00000000
SIMSR_H (0x020) : 0x008011f9
SIPRR_D (0x1ca) : 0x70105770
在PWM规格和定时器可操作的情况下,寄存器值似乎稳定。但是,奇怪的是,GPT单元没有中断CPU,显然ISR没有以PWM行为进行线程化。
我也使用不带IO硬件的纯Timer操作检查了中断流, TIMER_MS (0b1xx)。 PWM模式似乎正在进行中,状态(0x01c)上的溢出字段正在其0到7(3位)的动态范围内移动。
我应该检查其他SOC零件吗?在哪里可以查看有关此特定操作模式的一些实际示例代码?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。