概述
AMD Xilinx Vitis內(nèi)部集成了各種外設(shè)的例程,為工程師提供了快速上手的代碼。
AMD Xilinx有很多開發(fā)板。各種單板的硬件參數(shù)不一定完全一致,有時需要根據(jù)單板硬件設(shè)計、Vivado中的Block Design設(shè)計,修改外設(shè)例程的參數(shù)。
IIC EEPROM例程
本文描述在如何運行IIC EEPROM例程。
硬件設(shè)計
運行運行IIC EEPROM例程,如果時Zynq-7000/MPSoC, 要在Block Design設(shè)計中使能PS的IIC控制器。如果是傳統(tǒng)FPGA,要在Block Design設(shè)計中添加MicaroBlaze和AXI IIC控制器。然后在Vivado中導出XSA文件,給Vitis后續(xù)設(shè)計使用。
創(chuàng)建Platform
在Vitis中,先使用Vitis創(chuàng)建Platform。具體步驟是,在Vitis的菜單 “File - New ” 中,選擇“Platform Project”, 指定名稱如“ac701_multiboot_hw_platform”, 再選擇對應(yīng)的XSA文件和 Processor 如 “micraoblaze_0”,再點擊“Finish”。
導入IIC EEPROM例程
1. 打開hw_platform工程。
2. 雙擊“platform.spr”文件。
3. 雙擊“micraoblaze_0”的 “board support package”。
4. 等待Drivers窗口顯示
5. 點擊axi_iic_0行右邊的import examples
6. 選擇"xiic_eeprom_example"
7. 點擊"OK"
之后Vitis會創(chuàng)建一個工程,包含文件xiic_eeprom_example.c。
IIC EEPROM例程更改
下面是在AMD Xilinx AC701 單板運行IIC EEPROM例程所需要的更改。
中斷
IIC EEPROM例程使用了中斷,需要根據(jù)AC701 MicroBlaze硬件工程的設(shè)計,修改中斷號。
文件xiic_eeprom_example.c中原來使用的中斷號是XPAR_INTC_0_IIC_0_VEC_ID,要改成新的中斷號。
舊的中斷號參數(shù):
#define IIC_INTR_ID XPAR_INTC_0_IIC_0_VEC_ID
在workspace下,能搜索到文件xparameters.h,包含每個設(shè)備的中斷號。 定義中斷號的宏的名稱,與Vivado硬件工程的BlockDesign中的IP名稱有關(guān),類似如下字符串:
#define XPAR_MICROBLAZE_0_AXI_INTC_AXI_IIC_0_IIC2INTC_IRPT_INTR 2U
因此,新的中斷號參數(shù)設(shè)置為:
#define IIC_INTR_ID XPAR_MICROBLAZE_0_AXI_INTC_AXI_IIC_0_IIC2INTC_IRPT_INTR
IIC MUX
為了節(jié)省管腳,AMD Xilinx開發(fā)板一般使用一個IIC_MUX(IIC Switch),把一路IIC總線擴展成多路IIC總線。比如AC701使用了PCA9548擴展IIC總線。如果使用了IIC_MUX(IIC Switch), 要定義宏IIC_MUX_ENABLE,并且設(shè)置IIC_MUX_ADDRESS、IIC_EEPROM_CHANNEL。定義IIC_MUX_ENABLE后,就使能了函數(shù)MuxInit( )。
IIC_MUX_ADDRESS是IIC_MUX在與MPSoC/MicroBlaze之間連接的IIC總線上的地址,需要根據(jù)AC701的硬件設(shè)計設(shè)置。注意,是7位地址,是8位地址的二分之一。根據(jù)原理圖,AC701 PCA9548的IIC地址是0x74。
IIC_MUX分出多個IIC總線(CHANNEL)。EEPROM所在的IIC總線(CHANNEL)需要根據(jù)AC701的硬件設(shè)計設(shè)置,軟件代碼中對應(yīng)的設(shè)置是IIC_EEPROM_CHANNEL。AC701上,EEPROM的IIC總線(CHANNEL)是3,IIC_EEPROM_CHANNEL設(shè)置成8。這個參數(shù)最后在MuxInit( )中被使用。
/*
* The IIC_MUX_ADDRESS defines the address of the IIC MUX device on the
* IIC bus. Note that since the address is only 7 bits, this constant is the
* address divided by 2.
* The IIC Slaves on the KC705/ZC702/ZC706 boards are connected to an
* IIC MUX.
* IIC_EEPROM_CHANNEL is the Channel number of EEPROM for IIC Mux. On KC705 it
* is 0x08 and ZC702 is 0x04.Please refer the User Guide's of the respective
* boards for further information about the Channel number to use EEPROM.
*/
#define IIC_MUX_ADDRESS 0x74
#define IIC_EEPROM_CHANNEL 0x08
/*
* This define should be uncommented if there is IIC MUX on the board to which
* this EEPROM is connected. The boards that have IIC MUX are KC705/ZC702/ZC706.
*/
#define IIC_MUX_ENABLE
EEPROM_ADDRESS
EEPROM_ADDRESS定義EEPROM在IIC總線上的地址。也請注意,是7位地址,是8位地址的二分之一。根據(jù)原理圖,AC701 EEPROM的IIC地址是0x54。
調(diào)試技巧
剛測試時,不熟悉運行流程。建議在函數(shù)入口處、返回處多加些打印,了解運行流程。
在判斷函數(shù)的返回值時,加入下列打印,能快速了解出錯的代碼和原因。
if (Status != XST_SUCCESS) {
xil_printf("Fail at %s : %drn", __func__, __LINE__ );
return XST_FAILURE;
}
添加打印,成功運行情況的的打印如下:
Begin at XIic_SetAddress : 397
XII_ADDR_TO_SEND_TYPE at XIic_SetAddress : 431
Begin at XIic_SetAddress : 398
XII_ADDR_TO_SEND_TYPE at XIic_SetAddress : 432
SUCCESS at MuxInit : 840
Begin at XIic_SetAddress : 398
XII_ADDR_TO_SEND_TYPE at XIic_SetAddress : 432
Success at IicEepromExample : 465
Successfully ran IIC eeprom Example
本文轉(zhuǎn)載自:博客園
審核編輯:湯梓紅
-
amd
+關(guān)注
關(guān)注
25文章
5470瀏覽量
134242 -
Xilinx
+關(guān)注
關(guān)注
71文章
2167瀏覽量
121601 -
IIC
+關(guān)注
關(guān)注
11文章
301瀏覽量
38359 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5068瀏覽量
97623
發(fā)布評論請先 登錄
相關(guān)推薦
評論