怎么使用PWM模块的的Fault信号禁止六路PWM信号的输出???
uint16_t Fault;
int main(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);
IntMasterEnable();
IntEnable(INT_PWM0_FAULT);
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,FALSE);
Fault=GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2);
while(Fault==1)
{
PWM0faultIntHandler();
}
for(;;) //infinite loop
{}
}
void
PWM0faultIntHandler(void)
{
//清除错误中断
PWMFaultIntClear(PWM0_BASE);
PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
PWMOutputState(PWM0_BASE, PWM_OUT_4_BIT, false);
PWMOutputState(PWM0_BASE, PWM_OUT_5_BIT, false);
}
这样写为什么不可以呢?
Maka Luo:
另外你现在出现的问题主要是什么,描述清楚。
LiangLiang wang1
怎么使用PWM模块的的Fault信号禁止六路PWM信号的输出???
uint16_t Fault;
int main(void){
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);
IntMasterEnable();
IntEnable(INT_PWM0_FAULT);
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,FALSE); Fault=GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2);
PB2.0 作为输出,你怎么读取Fault值。
while(Fault==1) { PWM0faultIntHandler(); }
for(;;) //infinite loop {}
}
voidPWM0faultIntHandler(void){ //清除错误中断 PWMFaultIntClear(PWM0_BASE); PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false); PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false); PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false); PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false); PWMOutputState(PWM0_BASE, PWM_OUT_4_BIT, false); PWMOutputState(PWM0_BASE, PWM_OUT_5_BIT, false);}
这样写为什么不可以呢?
LiangLiang wang1:
回复 Maka Luo:
就算改成用PD2引脚来读取PB2引脚的值还是不行
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2); Fault=GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_2);
现在的问题是Fault的值一直是0,没法进入PWM0faultIntHandler()中断处理函数
LiangLiang wang1:
回复 Maka Luo:
有没有使用PWM0FAULT0的例子?不知道怎么使用它检测故障信号禁止PWM输出!
Maka Luo:
回复 LiangLiang wang1:
GPIO读,怎么能对GPIO进行写操作呢。
PB2信号是什么?
LiangLiang wang1
就算改成用PD2引脚来读取PB2引脚的值还是不行
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2); Fault=GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_2);
现在的问题是Fault的值一直是0,没法进入PWM0faultIntHandler()中断处理函数
LiangLiang wang1:
回复 Maka Luo:
想用PB2来模拟故障信号,PD2为PWM模块的Fault接收信号,将PB2与PD2短接。当PB2为高电平时PD2接收到一个故障信号而进入PWM0FaultIntHandler()中断处理函数,禁止六路PWM输出,起到故障保护的作用。
就是想实现这样的功能,请问该怎么在程序里面进行设置呢?
xyz549040622:
回复 LiangLiang wang1:
你现在的问题是就没有进去中断,好好检查下为什么进不去中断呢?这里有个怀疑的问题,那就是你PB2和PD2短接的问题,你可以试试直接短路PD2为GND和VCC试试。
LiangLiang wang1:
回复 xyz549040622:
如果把PD2配置为PWM0Fault0是不是经过下面三步就可以了?
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_2);
GPIOPinConfigure(GPIO_PD2_M0FAULT0);
然 后设置PWMOutputFaultLevel(PWM0_BASE, PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BITPWM_OUT_3_BIT|
PWM_OUT_4_BIT|PWM_OUT_5_BIT,false)
当PD2接受到高电平时,六路PWM就按指定电平输出,即PWM被锁死,是这样吗?
xyz549040622:
回复 LiangLiang wang1:
最主要的,增加中断向量表的配置,进行中断的配置。IO的配置的话,可以用TI专门的引脚配置工具试试,看看缺少了哪一步的配置。
LiangLiang wang1:
回复 xyz549040622:
有PWMFault信号设置成功的程序吗,贴上来参考一下,谢谢!
xyz549040622:
回复 LiangLiang wang1:
这个模块没有用过。官方也是没有提供例程的,只能自己写了。