Zynq7000 Ps&PL i2c驱动OLED
前言
主要想做点东西,先把i2c在裸机下调通,确保硬件逻辑没问题,然后再到Linux下开发。
开始
PS下I2c使用
Block design如上,这里我把emio用来扩展i2c,并且还搞了一个axi i2c
然后sdk demo如下:
#define IIC_DEVICE_ID XPAR_PS7_I2C_0_DEVICE_ID
/*
* The slave address to send to and receive from.
*/
#define IIC_SLAVE_ADDR 0x3c
#define IIC_SCLK_RATE 200000
int oledWriteReg(u8 data, u8 cmd)
{
u8 sBuff[2] = {0, data};
if (!cmd) sBuff[0] = 0x40;
int Status = XIicPs_MasterSendPolled(&Iic, sBuff,
2, IIC_SLAVE_ADDR);
if (Status != XST_SUCCESS) {
xil_printf("Ps i2c send failed!!!");
return XST_FAILURE;
}
while (XIicPs_BusIsBusy(&Iic)) {
xil_printf("Ps i2c is busy!!");
}
return Status;
}
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
oledWriteReg(dat, cmd);
}
上述polled方式跟写e2prom类似