原创文章,如有转载,请注明出处: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数组”

       总的流程图可以在http://dl.dbank.com/c0ezeaa7ka下载

sunplus 8202v iop源代码阅读笔记——3相关推荐

  1. sunplus 8202v iop源代码阅读笔记——1

    原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6877589 一.前言 对于汇编,我一直很敬畏,特别是多过2000 ...

  2. sunplus 8202v iop源代码阅读笔记——2

    原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6877873 三.iop主程序 iop.asm是iop的主程序,在 ...

  3. Flask 源代码阅读笔记

    我认为我已经养成了一个坏习惯.在使用一个框架过程中对它的内部原理非常感兴趣,有时候须要花不少精力才 明确,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源代码面前,了无秘密.这 ...

  4. OBS源代码阅读笔记

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. obs配置文件加载:bool OBSBasic::InitBasicConfig(); OBS认证信息加载,貌似还没有实 ...

  5. Vector和LinkedList源代码阅读笔记

    Vector 1 三个成员变量 elementData: Container elementCount: 有效长度 capacityIncrement: 每次增加的长度 2, 其构造函数没什么特别的, ...

  6. Lua 5.1.1 源代码阅读笔记

    http://blog.csdn.net/hamenny/article/details/4506130 转载于:https://www.cnblogs.com/tinytiny/p/3560841. ...

  7. linux源代码阅读笔记 find_entry分析

    78 static struct buffer_head * find_entry(struct m_inode * dir,79 const char * name, int namelen, st ...

  8. 《深入实践Spring Boot》阅读笔记之三:核心技术源代码分析

    为什么80%的码农都做不了架构师?>>>    刚关注的朋友,可以回顾前两篇文章: 基础应用开发 分布式应用开发 上篇文章总结了<深入实践Spring Boot>的第二部 ...

  9. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

最新文章

  1. python isdigit()
  2. ndarray保存成文本
  3. iOS 中client和server的 Web Service 网络通信 (1)
  4. Unexpected key(s) in state_dict: module.backbone.bn1.num_batches_tracked
  5. matlab在电力行业中的仿真技术-MATLAB小电流接地系统单向故障仿真分析
  6. Linux date指令
  7. “约见”面试官系列之常见面试题之第八十七篇之ajax发送多个请求优化(建议收藏)
  8. 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...
  9. SQL Server差异备份的备份/还原原理
  10. Autodesk Map 3D 2012 新功能介绍
  11. Node.js的require()的工作原理
  12. LINUX内核内存管理kmalloc,vmalloc
  13. html倒计时代码执行操作,JS倒计时两种实现方式代码实例
  14. vue移动端小说阅读器vue全家桶项目,已部署到服务器可访问预览
  15. V-REP 插件教程
  16. 解决kali虚拟机无法连接网络的问题
  17. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码
  18. MySQL第一讲-mysql的基本框架和查询命令流程
  19. Linux网络新技术基石:eBPF and XDP
  20. 涂抹mysql笔记-数据导出导入

热门文章

  1. 使用 JavaScript,也能在 Web 应用中实现人脸检测功能?!
  2. 均薪连续三年过万,北上深人才需求大 !| 5G 人才报告
  3. 软件正在吞噬整个世界?!
  4. 阿里战微信!20 亿元扶持小程序开发者
  5. 我的手机,被“探针”了吗?
  6. 这才是 Python 的 “72 变”玩法!
  7. 站在物联网风口,如何抢滩千亿级智能家居市场?
  8. 佛系张小龙和他的微信帝国 | 畅言
  9. 神奇!未来物联网的能源——纸生电
  10. “宇宙最强”GPU —— NVIDIA Tesla V100 面向开发者开放试用!