请教论坛里的前辈
这是我写的一个pwm捕获中断程序,四轴遥控解码用的
我配置的系统时钟80M,定时器配置的是40Hz,单次计时最长25ms,用来计时高电平时间的长短
向上技数,在中断中会更改下次触发中断的条件,理论上应该没问题,但读出来的数据是错误并且不稳定,哪位能帮我看一下吗,谢谢了
uint32_t Rc_Pwm_In[4];
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
// GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_6);
// GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_6,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
//Configures the alternate function of a GPIO pin
GPIOPinConfigure(GPIO_PB6_T0CCP0); GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_6);
//
TimerLoadSet(TIMER0_BASE, TIMER_A,2000000-1);//40Hz(25ms)
TimerConfigure(TIMER0_BASE,TIMER_CFG_A_CAP_TIME_UP|TIMER_CFG_SPLIT_PAIR);
TimerControlEvent(TIMER0_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE, TIMER_CAPA_EVENT);
//master interrupt enable API for all interrupts
IntMasterEnable();
TimerEnable(TIMER0_BASE, TIMER_A);
while(1)
{
}
}
uint32_t temp_cnt1,temp_cnt1_2;
uint32_t Count1;
unsigned char Flag=0;
void Timer0IntHandler(void)
{
TimerIntClear(TIMER0_BASE,TIMER_CAPA_EVENT);
Count1 = TimerValueGet(TIMER0_BASE, TIMER_A);
if(GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_6))
{
//比较捕获极性 取反
TimerControlEvent(TIMER0_BASE,TIMER_A,TIMER_EVENT_NEG_EDGE);
temp_cnt1 = Count1;
}
else
{
//比较捕获极性 取反
TimerControlEvent(TIMER0_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);
temp_cnt1_2 = Count1;
if(temp_cnt1_2>=temp_cnt1)
Rc_Pwm_In[0] = (temp_cnt1_2-temp_cnt1);
else
Rc_Pwm_In[0] = (2000000-1-temp_cnt1+temp_cnt1_2);
}
}
rongwei li:
本人 已经解决问题,感谢论坛提供的环境
若对该问题也存在疑惑,请参考http://bbs.21ic.com/icview-290844-1-1.html
xyz549040622:
回复 rongwei li:
这个帖子讲解的确实很详细,赞一个。
Rongze Li:
回复 rongwei li:
您好,我也要写接收机的pwm检测,可是按照论坛帖子里的配置后,没法进入中断,我觉得是我配置有问题,请问您能留个联系方式吗,我能否参考一下你的配置代码?
user5028538:
回复 Rongze Li:
大哥,你解决了吗,解决的话给小弟一份呗,卡好久了,我的邮箱1274268030@qq.com
user5028538:
回复 rongwei li:
大哥,可否给小弟一份代码啊,卡好久了,按照论坛那个也不行,我的邮箱1274268030@qq.com