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 (将#修改为@)