sunplus 8202v iop源代码阅读笔记——3
原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6878106
3. 中断服务程序
中断服务程序,需要注意的是:进中断时现场的保护,中断结束前的现场恢复。需要保护的主要是A和X寄存器。有一点我比较迷惑,为什么该部分的程序要放在SRAM_PG0区域,这段地址应该是RAM区,这样做有什么意义?望知道的朋友告之,谢谢!邮箱:desert.lau#gmail.com,将#换成@即可。
SRAM_PG0:.section
vIrq:pha ;保护现场phxlda IntFlagsta IntFlag ;清中断标志,写1清除.include .\IR\nec.asm ;nec解码lIrqIrExit: lda rVfdPollingTm ;rVfdPollingTm时间变量处理beq lIrqExitdec rVfdPollingTm
lIrqExit:plx ;恢复现场pla
vNmi:rti
四、nec解码程序
在看这部分代码前,首先需要对NEC协仪熟悉,可以去这个网站看看:http://www.sbprojects.com/knowledge/ir/nec.php
简单点说:IR电平没有信号时为常高,有信号进来时,会先低9ms,然后高4.5或2.5ms,然后就是数据,数据0是先低560us,再高560us,数据1是先低560us,再高1680us。
注:以下流程图引导码中的72ms,40ms,20ms是错误的,正确的是应再除以10,图片因为是用在线流程图工具制作,改起来麻烦,因此就在此说明一下不再更新。
为方便理解,将流程图拆成了几个小块分块说明:
1. 主程序
任务:
① 监控IR脚的信号变化
② 如果IR脚一直不变化,且时长超过108ms,则将“收数据的步骤”设为HEAD,并将IR脚上次信号变化到这次信号变化的时间(以后简称“保持时间”)清零。
③ 如果IR脚发生了变化,则根据“收数据的步骤”分开处理,主要包括:HEAD为9ms低电平,OFF为4.5ms或2.5ms高电平,ADDR_DAT就是收数据了,共32位。
流程图如下所示:可以从http://dl.dbank.com/c0qfh06quq下载清晰的图
2. HEAD部分
任务:
监控IR脚状态,只有在HEAD步骤下(IR脚由高变低),开始累计“保持时间”,在监控到IR脚变化(由低变高)时,比较“保持时间”是否大于7.2ms,如果为真,则到OFF步骤,否则重置。
3. OFF部分
任务:
① 在IR脚由高变低时,根据“保持时间”分别处理
② 大于4ms,则是收到的是全码,即包括引导码,地址码,数据码,所以需要将“收步骤”设置为ADDR_DATA,并将存数据的SRAM清空
③ 大于2ms,则是收到的是重复码,重复码的正确条件是:大于2ms,上次按下后没有释放过(rReqValid为1),重复间隔时间为0(vIrReqRepeateRate为0)
4. ADDR_DATA部分
任务:
① 0和1的数据都是先低后高,低都是560us,高如果是560us,是为0;1680us,为1。
② IR脚由低变高,如果大于560us,则开始累计高电平的时间,否则收数据出错,重置
③ IR脚由高变低,根据时间长度设置SRAM对应位为0或1。
④ 设置READY位,表示数据正常接收完
⑤ 设置rReqValid,用于重复码判断;并重置RepeatRate时间
注:以下流程图中的“置C标志”后就跳到“循环左移rIrReceiver数组”
sunplus 8202v iop源代码阅读笔记——3相关推荐
- sunplus 8202v iop源代码阅读笔记——1
原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6877589 一.前言 对于汇编,我一直很敬畏,特别是多过2000 ...
- sunplus 8202v iop源代码阅读笔记——2
原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6877873 三.iop主程序 iop.asm是iop的主程序,在 ...
- Flask 源代码阅读笔记
我认为我已经养成了一个坏习惯.在使用一个框架过程中对它的内部原理非常感兴趣,有时候须要花不少精力才 明确,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源代码面前,了无秘密.这 ...
- OBS源代码阅读笔记
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. obs配置文件加载:bool OBSBasic::InitBasicConfig(); OBS认证信息加载,貌似还没有实 ...
- Vector和LinkedList源代码阅读笔记
Vector 1 三个成员变量 elementData: Container elementCount: 有效长度 capacityIncrement: 每次增加的长度 2, 其构造函数没什么特别的, ...
- Lua 5.1.1 源代码阅读笔记
http://blog.csdn.net/hamenny/article/details/4506130 转载于:https://www.cnblogs.com/tinytiny/p/3560841. ...
- linux源代码阅读笔记 find_entry分析
78 static struct buffer_head * find_entry(struct m_inode * dir,79 const char * name, int namelen, st ...
- 《深入实践Spring Boot》阅读笔记之三:核心技术源代码分析
为什么80%的码农都做不了架构师?>>> 刚关注的朋友,可以回顾前两篇文章: 基础应用开发 分布式应用开发 上篇文章总结了<深入实践Spring Boot>的第二部 ...
- Mina源码阅读笔记(一)-整体解读
2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...
最新文章
- python isdigit()
- ndarray保存成文本
- iOS 中client和server的 Web Service 网络通信 (1)
- Unexpected key(s) in state_dict: module.backbone.bn1.num_batches_tracked
- matlab在电力行业中的仿真技术-MATLAB小电流接地系统单向故障仿真分析
- Linux date指令
- “约见”面试官系列之常见面试题之第八十七篇之ajax发送多个请求优化(建议收藏)
- 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...
- SQL Server差异备份的备份/还原原理
- Autodesk Map 3D 2012 新功能介绍
- Node.js的require()的工作原理
- LINUX内核内存管理kmalloc,vmalloc
- html倒计时代码执行操作,JS倒计时两种实现方式代码实例
- vue移动端小说阅读器vue全家桶项目,已部署到服务器可访问预览
- V-REP 插件教程
- 解决kali虚拟机无法连接网络的问题
- 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码
- MySQL第一讲-mysql的基本框架和查询命令流程
- Linux网络新技术基石:eBPF and XDP
- 涂抹mysql笔记-数据导出导入
热门文章
- 使用 JavaScript,也能在 Web 应用中实现人脸检测功能?!
- 均薪连续三年过万,北上深人才需求大 !| 5G 人才报告
- 软件正在吞噬整个世界?!
- 阿里战微信!20 亿元扶持小程序开发者
- 我的手机,被“探针”了吗?
- 这才是 Python 的 “72 变”玩法!
- 站在物联网风口,如何抢滩千亿级智能家居市场?
- 佛系张小龙和他的微信帝国 | 畅言
- 神奇!未来物联网的能源——纸生电
- “宇宙最强”GPU —— NVIDIA Tesla V100 面向开发者开放试用!