Xilinx SDK API函数之GPIO函数

xgpio函数

1、int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId)

名称代码解释
函数名XGpio_Initialize初始化GPIO
参数1XGpio * InstancePtr指向GPIO实例的指针
参数2u16 DeviceIdID号,自动生成,在xparameters.h文件中定义
返回值intXST_SUCCESS/XST_FAILURE

应用举例: 
/// 
XGpio GpioOutput; 
XGpio_Initialize(&GpioOutput, XPAR_AXI_GPIO_0_DEVICE_ID) ; 
///

2、void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel,u32 DirectionMask)

名称代码解释
函数名XGpio_SetDataDirection设置GPIO为输入/输出
参数1XGpio * InstancePtr指向GPIO实例的指针
参数2unsigned Channel待设置GPIO的通道(Vivado中设置gpio IP时的设置通道,为1或2)
参数3u32 DirectionMask方向设置。0:output;1:input
返回值void 

应用举例: 
/// 
XGpio GpioOutput; 
XGpio_SetDataDirection(&GpioOutput,1,0x00000001) ; 
/// 
说明:关于参数Channel,在gpio的IP设置时有如下配置: 

配置为上半部分的GPIO,则Channel为1;若设置下半部分配置的GPIO 2,则Channel为2;

3、u32 XGpio_DiscreteRead(XGpio * InstancePtr, unsigned Channel)

名称代码解释
函数名XGpio_DiscreteRead读取GPIO的值
参数1XGpio * InstancePtr指向GPIO实例的指针
参数2unsigned Channel通道号,同上一函数
返回值u32最多32位的实际值

应用举例: 
/// 
XGpio GpioOutput; 
int btn_val ; 
btn_val =XGpio_DiscreteRead(&GpioOutput,1) ; 
///

3、void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data)

名称代码解释
函数名XGpio_DiscreteWrite写GPIO
参数1XGpio * InstancePtr指向GPIO实例的指针
参数2unsigned Channel通道号,同上一函数
参数3u32 Data需要写的值
返回值void 

应用举例: 
/// 
XGpio GpioOutput; 
int led_value = 0x02; 
XGpio_DiscreteWrite(&GpioOutput,1,led_value ) ; 
///

4、void XGpio_DiscreteSet(XGpio * InstancePtr, unsigned Channel, u32 Data)

名称代码解释
函数名XGpio_DiscreteSet置位某些GPIO的位(给某些GPIO的位写1)
参数1XGpio * InstancePtr指向GPIO实例的指针
参数2unsigned Channel通道号,同上一函数
参数3u32 Data需要给哪些位写1
返回值void 

XGpio_DiscreteSet是分三步操作:1、使用XGpio_DiscreteRead读回原来的GPIO状态:n0(假设读回值为n0);2、执行:n1=n0 | n(“|”为“位或”运算,n为XGpio_DiscreteSet第三个参数,即要置1的位数值);3、使用XGpio_DiscreteWrite将n1写回GPIO。当读回值n0等于0时,XGpio_DiscreteSet的n1=n,即XGpio_DiscreteSet等价于XGpio_DiscreteWrite;

其原型语言如下(参考:D:\Xilinx\14.7\ISE_DS\EDK\sw\XilinxProcessorIPLib\drivers\gpio_v3_00_a\src\xgpio_extra.c):

/**
* Set output discrete(s) to logic 1 for the specified GPIO channel.
*
* @param    InstancePtr is a pointer to an XGpio instance to be worked on.
* @param    Channel contains the channel of the GPIO (1 or 2) to operate on.
* @param    Mask is the set of bits that will be set to 1 in the discrete
*        data register. All other bits in the data register are
*        unaffected.
*
* @return    None.
*
* @note
*
* The hardware must be built for dual channels if this function is used
* with any channel other than 1.  If it is not, this function will assert.
*
* This API can only be used if the GPIO_IO ports in the IP are used for
* connecting to the external output ports.
*
*****************************************************************************/
void XGpio_DiscreteSet(XGpio * InstancePtr, unsigned Channel, u32 Mask)
{
    u32 Current;
    unsigned DataOffset;

    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
    Xil_AssertVoid((Channel == 1) ||
             ((Channel == 2) && (InstancePtr->IsDual == TRUE)));

    /*
     * Calculate the offset to the data register of the GPIO once
     */
    DataOffset = ((Channel - 1) * XGPIO_CHAN_OFFSET) + XGPIO_DATA_OFFSET;

    /*
     * Read the contents of the data register, merge in Mask and write
     * back results
     */
    Current = XGpio_ReadReg(InstancePtr->BaseAddress, DataOffset);
    Current |= Mask;
    XGpio_WriteReg(InstancePtr->BaseAddress, DataOffset, Current);
}

应用举例: 
/// 
XGpio GpioOutput; 
int led_value = 0x02; 
XGpio_DiscreteSet(&GpioOutput,1,led_value ) ; 
///

5、void XGpio_DiscreteClear(XGpio * InstancePtr, unsigned Channel, u32 Data)

名称代码解释
函数名XGpio_DiscreteClear清零某些GPIO的位(给某些GPIO的位写0)
参数1XGpio * InstancePtr指向GPIO实例的指针
参数2unsigned Channel通道号,同上一函数
参数3u32 Data需要给哪些位写0
返回值void 

XGpio_DiscreteClear也是分三步操作:1、使用XGpio_DiscreteRead读回原来的GPIO状态:n0;2、执行:n1=n0 & ~n(“&”为“位与”运算,“~”为“位非”运算,n为XGpio_DiscreteClear第三个参数,即要清0的位数值);3、使用XGpio_DiscreteWrite将n1写回GPIO。当读回值n0等于0时,即XGpio_DiscreteClear等价于全部清0,与n无关。

其原型语言如下:

/****************************************************************************/
/**
* Set output discrete(s) to logic 0 for the specified GPIO channel.
*
* @param    InstancePtr is a pointer to an XGpio instance to be worked on.
* @param    Channel contains the channel of the GPIO (1 or 2) to operate on.
* @param    Mask is the set of bits that will be set to 0 in the discrete
*        data register. All other bits in the data register are
*        unaffected.
*
* @return    None.
*
* @note
*
* The hardware must be built for dual channels if this function is used
* with any channel other than 1.  If it is not, this function will assert.
*
* This API can only be used if the GPIO_IO ports in the IP are used for
* connecting to the external output ports.
*
*****************************************************************************/
void XGpio_DiscreteClear(XGpio * InstancePtr, unsigned Channel, u32 Mask)
{
    u32 Current;
    unsigned DataOffset;

    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
    Xil_AssertVoid((Channel == 1) ||
             ((Channel == 2) && (InstancePtr->IsDual == TRUE)));

    /*
     * Calculate the offset to the data register of the GPIO once
     */
    DataOffset = ((Channel - 1) * XGPIO_CHAN_OFFSET) + XGPIO_DATA_OFFSET;

    /*
     * Read the contents of the data register, merge in Mask and write
     * back results
     */
    Current = XGpio_ReadReg(InstancePtr->BaseAddress, DataOffset);
    Current &= ~Mask;
    XGpio_WriteReg(InstancePtr->BaseAddress, DataOffset, Current);
}
 

应用举例: 
/// 
XGpio GpioOutput; 
int led_value = 0x02; 
XGpio_DiscreteSet(&GpioOutput,1,led_value ) ; 
///

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SDK中的GPIO函数是用于对GPIO(通用输入/输出)引脚进行操作的API函数。根据引用和引用的描述,Xilinx SDK中提供了两种不同的GPIO函数,分别是xgpio函数和xgpiops函数。 xgpio函数是用于操作通用输入/输出的函数,可以对指定的GPIO引脚进行读取或写入操作。这些函数可以帮助开发人员在Xilinx ZYNQ平台上控制硬件外设的输入和输出。 xgpiops函数Xilinx ZYNQ SDK中也是用于操作GPIO引脚的函数,但它提供了更多的功能和灵活性。根据引用的描述,xgpiops函数与xgpio函数类似,但具有更多的功能和选项。它可以用于读取或写入GPIO引脚的状态,以及执行其他与GPIO相关的操作。 总的来说,SDK中的GPIO函数提供了一种方便的方式来与硬件外设进行通信,并控制输入和输出操作。这些函数可以根据开发人员的需求进行使用,以实现特定的功能和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Xilinx SDK 初学之--API函数笔记(GPIO函数)](https://blog.csdn.net/tangkunjyy/article/details/62038253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [江山易改本性难移之ZYNQ SDK API函数笔记(GPIO函数)](https://blog.csdn.net/u013184273/article/details/118706711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值