先看关于寄存器描述。

写着IOPIN为只读寄存器。

但其实可以向IOPIN里写数据,如http://home.eeworld.com.cn/my/space-uid-440873-blogid-77805.html 所示。

可以使用IOPIN使GPIO管脚上输出瞬时的0和1

先写IOSET再写IOCLR寄存器可使管脚先输出1再输出0。有的系统允许两个有效输出之间存在这段
延时时间。但某些应用要求一个GPIO口的一组管脚同时输出一个二进制数(0和1混合)。这可通过写端
口的IOPIN寄存器来实现。
下面的代码所实现的功能是:P0.[31:16]和P0.[7:0]输出保持不变的同时将P0.[15:8]设置成0xA5,不管
P0.[15:8]之前是何值:
IO0PIN=(IO0PIN && # 0xFFFF00FF)‖# 0x0000A500

但有陷阱,如http://blog.pfan.cn/niao0311/38996.html 所示。

下面是解释:http://bbs.zlgmcu.com/dv_rss.asp?s=xhtml&boardid=29&id=18359&page=3

“先写IOSET再写IOCLR寄存器可使管脚先输出1再输出0。有的系统允许两个有效输出之间存在这段延时时间。但某此应用要求一个GPIO口的一组管脚同时输出一个二进制(0和1混合)。这可通过写端口的IOPIN寄存器来实现(但是,Philips不推荐这种用法,非必要时不要使用)。”

以上是《深入浅出ARM7-LPC213x_214x(上册)》P138中的一段文字。

问题是:既然使用IOPIN能够避免使用IOSET/IOCLR 输出1/0出现不必要的中间态,为什么Philips不推荐这种用法?非必要时不要使用,那在何时才用IOPIN的方法。

回答:非必须时不要使用,是因为IOPIN是没有位屏蔽操作的,即改变这个寄存器32个引脚都可能会发生改变,所以必须要用与或的操作实现引脚状态的改变,但与或操作即读改写有一问题,就是读改写被打断时(可能被中断或任务打断)时,如打断后IOPIN的值改了,那再写回去的值就不正确了,所以应用时要十分注意。

转载于:https://www.cnblogs.com/whyaiw/archive/2013/03/23/2977844.html

LPC2132的IOPIN相关推荐

  1. ARM7-LPC213x(四)IOPIN

    IOPIN 通过写 IOPIN 寄存器可以让某些端口同时输出包含 1 和 0 的二进制数,达到快速稳健地控制某些端口的目的. 程序: #include "config.h" #de ...

  2. 嵌入式系统开发过程中遇到的——volatile

    嵌入式 系统开发过程中遇到的-- volatile 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的 .如果系统结构支持独立的 I/O 地址空间,并且是端口映射,就必须使用汇编语言完成 ...

  3. 嵌入式开发中对(*(volatile unsigned long *)) 的理解

    一.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必 ...

  4. 嵌入式volatile关键字

    今天在看S3C2440开发板的初始化代码时,对#define A (* (volatile unsigned long *) 0x48000000这种形式的定义方式有困惑,于是求助GOOGLE大神,在 ...

  5. 有关volatile unsigned long一些说明

    对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的"端口 ...

  6. #define GPBCON (*(volatile unsigned *)0x56000010) 的理解

    2019独角兽企业重金招聘Python工程师标准>>> 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使 ...

  7. LPC2141芯片解密 芯片解密干什么

    芯片解密是指从已经被加密了的芯片里,把存储的代码拷贝出来.嵌入了程序代码的芯片有很多种,而MCU只是其中一种.单片机(MCU)一般都有内部EEPROM/FLASH供用户存放程序和工作数据.大部分单片机 ...

  8. ARMv7体系结构汇总

    文章目录 1 .处理器工作模式 2. 处理器工作状态 3. ARM寄存器 3.1 通用寄存器 3.2 状态寄存器 3.3 备份的程序状态寄存器SPSR 3.4 Thumb寄存器 4. ARM指令系统 ...

  9. proteus各个版本下载

    Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司).它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器 ...

最新文章

  1. 王炸不断,半导体巨头们到底在打什么牌?
  2. 陆奇“入驻” YC,开启新征程
  3. .net 导出excel和word
  4. 2018这一年或平淡或不凡,2019看更大的世界
  5. mysql cte 语法,mysql8 公用表表达式CTE的使用方法实例分析
  6. springboot 替换tomcat_Spring Boot实战 之 解剖HelloWorld原型应用
  7. 【Redis】16.Redis哨兵
  8. react不同环境不同配置angular_叫雨山斗鸡优势在哪里,环境不同,价值不同
  9. 机械制图手册_机械制图基本知识大全!
  10. 日志查看_实时查看容器日志
  11. Cocos2d-xV3.17.2 win32平台模板源码详注
  12. 【记录】ASP.NET MVC MapRoute .htm 不起作用
  13. 【机械】如何用SOLIDWORKS进行ArtCam雕刻机排版
  14. pc网页唤起QQ、企业微信、skype、whatsApp等
  15. python -PyPDF2对pdf 进行拆分
  16. 计算机二级选择题需要刷吗,“我明天就要考计算机二级了”
  17. 生物信息学|miRNA-疾病关联预测的图形自动编码模型
  18. #2阴阳师首页模块模拟
  19. Spring Boot 入门系列(二十三)整合Mybatis,实现多数据源配置!
  20. Qt解析XML相关(QDom方式)

热门文章

  1. 手写简版spring --1--创建简单的Bean容器
  2. Mysql存在则更新,不存在则插入
  3. SSO单点登录和OAuth2.0的区别和理解
  4. Hi3516A开发--I2C/SPI读写命令
  5. pat天梯赛L1-054. 福到了
  6. 32位x86处理器架构
  7. 生成对抗网络简介(包含TensorFlow代码示例)【翻译】
  8. 爬虫总结(五)-- 其他技巧
  9. Android APP终极瘦身指南
  10. iphone导出通讯录到安卓_科技资讯:iPhone苹果手机换新机如何将旧手机的通讯录导出到新的...