在LPC2131_2132_2138-user_cn.pdf文档中(英文版也一样),管脚值寄存器IOPIN 前面说只读,后面则说可写,不知道应相信哪一条?另外,列出的语句中,&&(||)是逻辑与(或),而要达到目的应该用按位与(或)吧,有请高手指教.
表55 GPIO 寄存器映射
通用名称 描述 访问 复位值 PORT0
IOPIN GPIO 管脚值寄存器。不管方向和模式如何设 只读 NA 0xE0028000
定,管脚的当前状态都
可从该寄存器中读出。
IO1PIN下面的代码所实现的功能是:P0.[31:16]和P0.[7:0]输出保持不变的同时将P0.[15:8]设置成0xA5,不管
P0.[15:8]之前是何值:
IO0PIN=(IO0PIN && # 0xFFFF00FF)‖# 0x0000A500
写IOSET/IOCLR 和IOPIN
写IOSET/IOCLR 寄存器很容易使所选输出管脚的状态同时变为高/低电平。只有IOSET/IOCLR 中被写
入1 的位对应的管脚才能设置为高/低电平,写入0 的位对应的管脚的状态不发生改变。但是,仅通过写
IOSET 或IOCLR 寄存器是不可能使一个GPIO 口同时输出包含0 和1 的任意二进制数。
写IOPIN 寄存器使能并行GPIO 输出所需的瞬时值。写入IOPIN 寄存器的二进制数据将影响整个并行
口的所有输出配置管脚:IOPIN 的位为0 时使管脚输出低电平,IOPIN 的位为1 时使管脚输出高电平。为
了改变一组端口管脚的输出,必须将IOPIN 读出的内容和一个值相与(该值使要改变的管脚对应的位用0
来屏蔽,其它管脚对应的位为1)。最后,再将相与的结果和期望得到的管脚输出对应的二进制数相或并将
相或的结果存回IOPIN 寄存器。上面例2 的等式中实现的功能是P0.15~P0.8 输出0xA5,P0 口的其它位的
状态保持不变。
|
|