OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5247|回复: 2

红外遥控解码中的中断函数问题

[复制链接]

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
发表于 2014-3-5 22:04:34 | 显示全部楼层 |阅读模式
正在学习红外遥控一节,中断处理更新事件的函数看不懂,如红色部分所示
//遥控器接收状态
//[7]:收到了引导码标志
//[6]:得到了一个按键的所有信息
//[5]:保留
//[4]:标记上升沿是否已经被捕获   
//[3:0]:溢出计时器
u8 RmtSta=0;    
u16 Dval; //下降沿时计数器的值
u32 RmtRec=0; //红外接收到的数据      
u8  RmtCnt=0; //按键按下的次数  
//定时器2中断服务程序  
void TIM4_IRQHandler(void)
{      
    if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)//溢出中断标志
{
if(RmtSta&0x80)//上次有数据被接收到了 //这个怎么变成数据标志,不是引导标志么?
{
RmtSta&=~0X10; //取消上升沿已经被捕获标记
if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//标记已经完成一次按键的键值信息采集//没有发生溢出,完成32位数据的采集么?
if((RmtSta&0X0F)<14)RmtSta++;
else
{
RmtSta&=~(1<<7);//清空引导标识
RmtSta&=0XF0; //清空计数器
}  
}    
}
  if(TIM_GetITStatus(TIM4,TIM_IT_CC4)!=RESET)
{  
if(RDATA)//上升沿捕获
{

TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获
    TIM_SetCounter(TIM4,0);   //清空定时器值
RmtSta|=0X10; //标记上升沿已经被捕获
}
else //下降沿捕获
{
  Dval=TIM_GetCapture4(TIM4);//读取CCR1也可以清CC1IF标志位
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC4P=0 设置为上升沿捕获
 
if(RmtSta&0X10) //完成一次高电平捕获 
{
  if(RmtSta&0X80)//接收到了引导码
{
if(Dval>300&&Dval<800) //560为标准值,560us
{
RmtRec<<=1; //左移一位.
RmtRec|=0; //接收到0   
}
else if(Dval>1400&&Dval<1800) //1680为标准值,1680us
{
RmtRec<<=1; //左移一位.
RmtRec|=1; //接收到1
}
else if(Dval>2200&&Dval<2600) //得到按键键值增加的信息 2500为标准值2.5ms
{
RmtCnt++; //按键次数增加1次
RmtSta&=0XF0; //清空计时器
}
  }
else if(Dval>4200&&Dval<4700) //4500为标准值4.5ms
{
RmtSta|=1<<7; //标记成功接收到了引导码
RmtCnt=0; //清除按键次数计数器
}  
}
RmtSta&=~(1<<4);
}           
}
 TIM_ClearFlag(TIM4,TIM_IT_Update|TIM_IT_CC4);    
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-5 23:13:31 | 显示全部楼层
回复【楼主位】fangxiaoyanzhou:
---------------------------------
if(RmtSta&0x80)//上次有数据被接收到了 //这个怎么变成数据标志,不是引导标志么?
这个原意是接收到引导码标志才对,也可以表示有数据被接收到了,不矛盾。

因为一次按键键值的发送,必定不会导致定时器溢出,定时器溢出只有在接收按键重复码的时候,才可能出现,所以只要第一次溢出,且引导码已经被识别了,说明一次按键的所有键值都已经被获取了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
 楼主| 发表于 2014-3-6 22:03:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
明白了,多谢楼主
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 03:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表