NiosIIPIO的说明与双向操作注意点
最近想使用NiosII里的并口PIO口进行双向操作,即需要输出的时候设置为输出方向,需要输入的时候设置为输入方向。在这期间,因为没认真仔细阅读参考文档,走了一点点的弯路。下面就简单的介绍下并行输入输出PIO。PIO核概述具有Avalo
接口的并行输入输出paralleli
putoutputPIO核,在Avalo
存储器映射(Avalo
MemoryMappedAvalo
MM)从端口和通用IO端口之间提供了一个存储器映射接口。IO端口既可以连接片上用户逻辑,也可以连接到FPGA与外设连接的IO引脚。PIO核提供容易的IO访问用户逻辑或外部设备,在这种情况下“位控制”的方法是有效的。下面列举了几种应用的例子:①控制LED、②获取开关数据、③控制显示设备、④片外设备的配置与通信,例如特定应用的标准产品(ASSP)。功能描述每个PIO核可以提供最多32个IO端口。像微处理器这样的智能主机通过读写寄存器映射的Avalo
MM接口控制PIO端口。在主机控制下,PIO核捕获输入端口的数据,并驱动数据到输出端口。当PIO端口直接与IO引脚相连时,主机通过写PIO核中的控制寄存器对IO引脚进行三态控制。图1是一个基于处理器系统使用多个PIO核的例子,其中,一个用于控制LED;一个用于捕获来自片上复位请求控制逻辑的边缘;另一个控制片外LCD显示。在集成到SOPCBuilder创建的系统时,PIO核有2种用户可见功能部件。①一个存储器映射的寄存器空间有4个寄存器:data、directio
、i
terruptmask和edgecapture。②132个IO端口。IO端口既可与FPGA内部逻辑相连接,也可驱动连接到片外设备的IO引脚。寄存器通过Avalo
MM接口提供到IO端口的接口。表1是这些寄存器的描述。在某些硬件配置中,某些不需要的寄存器不存在,读一个不存在的寄存器返回一个未定义值,而写一个不存在的寄存器无影响。
f图1使用多个PIO核的系统实例寄存器映射Avalo
MM主外设,例如CPU,通过4个32位寄存器控制并与PIO核通信,表92假定PIO核的IO端口被配置为
位宽度。表1PIO核的寄存器映射偏移描述读访问0Data写访问12Directio
方向寄存器1I
terruptmask中断屏蔽寄存器1Edgecapture边沿捕获寄存器12outsetoutclearWRW驱动PIO输出的新值对于每个IO端口独立的方向控制,0设置方向为输入;1设置方向为输出对每个输入端口IRQ允许禁用。设置某位为1,允许相应端口的中断。对每个输入端口的边沿检测。指定输出端口的某位置1指定输出端口的某位清0RWR
1…210
当前在PIO输入的数据值
RWr