概述
amd xilinx vitis内部集成了各种外设的例程,为工程师提供了快速上手的代码。
amd xilinx有很多开发板。各种单板的硬件参数不一定完全一致,有时需要根据单板硬件设计、vivado中的block design设计,修改外设例程的参数。
iic eeprom例程
本文描述在如何运行iic eeprom例程。
硬件设计
运行运行iic eeprom例程,如果时zynq-7000/mpsoc, 要在block design设计中使能ps的iic控制器。如果是传统fpga,要在block design设计中添加micaroblaze和axi iic控制器。然后在vivado中导出xsa文件,给vitis后续设计使用。
创建platform
在vitis中,先使用vitis创建platform。具体步骤是,在vitis的菜单 “file - new ” 中,选择“platform project”, 指定名称如“ac701_multiboot_hw_platform”, 再选择对应的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会创建一个工程,包含文件xiic_eeprom_example.c。
iic eeprom例程更改
下面是在amd xilinx ac701 单板运行iic eeprom例程所需要的更改。
中断
iic eeprom例程使用了中断,需要根据ac701 microblaze硬件工程的设计,修改中断号。
文件xiic_eeprom_example.c中原来使用的中断号是xpar_intc_0_iic_0_vec_id,要改成新的中断号。
旧的中断号参数:
#define iic_intr_id xpar_intc_0_iic_0_vec_id
在workspace下,能搜索到文件xparameters.h,包含每个设备的中断号。 定义中断号的宏的名称,与vivado硬件工程的blockdesign中的ip名称有关,类似如下字符串:
#define xpar_microblaze_0_axi_intc_axi_iic_0_iic2intc_irpt_intr 2u
因此,新的中断号参数设置为:
#define iic_intr_id xpar_microblaze_0_axi_intc_axi_iic_0_iic2intc_irpt_intr
iic mux
为了节省管脚,amd xilinx开发板一般使用一个iic_mux(iic switch),把一路iic总线扩展成多路iic总线。比如ac701使用了pca9548扩展iic总线。如果使用了iic_mux(iic switch), 要定义宏iic_mux_enable,并且设置iic_mux_address、iic_eeprom_channel。定义iic_mux_enable后,就使能了函数muxinit( )。
iic_mux_address是iic_mux在与mpsoc/microblaze之间连接的iic总线上的地址,需要根据ac701的硬件设计设置。注意,是7位地址,是8位地址的二分之一。根据原理图,ac701 pca9548的iic地址是0x74。
iic_mux分出多个iic总线(channel)。eeprom所在的iic总线(channel)需要根据ac701的硬件设计设置,软件代码中对应的设置是iic_eeprom_channel。ac701上,eeprom的iic总线(channel)是3,iic_eeprom_channel设置成8。这个参数最后在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位地址的二分之一。根据原理图,ac701 eeprom的iic地址是0x54。
调试技巧
刚测试时,不熟悉运行流程。建议在函数入口处、返回处多加些打印,了解运行流程。
在判断函数的返回值时,加入下列打印,能快速了解出错的代码和原因。
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
本文转载自:博客园
被英特尔收购后 Mobileye已经尝到甜头
5G终端应用行业整体发展现状如何?
基于功率放大器的声频定向扬声器系统
如何通过调整晶体管的输入和输出增大放大器的增益
数字化医院发展的三个阶段分析
AMD Xilinx AC701单板运行IIC EEPROM例程
基于XCV200/300PQFP240和TMS320C40实现背板开发设计
仪器仪表故障解决方法及维修保养建议
基于RFID的自动报站系统设计
细谈柔性显示 国内厂商有望弯道超车
iphone8上市时间确定:苹果正式发邀请函!外观、配置、价格惊喜不断,量产不足必将掀起抢购热潮
利亚德拟公开发行8亿元可转换公司债券 资金将用于LED应用产品的研发与生产
搭建上下游采购直通车,CS Show2014即将开幕
台前与幕后都在竞争的5G怎样
华为Mate 30后置五摄 OPPO Reno系列开启预约
投资业务有了区块链以后会发生什么改变
2023CESIS分论坛——超充技术嘉宾阵容重磅揭晓!
我国3C电子工业机器人的成熟还在艰苦卓绝的努力
对抗三星,大陆台湾态度有别
功率二极管的十种用途