赞
踩
在学习IIC之前,需要弄清楚xilinx提供的iic函数
需要掌握三个函数
XIicPs_Config *XIicPs_LookupConfig(u16 DeviceId)
Looks up the device configuration based on the unique device ID. A table contains the configuration info for each device in the system.
根据唯一的设备ID查找设备配置。表中包含系统中每个设备的配置信息。
XIicPs_Config *XIicPs_LookupConfig(u16 DeviceId);
Initializes a specific XIicPs instance such that the driver is ready to use.
*
* The state of the device after initialization is:
* - Device is disabled
* - Slave mode
初始化特定的XIicPs实例,以便驱动程序可以使用。
*设备初始化后的状态为:
* -设备被禁用
* -从模式
s32 XIicPs_SetSClk(XIicPs *InstancePtr, u32 FsclHz)
对于XIicPs_Config *XIicPs_LookupConfig(u16 DeviceId)函数,定义在上面
这个函数返回的是一个XIicPs_Config的一个指针
XIicPs_Config定义如下
typedef struct {
u16 DeviceId; /**< Unique ID of device */
u32 BaseAddress; /**< Base address of the device */
u32 InputClockHz; /**< Input clock frequency */
} XIicPs_Config;
在XIicPs_LookupConfig中 首先定义了一个结构体指针指向为空XIicPs_Config *CfgPtr = NULL;一个index变量和一个for循环
其中XPAR_XIICPS_NUM_INSTANCES的值为1
for里面又用到了一个结构体数组XIicPs_ConfigTable[1],其实就是结构体里面嵌套结构体
定义如下:
这个是一个结构体数组的定义,并且在定义结构体数组的同时初始化了结构体,相当于如下:
XIicPs_Config XIicPs_ConfigTable[1] =
{
{
0,
0xE0004000,
111111115
}
};
然后判断XIicPs_ConfigTable[0].DeviceId 是否等于传入参数的DeviceId,等于的话
CfgPtr指针指向结构体数组的首地址,CfgPtr = &XIicPs_ConfigTable[Index];
然后返回结构体数组首地址。
这个结构体里面还内嵌了结构体
这里设置的deviceID就是前面设置的XPAR_PS7_I2C_0_DEVICE_ID。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。