最近做sony ss-3的驱动,期间用到用gpio口来复位前端sensor。于是相当于把TI DaVinci644X 系列的GPIO文档翻译一下,希望以后还会用到。
一般某个端口做什么用途是不确定的,当然有的端口有专门用途。像有些就是spi 和 gpio复用的,在使用前要先设置下端口复用,是用作普通的gpio口还是其他用途。
好啦,废话不多说,先上GPIO block 图
看到了吧,就这些主要的寄存器,一会讲各寄存器用途。
dm644X 支持最多71个GPIO口,GPIO[53:0] are 1.8V I/O signals. GPIOV33_[16:0]are 3.3V I/O signals。
GPIO被组织成5个bank,每个bank控制着16个gpio。
用途:
GPIO用之前要先配置用途,是用作输入,输出,还是中断?
当配置为输出,可以向管脚上进行写,当配置为读,可以从相应管脚读取电平。当然,这里的写入和读取都是针对相应寄存器的操作。并不针对某一个管脚。
有三个寄存器控制GPIO输出信号
SET_DATA:写高电平
CLR_DATA:写低电平
OUT_DATA:包含当前输出到管脚的信号电平
当读取这三个寄存器不一定能获取真实的管脚信号(因为一些管脚被配置为输入),真正读取管脚电平的寄存器是IN_DATA,INDATA寄存器包含实际的管脚上的逻辑电平。
向SET_DATA中相应的GPIO位写 1 将该GPIO置高,如果向相应位写 0 则没有影响。
向CLR_DATA中相应的GPIO位写 1 将该GPIO置低,如果向相应位写 0 则没有影响。
当GPIO管脚被配置为输入,向SET_DATA,CLR_DATA,OUT_DATA中写入值对该GPIO不产生影响。
配置相应GPIO为输入或输出的寄存器是DIR。
GPIO reset
1,软件reset:例如通过仿真器,并不修改GPIO状态。
2, 硬件reset:恢复至默认。
中断支持:
GPIO外设可以想ARM或/和 DSP发送中断。
允许gpio中断:
举个例子:如果要允许bank0中断(gpio[15:0]),则设置BINTEN寄存器的bit 0 为1,如果要设置bank3中断(gpio[63:48]),则设置BINTEN寄存器的bit 3为1.
可以配置为上升沿触发,下降沿触发,两个边沿都触发和无条件触发。分别设置SET_RIS_TRIG, CLR_RIS_TRIG, SET_FAL_TRIG, CLR_FAL_TRIG。
GPIO内存映射的寄存器
GPIO方向寄存器(DIRn)
默认情况下,GPIO引脚被配置为输入(bit value = 1),DIR01控制着0~31引脚。DIR23控制着32~63引脚,DIR4控制着64~60引脚。
GPIO输出数据寄存器(OUT_DATAn)
OUT_DATAn决定了写到GPIO引脚上的信号值(对输入引脚无效)。直接写入该寄存器即可设置相应位。读入OUT_DATAn寄存器的值并不是引脚电平!!同理,OUT_DATA01为BANK01,OUT_DATA23为BANK23,OUT_DATA4为BANK4。
SET_DATAn和CLR_DATAn不再赘述。与OUT_DATA类似。
GPIO输入数据寄存器(IN_DATAn)
直接读取该寄存器的值即可获取相应引脚信号值。IN_DATA01,IN_DATA23,IN_DATA4。
GPIO设置上升沿中断寄存器(SET_RIS_TRIGn)
SET_RIS_TRIGn寄存器允许GPIO引脚上的上升沿产生一个GPIO中断。
其他几种中断与之类似。