📄 mx27_gpio.h
字号:
//
// 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 + -