Support imx6q-sabrelite userland timer driver.
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
ifeq ($(BOARD), imx6q-sabrelite)
|
||||
toolchain ?= arm-none-eabi-
|
||||
endif
|
||||
ifeq ($(BOARD), zynq7000-zc702)
|
||||
toolchain ?= arm-xilinx-eabi-
|
||||
endif
|
||||
cc = ${toolchain}gcc
|
||||
ld = ${toolchain}g++
|
||||
objdump = ${toolchain}objdump
|
||||
user_ldflags = -N -Ttext 0
|
||||
|
||||
cflags = -std=c11 -march=armv7-a -mtune=cortex-a9 -nostdlib -nodefaultlibs -mfloat-abi=soft -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
|
||||
c_useropts = -O0
|
||||
|
||||
INC_DIR = -I$(KERNEL_ROOT)/services/app \
|
||||
-I$(KERNEL_ROOT)/services/boards/$(BOARD) \
|
||||
-I$(KERNEL_ROOT)/services/lib/serial \
|
||||
-I$(KERNEL_ROOT)/services/drivers/$(BOARD)/include \
|
||||
-I$(KERNEL_ROOT)/services/drivers/$(BOARD)/enet \
|
||||
-I$(KERNEL_ROOT)/services/lib/usyscall \
|
||||
-I$(KERNEL_ROOT)/services/lib/ipc
|
||||
|
||||
all: gpio.o imx6dq_gpio_map.o
|
||||
@mv $^ $(KERNEL_ROOT)/services/app
|
||||
|
||||
%.o: %.c
|
||||
@echo "cc $^"
|
||||
@${cc} ${cflags} ${c_useropts} ${INC_DIR} -o $@ -c $^
|
||||
@@ -0,0 +1,260 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2012, Freescale Semiconductor, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* o Redistributions of source code must retain the above copyright notice, this list
|
||||
* of conditions and the following disclaimer.
|
||||
*
|
||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*!
|
||||
* @file gpio.c
|
||||
* @brief Driver to control the GPIO module.
|
||||
* @ingroup diag_gpio
|
||||
*/
|
||||
|
||||
#include "gpio.h"
|
||||
#include "gpio_map.h"
|
||||
#include "regsgpio.h"
|
||||
#include "regsiomuxc.h"
|
||||
#include "sdk_types.h"
|
||||
|
||||
#include "libserial.h"
|
||||
|
||||
int32_t gpio_get_port_count(void)
|
||||
{
|
||||
return HW_GPIO_INSTANCE_COUNT;
|
||||
}
|
||||
|
||||
int gpio_set_gpio(int32_t port, int32_t pin)
|
||||
{
|
||||
// Validate port and pin before indexing into the map arrays.
|
||||
if (port < 1 || port > HW_GPIO_INSTANCE_COUNT || pin < 0 || pin > 31) {
|
||||
debug_printf("Invalid GPIO port or pin number.\n");
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
// Look up mux register address.
|
||||
uint32_t addr = k_gpio_mux_registers[port - 1][pin];
|
||||
if (!addr) {
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
volatile uint32_t* reg = (volatile uint32_t*)addr;
|
||||
|
||||
// Switch mux to ALT5, which is always GPIO mode. We're just using this register's
|
||||
// BM_ and BF_ macros because they are convenient, and is present on all three mx6.
|
||||
*reg = (*reg & ~BM_IOMUXC_SW_MUX_CTL_PAD_KEY_COL0_MUX_MODE)
|
||||
| BF_IOMUXC_SW_MUX_CTL_PAD_KEY_COL0_MUX_MODE_V(ALT5);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
int32_t gpio_set_direction(int32_t port, int32_t pin, int32_t dir)
|
||||
{
|
||||
uint32_t oldVal = 0, newVal = 0;
|
||||
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
oldVal = HW_GPIO_GDIR_RD(port);
|
||||
|
||||
if (dir == GPIO_GDIR_INPUT)
|
||||
newVal = oldVal & (~(1 << pin));
|
||||
else
|
||||
newVal = oldVal | (1 << pin);
|
||||
|
||||
HW_GPIO_GDIR_WR(port, newVal);
|
||||
|
||||
return 0; // SUCCESS;
|
||||
}
|
||||
|
||||
int32_t gpio_get_direction(int32_t port, int32_t pin)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return (HW_GPIO_GDIR_RD(port) >> pin) & 1;
|
||||
}
|
||||
|
||||
int32_t gpio_set_level(int32_t port, int32_t pin, uint32_t level)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
uint32_t mask = 1 << pin;
|
||||
|
||||
int32_t dir = HW_GPIO_GDIR_RD(port) & mask ? GPIO_GDIR_OUTPUT : GPIO_GDIR_INPUT;
|
||||
|
||||
if (dir != GPIO_GDIR_OUTPUT) {
|
||||
printf("GPIO_PORT%d_%d is not configured to be output!\n", port, pin);
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t value = HW_GPIO_DR_RD(port); // read current value
|
||||
|
||||
if (level == GPIO_LOW_LEVEL) // fix it up
|
||||
value &= ~mask;
|
||||
else if (level == GPIO_HIGH_LEVEL)
|
||||
value |= mask;
|
||||
|
||||
HW_GPIO_DR_WR(port, value); // write new value
|
||||
|
||||
return 0; // SUCCESS;
|
||||
}
|
||||
|
||||
int32_t gpio_get_level(int32_t port, int32_t pin)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
uint32_t mask = 1 << pin;
|
||||
|
||||
return HW_GPIO_DR_RD(port) & mask ? GPIO_HIGH_LEVEL : GPIO_LOW_LEVEL;
|
||||
}
|
||||
|
||||
int32_t gpio_set_interrupt_config(int32_t port, int32_t pin, int32_t config)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (pin < 16) {
|
||||
// GPIOs 0-15 use ICR1 register
|
||||
uint32_t value = HW_GPIO_ICR1_RD(port); // read current value
|
||||
uint32_t field_offset = pin * 2; // fields are 2 bits wide
|
||||
value &= ~(BM_GPIO_ICR1_ICR0 << field_offset); // clear specified field
|
||||
value |= config << field_offset; // set specified field
|
||||
HW_GPIO_ICR1_WR(port, value); // write new value
|
||||
} else {
|
||||
// GPIOs 16-31 use ICR2 register
|
||||
uint32_t value = HW_GPIO_ICR2_RD(port); // read current value
|
||||
uint32_t field_offset = (pin - 16) * 2; // fields are 2 bits wide
|
||||
value &= ~(BM_GPIO_ICR2_ICR16 << field_offset); // clear specified field
|
||||
value |= config << field_offset; // set specified field
|
||||
HW_GPIO_ICR1_WR(port, value); // write new value
|
||||
}
|
||||
|
||||
return 0; // SUCCESS;
|
||||
}
|
||||
|
||||
int32_t gpio_set_interrupt_mask(int32_t port, int32_t pin, int32_t mask)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
uint32_t value = HW_GPIO_IMR_RD(port);
|
||||
|
||||
if (mask == GPIO_IMR_MASKED)
|
||||
value &= ~(1 << pin);
|
||||
else
|
||||
value |= 1 << pin;
|
||||
|
||||
HW_GPIO_GDIR_WR(port, value);
|
||||
|
||||
return 0; // SUCCESS;
|
||||
}
|
||||
|
||||
int32_t gpio_get_interrupt_status(int32_t port, int32_t pin)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return HW_GPIO_ISR_RD(port) & (1 << pin) ? GPIO_ISR_ASSERTED : GPIO_ISR_NOT_ASSERTED;
|
||||
}
|
||||
|
||||
int32_t gpio_clear_interrupt(int32_t port, int32_t pin)
|
||||
{
|
||||
if ((port > HW_GPIO_INSTANCE_COUNT) || (port < 1)) {
|
||||
debug_printf("Invalid GPIO Instance GPIO_PORT%d parameter. GPIO_PORT1~GPIO_PORT%d is allowed.\n",
|
||||
port, HW_GPIO_INSTANCE_COUNT);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((pin > 31) || (pin < 0)) {
|
||||
debug_printf("Invalid GPIO Pin %d parameter. Pin 0~31 is allowed.\n", pin);
|
||||
return INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
uint32_t value = HW_GPIO_ISR_RD(port);
|
||||
value |= 1 << pin;
|
||||
HW_GPIO_ISR_WR(port, value);
|
||||
|
||||
return 0; // SUCCESS;
|
||||
}
|
||||
@@ -0,0 +1,271 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Freescale Semiconductor, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL FREESCALE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* WARNING! DO NOT EDIT THIS FILE DIRECTLY!
|
||||
*
|
||||
* This file was generated automatically and any changes may be lost.
|
||||
*/
|
||||
|
||||
#include "gpio_map.h"
|
||||
#include "regsiomuxc.h"
|
||||
|
||||
// First subscript is bank, second is pin within the bank. There are always 32 pin
|
||||
// entries per bank. If a pin does not have an assigned GPIO, its address is 0.
|
||||
const uint32_t k_gpio_mux_registers[HW_GPIO_INSTANCE_COUNT][GPIO_PIN_COUNT] = {
|
||||
// Bank 1
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO00_ADDR, // Pin 0
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO01_ADDR, // Pin 1
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO02_ADDR, // Pin 2
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO03_ADDR, // Pin 3
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO04_ADDR, // Pin 4
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO05_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO06_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO07_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO08_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO09_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD2_CLK_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD2_CMD_ADDR, // Pin 11
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD2_DATA3_ADDR, // Pin 12
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD2_DATA2_ADDR, // Pin 13
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD2_DATA1_ADDR, // Pin 14
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD2_DATA0_ADDR, // Pin 15
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA0_ADDR, // Pin 16
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA1_ADDR, // Pin 17
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD1_CMD_ADDR, // Pin 18
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA2_ADDR, // Pin 19
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD1_CLK_ADDR, // Pin 20
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD1_DATA3_ADDR, // Pin 21
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_MDIO_ADDR, // Pin 22
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_REF_CLK_ADDR, // Pin 23
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_RX_ER_ADDR, // Pin 24
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_CRS_DV_ADDR, // Pin 25
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_RX_DATA1_ADDR, // Pin 26
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_RX_DATA0_ADDR, // Pin 27
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_TX_EN_ADDR, // Pin 28
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_TX_DATA1_ADDR, // Pin 29
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_TX_DATA0_ADDR, // Pin 30
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_ENET_MDC_ADDR, // Pin 31
|
||||
},
|
||||
// Bank 2
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA00_ADDR, // Pin 0
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA01_ADDR, // Pin 1
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA02_ADDR, // Pin 2
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA03_ADDR, // Pin 3
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA04_ADDR, // Pin 4
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA05_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA06_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_DATA07_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA0_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA1_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA2_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA3_ADDR, // Pin 11
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA4_ADDR, // Pin 12
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA5_ADDR, // Pin 13
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA6_ADDR, // Pin 14
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_DATA7_ADDR, // Pin 15
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR22_ADDR, // Pin 16
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR21_ADDR, // Pin 17
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR20_ADDR, // Pin 18
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR19_ADDR, // Pin 19
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR18_ADDR, // Pin 20
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR17_ADDR, // Pin 21
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR16_ADDR, // Pin 22
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_CS0_ADDR, // Pin 23
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_CS1_ADDR, // Pin 24
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_OE_ADDR, // Pin 25
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_RW_ADDR, // Pin 26
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_LBA_ADDR, // Pin 27
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_EB0_ADDR, // Pin 28
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_EB1_ADDR, // Pin 29
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_EB2_ADDR, // Pin 30
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_EB3_ADDR, // Pin 31
|
||||
},
|
||||
// Bank 3
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD00_ADDR, // Pin 0
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD01_ADDR, // Pin 1
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD02_ADDR, // Pin 2
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD03_ADDR, // Pin 3
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD04_ADDR, // Pin 4
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD05_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD06_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD07_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD08_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD09_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD10_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD11_ADDR, // Pin 11
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD12_ADDR, // Pin 12
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD13_ADDR, // Pin 13
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD14_ADDR, // Pin 14
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_AD15_ADDR, // Pin 15
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA16_ADDR, // Pin 16
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA17_ADDR, // Pin 17
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA18_ADDR, // Pin 18
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA19_ADDR, // Pin 19
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA20_ADDR, // Pin 20
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA21_ADDR, // Pin 21
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA22_ADDR, // Pin 22
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA23_ADDR, // Pin 23
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA24_ADDR, // Pin 24
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA25_ADDR, // Pin 25
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA26_ADDR, // Pin 26
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA27_ADDR, // Pin 27
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA28_ADDR, // Pin 28
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA29_ADDR, // Pin 29
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA30_ADDR, // Pin 30
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_DATA31_ADDR, // Pin 31
|
||||
},
|
||||
// Bank 4
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO19_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_COL0_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_ROW0_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_COL1_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_ROW1_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_COL2_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_ROW2_ADDR, // Pin 11
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_COL3_ADDR, // Pin 12
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_ROW3_ADDR, // Pin 13
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_COL4_ADDR, // Pin 14
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_KEY_ROW4_ADDR, // Pin 15
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DI0_DISP_CLK_ADDR, // Pin 16
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DI0_PIN15_ADDR, // Pin 17
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DI0_PIN02_ADDR, // Pin 18
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DI0_PIN03_ADDR, // Pin 19
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DI0_PIN04_ADDR, // Pin 20
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA00_ADDR, // Pin 21
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA01_ADDR, // Pin 22
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA02_ADDR, // Pin 23
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA03_ADDR, // Pin 24
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA04_ADDR, // Pin 25
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA05_ADDR, // Pin 26
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA06_ADDR, // Pin 27
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA07_ADDR, // Pin 28
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA08_ADDR, // Pin 29
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA09_ADDR, // Pin 30
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA10_ADDR, // Pin 31
|
||||
},
|
||||
// Bank 5
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_WAIT_ADDR, // Pin 0
|
||||
0, // Unassigned GPIO pin 1
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR25_ADDR, // Pin 2
|
||||
0, // Unassigned GPIO pin 3
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR24_ADDR, // Pin 4
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA11_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA12_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA13_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA14_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA15_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA16_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA17_ADDR, // Pin 11
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA18_ADDR, // Pin 12
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA19_ADDR, // Pin 13
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA20_ADDR, // Pin 14
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA21_ADDR, // Pin 15
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA22_ADDR, // Pin 16
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_DISP0_DATA23_ADDR, // Pin 17
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_PIXCLK_ADDR, // Pin 18
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_ADDR, // Pin 19
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA_EN_ADDR, // Pin 20
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_VSYNC_ADDR, // Pin 21
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA04_ADDR, // Pin 22
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA05_ADDR, // Pin 23
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA06_ADDR, // Pin 24
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA07_ADDR, // Pin 25
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA08_ADDR, // Pin 26
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA09_ADDR, // Pin 27
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA10_ADDR, // Pin 28
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA11_ADDR, // Pin 29
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA12_ADDR, // Pin 30
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA13_ADDR, // Pin 31
|
||||
},
|
||||
// Bank 6
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA14_ADDR, // Pin 0
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA15_ADDR, // Pin 1
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA16_ADDR, // Pin 2
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA17_ADDR, // Pin 3
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA18_ADDR, // Pin 4
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA19_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR23_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_CLE_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_ALE_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_WP_B_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_READY_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_CS0_B_ADDR, // Pin 11
|
||||
0, // Unassigned GPIO pin 12
|
||||
0, // Unassigned GPIO pin 13
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_CS1_B_ADDR, // Pin 14
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_CS2_B_ADDR, // Pin 15
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_NAND_CS3_B_ADDR, // Pin 16
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA7_ADDR, // Pin 17
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA6_ADDR, // Pin 18
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_TXC_ADDR, // Pin 19
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_TD0_ADDR, // Pin 20
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_TD1_ADDR, // Pin 21
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_TD2_ADDR, // Pin 22
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_TD3_ADDR, // Pin 23
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_RX_CTL_ADDR, // Pin 24
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_RD0_ADDR, // Pin 25
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_TX_CTL_ADDR, // Pin 26
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_RD1_ADDR, // Pin 27
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_RD2_ADDR, // Pin 28
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_RD3_ADDR, // Pin 29
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_RGMII_RXC_ADDR, // Pin 30
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_EIM_BCLK_ADDR, // Pin 31
|
||||
},
|
||||
// Bank 7
|
||||
{
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA5_ADDR, // Pin 0
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA4_ADDR, // Pin 1
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_CMD_ADDR, // Pin 2
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_CLK_ADDR, // Pin 3
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA0_ADDR, // Pin 4
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA1_ADDR, // Pin 5
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA2_ADDR, // Pin 6
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_DATA3_ADDR, // Pin 7
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD3_RESET_ADDR, // Pin 8
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_CMD_ADDR, // Pin 9
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_SD4_CLK_ADDR, // Pin 10
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO16_ADDR, // Pin 11
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO17_ADDR, // Pin 12
|
||||
HW_IOMUXC_SW_MUX_CTL_PAD_GPIO18_ADDR, // Pin 13
|
||||
0, // Unassigned GPIO pin 14
|
||||
0, // Unassigned GPIO pin 15
|
||||
0, // Unassigned GPIO pin 16
|
||||
0, // Unassigned GPIO pin 17
|
||||
0, // Unassigned GPIO pin 18
|
||||
0, // Unassigned GPIO pin 19
|
||||
0, // Unassigned GPIO pin 20
|
||||
0, // Unassigned GPIO pin 21
|
||||
0, // Unassigned GPIO pin 22
|
||||
0, // Unassigned GPIO pin 23
|
||||
0, // Unassigned GPIO pin 24
|
||||
0, // Unassigned GPIO pin 25
|
||||
0, // Unassigned GPIO pin 26
|
||||
0, // Unassigned GPIO pin 27
|
||||
0, // Unassigned GPIO pin 28
|
||||
0, // Unassigned GPIO pin 29
|
||||
0, // Unassigned GPIO pin 30
|
||||
0, // Unassigned GPIO pin 31
|
||||
},
|
||||
};
|
||||
|
||||
// v1/121109/1.2.3
|
||||
// EOF
|
||||
Reference in New Issue
Block a user