欢迎使用Markdown编辑器写博客
一、Xilinx PS外设架构
二、PS外设的使用
2.1 GPIO使用为例
1). Include the xgpiops.h file within the main application code
include “xparameters.h” // 本自硬件的ID
include “xgpiops.h” //特定硬件的功能函数
2). Define the output pin we want to toggle. In this case it is pin 8 within the bank of 10, MIO 47:
define ledpin 47
3). Declare the driver instance(设备实体,最为重要的对象):
XGpioPs Gpio;
4). Configure the GPIO and define the status and pointer variables required for initialization within the function you wish to use(配置指针,为具体设备实体服务):
int Status;
XGpioPs_Config *GPIOConfigPtr;
5). Initialize the GPIO Driver:
//GPIO Initilization
// 第一步,由来自于xparameters.h的ID,获得设备实体需要的配置参数
GPIOConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
// 第二步,由配置参数指针,去初始化设备实体
Status = XGpioPs_CfgInitialize(&Gpio, GPIOConfigPtr, GPIOConfigPtr ->BaseAddr);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
6). Set the direction of the GPIO pin and enable the output:
XGpioPs_SetDirectionPin(&Gpio, ledpin, 1);
XGpioPs_SetOutputEnablePin(&Gpio, ledpin, 1);
7). Write the desired output value to the GPIO pin:
XGpioPs_WritePin(&Gpio, ledpin, 0x0);
2.2 以XADC为例
1). Include the xgpiops.h file within the main application code
include “xparameters.h” // 本自硬件的ID
include “xadcps.h” //特定硬件的功能函数
2). Declare the driver instance(设备实体,最为重要的对象):
static XAdcPs XADCMonInst;
3). Configure pointer variables required for initialization within the function you wish to use(配置指针,为具体设备实体服务):
XAdcPs_Config *ConfigPtr;
4). Initialize the XADC Driver:
//XADC Configure pointer obtain
// 第一步,由来自于xparameters.h的ID,获得设备实体需要的配置参数
ConfigPtr = XAdcPs_LookupConfig(XPAR_AXI_XADC_0_DEVICE_ID);
if (ConfigPtr == NULL) {
return XST_FAILURE;
}
// 第二步,由配置参数指针,去初始化设备实体
Status_ADC = XAdcPs_CfgInitialize(XADCInstPtr,ConfigPtr,ConfigPtr->BaseAddress);
if(XST_SUCCESS != Status_ADC){
print(“ADC INIT FAILED\n\r”);
return XST_FAILURE;
}
5). Special function call for the XADC module
//self test
Status_ADC = XAdcPs_SelfTest(XADCInstPtr);
if (Status_ADC != XST_SUCCESS) {
return XST_FAILURE;
}
//stop sequencer
XAdcPs_SetSequencerMode(XADCInstPtr,XADCPS_SEQ_MODE_SINGCHAN);
2.3 总结
总体上来说,对PS端的外设,软件侧需要重点关注两个结构:一个是X***Ps_Config和另一个X***psInst,此处*指定特定功能模块名称,如Gpio,Adc;
前者由xparameters.h中定义的ID来进行初始化;
后者由X***Ps_Config指针结构进行初始化。
且这个顺序是固定的。