s5p6818 gpio controller


s5p6818 gpio controller


reference datasheet and driver code;

Features

  • Programmable Pull-Up Control
  • Edge/Level Detect
  • Supports programmable Pull-Up resistance.
  • Supports four event detection modes
  • Rising Edge Detection
  • Falling Edge Detection
  • Low Level Detection
  • High Level Detection
  • The number of GPIOs: 160
//
/* arch/arm/mach-s5p6818/prototype/module/nx_gpio.h */

------------------------------------------------------------------------------
/// @defgroup   GPIO GPIO
//------------------------------------------------------------------------------
//@{

    /// @brief  GPIO Module's Register List
    struct  NX_GPIO_RegisterSet
    {
        volatile U32 GPIOxOUT;          ///< 0x00   : Output Register
        volatile U32 GPIOxOUTENB;       ///< 0x04   : Output Enable Register
        volatile U32 GPIOxDETMODE[2];   ///< 0x08   : Event Detect Mode Register
        volatile U32 GPIOxINTENB;       ///< 0x10   : Interrupt Enable Register
        volatile U32 GPIOxDET;          ///< 0x14   : Event Detect Register
        volatile U32 GPIOxPAD;          ///< 0x18   : PAD Status Register
        volatile U32 GPIOxPUENB;        ///< 0x1C   : Pull Up Enable Register
        volatile U32 GPIOxALTFN[2];     ///< 0x20   : Alternate Function Select Register
        volatile U32 GPIOxDETMODEEX;    ///< 0x28   : Event Detect Mode extended Register

        volatile U32 __Reserved[4];     ///< 0x2B   :
        volatile U32 GPIOxDETENB;       ///< 0x3C   : IntPend Detect Enable Register

        volatile U32 GPIOx_SLEW;                    ///< 0x40   : Slew Register
        volatile U32 GPIOx_SLEW_DISABLE_DEFAULT;    ///< 0x44   : Slew set On/Off Register
        volatile U32 GPIOx_DRV1;                    ///< 0x48   : drive strength LSB Register
        volatile U32 GPIOx_DRV1_DISABLE_DEFAULT;    ///< 0x4C   : drive strength LSB set On/Off Register
        volatile U32 GPIOx_DRV0;                    ///< 0x50   : drive strength MSB Register
        volatile U32 GPIOx_DRV0_DISABLE_DEFAULT;    ///< 0x54   : drive strength MSB set On/Off Register
        volatile U32 GPIOx_PULLSEL;                 ///< 0x58   : Pull UP/DOWN Selection Register
        volatile U32 GPIOx_PULLSEL_DISABLE_DEFAULT; ///< 0x5C   : Pull UP/DOWN Selection On/Off Register
        volatile U32 GPIOx_PULLENB;                 ///< 0x60   : Pull Enable/Disable Register
        volatile U32 GPIOx_PULLENB_DISABLE_DEFAULT; ///< 0x64   : Pull Enable/Disable selection On/Off Register
        volatile U32 GPIOx_InputMuxSelect0;         ///< 0x68
        volatile U32 GPIOx_InputMuxSelect1;         ///< 0x6C
        U8 __Reserved1[0x1000-0x70];
    };

    ///@brief   GPIO Interrupts for interrupt interface
    enum
    {
        NX_GPIO_INT_GPIO0   = 0,    ///<    GPIO 0 Interrupt
        NX_GPIO_INT_GPIO1   = 1,    ///<    GPIO 1 Interrupt
        NX_GPIO_INT_GPIO2   = 2,    ///<    GPIO 2 Interrupt
        NX_GPIO_INT_GPIO3   = 3,    ///<    GPIO 3 Interrupt
        NX_GPIO_INT_GPIO4   = 4,    ///<    GPIO 4 Interrupt
        NX_GPIO_INT_GPIO5   = 5,    ///<    GPIO 5 Interrupt
        NX_GPIO_INT_GPIO6   = 6,    ///<    GPIO 6 Interrupt
        NX_GPIO_INT_GPIO7   = 7,    ///<    GPIO 7 Interrupt
        NX_GPIO_INT_GPIO8   = 8,    ///<    GPIO 8 Interrupt
        NX_GPIO_INT_GPIO9   = 9,    ///<    GPIO 9 Interrupt
        NX_GPIO_INT_GPIO10  = 10,   ///<    GPIO 10 Interrupt
        NX_GPIO_INT_GPIO11  = 11,   ///<    GPIO 11 Interrupt
        NX_GPIO_INT_GPIO12  = 12,   ///<    GPIO 12 Interrupt
        NX_GPIO_INT_GPIO13  = 13,   ///<    GPIO 13 Interrupt
        NX_GPIO_INT_GPIO14  = 14,   ///<    GPIO 14 Interrupt
        NX_GPIO_INT_GPIO15  = 15,   ///<    GPIO 15 Interrupt
        NX_GPIO_INT_GPIO16  = 16,   ///<    GPIO 16 Interrupt
        NX_GPIO_INT_GPIO17  = 17,   ///<    GPIO 17 Interrupt
        NX_GPIO_INT_GPIO18  = 18,   ///<    GPIO 18 Interrupt
        NX_GPIO_INT_GPIO19  = 19,   ///<    GPIO 19 Interrupt
        NX_GPIO_INT_GPIO20  = 20,   ///<    GPIO 20 Interrupt
        NX_GPIO_INT_GPIO21  = 21,   ///<    GPIO 21 Interrupt
        NX_GPIO_INT_GPIO22  = 22,   ///<    GPIO 22 Interrupt
        NX_GPIO_INT_GPIO23  = 23,   ///<    GPIO 23 Interrupt
        NX_GPIO_INT_GPIO24  = 24,   ///<    GPIO 24 Interrupt
        NX_GPIO_INT_GPIO25  = 25,   ///<    GPIO 25 Interrupt
        NX_GPIO_INT_GPIO26  = 26,   ///<    GPIO 26 Interrupt
        NX_GPIO_INT_GPIO27  = 27,   ///<    GPIO 27 Interrupt
        NX_GPIO_INT_GPIO28  = 28,   ///<    GPIO 28 Interrupt
        NX_GPIO_INT_GPIO29  = 29,   ///<    GPIO 29 Interrupt
        NX_GPIO_INT_GPIO30  = 30,   ///<    GPIO 30 Interrupt
        NX_GPIO_INT_GPIO31  = 31    ///<    GPIO 31 Interrupt
    };

    /// @brief  GPIO interrupt mode
    typedef enum
    {
        NX_GPIO_INTMODE_LOWLEVEL    = 0UL,      ///< Low level detect
        NX_GPIO_INTMODE_HIGHLEVEL   = 1UL,      ///< High level detect
        NX_GPIO_INTMODE_FALLINGEDGE = 2UL,      ///< Falling edge detect
        NX_GPIO_INTMODE_RISINGEDGE  = 3UL,      ///< Rising edge detect
        NX_GPIO_INTMODE_BOTHEDGE    = 4UL       ///< both (rise and falling) edge detect

    }NX_GPIO_INTMODE;

    /// @brief  I/O mode
    typedef enum
    {
        NX_GPIO_PADFUNC_0           = 0UL,          ///< Alternate function 0
        NX_GPIO_PADFUNC_1           = 1UL,          ///< Alternate function 1
        NX_GPIO_PADFUNC_2           = 2UL,          ///< Alternate function 2
        NX_GPIO_PADFUNC_3           = 3UL           ///< Alternate function 3

    } NX_GPIO_PADFUNC ;

    typedef enum
    {
        NX_GPIO_DRVSTRENGTH_0       = 0UL,
        NX_GPIO_DRVSTRENGTH_1       = 1UL,
        NX_GPIO_DRVSTRENGTH_2       = 2UL,
        NX_GPIO_DRVSTRENGTH_3       = 3UL

    }NX_GPIO_DRVSTRENGTH;

    typedef enum
    {
        NX_GPIO_PULL_DOWN           = 0UL,
        NX_GPIO_PULL_UP             = 1UL,
        NX_GPIO_PULL_OFF            = 2UL
    } NX_GPIO_PULL;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM