LPC2132的IOPIN
先看關于寄存器描述。
寫著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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像缩放的双线性内插值算法的原理解析
- 下一篇: 为已创建好的临时表添加字段列