概述
AMD Xilinx Vitis內(nèi)部集成了各種外設(shè)的例程,為工程師提供了快速上手的代碼。
AMD Xilinx有很多開發(fā)板。各種單板的硬件參數(shù)不一定完全一致,有時(shí)需要根據(jù)單板硬件設(shè)計(jì)、Vivado中的Block Design設(shè)計(jì),修改外設(shè)例程的參數(shù)。
IIC EEPROM例程
本文描述在如何運(yùn)行IIC EEPROM例程。
硬件設(shè)計(jì)
運(yùn)行運(yùn)行IIC EEPROM例程,如果時(shí)Zynq-7000/MPSoC, 要在Block Design設(shè)計(jì)中使能PS的IIC控制器。如果是傳統(tǒng)FPGA,要在Block Design設(shè)計(jì)中添加MicaroBlaze和AXI IIC控制器。然后在Vivado中導(dǎo)出XSA文件,給Vitis后續(xù)設(shè)計(jì)使用。
創(chuàng)建Platform
在Vitis中,先使用Vitis創(chuàng)建Platform。具體步驟是,在Vitis的菜單 “File - New ” 中,選擇“Platform Project”, 指定名稱如“ac701_multiboot_hw_platform”, 再選擇對(duì)應(yīng)的XSA文件和 Processor 如 “micraoblaze_0”,再點(diǎn)擊“Finish”。
導(dǎo)入IIC EEPROM例程
1. 打開hw_platform工程。
2. 雙擊“platform.spr”文件。
3. 雙擊“micraoblaze_0”的 “board support package”。
4. 等待Drivers窗口顯示
5. 點(diǎn)擊axi_iic_0行右邊的import examples
6. 選擇"xiic_eeprom_example"
7. 點(diǎn)擊"OK"
之后Vitis會(huì)創(chuàng)建一個(gè)工程,包含文件xiic_eeprom_example.c。
IIC EEPROM例程更改
下面是在AMD Xilinx AC701 單板運(yùn)行IIC EEPROM例程所需要的更改。
中斷
IIC EEPROM例程使用了中斷,需要根據(jù)AC701 MicroBlaze硬件工程的設(shè)計(jì),修改中斷號(hào)。
文件xiic_eeprom_example.c中原來使用的中斷號(hào)是XPAR_INTC_0_IIC_0_VEC_ID,要改成新的中斷號(hào)。
舊的中斷號(hào)參數(shù):
#define IIC_INTR_ID XPAR_INTC_0_IIC_0_VEC_ID
在workspace下,能搜索到文件xparameters.h,包含每個(gè)設(shè)備的中斷號(hào)。 定義中斷號(hào)的宏的名稱,與Vivado硬件工程的BlockDesign中的IP名稱有關(guān),類似如下字符串:
#define XPAR_MICROBLAZE_0_AXI_INTC_AXI_IIC_0_IIC2INTC_IRPT_INTR 2U
因此,新的中斷號(hào)參數(shù)設(shè)置為:
#define IIC_INTR_ID XPAR_MICROBLAZE_0_AXI_INTC_AXI_IIC_0_IIC2INTC_IRPT_INTR
IIC MUX
為了節(jié)省管腳,AMD Xilinx開發(fā)板一般使用一個(gè)IIC_MUX(IIC Switch),把一路IIC總線擴(kuò)展成多路IIC總線。比如AC701使用了PCA9548擴(kuò)展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è)計(jì)設(shè)置。注意,是7位地址,是8位地址的二分之一。根據(jù)原理圖,AC701 PCA9548的IIC地址是0x74。
IIC_MUX分出多個(gè)IIC總線(CHANNEL)。EEPROM所在的IIC總線(CHANNEL)需要根據(jù)AC701的硬件設(shè)計(jì)設(shè)置,軟件代碼中對(duì)應(yīng)的設(shè)置是IIC_EEPROM_CHANNEL。AC701上,EEPROM的IIC總線(CHANNEL)是3,IIC_EEPROM_CHANNEL設(shè)置成8。這個(gè)參數(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總線上的地址。也請(qǐng)注意,是7位地址,是8位地址的二分之一。根據(jù)原理圖,AC701 EEPROM的IIC地址是0x54。
調(diào)試技巧
剛測試時(shí),不熟悉運(yùn)行流程。建議在函數(shù)入口處、返回處多加些打印,了解運(yùn)行流程。
在判斷函數(shù)的返回值時(shí),加入下列打印,能快速了解出錯(cuò)的代碼和原因。
if (Status != XST_SUCCESS) {
xil_printf("Fail at %s : %drn", __func__, __LINE__ );
return XST_FAILURE;
}
添加打印,成功運(yùn)行情況的的打印如下:
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文章
5484瀏覽量
134351 -
Xilinx
+關(guān)注
關(guān)注
71文章
2168瀏覽量
121777 -
IIC
+關(guān)注
關(guān)注
11文章
302瀏覽量
38405 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5093瀏覽量
97802
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論