【摘要】:直接I/O对象主要包括Bit(位)I/O对象、Byte(字节)I/O对象、Leveldetect输入对象和Nibble(半字节)I/O对象。其中,IO0~IO3所具有的高电流吸收能力可使这几个引脚直接驱动多个I/O设备。说明中指定的引脚是该I/O对象使用的引脚中编号最小的引脚,且必须是IO0。图5-21 字节I/O对象引脚分配图2)io-object-name:是用户指定的该I/O对象的名字,为ANSI C格式的变量标识符。该I/O对象类型输入和输出的数据范围为0~15B。这种I/O对象类型用于同时读取或控制4个相邻引脚。
直接I/O对象主要包括Bit(位)I/O对象、Byte(字节)I/O对象、Leveldetect(电平检测)输入对象和Nibble(半字节)I/O对象。
1.位输入/输出
IO0~IO10中的每个引脚均可配置成单个的位输入或输出端口,如图5-20所示。要求输入信号的电平为TTL电平,而输出的是CMOS电平。其中,IO0~IO3所具有的高电流吸收能力可使这几个引脚直接驱动多个I/O设备。
这种I/O对象类型用于读或控制单个引脚的逻辑状态,0相当于低电位,而1相当于高电位。对于位输入,io_in()函数返回值的数据类型为un-signed int;对于位输出,输出值被作为布尔类型,所以任何非零值均被当作1。若希望使用Neuron芯片的内部上拉电阻,则应该在Neuron C程序中加入编译指令“#pragma enable io pullups”。
图5-20 位I/O对象引脚分配图
对位I/O对象进行显式配置的Neuron C语句和说明如下:
pin input bit io-object-name;
pin output bit in-object-name[=intial-output-level];
1)pin:指定Neuron芯片的11个I/O引脚IO0~IO10中的一个。位输入/输出可以使用11个引脚中的任何一个引脚。
2)io-object-name:是用户为该I/O对象指定的名字,是ANSI C格式的变量标识符。
3)initial-output-level:为一个常数表达式,是ANSI C字符格式的初始值,用于在I/O对象的初始化过程中设置该输出引脚的状态。初始状态可以是0或1。
使用方法:
2.字节输入/输出
IO0~IO7允许配置为如图5-21所示的字节输入或输出端口,该I/O对象类型用于同时读取或控制8个引脚。对于字节输入/输出,io_in()函数返回值的数据类型和io_out()函数输出值的数据类型为unsigned int,其输入、输出的数据范围为0~255B。
对字节I/O对象进行显式配置的Neuron C语句和说明如下:
IO0 input byte io-object-name;
IO0 output byte in-object-name[=intial-output-level];
1)IO0:指定IO0为字节的最低有效位。字节输入/输出使用引脚IO0~IO7。说明中指定的引脚是该I/O对象使用的引脚中编号最小的引脚,且必须是IO0。
图5-21 字节I/O对象引脚分配图
2)io-object-name:是用户指定的该I/O对象的名字,为ANSI C格式的变量标识符。
3)initial-output-level:是一个常数表达式,为ANSI C格式的初始值,用于在初始化时设置该I/O对象输出引脚的状态。初始状态可以是0~255,默认为0。
使用方法:(www.chuimin.cn)
3.电平检测(Leveldetect)输入
IO0~IO7可分别配置为电平检测(Leveldetect)输入端口。该I/O对象类型用于检测某一个输入引脚上输入的逻辑电平“0”。它能锁存输入引脚的负跳变,对于10 MHz的输入时钟,能检测到最短脉宽为200 ns的负脉冲,在一般的应用中均能俘获到任何0电平输入。电平检测输入对象能够在输入端被采样之前将输入值锁存。锁存器中的内容在when语句对输入采样时被清除;如果此时又有另一个负跳变被检测到,这个负跳变立刻被锁存。因此,只要输入引脚电平停留在逻辑0,每个io_in()函数调用将返回值1。对于俘获短持续时间的事件,电平检测输入对象是非常有用的,而位输入对象对这样的短周期事件会造成丢失。对于电平检测输入,io_in()函数返回值的数据类型是unsigned int。若希望使用Neuron芯片的内部上拉电阻,则应该在程序中加入编译指令“#pragma enable io pullups”。Leveldetect输入对象引脚配置和定时图如图5-22所示。
图5-22 电平检测输入对象引脚配置和定时图
对电平检测输入对象进行显式配置的Neuron C语句和说明如下:
pin[input]leveldetect io-object-name;
1)pin:指定一个Neuron芯片I/O引脚。Leveldetect输入可以指定IO0~IO7引脚中的任一引脚。
2)io-object-name:是用户指定的该I/O对象的名字,为ANSI C格式的变量标识符。
使用方法:
unsigned int input-value;
input-value=io in(io-object-name);
4.半字节(Nibble)输入/输出
IO0~IO7中任意4个相邻的引脚均可配置为Nibble(半字节)输入或输出端口,如图5-23所示。该I/O对象类型输入和输出的数据范围为0~15B。这种I/O对象类型用于同时读取或控制4个相邻引脚。对于半字节输入/输出,io_in()函数返回值的数据类型和io_out()函数输出值数据类型均为unsigned int。若希望使用Neuron芯片的内部上拉电阻,则应该在Neuron C程序中加入编译指令“#pragma enable io pullups”。
图5-23 半字节I/O对象引脚分配图
对半字节输入/输出对象进行显式配置的Neuron C语句和说明如下:
pin input nibble io-object-name;
pin output nibble io-object-name[=intial-output-level];
1)pin:指定一个Neuron芯片I/O引脚。Nibble输入/输出需要4个相邻引脚。引脚说明中指定的是这4个相邻引脚中编号最小的一个引脚。该引脚可以是IO0~IO4中的一个。编号最小的引脚被定义为半字节数据的最低有效位。
2)io-object-name:是用户为该I/O对象指定的名字,为ANSI C格式的变量标识符。
3)initial-output-level:常数表达式,为ANSI C格式的初始值。用于在初始化时设置该I/O对象的输出引脚状态。初始状态可以是0~15的任何一个值,默认值为0。
使用方法:
相关推荐