码迷,mamicode.com
首页 > 其他好文 > 详细

【SDK】控制PS侧GPIO

时间:2017-06-30 17:21:58      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:add   alt   ima   null   设置   写入   gpio   and   强制类型转换   

 

技术分享

封装函数位于bsp文件下xgpiops.h

void XGpioPs_SetDirection(XGpioPs *InstancePtr, u8 Bank, u32 Direction);// 设置IO的in/out方向
void XGpioPs_SetOutputEnable(XGpioPs *InstancePtr, u8 Bank, u32 OpEnable);// 设置out使能
void XGpioPs_WritePin(XGpioPs *InstancePtr, u32 Pin, u32 Data);//管脚置0/1

选XGpioPs_WritePin()函数分析(\gpiops_v3_1\src\xgpiops.c)

void XGpioPs_WritePin(XGpioPs *InstancePtr, u32 Pin, u32 Data)
{
    u32 RegOffset;
    u32 Value;
    u8 Bank;
    u8 PinNumber;
    u32 DataVar = Data;

    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
    Xil_AssertVoid(Pin < InstancePtr->MaxPinNum);

    /* Get the Bank number and Pin number within the bank. */
    XGpioPs_GetBankPin((u8)Pin, &Bank, &PinNumber);

    if (PinNumber > 15U) {
        /* There are only 16 data bits in bit maskable register. */
        PinNumber -= (u8)16;
        RegOffset = XGPIOPS_DATA_MSW_OFFSET;
    } else {
        RegOffset = XGPIOPS_DATA_LSW_OFFSET;
    }

    /*
     * Get the 32 bit value to be written to the Mask/Data register where
     * the upper 16 bits is the mask and lower 16 bits is the data.
     */
    DataVar &= (u32)0x01;// 只取最后1bit
    Value = ~((u32)1 << (PinNumber + 16U)) & ((DataVar << PinNumber) | 0xFFFF0000U);// 修改设定的pin位 其他mask掉
    XGpioPs_WriteReg(InstancePtr->GpioConfig.BaseAddr,
              ((u32)(Bank) * XGPIOPS_DATA_MASK_OFFSET) +
              RegOffset, Value);// 最终写入 MASK_DATA_0_LSW 寄存器
}

 

选XGpioPs_WriteReg()分析(xgpiops_hw.h)

#define XGpioPs_WriteReg(BaseAddr, RegOffset, Data)    \
        Xil_Out32((BaseAddr) + (u32)(RegOffset), (u32)(Data))// 带参宏把功能映射到底层函数上

 

分析Xil_Out32() (\standalone_v5_5\src\xil_io.c)

void Xil_Out32(UINTPTR Addr, u32 Value)
{
    volatile u32 *LocalAddr = (u32 *)Addr;// 强制类型转换 映射到地址
    *LocalAddr = Value;// 把数据写到该地址
}

 

--- 

【SDK】控制PS侧GPIO

标签:add   alt   ima   null   设置   写入   gpio   and   强制类型转换   

原文地址:http://www.cnblogs.com/caine/p/7099215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!