我们有一个需求需要软件在运行过程中将I2C_SDA和I2C_SCL配置为GPIO,使用完毕后再恢复为I2C功能。我们使用的引脚如下表所示。 软件使用yocto版本,由于在DTS文件中做了相应的配置如下代码 &i2c1 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1_2>; status = "okay"; } 我准备在自己编写的驱动中通过修改寄存器的方式修改但不成功,以下是我设置GPIO5_IO26为低电平的代码,但通过测试发现输出为高电平。 #defineI2C_GPIO_BASE 0x20AC000 //GPIO5_DR #defineSDA_PIN 26 #defineSCL_PIN 27 typedef struct _gpio_struct { u32 dr; u32gdir; }T_GPIO_STRUCT; static T_GPIO_STRUCT*s_i2c_gpio; u32 pin, data; int ret = 0; u32 *regmap; u32 reg_addr =0x20E0648;//IOMUXC_SW_PAD_CTL_PAD_CSI0_DATA08 regmap =ioremap(reg_addr, sizeof(reg_addr)); *regmap = 0x1B0B0; iounmap(regmap); reg_addr =0x20E0278; //IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA08 regmap =ioremap(reg_addr, sizeof(reg_addr)); *regmap = 0x05; iounmap(regmap); s_i2c_gpio =ioremap(I2C_GPIO_BASE, sizeof(T_GPIO_STRUCT)); s_i2c_gpio->gdir |=(1 << SDA_PIN); 通过测试读取0x20AC000寄存器中的数据为0xC000000,0x20AC004 寄存器中的数据为0x7D00001 请帮忙分析问题,还有是否还有其它方法实现我所需要的功能?谢谢!
|