xilinx平台中zynq的PS端iic使用


本文主要講述zynq的iic使用。此IIC只能作為主站,作為從站的不適合本文。

Iic的接口在ps端。(iic的接口在pl端的情況下,不適合本文)

使用軟件版本:vivado2018.3

pl端設置:

轉載:https://blog.csdn.net/weixin_36590806/article/details/111485711

歡迎轉載!

ps端:

1、初始化操作

2、寫操作

使用函數“XIicPs_MasterSendPolled(&Iic, senddata, len, addr)”

定義一個u8 senddata[6];

senddata[0] = reg;   寄存器地址

senddata[1] = val; 數據內容

&lic:設備地址,

senddata:寄存器地址和寫內容

len:寫入數據的長度

addr:是iic器件地址。

3、讀操作

XIicPs_MasterRecvPolled(&Iic, val, len, addr);

&lic:設備地址,

Val: 讀取的數據內容

len:讀取數據的長度

addr:是iic器件地址。

 

對於讀函數,需要在注意的地方在於需要根據實際設備的讀時序進行封裝,直接調用這個函數可能不會成功。

 

在這個時序中可以看出,我們是先發送一個寫動作,但沒有實際數據寫入,然后在發送一個讀指令。在sdk中寫函數和讀函數是分開的,所以我們在讀取數據時,可能跟我們在使用模擬iic操作的時候不太一樣。

 

unsigned char IIC_read_reg(unsigned char address, unsigned char reg)

{

unsigned char val;

int Status;

unsigned char senddata[6];

senddata[0] = reg;

 

Status = XIicPs_MasterSendPolled(&Iic, senddata, 1, address);

if (Status != XST_SUCCESS)

{

printf("IIC Master integerReg Wirte Failed\r\n");

return XST_FAILURE;

}

while(XIicPs_BusIsBusy(&Iic));

 

Status = (si0_iic_read(&val,2,address));

 

if (Status != XST_SUCCESS)

{

printf("IIC Master integerReg Read Failed\r\n");

return XST_FAILURE;

}

 

return (val);

}

嘻嘻嘻。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM