• XILINX GPIO驱动分析


    High Level – level 1 hardware driver api

    Low Level – level 0 hardware driver api

    XGPIO.H

    #include "xil_types.h"

    #include "xil_assert.h"

    #include "xstatus.h"

    #include "xgpio_l.h"

    Define:

    XGpio_CfgInitialize

    XGpio_SetDataDirection

    XGPIO.C

        #include "xgpio.h"

    #include "xstatus.h"

    Implement:

    XGpio_CfgInitialize

    XGpio_SetDataDirection

    <==上面API:

    #include "xgpio_l.h" (xgpio low level)

    XGPIO_L.H:

        #include "xil_types.h"

    #include "xil_assert.h"

    #include "xil_io.h"

    #define XGPIO_DATA_OFFSET    0x0 /**< Data register for 1st channel */

    #define XGPIO_TRI_OFFSET    0x1 /**< I/O direction reg for 1st channel */

    #define XGPIO_DATA2_OFFSET    0x2 /**< Data register for 2nd channel */

    #define XGPIO_TRI2_OFFSET    0x3 /**< I/O direction reg for 2nd channel */

     

    #define XGPIO_GIE_OFFSET    0x47 /**< Global interrupt enable register */

    #define XGPIO_ISR_OFFSET    0x48 /**< Interrupt status register */

    #define XGPIO_IER_OFFSET    0x4A /**< Interrupt enable register */

    #define XGpio_ReadReg     Xil_In32 ==> (xil_io.c)

    XGPIO_L.C文件不存在,因为LOW LEVEL的驱动全是MACRO写的,不需要C文件实现。

    < == 上面API:

    #include "xil_io.h"

    XIL_IO.H:

    #include "xil_types.h"

    #include "xpseudo_asm.h"

    #include "xil_printf.h"

    DEFINE:

        u8 Xil_In8(u32 Addr);

    u16 Xil_In16(u32 Addr);

    u32 Xil_In32(u32 Addr);

    XIL_IO.C

        #include "xil_io.h"

    #include "xil_types.h"

    #include "xil_assert.h"

    #include "xpseudo_asm.h"

    #include "xreg_cortexa9.h"

    Implement:

    u8 Xil_In8(u32 Addr);

    u16 Xil_In16(u32 Addr);

    u32 Xil_In32(u32 Addr);

    <= =上层API:

    H:

    #include "xpseudo_asm.h"

    C:

    #include "xpseudo_asm.h"

    #include "xreg_cortexa9.h"

    XPSEUDO_ASM.H 没有C文件

    #include "xreg_cortexa9.h"

        #include "xpseudo_asm_gcc.h"

    XREG_CORTEXA9.H 没有C文件

        /* GPRs */

    #define XREG_GPR0                r0

    #define XREG_GPR1                r1

    #define XREG_GPR2                r2

    #define XREG_GPR14                r14

    #define XREG_GPR15                r15

    #define XREG_CPSR                cpsr

    XPSEUDO_ASM_GCC.H:没有C文件

    /* pseudo assembler instructions */

    #define mfcpsr()    ({unsigned int rval; \

                 __asm__ __volatile__(\

                 "mrs    %0, cpsr\n"\

                 : "=r" (rval)\

                 );\

                 rval;\

                 })

     

    /* Memory Operations */

    #define ldr(adr)    ({unsigned long rval; \

                 __asm__ __volatile__(\

                 "ldr    %0,[%1]"\

                 : "=r" (rval) : "r" (adr)\

                 );\

                 rval;\

                 })

     

    下图是各个文件与其对应的功能图:

    下图是GPIO模块驱动API的层次结构图:

  • 相关阅读:
    A*算法研究
    C++实现动态数组
    Sublime Text3括号配对与代码包围效果BracketHighlighter
    SublimeREPL配置Python3开发
    Ubuntu16.04下使用sublime text3搭建Python IDE
    Netbeans使用笔记
    vscode: Visual Studio Code 常用快捷键
    OKR 第一阶段
    浏览器是如何工作的
    javascriptdocument load 和document ready的区别
  • 原文地址:https://www.cnblogs.com/dragen/p/3113642.html
Copyright © 2020-2023  润新知