28335通过错误联防模块实现软件保护,禁止PWM信号输出,然后通过按键复位恢复PWM信号输出

一开始程序只有一个产生PWM信号输出的中断,可以通过错误联防模块设置当采集到Fault信号时使PWM输出变为高阻态,但没有办法在异常出现后通过按键恢复PWM信号的输出,于是在程序里加上了错误联防模块的中断,用于实现此功能,关键代码如下:
程序开始前需要声明中断函数:

interrupt void PMW_TZ_ISR(void);

指定PWM_TZ_ISR()函数作为EPWM1_TZINT中断的响应函数:

PieVectTable.EPWM1_TZINT = &PMW_TZ_ISR;

在这里插入图片描述
通过查询中断向量表可知EPWM1_TZINT中断为PIE组2的第一个向量,故激活PIE组2的第一个中断向量,即ePWM_TZINT中断向量:

PieCtrlRegs.PIEIER2.all = M_INT1;

同样有上面的表格可以得出,由于PIE组2的中断向量复用的是CPU的INT2中断,所以还要使能CPU的INT2用来处理EPWM1_TZINT中断:

IER |= M_INT2;

准备工作完成后,即可在中断函数里实现上述的内容,具体为:
首先判断ONE-SHORT标志位EPwm1Regs.TZFLG.bit.OST是否为1,如果为一直为1,则说明故障还没有去除,系统不能继续工作,所以程序就一直在while循环里:

while(EPwm1Regs.TZFLG.bit.OST == 1)
{
   
	...
}

一旦故障解除,用户按下了按键请求继续输出PWM信号,此时在while循环里用if语句判断按键是否被按下(从datasheet可以查到按键S1与GPIO13相连,所以判断按键是否按下,只需检查GPIO13的值是否为0即可,按下了就为0);这里的去抖由于不需要太精确的延时,所以直接用for循环延时,延时时间后面再具体确定:

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值