上拉电阻:
上拉电阻就是起上拉作用的电阻,就是将一个不确定值的引脚通过一个电阻接到高电平上,使该引脚呈现高电平。
iomux
32位软件多路复用控制寄存器
GPIO编程
gpio读模式
读取输入信号的编程顺序如下
1.配置IOMUX选择GPIO模式
2.配置GPIO方向寄存器为输入(GPIO_GDIR[GDIR] set to 0b)
3,从数据寄存器和板级状态寄存器读取值。
//设置GPIO口输入模式
write sw_mux_ctl_
//设置GDIR为输入
write GDIR[31:4,input3_bit, input2_bit, input1_bit, input0_bit,] 32'hxxxxxxx0
//从DR读取输入值
read DR
//从PSR读取输入值
read PSR
需要注意的是当GPIO方向设置为输入时(GPIO_GDIR = 0),对GPIO_DR的读访问不返回GPIO_DR数据,相反,它返回GPIO_PSR数据,这是相应的输入信号值。
gpio写模式
驱动输出信号的编程顺序如下:
1.配置IOMUX选择GPIO模式(Via IOMUXC),如果需要通过PSR读取loopback pad value还可以开启SION
2,配置GPIO方向寄存器为输出(GPIO_GDIR[GDIR] set to 1b)
3.写一个值进数据寄存器
// SET PADS TO GPIO MODE VIA IOMUX.
write sw_mux_ctl_pad_
// Enable loopback so we can capture pad value into PSR in output mode
write sw_mux_ctl_pad_
// SET GDIR=1 TO OUTPUT BITS.
write GDIR[31:4,output3_bit,output2_bit, output1_bit, output0_bit,] 32'hxxxxxxxF
// WRITE OUTPUT VALUE=4’b0101 TO DR.
write DR, 32'hxxxxxxx5
// READ OUTPUT VALUE FROM PSR ONLY.
read_cmp PSR, 32'hxxxxxxx5
复用模式 (muxmode)选择字段表
示例:
如CSI_MCLK
0000 ALT0 — Select mux mode: ALT0 mux port: CSI_MCLK of instance: csi
0001 ALT1 — Select mux mode: ALT1 mux port: USDHC2_CD_B of instance: usdhc2
0010 ALT2 — Select mux mode: ALT2 mux port: RAWNAND_CE2_B of instance: rawnand
0011 ALT3 — Select mux mode: ALT3 mux port: I2C1_SDA of instance: i2c1
0100 ALT4 — Select mux mode: ALT4 mux port: EIM_CS0_B of instance: eim
0101 ALT5 — Select mux mode: ALT5 mux port: GPIO4_IO17 of instance: gpio4
0110 ALT6 — Select mux mode: ALT6 mux port: SNVS_HP_VIO_5_CTL of instance: snvs_hp
1000 ALT8 — Select mux mode: ALT8 mux port: UART6_TX of instance: uart6
在imx6ul设备树对gpio的配置中
#define MX6UL_PAD_BOOT_MODE0__GPIO5_IO10 0x0014 0x02A0 0x0000 0x5 0x0
0x0014是复用寄存器,0x02A0是配置寄存器,0x0000是输入寄存器,0x5复用模式( mux mode)表示ALT5,0x0是输入值。