⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mx27_gpio.h

📁 Microsoft WinCE 6.0 BSP FINAL release source code for use with the i.MX27ADS TO2 WCE600_FINAL_MX27_S
💻 H
📖 第 1 页 / 共 2 页
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
//
// Copyright (C) 2004, MOTOROLA, INC. All Rights Reserved
// THIS SOURCE CODE IS CONFIDENTIAL AND PROPRIETARY AND MAY NOT
// BE USED OR DISTRIBUTED WITHOUT THE WRITTEN PERMISSION OF
// MOTOROLA, INC.
//
//------------------------------------------------------------------------------
// Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT 
//------------------------------------------------------------------------------
//
// Header: mx27_gpio.h
//
// Provides definitions for GPIO module based on MX27.
//
//------------------------------------------------------------------------------
#ifndef __MX27_GPIO_H__
#define __MX27_GPIO_H__

#if __cplusplus
extern "C" {
#endif

//------------------------------------------------------------------------------
// GENERAL MODULE CONSTANTS
//------------------------------------------------------------------------------
#define GPIO_INTR_SOURCES_MAX           32
#define GPIO_PINS_PER_PORT              32

#define GPIO_PORT(port)                 GPIOCat(GPIO_PORT_, port)
#define GPIO_CONFIG_TYPE(type)          GPIOCat(GPIO_CFG_, type)
#define GPIO_INT_TYPE(type)             GPIOCat(GPIO_INT_TYPE_, type)
#define GPIO_OUTPUT_SOURCE(source)      GPIOCat(GPIO_OUTPUT_SOURCE_, source)
#define GPIO_INPUT_DEST(dest)           GPIOCat(GPIO_INPUT_DEST_, dest)

#define GPIO_PIN_MASK(pin)              (1U << (pin))
#define GPIO_PIN_2BITS_MASK(pin)        (3U << (((pin) % 16) << 1))
#define GPIO_PIN_2BITS_VAL(pin, val)    (val << (((pin) % 16) << 1))

typedef enum {
    GPIO_PORT_A,
    GPIO_PORT_B,
    GPIO_PORT_C,
    GPIO_PORT_D,
    GPIO_PORT_E,
    GPIO_PORT_F,
    GPIO_PORT_MAX,
} GPIO_PORT;

// Note: GPIO_INT_TYPE defines are in sync with ICR register
typedef enum {
    GPIO_INT_TYPE_POSEDGE,          // Rising edge triggered
    GPIO_INT_TYPE_NEGEDGE,          // Falling edge triggered
    GPIO_INT_TYPE_POSLEVEL,         // Level high triggered
    GPIO_INT_TYPE_NEGLEVEL,         // Level low triggered
    GPIO_INT_TYPE_MAX
} GPIO_INT_TYPE;

typedef enum {
    GPIO_CFG_PRI,
    GPIO_CFG_ALT,
    GPIO_CFG_MODULEIO,
    GPIO_CFG_INT,
    GPIO_CFG_IO,
    GPIO_CFG_MAX,
} GPIO_CFG_TYPE;

// Note: GPIO_OUTPUT_SOURCE_TYPE defines are in sync with OCR register
typedef enum {
    GPIO_OUTPUT_SOURCE_AIN,
    GPIO_OUTPUT_SOURCE_BIN,
    GPIO_OUTPUT_SOURCE_CIN,
    GPIO_OUTPUT_SOURCE_DATA,
    GPIO_OUTPUT_SOURCE_MAX,
} GPIO_OUTPUT_SOURCE_TYPE;

// Note: GPIO_INPUT_DEST_TYPE defines are in sync with ICONF register
typedef enum {
    GPIO_INPUT_DEST_AOUT,
    GPIO_INPUT_DEST_BOUT,
    GPIO_INPUT_DEST_INTSTATUS,
    GPIO_INPUT_DEST_MAX,
} GPIO_INPUT_DEST_TYPE;


//------------------------------------------------------------------------------
// REGISTER LAYOUT
//------------------------------------------------------------------------------
typedef struct
{
    REG32 DDIR;         // 0x00
    REG32 OCR1;         // 0x04
    REG32 OCR2;         // 0x08
    REG32 ICONFA1;      // 0x0C
    REG32 ICONFA2;      // 0x10
    REG32 ICONFB1;      // 0x14
    REG32 ICONFB2;      // 0x18
    REG32 DR;           // 0x1C
    REG32 GIUS;         // 0x20
    REG32 SSR;          // 0x24
    REG32 ICR1;         // 0x28
    REG32 ICR2;         // 0x2C
    REG32 IMR;          // 0x30
    REG32 ISR;          // 0x34
    REG32 GPR;          // 0x38
    REG32 SWR;          // 0x3C
    REG32 PUEN;         // 0x40
    REG32 RESERVED[47]; // Reserved 0x44-0x100
} CSP_GPIO_PORT_REGS, *PCSP_GPIO_PORT_REGS;

typedef struct {
    CSP_GPIO_PORT_REGS PORT[GPIO_PORT_MAX];
    REG32 PMASK;
} CSP_GPIO_REGS, *PCSP_GPIO_REGS;

//------------------------------------------------------------------------------
// REGISTER OFFSETS
//------------------------------------------------------------------------------
#define GPIO_DDIR_OFFSET            0x0000
#define GPIO_OCR1_OFFSET            0x0004
#define GPIO_OCR2_OFFSET            0x0008
#define GPIO_ICONFA1_OFFSET         0x000C
#define GPIO_ICONFA2_OFFSET         0x0010
#define GPIO_ICONFB1_OFFSET         0x0014
#define GPIO_ICONFB2_OFFSET         0x0018
#define GPIO_DR_OFFSET              0x001C
#define GPIO_GIUS_OFFSET            0x0020
#define GPIO_SSR_OFFSET             0x0024
#define GPIO_ICR1_OFFSET            0x0028
#define GPIO_ICR2_OFFSET            0x002C
#define GPIO_IMR_OFFSET             0x0030
#define GPIO_ISR_OFFSET             0x0034
#define GPIO_GPR_OFFSET             0x0038
#define GPIO_SWR_OFFSET             0x003C
#define GPIO_PUEN_OFFSET            0x0040
#define GPIO_PMASK_OFFSET           0x0600

//------------------------------------------------------------------------------
// REGISTER BIT FIELD POSITIONS (LEFT SHIFT)
//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
// REGISTER BIT FIELD WIDTHS
//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
// REGISTER BIT WRITE VALUES
//------------------------------------------------------------------------------
#define GPIO_DDIR_INPUT             0 // GPIO pin is input
#define GPIO_DDIR_OUTPUT            1 // GPIO pin is output

#define GPIO_OCR_AIN                0 // Output selected is Input A_IN[i]
#define GPIO_OCR_BIN                1 // Output selected is Input B_IN[i]
#define GPIO_OCR_CIN                2 // Output selected is Input C_IN[i]
#define GPIO_OCR_DATA               3 // Output selected is data register[i]

#define GPIO_ICONFA_GPIO            0 // A_OUT[i] is GPIO_In[i]
#define GPIO_ICONFA_ISR             1 // A_OUT[i] is Interrupt Status register[i]
#define GPIO_ICONFA_0               2 // A_OUT[i] is 0
#define GPIO_ICONFA_1               3 // A_OUT[i] is 1

#define GPIO_ICONFB_GPIO            0 // B_OUT[i] is GPIO_In[i]
#define GPIO_ICONFB_ISR             1 // B_OUT[i] is Interrupt Status register[i]
#define GPIO_ICONFB_0               2 // B_OUT[i] is 0
#define GPIO_ICONFB_1               3 // B_OUT[i] is 1

#define GPIO_GIUS_MUX               0 // GPIO pin is utilized for multiplexed function
#define GPIO_GIUS_GPIO              1 // GPIO pin is utilized for GPIO function

#define GPIO_ICR_RISE_EDGE          0 // Interrupt is rising edge
#define GPIO_ICR_FALL_EDGE          1 // Interrupt is falling edge
#define GPIO_ICR_HIGH_LEVEL         2 // Interrupt is high-level
#define GPIO_ICR_LOW_LEVEL          3 // Interrupt is low-level

#define GPIO_IMR_MASKED             0 // Interrupt is masked
#define GPIO_IMR_UNMASKED           1 // Interrupt is unmasked

#define GPIO_GPR_PRI                0 // Select primary pin function
#define GPIO_GPR_ALT                1 // Select alternate pin function

#define GPIO_SWR_NOEFFECT           0 // No reset
#define GPIO_SWR_RESET              1 // GPIO circuitry for Port X reset

#define GPIO_PUEN_TRISTATE          0 // Pin [i] is tri-stated when not driven
#define GPIO_PUEN_HIGH              1 // Pin [i] is pulled high1 when not driven

#define GPIO_PMASK_MASKED           0 // Port interrupt is masked
#define GPIO_PMASK_UNMASKED         1 // Port interrupt is unmasked


//------------------------------------------------------------------------------
//
// GPIO configuration setting macros:
// 
// These configuration setting macros are used to fill in the DDK_GPIO_CFG 
// structure. Each set of macros is defined for a certain module/function.
// Each set a macros is identified via an unique name. ie <MODULE>
//
//  MACRO                       settings
//  GPIO_<MODULE>_PORT          A / B / C / D / E / F 
//  GPIO_<MODULE>_CONFIG_TYPE   PRI / ALT / MODULEIO / INT / IO
//  GPIO_<MODULE>_MASK          set to 1 for pins used (for PRI, ALT and INT only)
//  GPIO_<MODULE>_IN_MASK       set to 1 for input pins (for MODULEIO and IO only)
//  GPIO_<MODULE>_OUT_MASK      set to 1 for output pins (for MODULEIO and IO only)
//  GPIO_<MODULE>_IN_DEST       AOUT / BOUT / MAX (for MODULEIO only, sets input pin dest)
//  GPIO_<MODULE>_OUT_SOURCE    AIN / BIN / CIN / MAX (for MODULEIO only, sets output pin source)
//  GPIO_<MODULE>_PIN           0 to 31 (For INTR, IO only)
//  GPIO_<MODULE>_INT_TYPE      POSLEVEL / POSEDGE / NEGLEVEL / NEGEDGE (for INT only)
//
// NOTES:
//  1) "MAX" means non applicable.
//  2) (PRI, ALT, MODULEIO) are defined here as these are chip specific.
//  3) (INT and IO macros) are defined in bsp_gpio.h since these are BSP 
//     specific.
//
//------------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// PRIMARY function modules
////////////////////////////////////////////////////////////////////////////////

// PCMCIA
//      PF7-14, PF16-20                 PRI
#define GPIO_PCMCIA_PORT                GPIO_PORT(F)
#define GPIO_PCMCIA_CONFIG_TYPE         PRI
#define GPIO_PCMCIA_MASK                (0x001F7F80)
#define GPIO_PCMCIA_PUEN                GPIO_PCMCIA_MASK

// UART1
//      PE12-15                         PRI
#define GPIO_UART1_PORT                 GPIO_PORT(E)
#define GPIO_UART1_CONFIG_TYPE          PRI
#define GPIO_UART1_MASK                 (0x0000F000)
#define GPIO_UART1_PUEN                 GPIO_UART1_MASK

// UART1_IR
//      PE12-13                         PRI
#define GPIO_UART1_IR_PORT              GPIO_PORT(E)
#define GPIO_UART1_IR_CONFIG_TYPE       PRI
#define GPIO_UART1_IR_MASK              (0x00003000)
#define GPIO_UART1_IR_PUEN              GPIO_UART1_IR_MASK

// UART2
//      PE3-4, PE6-7                    PRI
#define GPIO_UART2_PORT                 GPIO_PORT(E)
#define GPIO_UART2_CONFIG_TYPE          PRI
#define GPIO_UART2_MASK                 (0x000000D8)
#define GPIO_UART2_PUEN                 GPIO_UART2_MASK

// UART2_IR
//      PE6-7                           PRI
#define GPIO_UART2_IR_PORT              GPIO_PORT(E)
#define GPIO_UART2_IR_CONFIG_TYPE       PRI
#define GPIO_UART2_IR_MASK              (0x000000C0)
#define GPIO_UART2_IR_PUEN              GPIO_UART2_IR_MASK  

// UART3
//      PE8-11                          PRI
#define GPIO_UART3_PORT                 GPIO_PORT(E)
#define GPIO_UART3_CONFIG_TYPE          PRI
#define GPIO_UART3_MASK                 (0x00000F00)
#define GPIO_UART3_PUEN                 GPIO_UART3_MASK

// UART3_IR
//      PE8-9                           PRI
#define GPIO_UART3_IR_PORT              GPIO_PORT(E)
#define GPIO_UART3_IR_CONFIG_TYPE       PRI
#define GPIO_UART3_IR_MASK              (0x00000300)
#define GPIO_UART3_IR_PUEN              GPIO_UART3_IR_MASK  

// CSPI1
//      PD25-31,                        PRI     
#define GPIO_CSPI1_PORT                 GPIO_PORT(D)
#define GPIO_CSPI1_CONFIG_TYPE          PRI
#define GPIO_CSPI1_MASK                 (0xFE000000)
#define GPIO_CSPI1_PUEN                 GPIO_CSPI1_MASK
                                                     
// CSPI2
//      PD19-24,                        PRI     
#define GPIO_CSPI2_PORT                 GPIO_PORT(D)
#define GPIO_CSPI2_CONFIG_TYPE          PRI
#define GPIO_CSPI2_MASK                 (0x01F80000)
#define GPIO_CSPI2_PUEN                 GPIO_CSPI2_MASK

// LCDC
//      PA5-31 PRI function
#define GPIO_LCDC_PORT                  GPIO_PORT(A)
#define GPIO_LCDC_CONFIG_TYPE           PRI
#define GPIO_LCDC_MASK                  (0xFFFFFFE0)
#define GPIO_LCDC_PUEN                  GPIO_LCDC_MASK  

// PWMO
//      PE5,                            PRI
#define GPIO_PWMO_PORT                  GPIO_PORT(E)
#define GPIO_PWMO_CONFIG_TYPE           PRI
#define GPIO_PWMO_MASK                  (0x00000020)
#define GPIO_PWMO_PUEN                  GPIO_PWMO_MASK  

// I2C1
//      PD17,PD18 PRI function
#define GPIO_I2C1_PORT                  GPIO_PORT(D)
#define GPIO_I2C1_CONFIG_TYPE           PRI
#define GPIO_I2C1_MASK                  (0x00060000)
#define GPIO_I2C1_PUEN                  GPIO_I2C1_MASK 

// I2C2
//      PC5,PC6 PRI function
#define GPIO_I2C2_PORT                  GPIO_PORT(C)
#define GPIO_I2C2_CONFIG_TYPE           PRI
#define GPIO_I2C2_MASK                  (0x00000060)
#define GPIO_I2C2_PUEN                  GPIO_I2C2_MASK  

//SDHC1
//          PE18-23, PRI    PE18-20, 22 pullup, PE23 pull low
#define GPIO_SDHC1_PORT             GPIO_PORT(E)
#define GPIO_SDHC1_CONFIG_TYPE      PRI
#define GPIO_SDHC1_MASK             (0x00FC0000)
#define GPIO_SDHC1_DAT0_PIN         18
#define GPIO_SDHC1_DAT0_MASK        GPIO_PIN_MASK(GPIO_SDHC1_DAT0_PIN)
#define GPIO_SDHC1_PUEN             (0x00FC0000)       

// SDHC2
//          PB4-9, PRI  (PB4-5, 6,7, 8 pullup, PB 9 pull low)
#define GPIO_SDHC2_PORT             GPIO_PORT(B)
#define GPIO_SDHC2_CONFIG_TYPE      PRI
#define GPIO_SDHC2_MASK             (0x000003F0)
#define GPIO_SDHC2_DAT0_PIN         4
#define GPIO_SDHC2_DAT0_MASK        GPIO_PIN_MASK(GPIO_SDHC2_DAT0_PIN)
#define GPIO_SDHC2_PUEN             (0x000001F0)   //clear 9


// NFC
//      PF0-6, PRI function
#define GPIO_NFC_PORT                   GPIO_PORT(F)
#define GPIO_NFC_CONFIG_TYPE            PRI
#define GPIO_NFC_MASK                   (0x0000007F)
#define GPIO_NFC_PUEN                   GPIO_NFC_MASK

// ATAD1 (DATA0-14)
//      PD2-16, PRI function
#define GPIO_ATAD1_PORT                   GPIO_PORT(D)
#define GPIO_ATAD1_CONFIG_TYPE            PRI

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -