summaryrefslogtreecommitdiff
path: root/hw/bsp
diff options
context:
space:
mode:
authorWilliam D. Jones <[email protected]>2019-01-10 09:58:06 -0500
committerWilliam D. Jones <[email protected]>2019-01-10 09:58:06 -0500
commitb367baeaf1d64930654f136a2409f1322fc73ab2 (patch)
tree710698145d52c72b807971d05512330fde2cc9b1 /hw/bsp
parente4d6f336f0d5004fd9ee3074305b7980ba777dfd (diff)
parent5804e56e3c2ab4480bf72d94d997f769a645af47 (diff)
Merge branch 'master' of https://github.com/hathach/tinyusb into stm32f4
Diffstat (limited to 'hw/bsp')
-rw-r--r--hw/bsp/board.h47
-rw-r--r--hw/bsp/ea4088qs/board_ea4088qs.c186
-rw-r--r--hw/bsp/ea4088qs/board_ea4088qs.h51
-rw-r--r--hw/bsp/ea4357/board_ea4357.c193
-rw-r--r--hw/bsp/ea4357/board_ea4357.h17
-rw-r--r--hw/bsp/ea4357/emac.c480
-rw-r--r--hw/bsp/ea4357/emac.h157
-rw-r--r--hw/bsp/ea4357/nand.c546
-rw-r--r--hw/bsp/ea4357/nand.h36
-rw-r--r--hw/bsp/ea4357/oem_base_board/acc.c254
-rw-r--r--hw/bsp/ea4357/oem_base_board/acc.h49
-rw-r--r--hw/bsp/ea4357/oem_base_board/base_eeprom.c200
-rw-r--r--hw/bsp/ea4357/oem_base_board/base_eeprom.h31
-rw-r--r--hw/bsp/ea4357/oem_base_board/lm75a.c132
-rw-r--r--hw/bsp/ea4357/oem_base_board/lm75a.h29
-rw-r--r--hw/bsp/ea4357/oem_base_board/memreg.c174
-rw-r--r--hw/bsp/ea4357/oem_base_board/memreg.h30
-rw-r--r--hw/bsp/ea4357/oem_base_board/norflash.c547
-rw-r--r--hw/bsp/ea4357/oem_base_board/norflash.h56
-rw-r--r--hw/bsp/ea4357/oem_base_board/uda1380.c159
-rw-r--r--hw/bsp/ea4357/oem_base_board/uda1380.h93
-rw-r--r--hw/bsp/ea4357/pca9532.c (renamed from hw/bsp/ea4357/oem_base_board/pca9532.c)55
-rw-r--r--hw/bsp/ea4357/pca9532.h (renamed from hw/bsp/ea4357/oem_base_board/pca9532.h)4
-rw-r--r--hw/bsp/ea4357/sdram.c272
-rw-r--r--hw/bsp/ea4357/sdram.h31
-rw-r--r--hw/bsp/ea4357/startup/xpresso/cr_startup_lpc43xx.c509
-rw-r--r--hw/bsp/keil/board_mcb4300.c154
-rw-r--r--hw/bsp/keil/board_mcb4300.h59
-rw-r--r--hw/bsp/lpcxpresso/board_lpclink2.c126
-rw-r--r--hw/bsp/lpcxpresso/board_lpclink2.h59
-rw-r--r--hw/bsp/lpcxpresso/board_lpcxpresso11u14.c131
-rw-r--r--hw/bsp/lpcxpresso/board_lpcxpresso11u14.h57
-rw-r--r--hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c87
-rw-r--r--hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.h7
-rw-r--r--hw/bsp/lpcxpresso11u68/startup/xpresso/cr_startup_lpc11u.c382
-rw-r--r--hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c95
-rw-r--r--hw/bsp/lpcxpresso1347/board_lpcxpresso1347.h6
-rw-r--r--hw/bsp/lpcxpresso1347/startup/xpresso/cr_startup_lpc13u.c354
-rw-r--r--hw/bsp/lpcxpresso1769/board_lpcxpresso1769.c152
-rw-r--r--hw/bsp/lpcxpresso1769/board_lpcxpresso1769.h11
-rw-r--r--hw/bsp/lpcxpresso1769/startup/xpresso/cr_startup_lpc176x.c423
-rw-r--r--hw/bsp/mcb1800/board_mcb1800.c245
-rw-r--r--hw/bsp/mcb1800/board_mcb1800.h51
-rw-r--r--hw/bsp/metro_m0_express/board_metro_m0_express.c10
-rw-r--r--hw/bsp/metro_m0_express/board_metro_m0_express.h3
-rw-r--r--hw/bsp/metro_m4_express/board_metro_m4_express.c10
-rw-r--r--hw/bsp/metro_m4_express/board_metro_m4_express.h3
-rw-r--r--hw/bsp/ngx/board_ngx4330.c158
-rw-r--r--hw/bsp/ngx/board_ngx4330.h59
-rw-r--r--hw/bsp/pca10056/board_pca10056.c18
-rw-r--r--hw/bsp/pca10056/board_pca10056.h6
-rw-r--r--hw/bsp/readme.md25
52 files changed, 1023 insertions, 6006 deletions
diff --git a/hw/bsp/board.h b/hw/bsp/board.h
index 6fe463692..1aa51a560 100644
--- a/hw/bsp/board.h
+++ b/hw/bsp/board.h
@@ -52,38 +52,27 @@
#include "ansi_escape.h"
-//--------------------------------------------------------------------+
-// PRINTF TARGET DEFINE
-//--------------------------------------------------------------------+
-/** \defgroup group_printf Printf Retarget
- * \brief Retarget the standard stdio printf/getchar to other IOs
- * @{ */
-#define PRINTF_TARGET_SEMIHOST 1 ///< Using the semihost support from toolchain, requires no hardware but is the slowest
-#define PRINTF_TARGET_UART 2 ///< Using UART as stdio, this is the default for most of the board
-#define PRINTF_TARGET_SWO 3 ///< Using non-instructive serial wire output (SWO), is the best option since it does not slow down MCU but requires supported from debugger and IDE
-#define PRINTF_TARGET_NONE 4 ///< Using none at all.
-/** @} */
-
-#define PRINTF(...) printf(__VA_ARGS__)
-
+// NXP LPC
#if defined BOARD_LPCXPRESSO11U14
#include "lpcxpresso11u14/board_lpcxpresso11u14.h"
-#elif defined BOARD_LPCXPRESSO11U68
- #include "lpcxpresso11u68/board_lpcxpresso11u68.h"
#elif defined BOARD_LPCXPRESSO1347
#include "lpcxpresso1347/board_lpcxpresso1347.h"
+#elif defined BOARD_LPCXPRESSO11U68
+ #include "lpcxpresso11u68/board_lpcxpresso11u68.h"
#elif defined BOARD_LPCXPRESSO1769
#include "lpcxpresso1769/board_lpcxpresso1769.h"
-#elif defined BOARD_NGX4330
- #include "ngx/board_ngx4330.h"
+#elif defined BOARD_MCB1800
+ #include "mcb1800/board_mcb1800.h"
+#elif defined BOARD_EA4088QS
+ #include "ea4088qs/board_ea4088qs.h"
#elif defined BOARD_EA4357
#include "ea4357/board_ea4357.h"
-#elif defined BOARD_MCB4300
- #include "keil/board_mcb4300.h"
-#elif defined BOARD_LPCLINK2
- #include "lpcxpresso/board_lpclink2.h"
+
+// Nordic nRF
#elif defined BOARD_PCA10056
#include "pca10056/board_pca10056.h"
+
+// Atmel SAM
#elif defined BOARD_METRO_M4_EXPRESS
#include "metro_m4_express/board_metro_m4_express.h"
#elif defined BOARD_METRO_M0_EXPRESS
@@ -104,20 +93,18 @@ void board_init(void);
//--------------------------------------------------------------------+
// LED
-// Board variant must defined following
-// - BOARD_LED_NUM : number of LEDs
-// - BOARD_LEDn : where n is 0,1 etc ...
+// Board layer use only 1 LED for indicator
//--------------------------------------------------------------------+
-void board_led_control(uint32_t led_id, bool state);
+void board_led_control(bool state);
-static inline void board_led_on(uint32_t led_id)
+static inline void board_led_on(void)
{
- board_led_control(led_id, true);
+ board_led_control(true);
}
-static inline void board_led_off(uint32_t led_id)
+static inline void board_led_off(void)
{
- board_led_control(led_id, false);
+ board_led_control(false);
}
//--------------------------------------------------------------------+
diff --git a/hw/bsp/ea4088qs/board_ea4088qs.c b/hw/bsp/ea4088qs/board_ea4088qs.c
new file mode 100644
index 000000000..d2bf409aa
--- /dev/null
+++ b/hw/bsp/ea4088qs/board_ea4088qs.c
@@ -0,0 +1,186 @@
+/**************************************************************************/
+/*!
+ @file board_ea4088qs.c
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2018, hathach (tinyusb.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. Neither the name of the copyright holders 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 ''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 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.
+
+ This file is part of the tinyusb stack.
+*/
+/**************************************************************************/
+
+#ifdef BOARD_EA4088QS
+
+#include "../board.h"
+#include "tusb.h"
+
+#define LED_PORT 2
+#define LED_PIN 19
+
+//--------------------------------------------------------------------+
+// MACRO TYPEDEF CONSTANT ENUM DECLARATION
+//--------------------------------------------------------------------+
+
+/* System oscillator rate and RTC oscillator rate */
+const uint32_t OscRateIn = 12000000;
+const uint32_t RTCOscRateIn = 32768;
+
+/* Pin muxing configuration */
+static const PINMUX_GRP_T pinmuxing[] =
+{
+ /* LEDs */
+ {2, 19, (IOCON_FUNC0 | IOCON_MODE_INACT)},
+};
+
+static const PINMUX_GRP_T pin_usb_mux[] =
+{
+ // USB1 as Host
+ {0, 29, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // D+1
+ {0, 30, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // D-1
+ {1, 18, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // UP LED1
+ {1, 19, (IOCON_FUNC2 | IOCON_MODE_INACT)}, // PPWR1
+// {2, 14, (IOCON_FUNC2 | IOCON_MODE_INACT)}, // VBUS1
+// {2, 15, (IOCON_FUNC2 | IOCON_MODE_INACT)}, // OVRCR1
+
+ // USB2 as Device
+ {0, 31, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // D+2
+ {0, 13, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // UP LED
+ {0, 14, (IOCON_FUNC3 | IOCON_MODE_INACT)}, // CONNECT2
+
+ /* VBUS is not connected on this board, so leave the pin at default setting. */
+ /*Chip_IOCON_PinMux(LPC_IOCON, 1, 30, IOCON_MODE_INACT, IOCON_FUNC2);*/ /* USB VBUS */
+};
+
+// Invoked by startup code
+void SystemInit(void)
+{
+ /* Enable IOCON clock */
+ Chip_IOCON_SetPinMuxing(LPC_IOCON, pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
+ Chip_SetupXtalClocking();
+}
+
+void board_init(void)
+{
+ SystemCoreClockUpdate();
+
+#if CFG_TUSB_OS == OPT_OS_NONE
+ SysTick_Config(SystemCoreClock / BOARD_TICKS_HZ);
+#elif CFG_TUSB_OS == OPT_OS_FREERTOS
+ // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
+ NVIC_SetPriority(USB_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
+#endif
+
+ Chip_GPIO_Init(LPC_GPIO);
+
+ //------------- LED -------------//
+ Chip_GPIO_SetPinDIROutput(LPC_GPIO, LED_PORT, LED_PIN);
+
+ //------------- BUTTON -------------//
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIO_SetDir(buttons[i].port, TU_BIT(buttons[i].pin), 0);
+
+
+ //------------- UART -------------//
+
+ //------------- USB -------------//
+ // Port1 as Host, Port2: Device
+ Chip_USB_Init();
+
+ enum {
+ USBCLK = 0x1B // Host + Device + OTG + AHB
+ };
+
+ LPC_USB->OTGClkCtrl = USBCLK;
+ while ( (LPC_USB->OTGClkSt & USBCLK) != USBCLK ) {}
+
+ // USB1 = host, USB2 = device
+ LPC_USB->StCtrl = 0x3;
+
+ Chip_IOCON_SetPinMuxing(LPC_IOCON, pin_usb_mux, sizeof(pin_usb_mux) / sizeof(PINMUX_GRP_T));
+}
+
+
+//------------- LED -------------//
+void board_led_control(bool state)
+{
+ Chip_GPIO_SetPinState(LPC_GPIO, LED_PORT, LED_PIN, state);
+}
+
+//------------- Buttons -------------//
+#if 0
+static bool button_read(uint8_t id)
+{
+// return !TU_BIT_TEST( GPIO_ReadValue(buttons[id].gpio_port), buttons[id].gpio_pin ); // button is active low
+}
+#endif
+
+uint32_t board_buttons(void)
+{
+ uint32_t result = 0;
+
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? TU_BIT(i) : 0);
+
+ return result;
+}
+
+
+//------------- UART -------------//
+uint8_t board_uart_getchar(void)
+{
+ //return UART_ReceiveByte(BOARD_UART_PORT);
+ return 0;
+}
+
+void board_uart_putchar(uint8_t c)
+{
+ //UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
+ (void) c;
+}
+
+
+/*------------------------------------------------------------------*/
+/* TUSB HAL MILLISECOND
+ *------------------------------------------------------------------*/
+#if CFG_TUSB_OS == OPT_OS_NONE
+
+volatile uint32_t system_ticks = 0;
+
+void SysTick_Handler (void)
+{
+ system_ticks++;
+}
+
+uint32_t tusb_hal_millis(void)
+{
+ return board_tick2ms(system_ticks);
+}
+
+#endif
+
+#endif
diff --git a/hw/bsp/ea4088qs/board_ea4088qs.h b/hw/bsp/ea4088qs/board_ea4088qs.h
new file mode 100644
index 000000000..dc5854ada
--- /dev/null
+++ b/hw/bsp/ea4088qs/board_ea4088qs.h
@@ -0,0 +1,51 @@
+/**************************************************************************/
+/*!
+ @file board_ea4088qs.h
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2018, hathach (tinyusb.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. Neither the name of the copyright holders 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 ''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 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.
+
+ This file is part of the tinyusb stack.
+*/
+/**************************************************************************/
+#ifndef BOARD_EA4088QS_H_
+#define BOARD_EA4088QS_H_
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#include "chip.h"
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* BOARD_EA4088QS_H_ */
diff --git a/hw/bsp/ea4357/board_ea4357.c b/hw/bsp/ea4357/board_ea4357.c
index ebe0d02e0..a262b0344 100644
--- a/hw/bsp/ea4357/board_ea4357.c
+++ b/hw/bsp/ea4357/board_ea4357.c
@@ -36,11 +36,12 @@
*/
/**************************************************************************/
-#include "bsp/board.h"
-#include "tusb.h"
-
#ifdef BOARD_EA4357
+#include "../board.h"
+#include "pca9532.h"
+#include "tusb.h"
+
#define BOARD_UART_PORT LPC_USART0
#define BOARD_UART_PIN_PORT 0x0f
#define BOARD_UART_PIN_TX 10 // PF.10 : UART0_TXD
@@ -88,39 +89,75 @@ uint32_t tusb_hal_millis(void)
/*------------------------------------------------------------------*/
/* BOARD API
*------------------------------------------------------------------*/
-void board_init(void)
+
+/* System configuration variables used by chip driver */
+const uint32_t ExtRateIn = 0;
+const uint32_t OscRateIn = 12000000;
+
+static const PINMUX_GRP_T pinmuxing[] =
{
- CGU_Init();
+ // USB
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
- SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE) / BOARD_TICKS_HZ); // 1 msec tick timer
-#endif
+ /* I2S */
+ {0x3, 0, (SCU_PINIO_FAST | SCU_MODE_FUNC2)}, //I2S0_TX_CLK
+ {0xC, 12, (SCU_PINIO_FAST | SCU_MODE_FUNC6)}, //I2S0_TX_SDA
+ {0xC, 13, (SCU_PINIO_FAST | SCU_MODE_FUNC6)}, //I2S0_TX_WS
+ {0x6, 0, (SCU_PINIO_FAST | SCU_MODE_FUNC4)}, //I2S0_RX_SCK
+ {0x6, 1, (SCU_PINIO_FAST | SCU_MODE_FUNC3)}, //I2S0_RX_WS
+ {0x6, 2, (SCU_PINIO_FAST | SCU_MODE_FUNC3)}, //I2S0_RX_SDA
+};
- //------------- USB -------------//
- // USB0 Power: EA4357 channel B U20 GPIO26 active low (base board), P2_3 on LPC4357
- scu_pinmux(0x02, 3, MD_PUP | MD_EZI, FUNC7); // USB0 VBus Power
+/* Pin clock mux values, re-used structure, value in first index is meaningless */
+static const PINMUX_GRP_T pinclockmuxing[] =
+{
+ {0, 0, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+ {0, 1, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+ {0, 2, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+ {0, 3, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+};
- #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE
- scu_pinmux(0x09, 5, GPIO_PDN, FUNC4); // P9_5 (GPIO5[18]) (GPIO28 on oem base) as USB connect, active low.
- GPIO_SetDir(5, BIT_(18), 1);
- #endif
+// Invoked by startup code
+void SystemInit(void)
+{
+ /* Setup system level pin muxing */
+ Chip_SCU_SetPinMuxing(pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
- // USB1 Power: EA4357 channel A U20 is enabled by SJ5 connected to pad 1-2, no more action required
- // TODO Remove R170, R171, solder a pair of 15K to USB1 D+/D- to test with USB1 Host
+ /* Clock pins only, group field not used */
+ for (int i = 0; i <(int) (sizeof(pinclockmuxing) / sizeof(pinclockmuxing[0])); i++)
+ {
+ Chip_SCU_ClockPinMuxSet(pinclockmuxing[i].pinnum, pinclockmuxing[i].modefunc);
+ }
+
+ Chip_SetupXtalClocking();
+}
+
+void board_init(void)
+{
+ SystemCoreClockUpdate();
+
+#if CFG_TUSB_OS == OPT_OS_NONE
+ SysTick_Config( SystemCoreClock / BOARD_TICKS_HZ );
+#endif
+
+ Chip_GPIO_Init(LPC_GPIO_PORT);
//------------- LED -------------//
- I2C_Init(LPC_I2C0, 100000);
- I2C_Cmd(LPC_I2C0, ENABLE);
+ /* Init I2C */
+ Chip_SCU_I2C0PinConfig(I2C0_STANDARD_FAST_MODE);
+ Chip_I2C_Init(I2C0);
+ Chip_I2C_SetClockRate(I2C0, 100000);
+ Chip_I2C_SetMasterEventHandler(I2C0, Chip_I2C_EventHandlerPolling);
+
pca9532_init();
+#if 0
//------------- BUTTON -------------//
for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++)
{
scu_pinmux(buttons[i].mux_port, buttons[i].mux_pin, GPIO_NOPULL, FUNC0);
- GPIO_SetDir(buttons[i].gpio_port, BIT_(buttons[i].gpio_pin), 0);
+ GPIO_SetDir(buttons[i].gpio_port, TU_BIT(buttons[i].gpio_pin), 0);
}
-#if 0
//------------- UART -------------//
scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_TX, MD_PDN, FUNC1);
scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_RX, MD_PLN | MD_EZI | MD_ZI, FUNC1);
@@ -134,33 +171,122 @@ void board_init(void)
UART_TxCmd(BOARD_UART_PORT, ENABLE); // Enable UART Transmit
#endif
- //------------- NAND Flash (K9FXX) Size = 128M, Page Size = 2K, Block Size = 128K, Number of Block = 1024 -------------//
-// nand_init();
+ //------------- USB -------------//
+ enum {
+ USBMODE_DEVICE = 2,
+ USBMODE_HOST = 3
+ };
+
+ enum {
+ USBMODE_VBUS_LOW = 0,
+ USBMODE_VBUS_HIGH = 1
+ };
+
+ /* USB0
+ * For USB Device operation; insert jumpers in position 1-2 in JP17/JP18/JP19. GPIO28 controls USB
+ * connect functionality and LED32 lights when the USB Device is connected. SJ4 has pads 1-2 shorted
+ * by default. LED33 is controlled by GPIO27 and signals USB-up state. GPIO54 is used for VBUS
+ * sensing.
+ * For USB Host operation; insert jumpers in position 2-3 in JP17/JP18/JP19. USB Host power is
+ * controlled via distribution switch U20 (found in schematic page 11). Signal GPIO26 is active low and
+ * enables +5V on VBUS2. LED35 light whenever +5V is present on VBUS2. GPIO55 is connected to
+ * status feedback from the distribution switch. GPIO54 is used for VBUS sensing. 15Kohm pull-down
+ * resistors are always active
+ */
+#if CFG_TUSB_RHPORT0_MODE
+ Chip_USB0_Init();
+
+ // Reset controller
+ LPC_USB0->USBCMD_D |= 0x02;
+ while( LPC_USB0->USBCMD_D & 0x02 ) {}
+
+ // Set mode
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
+ LPC_USB0->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+
+ LPC_USB0->PORTSC1_D |= (1<<24); // FIXME force full speed for debugging
+ #else // TODO OTG
+ LPC_USB0->USBMODE_D = USBMODE_DEVICE;
+ LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
+ #endif
+#endif
+
+ /* USB1
+ * When USB channel #1 is used as USB Host, 15Kohm pull-down resistors are needed on the USB data
+ * signals. These are activated inside the USB OTG chip (U31), and this has to be done via the I2C
+ * interface of GPIO52/GPIO53.
+ * J20 is the connector to use when USB Host is used. In order to provide +5V to the external USB
+ * device connected to this connector (J20), channel A of U20 must be enabled. It is enabled by default
+ * since SJ5 is normally connected between pin 1-2. LED34 lights green when +5V is available on J20.
+ * JP15 shall not be inserted. JP16 has no effect
+ *
+ * When USB channel #1 is used as USB Device, a 1.5Kohm pull-up resistor is needed on the USB DP
+ * data signal. There are two methods to create this. JP15 is inserted and the pull-up resistor is always
+ * enabled. Alternatively, the pull-up resistor is activated inside the USB OTG chip (U31), and this has to
+ * be done via the I2C interface of GPIO52/GPIO53. In the latter case, JP15 shall not be inserted.
+ * J19 is the connector to use when USB Device is used. Normally it should be a USB-B connector for
+ * creating a USB Device interface, but the mini-AB connector can also be used in this case. The status
+ * of VBUS can be read via U31.
+ * JP16 shall not be inserted.
+ */
+#if CFG_TUSB_RHPORT1_MODE
+ Chip_USB1_Init();
+
+ // Reset controller
+ LPC_USB1->USBCMD_D |= 0x02;
+ while( LPC_USB1->USBCMD_D & 0x02 ) {}
+
+ // Set mode
+ #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ LPC_USB1->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB1->USBMODE_D = USBMODE_DEVICE;
+ #endif
+
+ // USB1 as fullspeed
+ LPC_USB1->PORTSC1_D |= (1<<24);
+#endif
+
+ // USB0 Vbus Power: P2_3 on EA4357 channel B U20 GPIO26 active low (base board)
+ Chip_SCU_PinMuxSet(2, 3, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC7);
+
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE
+ // P9_5 (GPIO5[18]) (GPIO28 on oem base) as USB connect, active low.
+ Chip_SCU_PinMuxSet(9, 5, SCU_MODE_PULLDOWN | SCU_MODE_FUNC4);
+ Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 5, 18);
+ #endif
+
+ // USB1 Power: EA4357 channel A U20 is enabled by SJ5 connected to pad 1-2, no more action required
+ // TODO Remove R170, R171, solder a pair of 15K to USB1 D+/D- to test with USB1 Host
}
-//--------------------------------------------------------------------+
-// LEDS
-//--------------------------------------------------------------------+
-void board_led_control(uint32_t id, bool state)
+// LED
+void board_led_control(bool state)
{
- uint16_t on_mask = state ? (1 << id) : 0;
- uint16_t off_mask = state ? 0 : (1 << id);
- pca9532_setLeds( on_mask << 8, off_mask << 8 );
+ if (state)
+ {
+ pca9532_setLeds( LED1, 0 );
+ }else
+ {
+ pca9532_setLeds( 0, LED1);
+ }
}
//--------------------------------------------------------------------+
// BUTTONS
//--------------------------------------------------------------------+
+#if 0
static bool button_read(uint8_t id)
{
- return !BIT_TEST_( GPIO_ReadValue(buttons[id].gpio_port), buttons[id].gpio_pin ); // button is active low
+// return !TU_BIT_TEST( GPIO_ReadValue(buttons[id].gpio_port), buttons[id].gpio_pin ); // button is active low
}
+#endif
uint32_t board_buttons(void)
{
uint32_t result = 0;
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? BIT_(i) : 0);
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? TU_BIT(i) : 0);
return result;
}
@@ -171,10 +297,13 @@ uint32_t board_buttons(void)
uint8_t board_uart_getchar(void)
{
//return UART_ReceiveByte(BOARD_UART_PORT);
+ return 0;
}
+
void board_uart_putchar(uint8_t c)
{
//UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
+ (void) c;
}
#endif
diff --git a/hw/bsp/ea4357/board_ea4357.h b/hw/bsp/ea4357/board_ea4357.h
index 6fe8ca874..80ff678b5 100644
--- a/hw/bsp/ea4357/board_ea4357.h
+++ b/hw/bsp/ea4357/board_ea4357.h
@@ -43,22 +43,7 @@
extern "C" {
#endif
-#include "LPC43xx.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_cgu.h"
-#include "lpc43xx_gpio.h"
-#include "lpc43xx_uart.h"
-#include "lpc43xx_i2c.h"
-
-
-#include "oem_base_board/pca9532.h" // LEDs
-
-#define BOARD_LED_NUM 1
-#define BOARD_LED0 0
-
-
-//#define CFG_PRINTF_TARGET PRINTF_TARGET_SWO
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
+#include "chip.h"
#ifdef __cplusplus
}
diff --git a/hw/bsp/ea4357/emac.c b/hw/bsp/ea4357/emac.c
deleted file mode 100644
index fce042259..000000000
--- a/hw/bsp/ea4357/emac.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/******************************************************************
- ***** *****
- ***** Name: cs8900.c *****
- ***** Ver.: 1.0 *****
- ***** Date: 07/05/2001 *****
- ***** Auth: Andreas Dannenberg *****
- ***** HTWK Leipzig *****
- ***** university of applied sciences *****
- ***** Germany *****
- ***** Func: ethernet packet-driver for use with LAN- *****
- ***** controller CS8900 from Crystal/Cirrus Logic *****
- ***** *****
- ***** NXP: Module modified for use with NXP *****
- ***** lpc43xx EMAC Ethernet controller *****
- ***** *****
- ******************************************************************/
-
-#include "../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "emac.h"
-//#include "tcpip.h"
-#include "LPC43xx.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_rgu.h"
-
-#define TIMEOUT 100000
-
-static unsigned short *rptr;
-static unsigned short *tptr;
-
-static unsigned int TxDescIndex = 0;
-static unsigned int RxDescIndex = 0;
-
-// Keil: function added to write PHY
-static void write_PHY (unsigned int PhyReg, unsigned short Value) {
-
- unsigned int tout;
-
- /* Write a data 'Value' to PHY register 'PhyReg'. */
- while(LPC_ETHERNET->MAC_MII_ADDR & GMII_BUSY); // Check GMII busy bit
- LPC_ETHERNET->MAC_MII_ADDR = (DP83848C_DEF_ADR<<11) | (PhyReg<<6) | GMII_WRITE;
- LPC_ETHERNET->MAC_MII_DATA = Value;
- LPC_ETHERNET->MAC_MII_ADDR |= GMII_BUSY; // Start PHY Write Cycle
-
- /* Wait utill operation completed */
- for (tout = 0; tout < MII_WR_TOUT; tout++) {
- if ((LPC_ETHERNET->MAC_MII_ADDR & GMII_BUSY) == 0) {
- break;
- }
- }
- if (tout == MII_WR_TOUT) // Trap the timeout
- while(1);
-}
-
-
-// Keil: function added to read PHY
-static unsigned short read_PHY (unsigned int PhyReg) {
-
- unsigned int tout, val;
-
- /* Read a PHY register 'PhyReg'. */
- while(LPC_ETHERNET->MAC_MII_ADDR & GMII_BUSY); // Check GMII busy bit
- LPC_ETHERNET->MAC_MII_ADDR = (DP83848C_DEF_ADR<<11) | (PhyReg<<6) | GMII_READ;
- LPC_ETHERNET->MAC_MII_ADDR |= GMII_BUSY; // Start PHY Read Cycle
-
- /* Wait until operation completed */
- for (tout = 0; tout < MII_RD_TOUT; tout++) {
- if ((LPC_ETHERNET->MAC_MII_ADDR & GMII_BUSY) == 0) {
- break;
- }
- }
- if (tout == MII_RD_TOUT) // Trap the timeout
- while(1);
- val = LPC_ETHERNET->MAC_MII_DATA;
- return (val);
-}
-
-
-// Keil: function added to initialize Rx Descriptors
-void rx_descr_init (void)
-{
- unsigned int i;
-
- for (i = 0; i < NUM_RX_DESC; i++) {
- RX_DESC_STAT(i) = OWN_BIT;
- RX_DESC_CTRL(i) = ETH_FRAG_SIZE;
- RX_BUFADDR(i) = RX_BUF(i);
- if (i == (NUM_RX_DESC-1)) // Last Descriptor?
- RX_DESC_CTRL(i) |= RX_END_RING;
- }
-
- /* Set Starting address of RX Descriptor list */
- LPC_ETHERNET->DMA_REC_DES_ADDR = RX_DESC_BASE;
-}
-
-
-// Keil: function added to initialize Tx Descriptors
-void tx_descr_init (void)
-{
- unsigned int i;
-
- for (i = 0; i < NUM_TX_DESC; i++) { // Take it out!!!!
- TX_DESC_STAT(i) = 0;
- TX_DESC_CTRL(i) = 0;
- TX_BUFADDR(i) = 0;
- }
-
- for (i = 0; i < NUM_TX_DESC; i++) {
- TX_DESC_STAT(i) = TX_LAST_SEGM | TX_FIRST_SEGM;
- TX_DESC_CTRL(i) = 0;
- TX_BUFADDR(i) = TX_BUF(i);
- if (i == (NUM_TX_DESC-1)) // Last Descriptor?
- TX_DESC_STAT(i) |= TX_END_RING;
- }
-
- /* Set Starting address of RX Descriptor list */
- LPC_ETHERNET->DMA_TRANS_DES_ADDR = TX_DESC_BASE;
-}
-
-
-
-// configure port-pins for use with LAN-controller,
-// reset it and send the configuration-sequence
-
-void Init_EMAC(void)
-{
- int id1, id2, tout, regv;
- unsigned phy_in_use = 0;
-
- /* Ethernet pins configuration */
-#if MII
- scu_pinmux(0xC ,1 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_MDC: PC_1 -> FUNC3
- scu_pinmux(0x1 ,17 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_MDIO: P1_17 -> FUNC3
- scu_pinmux(0x1 ,18 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TXD0: P1_18 -> FUNC3
- scu_pinmux(0x1 ,20 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TXD1: P1_20 -> FUNC3
- scu_pinmux(0x1 ,19 , (MD_PLN | MD_EZI | MD_ZI), FUNC0); // ENET_REF: P1_19 -> FUNC0 (default)
-
-// scu_pinmux(0xC ,4 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TX_EN: PC_4 -> FUNC3
- scu_pinmux(0x0 ,1 , (MD_PLN | MD_EZI | MD_ZI), FUNC6); // ENET_TX_EN: P0_1 -> FUNC6
-
- scu_pinmux(0x1 ,15 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXD0: P1_15 -> FUNC3
- scu_pinmux(0x0 ,0 , (MD_PLN | MD_EZI | MD_ZI), FUNC2); // ENET_RXD1: P0_0 -> FUNC2
-
-// scu_pinmux(0x1 ,16 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_CRS: P1_16 -> FUNC3
- scu_pinmux(0x9 ,0 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_CRS: P9_0 -> FUNC5
-
-// scu_pinmux(0xC ,9 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RX_ER: PC_9 -> FUNC3
- scu_pinmux(0x9 ,1 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_RX_ER: P9_1 -> FUNC5
-
-// scu_pinmux(0xC ,8 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXDV: PC_8 -> FUNC3
- scu_pinmux(0x1 ,16 , (MD_PLN | MD_EZI | MD_ZI), FUNC7); // ENET_RXDV: P1_16 -> FUNC7
-
-#else
- scu_pinmux(0xC ,1 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_MDC: PC_1 -> FUNC3
- scu_pinmux(0x1 ,17 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_MDIO: P1_17 -> FUNC3
- scu_pinmux(0x1 ,18 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TXD0: P1_18 -> FUNC3
- scu_pinmux(0x1 ,20 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TXD1: P1_20 -> FUNC3
- scu_pinmux(0x1 ,19 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC0); // ENET_REF: P1_19 -> FUNC0 (default)
-// scu_pinmux(0xC ,4 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TX_EN: PC_4 -> FUNC3
- scu_pinmux(0x0 ,1 , (MD_PLN | MD_EZI | MD_ZI), FUNC6); // ENET_TX_EN: P0_1 -> FUNC6
- scu_pinmux(0x1 ,15 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXD0: P1_15 -> FUNC3
- scu_pinmux(0x0 ,0 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC2); // ENET_RXD1: P0_0 -> FUNC2
-// scu_pinmux(0x1 ,16 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_CRS: P1_16 -> FUNC3
-// scu_pinmux(0x9 ,0 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_CRS: P9_0 -> FUNC5
-// scu_pinmux(0xC ,9 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RX_ER: PC_9 -> FUNC3
-// scu_pinmux(0x9 ,1 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_RX_ER: P9_1 -> FUNC5
-// scu_pinmux(0xC ,8 , (MD_EHS | MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXDV: PC_8 -> FUNC3
- scu_pinmux(0x1 ,16 , (MD_PLN | MD_EZI | MD_ZI), FUNC7); // ENET_RXDV: P1_16 -> FUNC7
-#endif
-
-
-#if MII /* Select MII interface */ // check MUXING for new Eagle...
-// scu_pinmux(0xC ,6 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXD2: PC_6 -> FUNC3
- scu_pinmux(0x9 ,3 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_RXD2: P9_3 -> FUNC5
-
-// scu_pinmux(0xC ,7 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXD3: PC_7 -> FUNC3
- scu_pinmux(0x9 ,2 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_RXD3: P9_2 -> FUNC5
-
- scu_pinmux(0xC ,0 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_RXLK: PC_0 -> FUNC3
-
-// scu_pinmux(0xC ,2 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TXD2: PC_2 -> FUNC3
- scu_pinmux(0x9 ,4 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_TXD2: P9_4 -> FUNC5
-
-// scu_pinmux(0xC ,3 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TXD3: PC_3 -> FUNC3
- scu_pinmux(0x9 ,5 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_TXD3: P9_5 -> FUNC5
-
-// scu_pinmux(0xC ,5 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TX_ER: PC_5 -> FUNC3
- scu_pinmux(0xC ,5 , (MD_PLN | MD_EZI | MD_ZI), FUNC3); // ENET_TX_ER: PC_5 -> FUNC3
-
-// scu_pinmux(0x0 ,1 , (MD_PLN | MD_EZI | MD_ZI), FUNC2); // ENET_COL: P0_1 -> FUNC2
- scu_pinmux(0x9 ,6 , (MD_PLN | MD_EZI | MD_ZI), FUNC5); // ENET_COL: P9_6 -> FUNC5
-#else /* Select RMII interface */
- LPC_CREG->CREG6 |= RMII_SELECT;
-#endif
-
-
- RGU_SoftReset(RGU_SIG_ETHERNET);
- while(1){ // Confirm the reset happened
- if (LPC_RGU->RESET_ACTIVE_STATUS0 & (1<<ETHERNET_RST))
- break;
- }
-
- LPC_ETHERNET->DMA_BUS_MODE |= DMA_SOFT_RESET; // Reset all GMAC Subsystem internal registers and logic
- while(LPC_ETHERNET->DMA_BUS_MODE & DMA_SOFT_RESET); // Wait for software reset completion
-
- /* Put the DP83848C in reset mode */
- write_PHY (PHY_REG_BMCR, PHY_BMCR_RESET);
-
- /* Wait for hardware reset to end. */
- for (tout = 0; tout < TIMEOUT; tout++) {
- regv = read_PHY (PHY_REG_BMCR);
- if (!(regv & PHY_BMCR_RESET)) {
- /* Reset complete */
- break;
- }
- }
-
- /* Check if this is a DP83848C PHY. */
- id1 = read_PHY (PHY_REG_IDR1);
- id2 = read_PHY (PHY_REG_IDR2);
- if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) {
- phy_in_use = DP83848C_ID;
- }
- else if (((id1 << 16) | (id2 & 0xFFF0)) == LAN8720_ID) {
- phy_in_use = LAN8720_ID;
- }
-
- if (phy_in_use != 0) {
- /* Configure the PHY device */
-#if !MII
- write_PHY (PHY_REG_RBR, 0x20);
-#endif
-
- /* Use autonegotiation about the link speed. */
- write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);
- /* Wait to complete Auto_Negotiation. */
- for (tout = 0; tout < TIMEOUT; tout++) {
- regv = read_PHY (PHY_REG_BMSR);
- if (regv & PHY_AUTO_NEG_DONE) {
- /* Autonegotiation Complete. */
- break;
- }
- }
- }
-
-
-
- /* Check the link status. */
- for (tout = 0; tout < TIMEOUT; tout++) {
- regv = read_PHY (PHY_REG_STS);
- if (regv & LINK_VALID_STS) {
- /* Link is on. */
- break;
- }
- }
-
- // Configure the EMAC with the established parameters
- switch (phy_in_use) {
- case DP83848C_ID:
-
- /* Configure Full/Half Duplex mode. */
- if (regv & FULL_DUP_STS) {
- /* Full duplex is enabled. */
- LPC_ETHERNET->MAC_CONFIG |= MAC_DUPMODE;
- }
-
- /* Configure 100MBit/10MBit mode. */
- if (~(regv & SPEED_10M_STS)) {
- /* 100MBit mode. */
- LPC_ETHERNET->MAC_CONFIG |= MAC_100MPS;
- }
-
-// value = ReadFromPHY (PHY_REG_STS); /* PHY Extended Status Register */
-// // Now configure for full/half duplex mode
-// if (value & 0x0004) {
-// // We are in full duplex is enabled mode
-// LPC_ETHERNET->MAC2 |= MAC2_FULL_DUP;
-// LPC_ETHERNET->Command |= CR_FULL_DUP;
-// LPC_ETHERNET->IPGT = IPGT_FULL_DUP;
-// }
-// else {
-// // Otherwise we are in half duplex mode
-// LPC_ETHERNET->IPGT = IPGT_HALF_DUP;
-// }
-
-// // Now configure 100MBit or 10MBit mode
-// if (value & 0x0002) {
-// // 10MBit mode
-// LPC_ETHERNET->SUPP = 0;
-// }
-// else {
-// // 100MBit mode
-// LPC_ETHERNET->SUPP = SUPP_SPEED;
-// }
- break;
-
- case LAN8720_ID:
-
- regv = read_PHY (PHY_REG_SCSR); /* PHY Extended Status Register */
- // Now configure for full/half duplex mode
- if (regv & (1<<4)) { /* bit 4: 1 = Full Duplex, 0 = Half Duplex */
- // We are in full duplex is enabled mode
- LPC_ETHERNET->MAC_CONFIG |= MAC_DUPMODE;
- }
-
- // Now configure 100MBit or 10MBit mode
- if (regv & (1<<3)) { /* bit 3: 1 = 100Mbps, 0 = 10Mbps */
- // 100MBit mode
- LPC_ETHERNET->MAC_CONFIG |= MAC_100MPS;
- }
-
-
- break;
-
- }
-
- /* Set the Ethernet MAC Address registers */
- LPC_ETHERNET->MAC_ADDR0_HIGH = (MYMAC_6 << 8) | MYMAC_5;
- LPC_ETHERNET->MAC_ADDR0_LOW = (MYMAC_4 << 24) | (MYMAC_3 << 16) | (MYMAC_2 << 8) | MYMAC_1;
-
- /* Initialize Descriptor Lists */
- rx_descr_init();
- tx_descr_init();
-
- /* Configure Filter */
- LPC_ETHERNET->MAC_FRAME_FILTER = MAC_PROMISCUOUS | MAC_RECEIVEALL;
-
- /* Enable Receiver and Transmitter */
- LPC_ETHERNET->MAC_CONFIG |= (MAC_TX_ENABLE | MAC_RX_ENABLE);
-
- /* Enable interrupts */
- //LPC_ETHERNET->DMA_INT_EN = DMA_INT_NOR_SUM | DMA_INT_RECEIVE | DMA_INT_TRANSMIT;
-
- /* Start Transmission & Receive processes */
- LPC_ETHERNET->DMA_OP_MODE |= (DMA_SS_TRANSMIT | DMA_SS_RECEIVE );
-
-}
-
-
-// reads a word in little-endian byte order from RX_BUFFER
-
-unsigned short ReadFrame_EMAC(void)
-{
- return (*rptr++);
-}
-
-
-// easyWEB internal function
-// help function to swap the byte order of a WORD
-
-unsigned short SwapBytes(unsigned short Data)
-{
- return (Data >> 8) | (Data << 8);
-}
-
-// reads a word in big-endian byte order from RX_FRAME_PORT
-// (useful to avoid permanent byte-swapping while reading
-// TCP/IP-data)
-
-unsigned short ReadFrameBE_EMAC(void)
-{
- unsigned short ReturnValue;
-
- ReturnValue = SwapBytes (*rptr++);
- return (ReturnValue);
-}
-
-
-// copies bytes from frame port to MCU-memory
-// NOTES: * an odd number of byte may only be transfered
-// if the frame is read to the end!
-// * MCU-memory MUST start at word-boundary
-
-void CopyFromFrame_EMAC(void *Dest, unsigned short Size)
-{
- unsigned short * piDest; // Keil: Pointer added to correct expression
-
- piDest = Dest; // Keil: Line added
- while (Size > 1) {
- *piDest++ = ReadFrame_EMAC();
- Size -= 2;
- }
-
- if (Size) { // check for leftover byte...
- *(unsigned char *)piDest = (char)ReadFrame_EMAC();// the LAN-Controller will return 0
- } // for the highbyte
-}
-
-// does a dummy read on frame-I/O-port
-// NOTE: only an even number of bytes is read!
-
-void DummyReadFrame_EMAC(unsigned short Size) // discards an EVEN number of bytes
-{ // from RX-fifo
- while (Size > 1) {
- ReadFrame_EMAC();
- Size -= 2;
- }
-}
-
-// Reads the length of the received ethernet frame and checks if the
-// destination address is a broadcast message or not
-// returns the frame length
-unsigned short StartReadFrame(void) {
- unsigned short RxLen;
-
- if ((RX_DESC_STAT(RxDescIndex) & OWN_BIT) == 0) {
- RxLen = (RX_DESC_STAT(RxDescIndex) >> 16) & 0x03FFF;
- rptr = (unsigned short *)RX_BUFADDR(RxDescIndex);
- return(RxLen);
- }
- return 0;
-
-}
-
-void EndReadFrame(void) {
-
- RX_DESC_STAT(RxDescIndex) = OWN_BIT;
- RxDescIndex++;
- if (RxDescIndex == NUM_RX_DESC)
- RxDescIndex = 0;
-}
-
-unsigned int CheckFrameReceived(void) { // Packet received ?
-
- if ((RX_DESC_STAT(RxDescIndex) & OWN_BIT) == 0)
- return(1);
- else
- return(0);
-}
-
-// requests space in EMAC memory for storing an outgoing frame
-
-void RequestSend(unsigned short FrameSize)
-{
- tptr = (unsigned short *)TX_BUFADDR(TxDescIndex);
- TX_DESC_CTRL(TxDescIndex) = FrameSize;
-}
-
-// check if ethernet controller is ready to accept the
-// frame we want to send
-
-unsigned int Rdy4Tx(void)
-{
- return (1); // the ethernet controller transmits much faster
-} // than the CPU can load its buffers
-
-
-// writes a word in little-endian byte order to TX_BUFFER
-void WriteFrame_EMAC(unsigned short Data)
-{
- *tptr++ = Data;
-}
-
-// copies bytes from MCU-memory to frame port
-// NOTES: * an odd number of byte may only be transfered
-// if the frame is written to the end!
-// * MCU-memory MUST start at word-boundary
-
-void CopyToFrame_EMAC(void *Source, unsigned int Size)
-{
- unsigned short * piSource;
-// unsigned int idx;
-
- piSource = Source;
- Size = (Size + 1) & 0xFFFE; // round Size up to next even number
- while (Size > 0) {
- WriteFrame_EMAC(*piSource++);
- Size -= 2;
- }
- TX_DESC_STAT(TxDescIndex) |= OWN_BIT;
- LPC_ETHERNET->DMA_TRANS_POLL_DEMAND = 1; // Wake Up the DMA if it's in Suspended Mode
- TxDescIndex++;
- if (TxDescIndex == NUM_TX_DESC)
- TxDescIndex = 0;
-}
-
-#endif
-
diff --git a/hw/bsp/ea4357/emac.h b/hw/bsp/ea4357/emac.h
deleted file mode 100644
index b9f0c3baa..000000000
--- a/hw/bsp/ea4357/emac.h
+++ /dev/null
@@ -1,157 +0,0 @@
-#ifndef __EMAC_H
-#define __EMAC_H
-
-
-/* Configuration */
-
-/* Interface Selection */
-#define MII 0 // =0 RMII - =1 MII
-
-/* MAC Configuration */
-#define MYMAC_1 0x1EU /* our ethernet (MAC) address */
-#define MYMAC_2 0x30U /* (MUST be unique in LAN!) */
-#define MYMAC_3 0x6cU
-#define MYMAC_4 0xa2U
-#define MYMAC_5 0x45U
-#define MYMAC_6 0x5eU
-
-
-#define ETH_FRAG_SIZE 1536
-#define NUM_RX_DESC 3
-#define NUM_TX_DESC 3
-
-/* End of Configuration */
-
-
-/* EMAC Descriptors and Buffers located in 16K SRAM */
-/* Rx Descriptors */
-#define RX_DESC_BASE 0x20008000
-#define RX_STAT_BASE RX_DESC_BASE
-#define RX_CTRL_BASE (RX_STAT_BASE + 4)
-#define RX_BUFADDR_BASE (RX_CTRL_BASE + 4)
-#define RX_NEXTDESC_BASE (RX_BUFADDR_BASE + 4)
-#define RX_BUF_BASE (RX_DESC_BASE + NUM_RX_DESC*16)
-
-#define RX_DESC_STAT(i) (*(unsigned int *)(RX_STAT_BASE + 16*i))
-#define RX_DESC_CTRL(i) (*(unsigned int *)(RX_CTRL_BASE + 16*i))
-#define RX_BUFADDR(i) (*(unsigned int *)(RX_BUFADDR_BASE + 16*i))
-#define RX_NEXTDESC(i) (*(unsigned int *)(RX_NEXTDESC_BASE + 16*i))
-#define RX_BUF(i) (RX_BUF_BASE + ETH_FRAG_SIZE*i)
-
-/* Tx Descriptors */
-#define TX_DESC_BASE RX_BUF_BASE + (ETH_FRAG_SIZE * NUM_RX_DESC)
-#define TX_STAT_BASE TX_DESC_BASE
-#define TX_CTRL_BASE (TX_STAT_BASE + 4)
-#define TX_BUFADDR_BASE (TX_CTRL_BASE + 4)
-#define TX_NEXTDESC_BASE (TX_BUFADDR_BASE + 4)
-#define TX_BUF_BASE (TX_DESC_BASE + NUM_TX_DESC*16)
-
-#define TX_DESC_STAT(i) (*(unsigned int *)(TX_STAT_BASE + 16*i))
-#define TX_DESC_CTRL(i) (*(unsigned int *)(TX_CTRL_BASE + 16*i))
-#define TX_BUFADDR(i) (*(unsigned int *)(TX_BUFADDR_BASE + 16*i))
-#define TX_NEXTDESC(i) (*(unsigned int *)(TX_NEXTDESC_BASE + 16*i))
-#define TX_BUF(i) (TX_BUF_BASE + ETH_FRAG_SIZE*i)
-
-/* Descriptors Fields bits */
-#define OWN_BIT (1U<<31) /* Own bit in RDES0 & TDES0 */
-#define RX_END_RING (1<<15) /* Receive End of Ring bit in RDES1 */
-#define RX_NXTDESC_FLAG (1<<14) /* Second Address Chained bit in RDES1 */
-#define TX_LAST_SEGM (1<<29) /* Last Segment bit in TDES0 */
-#define TX_FIRST_SEGM (1<<28) /* First Segment bit in TDES0 */
-#define TX_END_RING (1<<21) /* Transmit End of Ring bit in TDES0 */
-#define TX_NXTDESC_FLAG (1<<20) /* Second Address Chained bit in TDES0 */
-
-
-
-
-
-/* EMAC Control and Status bits */
-#define MAC_RX_ENABLE (1<<2) /* Receiver Enable in MAC_CONFIG reg */
-#define MAC_TX_ENABLE (1<<3) /* Transmitter Enable in MAC_CONFIG reg */
-#define MAC_PADCRC_STRIP (1<<7) /* Automatic Pad-CRC Stripping in MAC_CONFIG reg */
-#define MAC_DUPMODE (1<<11) /* Duplex Mode in MAC_CONFIG reg */
-#define MAC_100MPS (1<<14) /* Speed is 100Mbps in MAC_CONFIG reg */
-#define MAC_PROMISCUOUS (1U<<0) /* Promiscuous Mode bit in MAC_FRAME_FILTER reg */
-#define MAC_DIS_BROAD (1U<<5) /* Disable Broadcast Frames bit in MAC_FRAME_FILTER reg */
-#define MAC_RECEIVEALL (1U<<31) /* Receive All bit in MAC_FRAME_FILTER reg */
-#define DMA_SOFT_RESET 0x01 /* Software Reset bit in DMA_BUS_MODE reg */
-#define DMA_SS_RECEIVE (1<<1) /* Start/Stop Receive bit in DMA_OP_MODE reg */
-#define DMA_SS_TRANSMIT (1<<13) /* Start/Stop Transmission bit in DMA_OP_MODE reg */
-#define DMA_INT_TRANSMIT (1<<0) /* Transmit Interrupt Enable bit in DMA_INT_EN reg */
-#define DMA_INT_OVERFLOW (1<<4) /* Overflow Interrupt Enable bit in DMA_INT_EN reg */
-#define DMA_INT_UNDERFLW (1<<5) /* Underflow Interrupt Enable bit in DMA_INT_EN reg */
-#define DMA_INT_RECEIVE (1<<6) /* Receive Interrupt Enable bit in DMA_INT_EN reg */
-#define DMA_INT_ABN_SUM (1<<15) /* Abnormal Interrupt Summary Enable bit in DMA_INT_EN reg */
-#define DMA_INT_NOR_SUM (1<<16) /* Normal Interrupt Summary Enable bit in DMA_INT_EN reg */
-
-/* MII Management Command Register */
-#define GMII_READ (0<<1) /* GMII Read PHY */
-#define GMII_WRITE (1<<1) /* GMII Write PHY */
-#define GMII_BUSY 0x00000001 /* GMII is Busy / Start Read/Write */
-#define MII_WR_TOUT 0x00050000 /* MII Write timeout count */
-#define MII_RD_TOUT 0x00050000 /* MII Read timeout count */
-
-/* MII Management Address Register */
-#define MADR_PHY_ADR 0x00001F00 /* PHY Address Mask */
-
-/* DP83848C PHY Registers */
-#define PHY_REG_BMCR 0x00 /* Basic Mode Control Register */
-#define PHY_REG_BMSR 0x01 /* Basic Mode Status Register */
-#define PHY_REG_IDR1 0x02 /* PHY Identifier 1 */
-#define PHY_REG_IDR2 0x03 /* PHY Identifier 2 */
-#define PHY_REG_ANAR 0x04 /* Auto-Negotiation Advertisement */
-#define PHY_REG_ANLPAR 0x05 /* Auto-Neg. Link Partner Abitily */
-#define PHY_REG_ANER 0x06 /* Auto-Neg. Expansion Register */
-#define PHY_REG_ANNPTR 0x07 /* Auto-Neg. Next Page TX */
-
-/* PHY Extended Registers */
-#define PHY_REG_STS 0x10 /* Status Register */
-#define PHY_REG_MICR 0x11 /* MII Interrupt Control Register */
-#define PHY_REG_MISR 0x12 /* MII Interrupt Status Register */
-#define PHY_REG_FCSCR 0x14 /* False Carrier Sense Counter */
-#define PHY_REG_RECR 0x15 /* Receive Error Counter */
-#define PHY_REG_PCSR 0x16 /* PCS Sublayer Config. and Status */
-#define PHY_REG_RBR 0x17 /* RMII and Bypass Register */
-#define PHY_REG_LEDCR 0x18 /* LED Direct Control Register */
-#define PHY_REG_PHYCR 0x19 /* PHY Control Register */
-#define PHY_REG_10BTSCR 0x1A /* 10Base-T Status/Control Register */
-#define PHY_REG_CDCTRL1 0x1B /* CD Test Control and BIST Extens. */
-#define PHY_REG_EDCR 0x1D /* Energy Detect Control Register */
-
-/* PHY Control and Status bits */
-#define PHY_FULLD_100M 0x2100 /* Full Duplex 100Mbit */
-#define PHY_HALFD_100M 0x2000 /* Half Duplex 100Mbit */
-#define PHY_FULLD_10M 0x0100 /* Full Duplex 10Mbit */
-#define PHY_HALFD_10M 0x0000 /* Half Duplex 10MBit */
-#define PHY_AUTO_NEG 0x1000 /* Select Auto Negotiation */
-#define PHY_AUTO_NEG_DONE 0x0020 /* AutoNegotiation Complete in BMSR PHY reg */
-#define PHY_BMCR_RESET 0x8000 /* Reset bit at BMCR PHY reg */
-#define LINK_VALID_STS 0x0001 /* Link Valid Status at REG_STS PHY reg */
-#define FULL_DUP_STS 0x0004 /* Full Duplex Status at REG_STS PHY reg */
-#define SPEED_10M_STS 0x0002 /* 10Mbps Status at REG_STS PHY reg */
-
-#define DP83848C_DEF_ADR 0x01 /* Default PHY device address */
-#define DP83848C_ID 0x20005C90 /* PHY Identifier (without Rev. info */
-
-#define LAN8720_ID 0x0007C0F0 /* PHY Identifier */
-#define PHY_REG_SCSR 0x1F /* PHY Special Control/Status Register */
-
-/* Misc */
-#define ETHERNET_RST 22 /* Reset Output for EMAC at RGU */
-#define RMII_SELECT 0x04 /* Select RMII in EMACCFG */
-
-
-/* Prototypes */
-void Init_EMAC(void);
-unsigned short ReadFrameBE_EMAC(void);
-void CopyToFrame_EMAC(void *Source, unsigned int Size);
-void CopyFromFrame_EMAC(void *Dest, unsigned short Size);
-void DummyReadFrame_EMAC(unsigned short Size);
-unsigned short StartReadFrame(void);
-void EndReadFrame(void);
-unsigned int CheckFrameReceived(void);
-void RequestSend(unsigned short FrameSize);
-unsigned int Rdy4Tx(void);
-
-
-#endif
diff --git a/hw/bsp/ea4357/nand.c b/hw/bsp/ea4357/nand.c
deleted file mode 100644
index 21ec14fbe..000000000
--- a/hw/bsp/ea4357/nand.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "lpc_types.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_timer.h"
-#include "nand.h"
-
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-
-#define K9F1G_CLE ((volatile uint8_t *)0x1D100000)
-#define K9F1G_ALE ((volatile uint8_t *)0x1D080000)
-#define K9F1G_DATA ((volatile uint8_t *)0x1D000000)
-
-#define K9FXX_WAIT()
-
-#define K9FXX_READ_1 0x00
-#define K9FXX_READ_2 0x30
-
-#define K9FXX_SET_ADDR_A 0x00
-#define K9FXX_SET_ADDR_B 0x01
-#define K9FXX_SET_ADDR_C 0x50
-#define K9FXX_READ_ID 0x90
-#define K9FXX_RESET 0xff
-#define K9FXX_BLOCK_PROGRAM_1 0x80
-#define K9FXX_BLOCK_PROGRAM_2 0x10
-#define K9FXX_BLOCK_ERASE_1 0x60
-#define K9FXX_BLOCK_ERASE_2 0xd0
-#define K9FXX_READ_STATUS 0x70
-#define K9FXX_BUSY (1 << 6)
-#define K9FXX_OK (1 << 0)
-
-#define ID_MARKER_CODE (0xEC)
-#define ID_SAMSUNG (0xF1)
-
-#define ID_PAGE_SZ_1KB (0x00)
-#define ID_PAGE_SZ_2KB (0x01)
-#define ID_PAGE_SZ_4KB (0x02)
-#define ID_PAGE_SZ_8KB (0x03)
-
-#define ID_BLOCK_SZ_64KB (0x00)
-#define ID_BLOCK_SZ_128KB (0x01)
-#define ID_BLOCK_SZ_256KB (0x02)
-#define ID_BLOCK_SZ_512KB (0x03)
-
-#define ID_PAGE_SZ_1KB (0x00)
-#define ID_PAGE_SZ_2KB (0x01)
-#define ID_PAGE_SZ_4KB (0x02)
-#define ID_PAGE_SZ_8KB (0x03)
-
-#define ID_REDUND_SZ_8 (0x00)
-#define ID_REDUND_SZ_16 (0x01)
-
-
-
-/* This macro could be changed to check the ready pin */
-#define WAIT_READY() (TIM_Waitus(25))
-
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-static uint32_t pageSize = 0;
-static uint32_t blockSize = 0;
-static uint32_t reduntSize = 0;
-
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-
-static void pinConfig(void)
-{
- /* Set up EMC pin */
- scu_pinmux( 2 , 9 , MD_PLN_FAST , 3 );//A0
- scu_pinmux( 2 , 10 , MD_PLN_FAST , 3 );//A1
- scu_pinmux( 2 , 11 , MD_PLN_FAST , 3 );//A2
- scu_pinmux( 2 , 12 , MD_PLN_FAST , 3 );//A3
- scu_pinmux( 2 , 13 , MD_PLN_FAST , 3 );//A4
- scu_pinmux( 1 , 0 , MD_PLN_FAST , 2 );//A5
- scu_pinmux( 1 , 1 , MD_PLN_FAST , 2 );//A6
- scu_pinmux( 1 , 2 , MD_PLN_FAST , 2 );//A7
- scu_pinmux( 2 , 8 , MD_PLN_FAST , 3 );//A8
- scu_pinmux( 2 , 7 , MD_PLN_FAST , 3 );//A9
- scu_pinmux( 2 , 6 , MD_PLN_FAST , 2 );//A10
- scu_pinmux( 2 , 2 , MD_PLN_FAST , 2 );//A11
- scu_pinmux( 2 , 1 , MD_PLN_FAST , 2 );//A12
- scu_pinmux( 2 , 0 , MD_PLN_FAST , 2 );//A13
- scu_pinmux( 6 , 8 , MD_PLN_FAST , 1 );//A14
- scu_pinmux( 6 , 7 , MD_PLN_FAST , 1 );//A15
- scu_pinmux( 13 , 16 , MD_PLN_FAST , 2 );//A16
- scu_pinmux( 13 , 15 , MD_PLN_FAST , 2 );//A17
- scu_pinmux( 14 , 0 , MD_PLN_FAST , 3 );//A18
- scu_pinmux( 14 , 1 , MD_PLN_FAST , 3 );//A19
- scu_pinmux( 14 , 2 , MD_PLN_FAST , 3 );//A20
- scu_pinmux( 14 , 3 , MD_PLN_FAST , 3 );//A21
- scu_pinmux( 14 , 4 , MD_PLN_FAST , 3 );//A22
- scu_pinmux( 10 , 4 , MD_PLN_FAST , 3 );//A23
-
- scu_pinmux( 1 , 7 , MD_PLN_FAST , 3 );//D0
- scu_pinmux( 1 , 8 , MD_PLN_FAST , 3 );//D1
- scu_pinmux( 1 , 9 , MD_PLN_FAST , 3 );//D2
- scu_pinmux( 1 , 10 , MD_PLN_FAST , 3 );//D3
- scu_pinmux( 1 , 11 , MD_PLN_FAST , 3 );//D4
- scu_pinmux( 1 , 12 , MD_PLN_FAST , 3 );//D5
- scu_pinmux( 1 , 13 , MD_PLN_FAST , 3 );//D6
- scu_pinmux( 1 , 14 , MD_PLN_FAST , 3 );//D7
- scu_pinmux( 5 , 4 , MD_PLN_FAST , 2 );//D8
- scu_pinmux( 5 , 5 , MD_PLN_FAST , 2 );//D9
- scu_pinmux( 5 , 6 , MD_PLN_FAST , 2 );//D10
- scu_pinmux( 5 , 7 , MD_PLN_FAST , 2 );//D11
- scu_pinmux( 5 , 0 , MD_PLN_FAST , 2 );//D12
- scu_pinmux( 5 , 1 , MD_PLN_FAST , 2 );//D13
- scu_pinmux( 5 , 2 , MD_PLN_FAST , 2 );//D14
- scu_pinmux( 5 , 3 , MD_PLN_FAST , 2 );//D15
- scu_pinmux( 13 , 2 , MD_PLN_FAST , 2 );//D16
- scu_pinmux( 13 , 3 , MD_PLN_FAST , 2 );//D17
- scu_pinmux( 13 , 4 , MD_PLN_FAST , 2 );//D18
- scu_pinmux( 13 , 5 , MD_PLN_FAST , 2 );//D19
- scu_pinmux( 13 , 6 , MD_PLN_FAST , 2 );//D20
- scu_pinmux( 13 , 7 , MD_PLN_FAST , 2 );//D21
- scu_pinmux( 13 , 8 , MD_PLN_FAST , 2 );//D22
- scu_pinmux( 13 , 9 , MD_PLN_FAST , 2 );//D23
- scu_pinmux( 14 , 5 , MD_PLN_FAST , 3 );//D24
- scu_pinmux( 14 , 6 , MD_PLN_FAST , 3 );//D25
- scu_pinmux( 14 , 7 , MD_PLN_FAST , 3 );//D26
- scu_pinmux( 14 , 8 , MD_PLN_FAST , 3 );//D27
- scu_pinmux( 14 , 9 , MD_PLN_FAST , 3 );//D28
- scu_pinmux( 14 , 10 , MD_PLN_FAST , 3 );//D29
- scu_pinmux( 14 , 11 , MD_PLN_FAST , 3 );//D30
- scu_pinmux( 14 , 12 , MD_PLN_FAST , 3 );//D31
-
- scu_pinmux( 1 , 3 , MD_PLN_FAST , 3 );//OE
- scu_pinmux( 1 , 6 , MD_PLN_FAST , 3 );//WE
-
- scu_pinmux( 1 , 4 , MD_PLN_FAST , 3 );//BLS0
- scu_pinmux( 6 , 6 , MD_PLN_FAST , 1 );//BLS1
- scu_pinmux( 13 , 13 , MD_PLN_FAST , 2 );//BLS2
- scu_pinmux( 13 , 10 , MD_PLN_FAST , 2 );//BLS3
-
- scu_pinmux( 1 , 5 , MD_PLN_FAST , 3 );//CS0
- scu_pinmux( 6 , 3 , MD_PLN_FAST , 3 );//CS1
- scu_pinmux( 13 , 12 , MD_PLN_FAST , 2 );//CS2
- scu_pinmux( 13 , 11 , MD_PLN_FAST , 2 );//CS3
-}
-
-
-static uint32_t nandReadId(void)
-{
- uint8_t a, b, c, d;
- volatile uint8_t *pCLE;
- volatile uint8_t *pALE;
- volatile uint8_t *pData;
-
- pCLE = K9F1G_CLE;
- pALE = K9F1G_ALE;
- pData = K9F1G_DATA;
-
- *pCLE = K9FXX_READ_ID;
- *pALE = 0;
-
- a = *pData;
- b = *pData;
- c = *pData;
- d = *pData;
-
-
- return (a << 24) | (b << 16) | (c << 8) | d;
-}
-
-static uint8_t nandStatus(void)
-{
- uint8_t status = 0;
- volatile uint8_t *pCLE;
- volatile uint8_t *pALE;
- volatile uint8_t *pData;
-
- pCLE = K9F1G_CLE;
- pALE = K9F1G_ALE;
- pData = K9F1G_DATA;
-
- *pCLE = K9FXX_READ_STATUS;
- *pALE = 0;
-
- status = *pData;
-
- /* remove bits not used */
- return (status & 0xC1);
-}
-
-static void nandWaitReady(void)
-{
- while( !(nandStatus() & (1<<6)) );
-}
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-
-
-/******************************************************************************
- *
- * Description:
- * Initialize the NAND Flash
- *
- * Returns:
- * TRUE if initialization successful; otherwise FALSE
- *
- *****************************************************************************/
-uint32_t nand_init (void)
-{
- uint32_t nandId = 0;
- TIM_TIMERCFG_Type timerCfg;
-
-// LPC_SC->PCONP |= 0x00000800;
- LPC_EMC->CONTROL = 0x00000001;
- LPC_EMC->CONFIG = 0x00000000;
-
- pinConfig();
-
- TIM_ConfigStructInit(TIM_TIMER_MODE, &timerCfg);
- TIM_Init(LPC_TIMER0, TIM_TIMER_MODE, &timerCfg);
-
- LPC_EMC->STATICCONFIG1 = 0x00000080;
-
- LPC_EMC->STATICWAITWEN1 = 0x00000002;
- LPC_EMC->STATICWAITOEN1 = 0x00000002;
- LPC_EMC->STATICWAITRD1 = 0x00000008;
- LPC_EMC->STATICWAITPAG1 = 0x0000001f;
- LPC_EMC->STATICWAITWR1 = 0x00000008;
- LPC_EMC->STATICWAITTURN1 = 0x0000000f;
-
- nandId = nandReadId();
-
- if ((nandId & 0xffff0000) !=
- (((uint32_t)(ID_MARKER_CODE) << 24) | ID_SAMSUNG << 16)) {
- /* unknown NAND chip */
- return FALSE;
- }
-
- pageSize = 1024 * (1 << (nandId & 0x03));
- blockSize = 64*1024 * (1 << ((nandId>>4) & 0x03));
- reduntSize = 8 * (1 << ((nandId >> 1) & 0x1));
-
-
- return TRUE;
-}
-
-/******************************************************************************
- *
- * Description:
- * Get the page size of the NAND flash
- *
- * Returns:
- * page size in bytes
- *
- *****************************************************************************/
-uint32_t nand_getPageSize(void)
-{
- return pageSize;
-}
-
-/******************************************************************************
- *
- * Description:
- * Get the block size of the NAND flash
- *
- * Returns:
- * block size in bytes
- *
- *****************************************************************************/
-uint32_t nand_getBlockSize(void)
-{
- return blockSize;
-}
-
-/******************************************************************************
- *
- * Description:
- * Get the redundant (spare) size per page
- *
- * Returns:
- * redundant/spare size in bytes
- *
- *****************************************************************************/
-uint32_t nand_getRedundantSize(void)
-{
- return reduntSize * (pageSize/512);
-}
-
-/******************************************************************************
- *
- * Description:
- * Check if a block is valid
- *
- * Returns:
- * TRUE if the block is valid; otherwise FALSE
- *
- *****************************************************************************/
-uint32_t nand_isBlockValid(uint32_t block)
-{
- uint32_t addr = 0;
- uint32_t page = 0;
-
- volatile uint8_t *pCLE;
- volatile uint8_t *pALE;
- volatile uint8_t *pData;
-
-
- pCLE = K9F1G_CLE;
- pALE = K9F1G_ALE;
- pData = K9F1G_DATA;
-
- if (block >= NAND_NUM_BLOCKS) {
- return FALSE;
- }
-
- addr = block * (blockSize/pageSize);
-
- /*
- * Check page 0 and page 1 in each block. If the first byte
- * in the spare area (of either page 0 or page 1) is != 0xFF
- * the block is invalid.
- */
-
- nandWaitReady();
-
- for (page = 0; page < 2; page++) {
- addr += page;
-
- *pCLE = K9FXX_READ_1;
- *pALE = (uint8_t) (pageSize & 0x00FF);
- *pALE = (uint8_t)((pageSize & 0xFF00) >> 8);
- *pALE = (uint8_t)((addr & 0x00FF));
- *pALE = (uint8_t)((addr & 0xFF00) >> 8);
- *pCLE = K9FXX_READ_2;
-
- WAIT_READY();
-
- if (*pData != 0xFF) {
- return FALSE;
- }
-
- }
-
- return TRUE;
-}
-
-
-/******************************************************************************
- *
- * Description:
- * Read a page from the NAND memory
- *
- * Params:
- * block - block number to read from
- * page - page with�n block to read from
- * pageBuf - data is copied to this buffer. The size must be at least
- * pageSize.
- *
- * Returns:
- * TRUE if read successful; otherwise FALSE
- *
- *****************************************************************************/
-uint32_t nand_readPage(uint32_t block, uint32_t page, uint8_t* pageBuf)
-{
- uint32_t i = 0;
- uint32_t addr = 0;
-
- volatile uint8_t *pCLE;
- volatile uint8_t *pALE;
- volatile uint8_t *pData;
-
-
- pCLE = K9F1G_CLE;
- pALE = K9F1G_ALE;
- pData = K9F1G_DATA;
-
- if (block >= NAND_NUM_BLOCKS) {
- return FALSE;
- }
-
- if (page >= blockSize/pageSize) {
- return FALSE;
- }
-
- addr = block * (blockSize/pageSize) + page;
-
- /*
- * Always reading from start of a page address.
- * This means that the column address is always 0.
- */
-
- *pCLE = K9FXX_READ_1;
- *pALE = 0;
- *pALE = 0;
- *pALE = (uint8_t)((addr & 0x00FF));
- *pALE = (uint8_t)((addr & 0xFF00) >> 8);
- *pCLE = K9FXX_READ_2;
-
- WAIT_READY();
-
-
- for (i = 0; i < pageSize; i++) {
- *pageBuf++ = *pData;
- }
-
-
- return TRUE;
-}
-
-/******************************************************************************
- *
- * Description:
- * Write a page of data to the NAND memory
- *
- * Params:
- * block - block number to write to
- * page - page within block to write to
- * pageBuf - data is copied from this buffer. The size must be at least
- * pageSize.
- *
- * Returns:
- * TRUE if write successful; otherwise FALSE
- *
- *****************************************************************************/
-uint32_t nand_writePage(uint32_t block, uint32_t page, uint8_t* pageBuf)
-{
- uint32_t i = 0;
- uint32_t addr = 0;
-
- volatile uint8_t *pCLE;
- volatile uint8_t *pALE;
- volatile uint8_t *pData;
-
-
- pCLE = K9F1G_CLE;
- pALE = K9F1G_ALE;
- pData = K9F1G_DATA;
-
- if (block >= NAND_NUM_BLOCKS) {
- return FALSE;
- }
-
- if (page >= blockSize/pageSize) {
- return FALSE;
- }
-
- addr = block * (blockSize/pageSize) + page;
-
- /*
- * Always writing to start of a page address.
- * This means that the column address is always 0.
- */
-
- *pCLE = K9FXX_BLOCK_PROGRAM_1;
- *pALE = 0;
- *pALE = 0;
- *pALE = (uint8_t)((addr & 0x00FF));
- *pALE = (uint8_t)((addr & 0xFF00) >> 8);
-
-
- for (i = 0; i < pageSize; i++) {
- *pData = *pageBuf++;
- }
-
- *pCLE = K9FXX_BLOCK_PROGRAM_2;
-
- TIM_Waitus(700);
- nandWaitReady();
-
- return ((nandStatus() & 0x01) != 0x01);
-}
-
-/******************************************************************************
- *
- * Description:
- * Erase a block
- *
- * Params:
- * block - block number to erase
- *
- * Returns:
- * TRUE if eras successful; otherwise FALSE
- *
- *****************************************************************************/
-uint32_t nand_eraseBlock(uint32_t block)
-{
- uint32_t addr = 0;
-
- volatile uint8_t *pCLE;
- volatile uint8_t *pALE;
-
- pCLE = K9F1G_CLE;
- pALE = K9F1G_ALE;
-
- if (block >= NAND_NUM_BLOCKS) {
- return FALSE;
- }
-
- addr = block * (blockSize/pageSize);
-
- *pCLE = K9FXX_BLOCK_ERASE_1;
- *pALE = (uint8_t)(addr & 0x00FF);
- *pALE = (uint8_t)((addr & 0xFF00) >> 8);
- *pCLE = K9FXX_BLOCK_ERASE_2;
-
- TIM_Waitus(700);
- nandWaitReady();
-
- return ((nandStatus() & 0x01) != 0x01);
-}
-
-#endif
diff --git a/hw/bsp/ea4357/nand.h b/hw/bsp/ea4357/nand.h
deleted file mode 100644
index 693c67478..000000000
--- a/hw/bsp/ea4357/nand.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __NAND_H
-#define __NAND_H
-
-#define NAND_NUM_BLOCKS (1024)
-
-extern uint32_t nand_init (void);
-extern uint32_t nand_getPageSize(void);
-extern uint32_t nand_getBlockSize(void);
-extern uint32_t nand_getRedundantSize(void);
-extern uint32_t nand_isBlockValid(uint32_t blockNum);
-uint32_t nand_readPage(uint32_t block, uint32_t page, uint8_t* pageBuf);
-uint32_t nand_writePage(uint32_t block, uint32_t page, uint8_t* pageBuf);
-uint32_t nand_eraseBlock(uint32_t block);
-
-
-#endif /* end __NAND_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/oem_base_board/acc.c b/hw/bsp/ea4357/oem_base_board/acc.c
deleted file mode 100644
index a53634980..000000000
--- a/hw/bsp/ea4357/oem_base_board/acc.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "lpc_types.h"
-#include "lpc43xx_i2c.h"
-#include "acc.h"
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-#define I2C_PORT (LPC_I2C0)
-
-#define ACC_I2C_ADDR (0x1D)
-
-#define ACC_ADDR_XOUTL 0x00
-#define ACC_ADDR_XOUTH 0x01
-#define ACC_ADDR_YOUTL 0x02
-#define ACC_ADDR_YOUTX 0x03
-#define ACC_ADDR_ZOUTL 0x04
-#define ACC_ADDR_ZOUTH 0x05
-#define ACC_ADDR_XOUT8 0x06
-#define ACC_ADDR_YOUT8 0x07
-#define ACC_ADDR_ZOUT8 0x08
-#define ACC_ADDR_STATUS 0x09
-#define ACC_ADDR_DETSRC 0x0A
-#define ACC_ADDR_TOUT 0x0B
-#define ACC_ADDR_I2CAD 0x0D
-#define ACC_ADDR_USRINF 0x0E
-#define ACC_ADDR_WHOAMI 0x0F
-#define ACC_ADDR_XOFFL 0x10
-#define ACC_ADDR_XOFFH 0x11
-#define ACC_ADDR_YOFFL 0x12
-#define ACC_ADDR_YOFFH 0x13
-#define ACC_ADDR_ZOFFL 0x14
-#define ACC_ADDR_ZOFFH 0x15
-#define ACC_ADDR_MCTL 0x16
-#define ACC_ADDR_INTRST 0x17
-#define ACC_ADDR_CTL1 0x18
-#define ACC_ADDR_CTL2 0x19
-#define ACC_ADDR_LDTH 0x1A
-#define ACC_ADDR_PDTH 0x1B
-#define ACC_ADDR_PW 0x1C
-#define ACC_ADDR_LT 0x1D
-#define ACC_ADDR_TW 0x1E
-
-#define ACC_MCTL_MODE(m) ((m) << 0)
-#define ACC_MCTL_GLVL(g) ((g) << 2)
-
-
-#define ACC_STATUS_DRDY 0x01
-#define ACC_STATUS_DOVR 0x02
-#define ACC_STATUS_PERR 0x04
-
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-static Status I2CWrite(uint32_t addr, uint8_t* buf, uint32_t len)
-{
- I2C_M_SETUP_Type i2cData;
-
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = buf;
- i2cData.tx_length = len;
- i2cData.rx_data = NULL;
- i2cData.rx_length = 0;
- i2cData.retransmissions_max = 3;
-
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
-}
-
-static Status I2CRead(uint32_t addr, uint8_t* buf, uint32_t len)
-{
- I2C_M_SETUP_Type i2cData;
-
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = NULL;
- i2cData.tx_length = 0;
- i2cData.rx_data = buf;
- i2cData.rx_length = len;
- i2cData.retransmissions_max = 3;
-
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
-}
-
-
-static uint8_t getStatus(void)
-{
- uint8_t buf[1];
-
- buf[0] = ACC_ADDR_STATUS;
- I2CWrite(ACC_I2C_ADDR, buf, 1);
- I2CRead(ACC_I2C_ADDR, buf, 1);
-
- return buf[0];
-}
-
-static uint8_t getModeControl(void)
-{
- uint8_t buf[1];
-
- buf[0] = ACC_ADDR_MCTL;
- I2CWrite(ACC_I2C_ADDR, buf, 1);
- I2CRead(ACC_I2C_ADDR, buf, 1);
-
- return buf[0];
-}
-
-static void setModeControl(uint8_t mctl)
-{
- uint8_t buf[2];
-
- buf[0] = ACC_ADDR_MCTL;
- buf[1] = mctl;
- I2CWrite(ACC_I2C_ADDR, buf, 2);
-}
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- * Initialize the ISL29003 Device
- *
- *****************************************************************************/
-void acc_init (void)
-{
-
- /* set to measurement mode by default */
-
- setModeControl( (ACC_MCTL_MODE(ACC_MODE_MEASURE)
- | ACC_MCTL_GLVL(ACC_RANGE_2G) ));
-
-}
-
-/******************************************************************************
- *
- * Description:
- * Read accelerometer data
- *
- * Params:
- * [out] x - read x value
- * [out] y - read y value
- * [out] z - read z value
- *
- *****************************************************************************/
-void acc_read (int8_t *x, int8_t *y, int8_t *z)
-{
- uint8_t buf[1];
-
- /* wait for ready flag */
- while ((getStatus() & ACC_STATUS_DRDY) == 0);
-
- /*
- * Have experienced problems reading all registers
- * at once. Change to reading them one-by-one.
- */
- buf[0] = ACC_ADDR_XOUT8;
- I2CWrite(ACC_I2C_ADDR, buf, 1);
- I2CRead(ACC_I2C_ADDR, buf, 1);
-
- *x = (int8_t)buf[0];
-
- buf[0] = ACC_ADDR_YOUT8;
- I2CWrite(ACC_I2C_ADDR, buf, 1);
- I2CRead(ACC_I2C_ADDR, buf, 1);
-
- *y = (int8_t)buf[0];
-
- buf[0] = ACC_ADDR_ZOUT8;
- I2CWrite(ACC_I2C_ADDR, buf, 1);
- I2CRead(ACC_I2C_ADDR, buf, 1);
-
- *z = (int8_t)buf[0];
-}
-
-/******************************************************************************
- *
- * Description:
- * Set the g-Range
- *
- * Params:
- * [in] range - the g-Range
- *
- *****************************************************************************/
-void acc_setRange(acc_range_t range)
-{
- uint8_t mctl = 0;
-
- mctl = getModeControl();
-
- mctl &= ~(0x03 << 2);
- mctl |= ACC_MCTL_GLVL(range);
-
- setModeControl(mctl);
-}
-
-/******************************************************************************
- *
- * Description:
- * Set sensor mode
- *
- * Params:
- * [in] mode - the mode to set
- *
- *****************************************************************************/
-void acc_setMode(acc_mode_t mode)
-{
- uint8_t mctl = 0;
-
- mctl = getModeControl();
-
- mctl &= ~(0x03 << 0);
- mctl |= ACC_MCTL_MODE(mode);
-
- setModeControl(mctl);
-}
-
-#endif
diff --git a/hw/bsp/ea4357/oem_base_board/acc.h b/hw/bsp/ea4357/oem_base_board/acc.h
deleted file mode 100644
index 3a739e0b0..000000000
--- a/hw/bsp/ea4357/oem_base_board/acc.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __ACC_H
-#define __ACC_H
-
-
-typedef enum
-{
- ACC_MODE_STANDBY,
- ACC_MODE_MEASURE,
- ACC_MODE_LEVEL, /* level detection */
- ACC_MODE_PULSE, /* pulse detection */
-} acc_mode_t;
-
-typedef enum
-{
- ACC_RANGE_8G,
- ACC_RANGE_2G,
- ACC_RANGE_4G,
-} acc_range_t;
-
-
-void acc_init (void);
-
-void acc_read (int8_t *x, int8_t *y, int8_t *z);
-void acc_setRange(acc_range_t range);
-void acc_setMode(acc_mode_t mode);
-
-
-
-#endif /* end __LIGHT_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/oem_base_board/base_eeprom.c b/hw/bsp/ea4357/oem_base_board/base_eeprom.c
deleted file mode 100644
index 7571744a6..000000000
--- a/hw/bsp/ea4357/oem_base_board/base_eeprom.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-/*
- * NOTE: I2C must have been initialized before calling any functions in this
- * file.
- */
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include <string.h>
-#include <stdio.h>
-#include "lpc_types.h"
-#include "lpc43xx_i2c.h"
-#include "base_eeprom.h"
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-
-#define I2C_PORT (LPC_I2C0)
-
-#ifndef MIN
-#define MIN(x, y) ((x) < (y) ? (x) : (y))
-#endif
-
-#define EEPROM_I2C_ADDR (0x57)
-
-#define EEPROM_PAGE_SIZE 32
-
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-
-static void eepromDelay(void)
-{
- volatile int i = 0;
- for (i = 0; i <0x20000; i++);
-}
-
-static Status I2CWrite(uint32_t addr, uint8_t* buf, uint32_t len)
-{
- I2C_M_SETUP_Type i2cData;
-
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = buf;
- i2cData.tx_length = len;
- i2cData.rx_data = NULL;
- i2cData.rx_length = 0;
- i2cData.retransmissions_max = 3;
-
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
-}
-
-static Status I2CRead(uint32_t addr, uint8_t* buf, uint32_t len)
-{
- I2C_M_SETUP_Type i2cData;
-
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = NULL;
- i2cData.tx_length = 0;
- i2cData.rx_data = buf;
- i2cData.rx_length = len;
- i2cData.retransmissions_max = 3;
-
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
-}
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- * Initialize the EEPROM Driver
- *
- *****************************************************************************/
-void base_eeprom_init (void)
-{
- I2C_Cmd(I2C_PORT, ENABLE);
-}
-
-/******************************************************************************
- *
- * Description:
- * Read from the EEPROM
- *
- * Params:
- * [in] buf - read buffer
- * [in] offset - offset to start to read from
- * [in] len - number of bytes to read
- *
- * Returns:
- * number of read bytes or -1 in case of an error
- *
- *****************************************************************************/
-int16_t base_eeprom_read(uint8_t* buf, uint16_t offset, uint16_t len)
-{
- uint8_t addr = 0;
- int i = 0;
- uint8_t off[2];
-
- if (len > BASE_EEPROM_TOTAL_SIZE || offset+len > BASE_EEPROM_TOTAL_SIZE) {
- return -1;
- }
-
- addr = EEPROM_I2C_ADDR;
- off[0] = ((offset >> 8) & 0xff);
- off[1] = (offset & 0xff);
-
- I2CWrite((addr << 1), off, 2);
- for ( i = 0; i < 0x2000; i++);
- I2CRead((addr << 1), buf, len);
-
- return len;
-
-}
-
-/******************************************************************************
- *
- * Description:
- * Write to the EEPROM
- *
- * Params:
- * [in] buf - data to write
- * [in] offset - offset to start to write to
- * [in] len - number of bytes to write
- *
- * Returns:
- * number of written bytes or -1 in case of an error
- *
- *****************************************************************************/
-int16_t base_eeprom_write(uint8_t* buf, uint16_t offset, uint16_t len)
-{
- uint8_t addr = 0;
- int16_t written = 0;
- uint16_t wLen = 0;
- uint16_t off = offset;
- uint8_t tmp[EEPROM_PAGE_SIZE+2];
-
- if (len > BASE_EEPROM_TOTAL_SIZE || offset+len > BASE_EEPROM_TOTAL_SIZE) {
- return -1;
- }
-
- addr = EEPROM_I2C_ADDR;
-
- wLen = EEPROM_PAGE_SIZE - (off % EEPROM_PAGE_SIZE);
- wLen = MIN(wLen, len);
-
- while (len) {
- tmp[0] = ((off >> 8) & 0xff);
- tmp[1] = (off & 0xff);
- memcpy(&tmp[2], (void*)&buf[written], wLen);
- I2CWrite((addr << 1), tmp, wLen+2);
-
- /* delay to wait for a write cycle */
- eepromDelay();
-
- len -= wLen;
- written += wLen;
- off += wLen;
-
- wLen = MIN(EEPROM_PAGE_SIZE, len);
- }
-
- return written;
-}
-
-#endif
diff --git a/hw/bsp/ea4357/oem_base_board/base_eeprom.h b/hw/bsp/ea4357/oem_base_board/base_eeprom.h
deleted file mode 100644
index 0d7023093..000000000
--- a/hw/bsp/ea4357/oem_base_board/base_eeprom.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __BASE_EEPROM_H
-#define __BASE_EEPROM_H
-
-#define BASE_EEPROM_TOTAL_SIZE 8192
-
-void base_eeprom_init (void);
-int16_t base_eeprom_read(uint8_t* buf, uint16_t offset, uint16_t len);
-int16_t base_eeprom_write(uint8_t* buf, uint16_t offset, uint16_t len);
-
-
-#endif /* end __BASE_EEPROM_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/oem_base_board/lm75a.c b/hw/bsp/ea4357/oem_base_board/lm75a.c
deleted file mode 100644
index db8234405..000000000
--- a/hw/bsp/ea4357/oem_base_board/lm75a.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-/*
- * NOTE: I2C must have been initialized before calling any functions in this
- * file.
- */
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include <string.h>
-#include <stdio.h>
-#include "lpc_types.h"
-#include "lpc43xx_i2c.h"
-
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-
-#define I2C_PORT (LPC_I2C0)
-
-#define LM75A_I2C_ADDR (0x48)
-
-#define LM75A_CMD_TEMP 0x00
-
-#define I2CDEV LPC_I2C2
-
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-static Status I2CWrite(uint32_t addr, uint8_t* buf, uint32_t len)
-{
- I2C_M_SETUP_Type i2cData;
-
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = buf;
- i2cData.tx_length = len;
- i2cData.rx_data = NULL;
- i2cData.rx_length = 0;
- i2cData.retransmissions_max = 3;
-
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
-}
-
-static Status I2CRead(uint32_t addr, uint8_t* buf, uint32_t len)
-{
- I2C_M_SETUP_Type i2cData;
-
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = NULL;
- i2cData.tx_length = 0;
- i2cData.rx_data = buf;
- i2cData.rx_length = len;
- i2cData.retransmissions_max = 3;
-
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
-}
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-/******************************************************************************
- *
- * Description:
- * Initialize the EEPROM Driver
- *
- *****************************************************************************/
-void lm75a_init (void)
-{
-
-}
-
-/******************************************************************************
- *
- * Description:
- * Read the temperature
- *
- * Params: None
- *
- * Returns:
- * The measured temperature x 100, i.e. 26.50 degrees returned as 2650
- *
- *****************************************************************************/
-int32_t lm75a_readTemp(void)
-{
- uint8_t temp[2];
- int16_t t = 0;
-
- I2CWrite(LM75A_I2C_ADDR, LM75A_CMD_TEMP, 1);
- I2CRead(LM75A_I2C_ADDR, temp, 2);
-
- /* 11 MSB bits used. Celcius is calculated as Temp data * 1/8 */
- t = ((temp[0] << 8) | (temp[1]));
-
- return ((t * 100) >> 8);
-
-}
-
-
-#endif
diff --git a/hw/bsp/ea4357/oem_base_board/lm75a.h b/hw/bsp/ea4357/oem_base_board/lm75a.h
deleted file mode 100644
index 0ed6c8dfe..000000000
--- a/hw/bsp/ea4357/oem_base_board/lm75a.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __LM75A_H
-#define __LM75A_H
-
-
-void lm75a_init (void);
-int32_t lm75a_readTemp(void);
-
-
-#endif /* end __LM75A_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/oem_base_board/memreg.c b/hw/bsp/ea4357/oem_base_board/memreg.c
deleted file mode 100644
index 51bcada4b..000000000
--- a/hw/bsp/ea4357/oem_base_board/memreg.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "LPC43xx.h"
-#include "lpc_types.h"
-#include "lpc43xx_scu.h"
-#include "memreg.h"
-
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-static void pinConfig(void)
-{
- /* Set up EMC pin */
- scu_pinmux( 2 , 9 , MD_PLN_FAST , 3 );//A0
- scu_pinmux( 2 , 10 , MD_PLN_FAST , 3 );//A1
- scu_pinmux( 2 , 11 , MD_PLN_FAST , 3 );//A2
- scu_pinmux( 2 , 12 , MD_PLN_FAST , 3 );//A3
- scu_pinmux( 2 , 13 , MD_PLN_FAST , 3 );//A4
- scu_pinmux( 1 , 0 , MD_PLN_FAST , 2 );//A5
- scu_pinmux( 1 , 1 , MD_PLN_FAST , 2 );//A6
- scu_pinmux( 1 , 2 , MD_PLN_FAST , 2 );//A7
- scu_pinmux( 2 , 8 , MD_PLN_FAST , 3 );//A8
- scu_pinmux( 2 , 7 , MD_PLN_FAST , 3 );//A9
- scu_pinmux( 2 , 6 , MD_PLN_FAST , 2 );//A10
- scu_pinmux( 2 , 2 , MD_PLN_FAST , 2 );//A11
- scu_pinmux( 2 , 1 , MD_PLN_FAST , 2 );//A12
- scu_pinmux( 2 , 0 , MD_PLN_FAST , 2 );//A13
- scu_pinmux( 6 , 8 , MD_PLN_FAST , 1 );//A14
- scu_pinmux( 6 , 7 , MD_PLN_FAST , 1 );//A15
- scu_pinmux( 13 , 16 , MD_PLN_FAST , 2 );//A16
- scu_pinmux( 13 , 15 , MD_PLN_FAST , 2 );//A17
- scu_pinmux( 14 , 0 , MD_PLN_FAST , 3 );//A18
- scu_pinmux( 14 , 1 , MD_PLN_FAST , 3 );//A19
- scu_pinmux( 14 , 2 , MD_PLN_FAST , 3 );//A20
- scu_pinmux( 14 , 3 , MD_PLN_FAST , 3 );//A21
- scu_pinmux( 14 , 4 , MD_PLN_FAST , 3 );//A22
- scu_pinmux( 10 , 4 , MD_PLN_FAST , 3 );//A23
-
- scu_pinmux( 1 , 7 , MD_PLN_FAST , 3 );//D0
- scu_pinmux( 1 , 8 , MD_PLN_FAST , 3 );//D1
- scu_pinmux( 1 , 9 , MD_PLN_FAST , 3 );//D2
- scu_pinmux( 1 , 10 , MD_PLN_FAST , 3 );//D3
- scu_pinmux( 1 , 11 , MD_PLN_FAST , 3 );//D4
- scu_pinmux( 1 , 12 , MD_PLN_FAST , 3 );//D5
- scu_pinmux( 1 , 13 , MD_PLN_FAST , 3 );//D6
- scu_pinmux( 1 , 14 , MD_PLN_FAST , 3 );//D7
- scu_pinmux( 5 , 4 , MD_PLN_FAST , 2 );//D8
- scu_pinmux( 5 , 5 , MD_PLN_FAST , 2 );//D9
- scu_pinmux( 5 , 6 , MD_PLN_FAST , 2 );//D10
- scu_pinmux( 5 , 7 , MD_PLN_FAST , 2 );//D11
- scu_pinmux( 5 , 0 , MD_PLN_FAST , 2 );//D12
- scu_pinmux( 5 , 1 , MD_PLN_FAST , 2 );//D13
- scu_pinmux( 5 , 2 , MD_PLN_FAST , 2 );//D14
- scu_pinmux( 5 , 3 , MD_PLN_FAST , 2 );//D15
- scu_pinmux( 13 , 2 , MD_PLN_FAST , 2 );//D16
- scu_pinmux( 13 , 3 , MD_PLN_FAST , 2 );//D17
- scu_pinmux( 13 , 4 , MD_PLN_FAST , 2 );//D18
- scu_pinmux( 13 , 5 , MD_PLN_FAST , 2 );//D19
- scu_pinmux( 13 , 6 , MD_PLN_FAST , 2 );//D20
- scu_pinmux( 13 , 7 , MD_PLN_FAST , 2 );//D21
- scu_pinmux( 13 , 8 , MD_PLN_FAST , 2 );//D22
- scu_pinmux( 13 , 9 , MD_PLN_FAST , 2 );//D23
- scu_pinmux( 14 , 5 , MD_PLN_FAST , 3 );//D24
- scu_pinmux( 14 , 6 , MD_PLN_FAST , 3 );//D25
- scu_pinmux( 14 , 7 , MD_PLN_FAST , 3 );//D26
- scu_pinmux( 14 , 8 , MD_PLN_FAST , 3 );//D27
- scu_pinmux( 14 , 9 , MD_PLN_FAST , 3 );//D28
- scu_pinmux( 14 , 10 , MD_PLN_FAST , 3 );//D29
- scu_pinmux( 14 , 11 , MD_PLN_FAST , 3 );//D30
- scu_pinmux( 14 , 12 , MD_PLN_FAST , 3 );//D31
-
- scu_pinmux( 1 , 3 , MD_PLN_FAST , 3 );//OE
- scu_pinmux( 1 , 6 , MD_PLN_FAST , 3 );//WE
-
- scu_pinmux( 1 , 4 , MD_PLN_FAST , 3 );//BLS0
- scu_pinmux( 6 , 6 , MD_PLN_FAST , 1 );//BLS1
- scu_pinmux( 13 , 13 , MD_PLN_FAST , 2 );//BLS2
- scu_pinmux( 13 , 10 , MD_PLN_FAST , 2 );//BLS3
-
- scu_pinmux( 1 , 5 , MD_PLN_FAST , 3 );//CS0
- scu_pinmux( 6 , 3 , MD_PLN_FAST , 3 );//CS1
- scu_pinmux( 13 , 12 , MD_PLN_FAST , 2 );//CS2
- scu_pinmux( 13 , 11 , MD_PLN_FAST , 2 );//CS3
-
- scu_pinmux( 6 , 4 , MD_PLN_FAST , 3 );//CAS
- scu_pinmux( 6 , 5 , MD_PLN_FAST , 3 );//RAS
-
- scu_pinmux( 6 , 9 , MD_PLN_FAST , 3 );//DYCS0
- scu_pinmux( 6 , 1 , MD_PLN_FAST , 1 );//DYCS1
- scu_pinmux( 13 , 14 , MD_PLN_FAST , 2 );//DYCS2
- scu_pinmux( 15 , 14 , MD_PLN_FAST , 3 );//DYCS3
-
- scu_pinmux( 6 , 11 , MD_PLN_FAST , 3 );//CKEOUT0
- scu_pinmux( 6 , 2 , MD_PLN_FAST , 1 );//CKEOUT1
- scu_pinmux( 13 , 1 , MD_PLN_FAST , 2 );//CKEOUT2
- scu_pinmux( 14 , 15 , MD_PLN_FAST , 3 );//CKEOUT3
-
- scu_pinmux( 6 , 12 , MD_PLN_FAST , 3 );//DQMOUT0
- scu_pinmux( 6 , 10 , MD_PLN_FAST , 3 );//DQMOUT1
- scu_pinmux( 13 , 0 , MD_PLN_FAST , 2 );//DQMOUT2
- scu_pinmux( 14 , 13 , MD_PLN_FAST , 3 );//DQMOUT3
-}
-
-
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-
-
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-
-
-/******************************************************************************
- *
- * Description:
- * Initialize the NOR Flash
- *
- *****************************************************************************/
-uint32_t memreg_init (void)
-{
- LPC_EMC->CONTROL = 0x00000001;
- LPC_EMC->CONFIG = 0x00000000;
-
- pinConfig();
-
- // Setup for 16-bit access
- LPC_EMC->STATICCONFIG2 = 0x00000001;
-
- return FALSE;
-}
-
-#endif
-
diff --git a/hw/bsp/ea4357/oem_base_board/memreg.h b/hw/bsp/ea4357/oem_base_board/memreg.h
deleted file mode 100644
index e9ef85f03..000000000
--- a/hw/bsp/ea4357/oem_base_board/memreg.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __MEMREG_H
-#define __MEMREG_H
-
-#define MEMREG_BASE 0x1e000000
-
-
-extern uint32_t memreg_init (void);
-
-
-#endif /* end __MEMREG_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/oem_base_board/norflash.c b/hw/bsp/ea4357/oem_base_board/norflash.c
deleted file mode 100644
index 0baf62c49..000000000
--- a/hw/bsp/ea4357/oem_base_board/norflash.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "lpc_types.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_timer.h"
-#include "norflash.h"
-
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-
-#define CMD_SWID 0x90
-#define CMD_CFI_QRY 0x98
-#define CMD_ID_EXIT 0xF0
-
-#define CMD_ERASE_BLOCK 0x0050
-#define CMD_ERASE_SECTOR 0x0030
-#define CMD_ERASE_CHIP 0x0010
-
-#define MAN_ID_SST 0x00BF
-#define DEV_ID_SST39VF3201 0x235B
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-static geometry_t chip_info;
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-
-static void pinConfig(void)
-{
- /* Set up EMC pin */
- scu_pinmux( 2 , 9 , MD_PLN_FAST , 3 );//A0
- scu_pinmux( 2 , 10 , MD_PLN_FAST , 3 );//A1
- scu_pinmux( 2 , 11 , MD_PLN_FAST , 3 );//A2
- scu_pinmux( 2 , 12 , MD_PLN_FAST , 3 );//A3
- scu_pinmux( 2 , 13 , MD_PLN_FAST , 3 );//A4
- scu_pinmux( 1 , 0 , MD_PLN_FAST , 2 );//A5
- scu_pinmux( 1 , 1 , MD_PLN_FAST , 2 );//A6
- scu_pinmux( 1 , 2 , MD_PLN_FAST , 2 );//A7
- scu_pinmux( 2 , 8 , MD_PLN_FAST , 3 );//A8
- scu_pinmux( 2 , 7 , MD_PLN_FAST , 3 );//A9
- scu_pinmux( 2 , 6 , MD_PLN_FAST , 2 );//A10
- scu_pinmux( 2 , 2 , MD_PLN_FAST , 2 );//A11
- scu_pinmux( 2 , 1 , MD_PLN_FAST , 2 );//A12
- scu_pinmux( 2 , 0 , MD_PLN_FAST , 2 );//A13
- scu_pinmux( 6 , 8 , MD_PLN_FAST , 1 );//A14
- scu_pinmux( 6 , 7 , MD_PLN_FAST , 1 );//A15
- scu_pinmux( 13 , 16 , MD_PLN_FAST , 2 );//A16
- scu_pinmux( 13 , 15 , MD_PLN_FAST , 2 );//A17
- scu_pinmux( 14 , 0 , MD_PLN_FAST , 3 );//A18
- scu_pinmux( 14 , 1 , MD_PLN_FAST , 3 );//A19
- scu_pinmux( 14 , 2 , MD_PLN_FAST , 3 );//A20
- scu_pinmux( 14 , 3 , MD_PLN_FAST , 3 );//A21
- scu_pinmux( 14 , 4 , MD_PLN_FAST , 3 );//A22
- scu_pinmux( 10 , 4 , MD_PLN_FAST , 3 );//A23
-
- scu_pinmux( 1 , 7 , MD_PLN_FAST , 3 );//D0
- scu_pinmux( 1 , 8 , MD_PLN_FAST , 3 );//D1
- scu_pinmux( 1 , 9 , MD_PLN_FAST , 3 );//D2
- scu_pinmux( 1 , 10 , MD_PLN_FAST , 3 );//D3
- scu_pinmux( 1 , 11 , MD_PLN_FAST , 3 );//D4
- scu_pinmux( 1 , 12 , MD_PLN_FAST , 3 );//D5
- scu_pinmux( 1 , 13 , MD_PLN_FAST , 3 );//D6
- scu_pinmux( 1 , 14 , MD_PLN_FAST , 3 );//D7
- scu_pinmux( 5 , 4 , MD_PLN_FAST , 2 );//D8
- scu_pinmux( 5 , 5 , MD_PLN_FAST , 2 );//D9
- scu_pinmux( 5 , 6 , MD_PLN_FAST , 2 );//D10
- scu_pinmux( 5 , 7 , MD_PLN_FAST , 2 );//D11
- scu_pinmux( 5 , 0 , MD_PLN_FAST , 2 );//D12
- scu_pinmux( 5 , 1 , MD_PLN_FAST , 2 );//D13
- scu_pinmux( 5 , 2 , MD_PLN_FAST , 2 );//D14
- scu_pinmux( 5 , 3 , MD_PLN_FAST , 2 );//D15
- scu_pinmux( 13 , 2 , MD_PLN_FAST , 2 );//D16
- scu_pinmux( 13 , 3 , MD_PLN_FAST , 2 );//D17
- scu_pinmux( 13 , 4 , MD_PLN_FAST , 2 );//D18
- scu_pinmux( 13 , 5 , MD_PLN_FAST , 2 );//D19
- scu_pinmux( 13 , 6 , MD_PLN_FAST , 2 );//D20
- scu_pinmux( 13 , 7 , MD_PLN_FAST , 2 );//D21
- scu_pinmux( 13 , 8 , MD_PLN_FAST , 2 );//D22
- scu_pinmux( 13 , 9 , MD_PLN_FAST , 2 );//D23
- scu_pinmux( 14 , 5 , MD_PLN_FAST , 3 );//D24
- scu_pinmux( 14 , 6 , MD_PLN_FAST , 3 );//D25
- scu_pinmux( 14 , 7 , MD_PLN_FAST , 3 );//D26
- scu_pinmux( 14 , 8 , MD_PLN_FAST , 3 );//D27
- scu_pinmux( 14 , 9 , MD_PLN_FAST , 3 );//D28
- scu_pinmux( 14 , 10 , MD_PLN_FAST , 3 );//D29
- scu_pinmux( 14 , 11 , MD_PLN_FAST , 3 );//D30
- scu_pinmux( 14 , 12 , MD_PLN_FAST , 3 );//D31
-
- scu_pinmux( 1 , 3 , MD_PLN_FAST , 3 );//OE
- scu_pinmux( 1 , 6 , MD_PLN_FAST , 3 );//WE
-
- scu_pinmux( 1 , 4 , MD_PLN_FAST , 3 );//BLS0
- scu_pinmux( 6 , 6 , MD_PLN_FAST , 1 );//BLS1
- scu_pinmux( 13 , 13 , MD_PLN_FAST , 2 );//BLS2
- scu_pinmux( 13 , 10 , MD_PLN_FAST , 2 );//BLS3
-
- scu_pinmux( 1 , 5 , MD_PLN_FAST , 3 );//CS0
- scu_pinmux( 6 , 3 , MD_PLN_FAST , 3 );//CS1
- scu_pinmux( 13 , 12 , MD_PLN_FAST , 2 );//CS2
- scu_pinmux( 13 , 11 , MD_PLN_FAST , 2 );//CS3
-}
-
-#if 0
-static void getIdString(uint16_t idString[11])
-{
- int i = 0;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2aaa)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_CFI_QRY;
-
- for (i = 0; i < 11; i++) {
- idString[i] = *(GET_ADDR(0x10 + i));
- }
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2aaa)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_ID_EXIT;
-}
-#endif
-
-static void getGeoInfo(uint16_t info[14])
-{
- int i = 0;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2aaa)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_CFI_QRY;
-
- for (i = 0; i < 14; i++) {
- info[i] = *(GET_ADDR(0x27 + i));
- }
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2aaa)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_ID_EXIT;
-}
-
-static uint32_t getProductId(void)
-{
- uint16_t manuid = 0;
- uint16_t devid = 0;
- uint32_t result = 0;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2aaa)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_SWID;
-
- manuid = *(GET_ADDR(0x00));
- devid = *(GET_ADDR(0x01));
-
- result = ((manuid << 16) | devid);
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2aaa)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_ID_EXIT;
-
- return result;
-}
-
-/******************************************************************************
- *
- * Description:
- * When the SST39VF160x/320x are in the internal Program operation, any
- * attempt to read DQ7 will produce the complement of the true data. Once
- * the Program operation is completed, DQ7 will produce true data. Note
- * that even though DQ7 may have valid data immediately following the
- * completion of an internal Write operation, the remaining data outputs
- * may still be invalid: valid data on the entire data bus will appear in
- * subsequent successive Read cycles after an interval of 1 �s. During
- * internal Erase operation, any attempt to read DQ7 will produce a '0'.
- * Once the internal Erase operation is completed, DQ7 will produce a '1'.
- *
- * Parameters:
- * addr The device address
- * data The original (true) data
- * timeout Maximum number of loops to delay
- *
- * Returns:
- * TRUE if success
- *
- *****************************************************************************/
-static uint16_t check_data_polling(uint32_t addr, uint16_t data, uint32_t timeout)
-{
- volatile uint16_t *p = (uint16_t*) addr;
- uint16_t true_data = data & 0x80;
- int i;
-
- for (i = 0; i < timeout; i++)
- {
- if ( true_data == (*p &0x80) )
- {
- TIM_Waitus(1);
- return (TRUE);
- }
- }
- return (FALSE);
-}
-
-/******************************************************************************
- *
- * Description:
- * During the internal Program or Erase operation, any consecutive attempts
- * to read DQ6 will produce alternating �1�s and �0�s, i.e., toggling
- * between 1 and 0. When the internal Program or Erase operation is
- * completed, the DQ6 bit will stop toggling. The device is then ready
- * for the next operation.
- *
- * Parameters:
- * addr The device address
- * timeout Maximum number of loops to delay
- *
- * Returns:
- * TRUE if success
- *
- *****************************************************************************/
-static uint16_t check_toggle_ready(uint32_t addr, uint32_t timeout)
-{
- volatile uint16_t *p = (uint16_t*) addr;
- uint16_t predata, currdata;
- int i;
-
- predata = *p & 0x40;
- for (i = 0; i < timeout; i++)
- {
- currdata = *p & 0x40;
- if (predata == currdata)
- {
- TIM_Waitus(1);
- return (TRUE);
- }
- predata = currdata;
- }
- return (FALSE);
-}
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-
-
-/******************************************************************************
- *
- * Description:
- * Initialize the NOR Flash
- *
- *****************************************************************************/
-uint32_t norflash_init()
-{
- uint32_t prodId = 0;
-
-// LPC_SC->PCONP |= 0x00000800;
-
- LPC_EMC->CONTROL = 0x00000001;
-
- LPC_EMC->CONFIG = 0x00000000;
-
- //Disable Auto-Byte Addressing (on boards designed for LPC24xx)
- //LPC_SC->SCS |= 0x00000001;
-
- pinConfig();
-
- LPC_EMC->STATICCONFIG0 = 0x00000081;
-
- LPC_EMC->STATICWAITWEN0 = 0x00000003; /* ( n + 1 ) -> 4 clock cycles */
- LPC_EMC->STATICWAITOEN0 = 0x00000003; /* ( n ) -> 0 clock cycles */
- LPC_EMC->STATICWAITRD0 = 0x00000006; /* ( n + 1 ) -> 7 clock cycles */
- LPC_EMC->STATICWAITPAG0 = 0x00000003; /* ( n + 1 ) -> 4 clock cycles */
- LPC_EMC->STATICWAITWR0 = 0x00000005; /* ( n + 2 ) -> 7 clock cycles */
- LPC_EMC->STATICWAITTURN0 = 0x00000003; /* ( n + 1 ) -> 4 clock cycles */
-
-#if 0
- M32(0x40086400) = 3;//SFSP8_0, pin config P8_0, FUNC3, (PUP_DISABLE | PDN_DISABLE | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x40086404) = 3;//SFSP8_1, pin config P8_1, FUNC3, (PUP_DISABLE | PDN_DISABLE | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x40086408) = 3;//SFSP8_2, pin config P8_2, FUNC3, (PUP_DISABLE | PDN_DISABLE | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x4008640C) = 3;//SFSP8_3, pin config P8_3, FUNC3, (PUP_DISABLE | PDN_DISABLE | SLEWRATE_SLOW | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x40086410) = 3;//SFSP8_4, pin config P8_4, FUNC3, (PUP_DISABLE | PDN_DISABLE | SLEWRATE_SLOW | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x40086414) = 3;//SFSP8_5, pin config P8_5, FUNC3, (PUP_DISABLE | PDN_DISABLE | SLEWRATE_SLOW | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x40086418) = 3;//SFSP8_6, pin config P8_6, FUNC3, (PUP_DISABLE | PDN_DISABLE | SLEWRATE_SLOW | INBUF_DISABLE | FILTER_ENABLE)
- M32(0x4008641C) = 3;//SFSP8_7, pin config P8_7, FUNC3, (PUP_DISABLE | PDN_DISABLE | SLEWRATE_SLOW | INBUF_DISABLE | FILTER_ENABLE)
-#endif
-
- prodId = getProductId();
-
- if (prodId == ((MAN_ID_SST << 16) | DEV_ID_SST39VF3201)) {
-
- uint16_t info[14];
- getGeoInfo(info);
- chip_info.device_size = 1 << info[0];
- chip_info.num_sectors = ((info[7] << 8) | info[6]) + 1;
- chip_info.sector_size = ((info[9] << 8) | info[8]) * 256;
- chip_info.num_blocks = ((info[11] << 8) | info[10]) + 1;
- chip_info.block_size = ((info[13] << 8) | info[12]) * 256;
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-void norflash_getGeometry(geometry_t* geometry)
-{
- *geometry = chip_info;
-}
-
-
-uint32_t norflash_eraseSector(uint32_t addr)
-{
- volatile uint16_t* p;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x0080;
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
-
- p = (uint16_t*) addr;
- *p = CMD_ERASE_SECTOR;
-
- return check_data_polling(addr, 0xffff, 500000);
-}
-
-uint32_t norflash_eraseBlock(uint32_t addr)
-{
- volatile uint16_t* p;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x0080;
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
-
- p = (uint16_t*) addr;
- *p = CMD_ERASE_BLOCK;
-
- return check_toggle_ready(addr, 500000);
-}
-
-uint32_t norflash_eraseEntireChip(void)
-{
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x0080;
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_ERASE_CHIP;
-
- return check_toggle_ready(NORFLASH_BASE, 500000);
-}
-
-uint32_t norflash_writeWord(uint32_t addr, uint16_t data)
-{
- volatile uint16_t *p;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x00A0;
-
- p = (uint16_t*) addr;
- *p = data;
-
- return check_toggle_ready(addr, 500000);
-}
-
-uint32_t norflash_writeBuff(uint32_t addr, uint16_t* data, uint16_t len)
-{
- uint16_t i;
- for (i = 0; i < len; i++)
- {
- if (!norflash_writeWord(addr, data[i]))
- {
- return (FALSE);
- }
- }
- return (TRUE);
-}
-
-/******************************************************************************
- *
- * Description:
- * Reads the security information from the chip. For an explanation
- * see the user manual.
- *
- * Parameters:
- * SST_SecID The factory programmed security segment
- * User_SecID The user defined security segment
- *
- *****************************************************************************/
-void norflash_secid_read(uint16_t SST_SecID[8], uint16_t User_SecID[8])
-{
- uint16_t i;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x0088;
-
- for (i = 0; i < 7; i++)
- {
- SST_SecID[i] = *(GET_ADDR(i)); // SST security is 0x00 - 0x07
- User_SecID[i] = *(GET_ADDR(i + 0x10)); // User security is 0x10 - 0x17
- }
-
- // exit command
- *(GET_ADDR(0x5555)) = CMD_ID_EXIT;
-}
-
-/******************************************************************************
- *
- * Description:
- * Checks if the user defined security segment has been locked or not.
- * See the user manual for more information.
- *
- * Returns:
- * TRUE if the segment is locked
- *
- *****************************************************************************/
-uint32_t norflash_secid_getLockStatus(void)
-{
- uint16_t status;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x0088;
-
- // read status
- status = *(GET_ADDR(0xff));
- status &= 0x0008;
-
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = CMD_ID_EXIT;
-
- if (!status)
- return TRUE; // locked
- return FALSE; // not locked
-}
-
-/******************************************************************************
- *
- * Description:
- * Lock the user security segment. CANNOT BE UNDONE.
- * See the user manual for more information.
- *
- * Returns:
- * TRUE if the segment is locked after programming
- *
- *****************************************************************************/
-uint32_t norflash_secid_lockOut()
-{
- // Code not verified. Use at own risk
-#if 0
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x0085;
- *(GET_ADDR(0x0 )) = 0x0000; // Write 0x0000 to any address
-
- if (check_toggle_ready(GET_ADDR(0x0), 500000))
- {
- return norflash_secid_getLockStatus();
- }
-#endif
- return FALSE;
-}
-
-/******************************************************************************
- *
- * Description:
- * Writes data to the user security segment (0x0010 - 0x0017).
- * See the user manual for more information.
- *
- * Parameters:
- * target Must be in the range 0x10 to 0x17
- * data The data to write
- * len The number of words to write
- *
- * Returns:
- * TRUE if the programming was successful
- *
- *****************************************************************************/
-uint32_t norflash_secid_writeWord(uint16_t target, uint16_t* data, uint16_t len)
-{
- // Code not verified. Use at own risk
-#if 0
- uint16_t i;
-
- if ((target < 0x10) || (target > 0x17))
- return FALSE;
-
- if ((len > 8) || ((target + len) > 0x17))
- return FALSE;
-
- for (i = 0; i < len; i++)
- {
- *(GET_ADDR(0x5555)) = 0x00AA;
- *(GET_ADDR(0x2AAA)) = 0x0055;
- *(GET_ADDR(0x5555)) = 0x00A5;
- *(GET_ADDR(target + i)) = data;
-
- data++;
-
- /* Read the toggle bit to detect end-of-programming for User Sec ID.
- Do Not use Data# Polling for User_SecID_Word_Program!! */
- if (!check_toggle_ready(GET_ADDR(target + i), 500000))
- return FALSE;
- }
-#endif
-
- return TRUE;
-}
-
-#endif
diff --git a/hw/bsp/ea4357/oem_base_board/norflash.h b/hw/bsp/ea4357/oem_base_board/norflash.h
deleted file mode 100644
index 11eb675e6..000000000
--- a/hw/bsp/ea4357/oem_base_board/norflash.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __NORFLASH_H
-#define __NORFLASH_H
-
-#define NORFLASH_SIZE 0x400000 /*Bytes or 0x200000 16bit words*/
-#define NORFLASH_BLOCK_SIZE 0x10000 /*Bytes, or 32K 16bit words*/
-#define NORFLASH_BASE 0x1C000000
-
-//16 bit data
-#define GET_ADDR(addr) (volatile uint16_t *)(NORFLASH_BASE | ((addr) << 1))
-
-typedef struct
-{
- uint32_t device_size; /* Device size in bytes */
- uint32_t num_sectors; /* Number of sectors */
- uint32_t sector_size; /* Sector size in bytes */
- uint32_t num_blocks; /* Number of blocks */
- uint32_t block_size; /* Block size in bytes */
-} geometry_t;
-
-extern uint32_t norflash_init(void);
-
-extern void norflash_getGeometry(geometry_t* geometry);
-
-extern uint32_t norflash_eraseBlock(uint32_t addr);
-extern uint32_t norflash_eraseSector(uint32_t addr);
-extern uint32_t norflash_eraseEntireChip(void);
-
-extern uint32_t norflash_writeWord(uint32_t addr, uint16_t data);
-extern uint32_t norflash_writeBuff(uint32_t addr, uint16_t* data, uint16_t len);
-
-extern void norflash_secid_read(uint16_t SST_SecID[8], uint16_t user_SecID[8]);
-extern uint32_t norflash_secid_getLockStatus(void);
-extern uint32_t norflash_secid_lockOut(void);
-extern uint32_t norflash_secid_writeWord(uint16_t target, uint16_t* data, uint16_t len);
-
-#endif /* end __NORFLASH_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/oem_base_board/uda1380.c b/hw/bsp/ea4357/oem_base_board/uda1380.c
deleted file mode 100644
index 654e4eb9a..000000000
--- a/hw/bsp/ea4357/oem_base_board/uda1380.c
+++ /dev/null
@@ -1,159 +0,0 @@
-#include "../../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "lpc43xx_i2c.h"
-#include "lpc43xx_scu.h"
-#include "uda1380.h"
-
-//Uda1380 link to I2C0 only
-#define UDA1380_I2C LPC_I2C0
-
-
-
-/*********************************************************************//**
- * @brief Initialize Uda1380
- * @param[in] i2cClockFreq I2C clock frequency that Uda1380 operate
- * @param[in] i2sClockFreq I2S bit clock frequency
- * @return None
- **********************************************************************/
-int32_t Uda1380_Init(uint32_t i2cClockFreq, uint32_t i2sClockFreq)
-{
- int32_t ret;
- uint8_t clk;
-
-// // Config Pin for I2C_SDA and I2C_SCL of I2C0
-// scu_pinmux( 2 , 3 , MD_PLN_FAST, FUNC1 );
-// scu_pinmux( 2 , 4 , MD_PLN_FAST, FUNC1 );
-
- I2C_Init(UDA1380_I2C, i2cClockFreq);
-
- /* Enable I2C1 operation */
- I2C_Cmd(UDA1380_I2C, ENABLE);
-
- /* Reset */
- ret = Uda1380_WriteData(UDA1380_REG_L3, 0 );
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
- /* Write clock settings */
- ret = Uda1380_WriteData(UDA1380_REG_I2S,0 );
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
- ret = Uda1380_WriteData(UDA1380_REG_MSTRMUTE,0);
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
- ret = Uda1380_WriteData(UDA1380_REG_MIXSDO,0);
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
-#if UDA1380_SYSCLK_USED //Use SYSCLK
- ret = Uda1380_WriteData(UDA1380_REG_EVALCLK,
- EVALCLK_DEC_EN | EVALCLK_DAC_EN | EVALCLK_INT_EN | EVALCLK_DAC_SEL_SYSCLK );
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
- ret = Uda1380_WriteData(UDA1380_REG_PWRCTRL,
- PWR_PON_HP_EN | PWR_PON_DAC_EN | PWR_PON_BIAS_EN);
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
-#else //Use WSPLL
- if(i2sClockFreq >= 6250 && i2sClockFreq < 12500)
- clk = EVALCLK_WSPLL_SEL6_12K;
- else if(i2sClockFreq >= 12501 && i2sClockFreq < 25000)
- clk = EVALCLK_WSPLL_SEL12_25K;
- else if(i2sClockFreq >= 25001 && i2sClockFreq < 50000)
- clk = EVALCLK_WSPLL_SEL25_50K;
- else if(i2sClockFreq >= 50001 && i2sClockFreq < 100000)
- clk = EVALCLK_WSPLL_SEL50_100K;
- else
- clk= 0;
-
- ret = Uda1380_WriteData(UDA1380_REG_EVALCLK,
- EVALCLK_DEC_EN | EVALCLK_DAC_EN | EVALCLK_INT_EN | EVALCLK_DAC_SEL_WSPLL | clk);
- if(ret != UDA1380_FUNC_OK)
- return ret;
-
- ret = Uda1380_WriteData(UDA1380_REG_PWRCTRL,
- PWR_PON_PLL_EN | PWR_PON_HP_EN | PWR_PON_DAC_EN | PWR_PON_BIAS_EN);
- if(ret != UDA1380_FUNC_OK)
- return ret;
-#endif
- return UDA1380_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Write data to a register of Uda1380
- * @param[in] reg Register address
- * @param[out] data data value.
- * @return None
- **********************************************************************/
-int32_t Uda1380_WriteData(uint8_t reg, uint16_t data)
-{
- I2C_M_SETUP_Type i2cData;
- uint8_t i2cBuf[UDA1380_CMD_BUFF_SIZE];
-
- i2cBuf[0] = reg;
- i2cBuf[1] = (data >> 8) & 0xFF;
- i2cBuf[2] = data & 0xFF;
-
- i2cData.sl_addr7bit = UDA1380_SLAVE_ADDR;
- i2cData.tx_length = UDA1380_CMD_BUFF_SIZE;
- i2cData.tx_data = i2cBuf;
- i2cData.rx_data = NULL;
- i2cData.rx_length = 0;
- i2cData.retransmissions_max = 3;
-
- if (I2C_MasterTransferData(UDA1380_I2C, &i2cData, I2C_TRANSFER_POLLING) == SUCCESS)
- {
- uint16_t dataTmp;
- if(Uda1380_ReadData(reg, &dataTmp) != UDA1380_FUNC_OK) {
- return UDA1380_FUNC_ERR;
- }
- if(dataTmp != data)
- return UDA1380_FUNC_ERR;
-
- return UDA1380_FUNC_OK;
- }
-
- return UDA1380_FUNC_ERR;
-}
-
-
-/*********************************************************************//**
- * @brief Read data stored in register of Uda1380
- * @param[in] reg Register address
- * @param[out] data point to the buffer which is used for storing data.
- * @return None
- **********************************************************************/
-int32_t Uda1380_ReadData(uint8_t reg, uint16_t *data)
-{
- I2C_M_SETUP_Type i2cData;
- uint8_t i2cBuf[UDA1380_CMD_BUFF_SIZE];
-
- if(data == NULL)
- return UDA1380_FUNC_ERR;
-
- i2cBuf[0] = reg;
-
- i2cData.sl_addr7bit = UDA1380_SLAVE_ADDR;
- i2cData.tx_length = 1;
- i2cData.tx_data = i2cBuf;
- i2cData.rx_data = &i2cBuf[1];
- i2cData.rx_length = UDA1380_CMD_BUFF_SIZE - 1;
- i2cData.retransmissions_max = 3;
-
- if (I2C_MasterTransferData(UDA1380_I2C, &i2cData, I2C_TRANSFER_POLLING) == SUCCESS)
- {
- *data = i2cBuf[1] << 8 | i2cBuf[2];
- return UDA1380_FUNC_OK;
- }
-
- return UDA1380_FUNC_ERR;
-}
-
-#endif
-
diff --git a/hw/bsp/ea4357/oem_base_board/uda1380.h b/hw/bsp/ea4357/oem_base_board/uda1380.h
deleted file mode 100644
index b953cf501..000000000
--- a/hw/bsp/ea4357/oem_base_board/uda1380.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef _UDA1380_H_
-#define _UDA1380_H_
-
-#include "lpc_types.h"
-
-#define UDA1380_SYSCLK_USED 0
-#define UDA1380_SLAVE_ADDR 0x1A
-#define UDA1380_CMD_BUFF_SIZE 3
-
-/** UDA1380 Registers */
-#define UDA1380_REG_EVALCLK 0x00
-#define UDA1380_REG_I2S 0x01
-#define UDA1380_REG_PWRCTRL 0x02
-#define UDA1380_REG_ANAMIX 0x03
-#define UDA1380_REG_HEADAMP 0x04
-#define UDA1380_REG_MSTRVOL 0x10
-#define UDA1380_REG_MIXVOL 0x11
-#define UDA1380_REG_MODEBBT 0x12
-#define UDA1380_REG_MSTRMUTE 0x13
-#define UDA1380_REG_MIXSDO 0x14
-#define UDA1380_REG_DECVOL 0x20
-#define UDA1380_REG_PGA 0x21
-#define UDA1380_REG_ADC 0x22
-#define UDA1380_REG_AGC 0x23
-#define UDA1380_REG_L3 0x7f
-#define UDA1380_REG_HEADPHONE 0x18
-#define UDA1380_REG_DEC 0x28
-
-// UDA1380_REG_EVALCLK bit defines
-#define EVALCLK_ADC_EN 0x0800 // Enable ADC clock
-#define EVALCLK_DEC_EN 0x0400 // Enable decimator clock
-#define EVALCLK_DAC_EN 0x0200 // Enable DAC clock
-#define EVALCLK_INT_EN 0x0100 // Enable interpolator clock
-#define EVALCLK_ADC_SEL_WSPLL 0x0020 // Select SYSCLK input for ADC clock
-#define EVALCLK_ADC_SEL_SYSCLK 0x0000 // Select WSPLL clock for ADC clock
-#define EVALCLK_DAC_SEL_WSPLL 0x0010 // Select SYSCLK input for DAC clock
-#define EVALCLK_DAC_SEL_SYSCLK 0x0000 // Select WSPLL clock for DAC clock
-#define EVALCLK_SYSDIV_SEL(n) ((n) << 2) // System clock input divider select
-#define EVALCLK_WSPLL_SEL6_12K 0x0000 // WSPLL input freq selection = 6.25 to 12.5K
-#define EVALCLK_WSPLL_SEL12_25K 0x0001 // WSPLL input freq selection = 12.5K to 25K
-#define EVALCLK_WSPLL_SEL25_50K 0x0002 // WSPLL input freq selection = 25K to 50K
-#define EVALCLK_WSPLL_SEL50_100K 0x0003 // WSPLL input freq selection = 50K to 100K
-
-// UDA1380_REG_I2S
-#define I2S_SFORI_I2S 0x0000
-#define I2S_SFORI_LSB16 0x0100
-#define I2S_SFORI_LSB18 0x0200
-#define I2S_SFORI_LSB20 0x0300
-#define I2S_SFORI_MSB 0x0500
-#define I2S_SFORI_MASK 0x0700
-#define I2S_SFORO_I2S 0x0000
-#define I2S_SFORO_LSB16 0x0001
-#define I2S_SFORO_LSB18 0x0002
-#define I2S_SFORO_LSB20 0x0003
-#define I2S_SFORO_LSB24 0x0004
-#define I2S_SFORO_MSB 0x0005
-#define I2S_SFORO_MASK 0x0007
-#define I2S_SEL_SOURCE 0x0040
-#define I2S_SIM 0x0010
-
-// UDA1380_REG_PWRCTRL bit defines
-#define PWR_PON_PLL_EN 0x8000 // WSPLL enable
-#define PWR_PON_HP_EN 0x2000 // Headphone driver enable
-#define PWR_PON_DAC_EN 0x0400 // DAC power enable
-#define PWR_PON_BIAS_EN 0x0100 // Power on bias enable (for ADC, AVC, and FSDAC)
-#define PWR_EN_AVC_EN 0x0080 // Analog mixer enable
-#define PWR_PON_AVC_EN 0x0040 // Analog mixer power enable
-#define PWR_EN_LNA_EN 0x0010 // LNA and SDC power enable
-#define PWR_EN_PGAL_EN 0x0008 // PGA left power enable
-#define PWR_EN_ADCL_EN 0x0004 // ADC left power enable
-#define PWR_EN_PGAR_EN 0x0002 // PGA right power enable
-#define PWR_EN_ADCR_EN 0x0001 // ADC right power enable
-
-// UDA1380_REG_MSTRMUTE bit defines
-#define MSTRMUTE_MTM_MUTE_EN 0x4000 // Master mute enable
-#define MSRTMUTE_CHANNEL2_MUTE_EN 0x0800
-#define MSRTMUTE_CHANNEL1_MUTE_EN 0x0008
-
-
-// UDA1380_REG_MODEBBT bit defines
-#define MODEBBT_BOOST_FLAT 0x0000 // Bits for selecting flat boost
-#define MODEBBT_BOOST_FULL 0xC000 // Bits for selecting maximum boost
-#define MODEBBT_BOOST_MASK 0xC000 // Bits for selecting boost mask
-
-#define UDA1380_FUNC_OK 0
-#define UDA1380_FUNC_ERR -1
-
-int32_t Uda1380_Init(uint32_t i2cClockFreq, uint32_t i2sClockFreq);
-int32_t Uda1380_WriteData(uint8_t reg, uint16_t data);
-int32_t Uda1380_ReadData(uint8_t reg, uint16_t *data);
-
-
-#endif /* _UDA1380_H_ */
diff --git a/hw/bsp/ea4357/oem_base_board/pca9532.c b/hw/bsp/ea4357/pca9532.c
index 7b526f670..eae3805c2 100644
--- a/hw/bsp/ea4357/oem_base_board/pca9532.c
+++ b/hw/bsp/ea4357/pca9532.c
@@ -24,13 +24,10 @@
/******************************************************************************
* Includes
*****************************************************************************/
-#include "bsp/board.h"
-#ifdef BOARD_EA4357
+//#include "board.h"
+#include "chip.h"
-#include "lpc43xx_i2c.h"
-#include "lpc43xx_cgu.h"
-#include "lpc_types.h"
#include "pca9532.h"
/******************************************************************************
@@ -60,32 +57,40 @@ static uint16_t ledStateShadow = 0;
* Local Functions
*****************************************************************************/
-static Status I2CWrite(uint32_t addr, uint8_t* buf, uint32_t len)
+static Status I2CWrite(uint32_t addr, uint8_t* buf, uint32_t len)
{
- I2C_M_SETUP_Type i2cData;
+ I2CM_XFER_T i2cData;
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = buf;
- i2cData.tx_length = len;
- i2cData.rx_data = NULL;
- i2cData.rx_length = 0;
- i2cData.retransmissions_max = 3;
+ i2cData.slaveAddr = addr;
+ i2cData.options = 0;
+ i2cData.status = 0;
+ i2cData.txBuff = buf;
+ i2cData.txSz = len;
+ i2cData.rxBuff = NULL;
+ i2cData.rxSz = 0;
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
+ if (Chip_I2CM_XferBlocking(LPC_I2C0, &i2cData) == 0) {
+ return ERROR;
+ }
+ return SUCCESS;
}
-static Status I2CRead(uint32_t addr, uint8_t* buf, uint32_t len)
+static Status I2CRead(uint32_t addr, uint8_t* buf, uint32_t len)
{
- I2C_M_SETUP_Type i2cData;
+ I2CM_XFER_T i2cData;
- i2cData.sl_addr7bit = addr;
- i2cData.tx_data = NULL;
- i2cData.tx_length = 0;
- i2cData.rx_data = buf;
- i2cData.rx_length = len;
- i2cData.retransmissions_max = 3;
+ i2cData.slaveAddr = addr;
+ i2cData.options = 0;
+ i2cData.status = 0;
+ i2cData.txBuff = NULL;
+ i2cData.txSz = 0;
+ i2cData.rxBuff = buf;
+ i2cData.rxSz = len;
- return I2C_MasterTransferData(I2C_PORT, &i2cData, I2C_TRANSFER_POLLING);
+ if (Chip_I2CM_XferBlocking(LPC_I2C0, &i2cData) == 0) {
+ return ERROR;
+ }
+ return SUCCESS;
}
static void setLsStates(uint16_t states, uint8_t* ls, uint8_t mode)
@@ -176,7 +181,7 @@ uint16_t pca9532_getLedState (uint32_t shadow)
* A blinking LED may be reported as on or off depending on
* its state when reading the Input register.
*/
-
+
buf[0] = PCA9532_INPUT0;
I2CWrite(PCA9532_I2C_ADDR, buf, 1);
@@ -345,5 +350,3 @@ void pca9532_setBlink1Leds(uint16_t ledMask)
blink1Shadow |= ledMask;
setLeds();
}
-
-#endif
diff --git a/hw/bsp/ea4357/oem_base_board/pca9532.h b/hw/bsp/ea4357/pca9532.h
index 885075326..7a7c6e145 100644
--- a/hw/bsp/ea4357/oem_base_board/pca9532.h
+++ b/hw/bsp/ea4357/pca9532.h
@@ -19,7 +19,7 @@
#define __PCA9532C_H
-#define PCA9532_I2C_ADDR (0x60)
+#define PCA9532_I2C_ADDR (0xC0>>1)
#define PCA9532_INPUT0 0x00
#define PCA9532_INPUT1 0x01
@@ -48,7 +48,7 @@
#define KEY_MASK 0x000F
/*
- * MMC Card Detect and MMC Write Protect are mapped to LED4
+ * MMC Card Detect and MMC Write Protect are mapped to LED4
* and LED5 on the PCA9532. Please note that WP is active low.
*/
diff --git a/hw/bsp/ea4357/sdram.c b/hw/bsp/ea4357/sdram.c
deleted file mode 100644
index 68c67cf52..000000000
--- a/hw/bsp/ea4357/sdram.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-
-
-
-/******************************************************************************
- * Includes
- *****************************************************************************/
-#include "../board.h"
-
-#if BOARD == BOARD_EA4357
-
-#include "LPC43xx.h"
-#include "lpc_types.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_timer.h"
-#include "lpc43xx_cgu.h"
-#include "sdram.h"
-#include <string.h>
-
-/******************************************************************************
- * Defines and typedefs
- *****************************************************************************/
-
-/* SDRAM refresh time to 16 clock num */
-#define EMC_SDRAM_REFRESH(freq,time) \
- (((uint64_t)((uint64_t)time * freq)/16000000000ull)+1)
-
-/******************************************************************************
- * External global variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local variables
- *****************************************************************************/
-
-/******************************************************************************
- * Local Functions
- *****************************************************************************/
-
-
-/*-------------------------PRIVATE FUNCTIONS------------------------------*/
-/*********************************************************************
- * @brief Calculate EMC Clock from nano second
- * @param[in] freq - frequency of EMC Clk
- * @param[in] time - nano second
- * @return None
- **********************************************************************/
-uint32_t NS2CLK(uint32_t freq, uint32_t time){
- return (((uint64_t)time*freq/1000000000));
-}
-
-static void pinConfig(void)
-{
- /* Set up EMC pin */
- scu_pinmux( 2 , 9 , MD_PLN_FAST , 3 );//A0
- scu_pinmux( 2 , 10 , MD_PLN_FAST , 3 );//A1
- scu_pinmux( 2 , 11 , MD_PLN_FAST , 3 );//A2
- scu_pinmux( 2 , 12 , MD_PLN_FAST , 3 );//A3
- scu_pinmux( 2 , 13 , MD_PLN_FAST , 3 );//A4
- scu_pinmux( 1 , 0 , MD_PLN_FAST , 2 );//A5
- scu_pinmux( 1 , 1 , MD_PLN_FAST , 2 );//A6
- scu_pinmux( 1 , 2 , MD_PLN_FAST , 2 );//A7
- scu_pinmux( 2 , 8 , MD_PLN_FAST , 3 );//A8
- scu_pinmux( 2 , 7 , MD_PLN_FAST , 3 );//A9
- scu_pinmux( 2 , 6 , MD_PLN_FAST , 2 );//A10
- scu_pinmux( 2 , 2 , MD_PLN_FAST , 2 );//A11
- scu_pinmux( 2 , 1 , MD_PLN_FAST , 2 );//A12
- scu_pinmux( 2 , 0 , MD_PLN_FAST , 2 );//A13
- scu_pinmux( 6 , 8 , MD_PLN_FAST , 1 );//A14
- scu_pinmux( 6 , 7 , MD_PLN_FAST , 1 );//A15
- scu_pinmux( 13 , 16 , MD_PLN_FAST , 2 );//A16
- scu_pinmux( 13 , 15 , MD_PLN_FAST , 2 );//A17
- scu_pinmux( 14 , 0 , MD_PLN_FAST , 3 );//A18
- scu_pinmux( 14 , 1 , MD_PLN_FAST , 3 );//A19
- scu_pinmux( 14 , 2 , MD_PLN_FAST , 3 );//A20
- scu_pinmux( 14 , 3 , MD_PLN_FAST , 3 );//A21
- scu_pinmux( 14 , 4 , MD_PLN_FAST , 3 );//A22
- scu_pinmux( 10 , 4 , MD_PLN_FAST , 3 );//A23
-
- scu_pinmux( 1 , 7 , MD_PLN_FAST , 3 );//D0
- scu_pinmux( 1 , 8 , MD_PLN_FAST , 3 );//D1
- scu_pinmux( 1 , 9 , MD_PLN_FAST , 3 );//D2
- scu_pinmux( 1 , 10 , MD_PLN_FAST , 3 );//D3
- scu_pinmux( 1 , 11 , MD_PLN_FAST , 3 );//D4
- scu_pinmux( 1 , 12 , MD_PLN_FAST , 3 );//D5
- scu_pinmux( 1 , 13 , MD_PLN_FAST , 3 );//D6
- scu_pinmux( 1 , 14 , MD_PLN_FAST , 3 );//D7
- scu_pinmux( 5 , 4 , MD_PLN_FAST , 2 );//D8
- scu_pinmux( 5 , 5 , MD_PLN_FAST , 2 );//D9
- scu_pinmux( 5 , 6 , MD_PLN_FAST , 2 );//D10
- scu_pinmux( 5 , 7 , MD_PLN_FAST , 2 );//D11
- scu_pinmux( 5 , 0 , MD_PLN_FAST , 2 );//D12
- scu_pinmux( 5 , 1 , MD_PLN_FAST , 2 );//D13
- scu_pinmux( 5 , 2 , MD_PLN_FAST , 2 );//D14
- scu_pinmux( 5 , 3 , MD_PLN_FAST , 2 );//D15
- scu_pinmux( 13 , 2 , MD_PLN_FAST , 2 );//D16
- scu_pinmux( 13 , 3 , MD_PLN_FAST , 2 );//D17
- scu_pinmux( 13 , 4 , MD_PLN_FAST , 2 );//D18
- scu_pinmux( 13 , 5 , MD_PLN_FAST , 2 );//D19
- scu_pinmux( 13 , 6 , MD_PLN_FAST , 2 );//D20
- scu_pinmux( 13 , 7 , MD_PLN_FAST , 2 );//D21
- scu_pinmux( 13 , 8 , MD_PLN_FAST , 2 );//D22
- scu_pinmux( 13 , 9 , MD_PLN_FAST , 2 );//D23
- scu_pinmux( 14 , 5 , MD_PLN_FAST , 3 );//D24
- scu_pinmux( 14 , 6 , MD_PLN_FAST , 3 );//D25
- scu_pinmux( 14 , 7 , MD_PLN_FAST , 3 );//D26
- scu_pinmux( 14 , 8 , MD_PLN_FAST , 3 );//D27
- scu_pinmux( 14 , 9 , MD_PLN_FAST , 3 );//D28
- scu_pinmux( 14 , 10 , MD_PLN_FAST , 3 );//D29
- scu_pinmux( 14 , 11 , MD_PLN_FAST , 3 );//D30
- scu_pinmux( 14 , 12 , MD_PLN_FAST , 3 );//D31
-
- scu_pinmux( 1 , 3 , MD_PLN_FAST , 3 );//OE
- scu_pinmux( 1 , 6 , MD_PLN_FAST , 3 );//WE
-
- scu_pinmux( 1 , 4 , MD_PLN_FAST , 3 );//BLS0
- scu_pinmux( 6 , 6 , MD_PLN_FAST , 1 );//BLS1
- scu_pinmux( 13 , 13 , MD_PLN_FAST , 2 );//BLS2
- scu_pinmux( 13 , 10 , MD_PLN_FAST , 2 );//BLS3
-
- scu_pinmux( 1 , 5 , MD_PLN_FAST , 3 );//CS0
- scu_pinmux( 6 , 3 , MD_PLN_FAST , 3 );//CS1
- scu_pinmux( 13 , 12 , MD_PLN_FAST , 2 );//CS2
- scu_pinmux( 13 , 11 , MD_PLN_FAST , 2 );//CS3
-
- scu_pinmux( 6 , 4 , MD_PLN_FAST , 3 );//CAS
- scu_pinmux( 6 , 5 , MD_PLN_FAST , 3 );//RAS
-
- scu_pinmux( 6 , 9 , MD_PLN_FAST , 3 );//DYCS0
- scu_pinmux( 6 , 1 , MD_PLN_FAST , 1 );//DYCS1
- scu_pinmux( 13 , 14 , MD_PLN_FAST , 2 );//DYCS2
- scu_pinmux( 15 , 14 , MD_PLN_FAST , 3 );//DYCS3
-
- scu_pinmux( 6 , 11 , MD_PLN_FAST , 3 );//CKEOUT0
- scu_pinmux( 6 , 2 , MD_PLN_FAST , 1 );//CKEOUT1
- scu_pinmux( 13 , 1 , MD_PLN_FAST , 2 );//CKEOUT2
- scu_pinmux( 14 , 15 , MD_PLN_FAST , 3 );//CKEOUT3
-
- scu_pinmux( 6 , 12 , MD_PLN_FAST , 3 );//DQMOUT0
- scu_pinmux( 6 , 10 , MD_PLN_FAST , 3 );//DQMOUT1
- scu_pinmux( 13 , 0 , MD_PLN_FAST , 2 );//DQMOUT2
- scu_pinmux( 14 , 13 , MD_PLN_FAST , 3 );//DQMOUT3
-}
-
-
-
-/******************************************************************************
- * Public Functions
- *****************************************************************************/
-
-
-/******************************************************************************
- *
- * Description:
- * Initialize the SDRAM
- *
- *****************************************************************************/
-uint32_t sdram_init (void)
-{
- uint32_t pclk, temp;
- uint64_t tmpclk;
-
- pinConfig(); //Full 32-bit Data bus, 24-bit Address
-
- /* Select EMC clock-out */
- LPC_SCU->SFSCLK_0 = MD_PLN_FAST;
- LPC_SCU->SFSCLK_1 = MD_PLN_FAST;
- LPC_SCU->SFSCLK_2 = MD_PLN_FAST;
- LPC_SCU->SFSCLK_3 = MD_PLN_FAST;
-
- LPC_EMC->CONTROL = 0x00000001;
- LPC_EMC->CONFIG = 0x00000000;
- LPC_EMC->DYNAMICCONFIG0 = 1<<14 | 0<<12 | 2<<9 | 1<<7; /* 256Mb, 8Mx32, 4 banks, row=12, column=9 */
-
- pclk = CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE);
-
- LPC_EMC->DYNAMICRASCAS0 = 0x00000202; /* 2 RAS, 2 CAS latency */
- LPC_EMC->DYNAMICREADCONFIG = 0x00000001; /* Command delayed strategy, using EMCCLKDELAY */
-
- LPC_EMC->DYNAMICRP = NS2CLK(pclk, 20);
- LPC_EMC->DYNAMICRAS = NS2CLK(pclk, 42);
- LPC_EMC->DYNAMICSREX = NS2CLK(pclk, 63);
- LPC_EMC->DYNAMICAPR = 0x00000005;
- LPC_EMC->DYNAMICDAL = 0x00000005;
- LPC_EMC->DYNAMICWR = 2;
- LPC_EMC->DYNAMICRC = NS2CLK(pclk, 63);
- LPC_EMC->DYNAMICRFC = NS2CLK(pclk, 63);
- LPC_EMC->DYNAMICXSR = NS2CLK(pclk, 63);
- LPC_EMC->DYNAMICRRD = NS2CLK(pclk, 14);
- LPC_EMC->DYNAMICMRD = 0x00000002;
-
- TIM_Waitus(100); /* wait 100ms */
- LPC_EMC->DYNAMICCONTROL = 0x00000183; /* Issue NOP command */
-
- TIM_Waitus(200); /* wait 200ms */
- LPC_EMC->DYNAMICCONTROL = 0x00000103; /* Issue PALL command */
-
- LPC_EMC->DYNAMICREFRESH = EMC_SDRAM_REFRESH(pclk,70); /* ( n * 16 ) -> 32 clock cycles */
-
- //for(i = 0; i < 0x80; i++); /* wait 128 AHB clock cycles */
- TIM_Waitus(200); /* wait 200ms */
-
- tmpclk = (uint64_t)15625*(uint64_t)pclk/1000000000/16;
- LPC_EMC->DYNAMICREFRESH = tmpclk; /* ( n * 16 ) -> 736 clock cycles -> 15.330uS at 48MHz <= 15.625uS ( 64ms / 4096 row ) */
-
- LPC_EMC->DYNAMICCONTROL = 0x00000083; /* Issue MODE command */
-
- //Timing for 48/60/72MHZ Bus
- temp = *((volatile uint32_t *)(SDRAM_BASE | (2<<4| 2)<<(9+2+2))); /* 4 burst, 2 CAS latency */
- temp = temp;
- LPC_EMC->DYNAMICCONTROL = 0x00000000; /* Issue NORMAL command */
-
- //[re]enable buffers
- LPC_EMC->DYNAMICCONFIG0 |= 1<<19;
-
- return TRUE;
-}
-
-uint32_t sdram_test( void )
-{
- volatile uint32_t *wr_ptr;
- volatile uint16_t *short_wr_ptr;
- uint32_t data;
- uint32_t i, j;
-
- wr_ptr = (uint32_t *)SDRAM_BASE;
- short_wr_ptr = (uint16_t *)wr_ptr;
-
- /* 16 bit write */
- for (i = 0; i < SDRAM_SIZE/0x40000; i++)
- {
- for (j = 0; j < 0x100; j++)
- {
- *short_wr_ptr++ = (i + j) & 0xFFFF;
- *short_wr_ptr++ = ((i + j) + 1) & 0xFFFF;
- }
- }
-
- /* Verifying */
- wr_ptr = (uint32_t *)SDRAM_BASE;
- for (i = 0; i < SDRAM_SIZE/0x40000; i++)
- {
- for (j = 0; j < 0x100; j++)
- {
- data = *wr_ptr;
- if (data != (((((i + j) + 1) & 0xFFFF) << 16) | ((i + j) & 0xFFFF)))
- {
- return 0x0;
- }
- wr_ptr++;
- }
- }
- return 0x1;
-}
-
-#endif
diff --git a/hw/bsp/ea4357/sdram.h b/hw/bsp/ea4357/sdram.h
deleted file mode 100644
index 82122b9f8..000000000
--- a/hw/bsp/ea4357/sdram.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************************
- *
- * Copyright(C) 2011, Embedded Artists AB
- * All rights reserved.
- *
- ******************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * Embedded Artists AB assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. Embedded Artists AB
- * reserves the right to make changes in the software without
- * notification. Embedded Artists AB also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- *****************************************************************************/
-#ifndef __SDRAM_H
-#define __SDRAM_H
-
-#define SDRAM_SIZE 0x2000000 /* 256Mbit = 32MB */
-
-#define SDRAM_BASE 0x28000000 /*CS0*/
-
-extern uint32_t sdram_init(void);
-extern uint32_t sdram_test(void);
-
-#endif /* end __SDRAM_H */
-/****************************************************************************
-** End Of File
-*****************************************************************************/
diff --git a/hw/bsp/ea4357/startup/xpresso/cr_startup_lpc43xx.c b/hw/bsp/ea4357/startup/xpresso/cr_startup_lpc43xx.c
deleted file mode 100644
index a5f06006a..000000000
--- a/hw/bsp/ea4357/startup/xpresso/cr_startup_lpc43xx.c
+++ /dev/null
@@ -1,509 +0,0 @@
-//*****************************************************************************
-// LPC43xx (Cortex-M4) Microcontroller Startup code for use with LPCXpresso IDE
-//
-// Version : 150706
-//*****************************************************************************
-//
-// Copyright(C) NXP Semiconductors, 2013-2015
-// All rights reserved.
-//
-// Software that is described herein is for illustrative purposes only
-// which provides customers with programming information regarding the
-// LPC products. This software is supplied "AS IS" without any warranties of
-// any kind, and NXP Semiconductors and its licensor disclaim any and
-// all warranties, express or implied, including all implied warranties of
-// merchantability, fitness for a particular purpose and non-infringement of
-// intellectual property rights. NXP Semiconductors assumes no responsibility
-// or liability for the use of the software, conveys no license or rights under any
-// patent, copyright, mask work right, or any other intellectual property rights in
-// or to any products. NXP Semiconductors reserves the right to make changes
-// in the software without notification. NXP Semiconductors also makes no
-// representation or warranty that such application will be suitable for the
-// specified use without further testing or modification.
-//
-// Permission to use, copy, modify, and distribute this software and its
-// documentation is hereby granted, under NXP Semiconductors' and its
-// licensor's relevant copyrights in the software, without fee, provided that it
-// is used in conjunction with NXP Semiconductors microcontrollers. This
-// copyright, permission, and disclaimer notice must appear in all copies of
-// this code.
-//*****************************************************************************
-
-#if defined (__cplusplus)
-#ifdef __REDLIB__
-#error Redlib does not support C++
-#else
-//*****************************************************************************
-//
-// The entry point for the C++ library startup
-//
-//*****************************************************************************
-extern "C" {
- extern void __libc_init_array(void);
-}
-#endif
-#endif
-
-#define WEAK __attribute__ ((weak))
-#define ALIAS(f) __attribute__ ((weak, alias (#f)))
-
-//*****************************************************************************
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-//*****************************************************************************
-#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
-// Declaration of external SystemInit function
-extern void SystemInit(void);
-#endif
-
-//*****************************************************************************
-//
-// Forward declaration of the default handlers. These are aliased.
-// When the application defines a handler (with the same name), this will
-// automatically take precedence over these weak definitions
-//
-//*****************************************************************************
-void ResetISR(void);
-WEAK void NMI_Handler(void);
-WEAK void HardFault_Handler(void);
-WEAK void MemManage_Handler(void);
-WEAK void BusFault_Handler(void);
-WEAK void UsageFault_Handler(void);
-WEAK void SVC_Handler(void);
-WEAK void DebugMon_Handler(void);
-WEAK void PendSV_Handler(void);
-WEAK void SysTick_Handler(void);
-WEAK void IntDefaultHandler(void);
-
-//*****************************************************************************
-//
-// Forward declaration of the specific IRQ handlers. These are aliased
-// to the IntDefaultHandler, which is a 'forever' loop. When the application
-// defines a handler (with the same name), this will automatically take
-// precedence over these weak definitions
-//
-//*****************************************************************************
-void DAC_IRQHandler(void) ALIAS(IntDefaultHandler);
-#if defined (__USE_LPCOPEN)
-void M0APP_IRQHandler(void) ALIAS(IntDefaultHandler);
-#else
-void M0CORE_IRQHandler(void) ALIAS(IntDefaultHandler);
-#endif
-void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
-void FLASH_EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler);
-void ETH_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SDIO_IRQHandler(void) ALIAS(IntDefaultHandler);
-void LCD_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USB0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USB1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
-void ADC0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void ADC1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2S0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2S1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SPIFI_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SGPIO_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO4_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO5_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO6_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GPIO7_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void EVRT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CAN1_IRQHandler(void) ALIAS(IntDefaultHandler);
-#if defined (__USE_LPCOPEN)
-void ADCHS_IRQHandler(void) ALIAS(IntDefaultHandler);
-#else
-void VADC_IRQHandler(void) ALIAS(IntDefaultHandler);
-#endif
-void ATIMER_IRQHandler(void) ALIAS(IntDefaultHandler);
-void RTC_IRQHandler(void) ALIAS(IntDefaultHandler);
-void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void M0SUB_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
-
-//*****************************************************************************
-//
-// The entry point for the application.
-// __main() is the entry point for Redlib based applications
-// main() is the entry point for Newlib based applications
-//
-//*****************************************************************************
-#if defined (__REDLIB__)
-extern void __main(void);
-#endif
-extern int main(void);
-//*****************************************************************************
-//
-// External declaration for the pointer to the stack top from the Linker Script
-//
-//*****************************************************************************
-extern void _vStackTop(void);
-
-//*****************************************************************************
-//
-// External declaration for LPC MCU vector table checksum from Linker Script
-//
-//*****************************************************************************
-WEAK extern void __valid_user_code_checksum();
-
-//*****************************************************************************
-#if defined (__cplusplus)
-} // extern "C"
-#endif
-//*****************************************************************************
-//
-// The vector table.
-// This relies on the linker script to place at correct location in memory.
-//
-//*****************************************************************************
-extern void (* const g_pfnVectors[])(void);
-__attribute__ ((used,section(".isr_vector")))
-void (* const g_pfnVectors[])(void) = {
- // Core Level - CM4
- &_vStackTop, // The initial stack pointer
- ResetISR, // The reset handler
- NMI_Handler, // The NMI handler
- HardFault_Handler, // The hard fault handler
- MemManage_Handler, // The MPU fault handler
- BusFault_Handler, // The bus fault handler
- UsageFault_Handler, // The usage fault handler
- __valid_user_code_checksum, // LPC MCU Checksum
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- SVC_Handler, // SVCall handler
- DebugMon_Handler, // Debug monitor handler
- 0, // Reserved
- PendSV_Handler, // The PendSV handler
- SysTick_Handler, // The SysTick handler
-
- // Chip Level - LPC43 (M4)
- DAC_IRQHandler, // 16
-#if defined (__USE_LPCOPEN)
- M0APP_IRQHandler, // 17 CortexM4/M0 (LPC43XX ONLY)
-#else
- M0CORE_IRQHandler, // 17
-#endif
- DMA_IRQHandler, // 18
- 0, // 19
- FLASH_EEPROM_IRQHandler, // 20 ORed flash Bank A, flash Bank B, EEPROM interrupts
- ETH_IRQHandler, // 21
- SDIO_IRQHandler, // 22
- LCD_IRQHandler, // 23
- USB0_IRQHandler, // 24
- USB1_IRQHandler, // 25
- SCT_IRQHandler, // 26
- RIT_IRQHandler, // 27
- TIMER0_IRQHandler, // 28
- TIMER1_IRQHandler, // 29
- TIMER2_IRQHandler, // 30
- TIMER3_IRQHandler, // 31
- MCPWM_IRQHandler, // 32
- ADC0_IRQHandler, // 33
- I2C0_IRQHandler, // 34
- I2C1_IRQHandler, // 35
- SPI_IRQHandler, // 36
- ADC1_IRQHandler, // 37
- SSP0_IRQHandler, // 38
- SSP1_IRQHandler, // 39
- UART0_IRQHandler, // 40
- UART1_IRQHandler, // 41
- UART2_IRQHandler, // 42
- UART3_IRQHandler, // 43
- I2S0_IRQHandler, // 44
- I2S1_IRQHandler, // 45
- SPIFI_IRQHandler, // 46
- SGPIO_IRQHandler, // 47
- GPIO0_IRQHandler, // 48
- GPIO1_IRQHandler, // 49
- GPIO2_IRQHandler, // 50
- GPIO3_IRQHandler, // 51
- GPIO4_IRQHandler, // 52
- GPIO5_IRQHandler, // 53
- GPIO6_IRQHandler, // 54
- GPIO7_IRQHandler, // 55
- GINT0_IRQHandler, // 56
- GINT1_IRQHandler, // 57
- EVRT_IRQHandler, // 58
- CAN1_IRQHandler, // 59
- 0, // 60
-#if defined (__USE_LPCOPEN)
- ADCHS_IRQHandler, // 61 ADCHS combined interrupt
-#else
- VADC_IRQHandler, // 61
-#endif
- ATIMER_IRQHandler, // 62
- RTC_IRQHandler, // 63
- 0, // 64
- WDT_IRQHandler, // 65
- M0SUB_IRQHandler, // 66
- CAN0_IRQHandler, // 67
- QEI_IRQHandler, // 68
-};
-
-
-//*****************************************************************************
-// Functions to carry out the initialization of RW and BSS data sections. These
-// are written as separate functions rather than being inlined within the
-// ResetISR() function in order to cope with MCUs with multiple banks of
-// memory.
-//*****************************************************************************
- __attribute__((section(".after_vectors"
-)))
-void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int *pulSrc = (unsigned int*) romstart;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = *pulSrc++;
-}
-
-__attribute__ ((section(".after_vectors")))
-void bss_init(unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = 0;
-}
-
-//*****************************************************************************
-// The following symbols are constructs generated by the linker, indicating
-// the location of various points in the "Global Section Table". This table is
-// created by the linker via the Code Red managed linker script mechanism. It
-// contains the load address, execution address and length of each RW data
-// section and the execution and length of each BSS (zero initialized) section.
-//*****************************************************************************
-extern unsigned int __data_section_table;
-extern unsigned int __data_section_table_end;
-extern unsigned int __bss_section_table;
-extern unsigned int __bss_section_table_end;
-
-//*****************************************************************************
-// Reset entry point for your code.
-// Sets up a simple runtime environment and initializes the C/C++
-// library.
-//
-//*****************************************************************************
-void ResetISR(void) {
-
-// *************************************************************
-// The following conditional block of code manually resets as
-// much of the peripheral set of the LPC43 as possible. This is
-// done because the LPC43 does not provide a means of triggering
-// a full system reset under debugger control, which can cause
-// problems in certain circumstances when debugging.
-//
-// You can prevent this code block being included if you require
-// (for example when creating a final executable which you will
-// not debug) by setting the define 'DONT_RESET_ON_RESTART'.
-//
-#ifndef DONT_RESET_ON_RESTART
-
- // Disable interrupts
- __asm volatile ("cpsid i");
- // equivalent to CMSIS '__disable_irq()' function
-
- unsigned int *RESET_CONTROL = (unsigned int *) 0x40053100;
- // LPC_RGU->RESET_CTRL0 @ 0x40053100
- // LPC_RGU->RESET_CTRL1 @ 0x40053104
- // Note that we do not use the CMSIS register access mechanism,
- // as there is no guarantee that the project has been configured
- // to use CMSIS.
-
- // Write to LPC_RGU->RESET_CTRL0
- *(RESET_CONTROL + 0) = 0x10DF1000;
- // GPIO_RST|AES_RST|ETHERNET_RST|SDIO_RST|DMA_RST|
- // USB1_RST|USB0_RST|LCD_RST|M0_SUB_RST
-
- // Write to LPC_RGU->RESET_CTRL1
- *(RESET_CONTROL + 1) = 0x01DFF7FF;
- // M0APP_RST|CAN0_RST|CAN1_RST|I2S_RST|SSP1_RST|SSP0_RST|
- // I2C1_RST|I2C0_RST|UART3_RST|UART1_RST|UART1_RST|UART0_RST|
- // DAC_RST|ADC1_RST|ADC0_RST|QEI_RST|MOTOCONPWM_RST|SCT_RST|
- // RITIMER_RST|TIMER3_RST|TIMER2_RST|TIMER1_RST|TIMER0_RST
-
- // Clear all pending interrupts in the NVIC
- volatile unsigned int *NVIC_ICPR = (unsigned int *) 0xE000E280;
- unsigned int irqpendloop;
- for (irqpendloop = 0; irqpendloop < 8; irqpendloop++) {
- *(NVIC_ICPR + irqpendloop) = 0xFFFFFFFF;
- }
-
- // Reenable interrupts
- __asm volatile ("cpsie i");
- // equivalent to CMSIS '__enable_irq()' function
-
-#endif // ifndef DONT_RESET_ON_RESTART
-// *************************************************************
-
-#if defined (__USE_LPCOPEN)
- SystemInit();
-#endif
-
- //
- // Copy the data sections from flash to SRAM.
- //
- unsigned int LoadAddr, ExeAddr, SectionLen;
- unsigned int *SectionTableAddr;
-
- // Load base address of Global Section Table
- SectionTableAddr = &__data_section_table;
-
- // Copy the data sections from flash to SRAM.
- while (SectionTableAddr < &__data_section_table_end) {
- LoadAddr = *SectionTableAddr++;
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- data_init(LoadAddr, ExeAddr, SectionLen);
- }
- // At this point, SectionTableAddr = &__bss_section_table;
- // Zero fill the bss segment
- while (SectionTableAddr < &__bss_section_table_end) {
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- bss_init(ExeAddr, SectionLen);
- }
-
-#if !defined (__USE_LPCOPEN)
-// LPCOpen init code deals with FP and VTOR initialisation
-#if defined (__VFP_FP__) && !defined (__SOFTFP__)
- /*
- * Code to enable the Cortex-M4 FPU only included
- * if appropriate build options have been selected.
- * Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C)
- */
- // CPACR is located at address 0xE000ED88
- asm("LDR.W R0, =0xE000ED88");
- // Read CPACR
- asm("LDR R1, [R0]");
- // Set bits 20-23 to enable CP10 and CP11 coprocessors
- asm(" ORR R1, R1, #(0xF << 20)");
- // Write back the modified value to the CPACR
- asm("STR R1, [R0]");
-#endif // (__VFP_FP__) && !(__SOFTFP__)
- // ******************************
- // Check to see if we are running the code from a non-zero
- // address (eg RAM, external flash), in which case we need
- // to modify the VTOR register to tell the CPU that the
- // vector table is located at a non-0x0 address.
-
- // Note that we do not use the CMSIS register access mechanism,
- // as there is no guarantee that the project has been configured
- // to use CMSIS.
- unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08;
- if ((unsigned int *) g_pfnVectors != (unsigned int *) 0x00000000) {
- // CMSIS : SCB->VTOR = <address of vector table>
- *pSCB_VTOR = (unsigned int) g_pfnVectors;
- }
-#endif
-
-#if defined (__USE_CMSIS)
- SystemInit();
-#endif
-
-#if defined (__cplusplus)
- //
- // Call C++ library initialisation
- //
- __libc_init_array();
-#endif
-
-#if defined (__REDLIB__)
- // Call the Redlib library, which in turn calls main()
- __main();
-#else
- main();
-#endif
-
- //
- // main() shouldn't return, but if it does, we'll just enter an infinite loop
- //
- while (1) {
- ;
- }
-}
-
-//*****************************************************************************
-// Default exception handlers. Override the ones here by defining your own
-// handler routines in your application code.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void NMI_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void HardFault_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void MemManage_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void BusFault_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void UsageFault_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SVC_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void DebugMon_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void PendSV_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SysTick_Handler(void) {
- while (1) {
- }
-}
-
-//*****************************************************************************
-//
-// Processor ends up here if an unexpected interrupt occurs or a specific
-// handler is not present in the application code.
-//
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void IntDefaultHandler(void) {
- while (1) {
- }
-}
diff --git a/hw/bsp/keil/board_mcb4300.c b/hw/bsp/keil/board_mcb4300.c
deleted file mode 100644
index 1cd8b070e..000000000
--- a/hw/bsp/keil/board_mcb4300.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_mcb4300.c
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#include "../board.h"
-
-#ifdef BOARD_MCB4300
-
-//--------------------------------------------------------------------+
-// INCLUDE
-//--------------------------------------------------------------------+
-#define BOARD_MAX_LEDS 8
-
-#define BOARD_UART_PORT LPC_USART0
-#define BOARD_UART_PIN_PORT 2
-#define BOARD_UART_PIN_TX 0
-#define BOARD_UART_PIN_RX 1
-
-//--------------------------------------------------------------------+
-// MACRO CONSTANT TYPEDEF
-//--------------------------------------------------------------------+
-static const uint8_t ledports[] = {6, 6, 6, 6, 6, 4, 4, 4};
-static const uint8_t ledbits[] = {24, 25, 26, 27, 28, 12, 13, 14};
-
-const static struct {
- uint8_t port;
- uint8_t pin;
-}leds[BOARD_MAX_LEDS] = {
- {6, 24}, {6, 25}, {6, 26}, {6, 27},
- {4, 28}, {4, 12}, {4, 13}, {4, 14}};
-
-//--------------------------------------------------------------------+
-// INTERNAL OBJECT & FUNCTION DECLARATION
-//--------------------------------------------------------------------+
-
-//--------------------------------------------------------------------+
-// IMPLEMENTATION
-//--------------------------------------------------------------------+
-void board_init(void)
-{
- CGU_Init();
-
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
- SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE) / BOARD_TICKS_HZ); // 1 msec tick timer
-#endif
-
- //------------- USB Bus power HOST ONLY-------------//
- // Keil VBUS0 is P6_3
- scu_pinmux(0x6, 3, MD_PUP | MD_EZI, FUNC1); // P6_3 USB0_PWR_EN, USB0 VBus function
-
- // Keil VBUS1 is P9_5
- scu_pinmux(0x9, 5, MD_PUP | MD_EZI, FUNC2); // P9_5 USB1_PWR_EN, USB1 VBus function
-
- //------------- LEDs init, J21 must be installed -------------//
- LPC_SCU->SFSPD_10 = 4; // GPIO6[24]
- LPC_SCU->SFSPD_11 = 4; // GPIO6[25]
- LPC_SCU->SFSPD_12 = 4; // GPIO6[26]
- LPC_SCU->SFSPD_13 = 4; // GPIO6[27]
- LPC_SCU->SFSPD_14 = 4; // GPIO6[28]
- LPC_SCU->SFSP9_0 = 0; // GPIO4[12]
- LPC_SCU->SFSP9_1 = 0; // GPIO4[13]
- LPC_SCU->SFSP9_2 = 0; // GPIO4[14]
-
- for(uint32_t i=0; i<BOARD_MAX_LEDS; i++)
- {
- GPIO_SetDir(leds[i].port, BIT_(leds[i].pin), 1); // output
- }
-
- //------------- UART -------------//
- scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_TX, MD_PDN , FUNC1);
- scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_RX, MD_PLN|MD_EZI|MD_ZI, FUNC1);
-
- UART_CFG_Type UARTConfigStruct;
- UART_ConfigStructInit(&UARTConfigStruct);
- UARTConfigStruct.Baud_rate = CFG_UART_BAUDRATE;
- UARTConfigStruct.Clock_Speed = 0;
-
- UART_Init(BOARD_UART_PORT, &UARTConfigStruct);
- UART_TxCmd(BOARD_UART_PORT, ENABLE); // Enable UART Transmit
-}
-
-//--------------------------------------------------------------------+
-// LEDS
-//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
-{
- for (uint32_t i=0; i<BOARD_MAX_LEDS; i++)
- {
- if ( on_mask & BIT_(i))
- {
- GPIO_SetValue(leds[i].port, BIT_(leds[i].pin));
- }else if ( off_mask & BIT_(i)) // on_mask take precedence over off_mask
- {
- GPIO_ClearValue(leds[i].port, BIT_(leds[i].pin));
- }
- }
-}
-
-//--------------------------------------------------------------------+
-// BUTTONS
-//--------------------------------------------------------------------+
-uint32_t board_buttons(void)
-{
- return 0; // TODO buttons for mcb4300
-}
-
-//--------------------------------------------------------------------+
-// UART
-//--------------------------------------------------------------------+
-uint8_t board_uart_getchar(void)
-{
- return UART_ReceiveByte(BOARD_UART_PORT);
-}
-
-void board_uart_putchar(uint8_t c)
-{
- UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
-}
-
-#endif
diff --git a/hw/bsp/keil/board_mcb4300.h b/hw/bsp/keil/board_mcb4300.h
deleted file mode 100644
index b414e142a..000000000
--- a/hw/bsp/keil/board_mcb4300.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_mcb4300.h
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#ifndef _TUSB_BOARD_MCB4300_H_
-#define _TUSB_BOARD_MCB4300_H_
-
-#include "LPC43xx.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_cgu.h"
-#include "lpc43xx_gpio.h"
-#include "lpc43xx_uart.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* _TUSB_BOARD_MCB4300_H_ */
diff --git a/hw/bsp/lpcxpresso/board_lpclink2.c b/hw/bsp/lpcxpresso/board_lpclink2.c
deleted file mode 100644
index ea2610f55..000000000
--- a/hw/bsp/lpcxpresso/board_lpclink2.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_lpclink2.c
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#include "../board.h"
-
-#if BOARD == BOARD_LPCLINK2
-
-#define BOARD_UART_PORT LPC_USART0
-#define BOARD_UART_PIN_PORT 0x0f
-#define BOARD_UART_PIN_TX 10 // PF.10 : UART0_TXD
-#define BOARD_UART_PIN_RX 11 // PF.11 : UART0_RXD
-
-#define BOARD_MAX_LEDS 1
-
-const static struct {
- uint8_t port;
- uint8_t pin;
-}leds[BOARD_MAX_LEDS] = { {0, 8} };
-
-void board_init(void)
-{
- CGU_Init();
-
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
- SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE) / BOARD_TICKS_HZ); // 1 msec tick timer
-#endif
-
- //------------- USB -------------//
-
-
- //------------- LED -------------//
- for (uint8_t i=0; i<BOARD_MAX_LEDS; i++)
- {
- scu_pinmux(leds[i].port, leds[i].pin, MD_PUP|MD_EZI|MD_ZI, FUNC0);
- GPIO_SetDir(leds[i].port, BIT_(leds[i].pin), 1); // output
- }
-
-
-#if CFG_UART_ENABLE
- //------------- UART -------------//
- scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_TX, MD_PDN, FUNC1);
- scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_RX, MD_PLN | MD_EZI | MD_ZI, FUNC1);
-
- UART_CFG_Type UARTConfigStruct;
- UART_ConfigStructInit(&UARTConfigStruct);
- UARTConfigStruct.Baud_rate = CFG_UART_BAUDRATE;
- UARTConfigStruct.Clock_Speed = 0;
-
- UART_Init(BOARD_UART_PORT, &UARTConfigStruct);
- UART_TxCmd(BOARD_UART_PORT, ENABLE); // Enable UART Transmit
-#endif
-}
-
-//--------------------------------------------------------------------+
-// LEDS
-//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
-{
- for (uint32_t i=0; i<BOARD_MAX_LEDS; i++)
- {
- if ( on_mask & BIT_(i))
- {
- GPIO_SetValue(leds[i].port, BIT_(leds[i].pin));
- }else if ( off_mask & BIT_(i)) // on_mask take precedence over off_mask
- {
- GPIO_ClearValue(leds[i].port, BIT_(leds[i].pin));
- }
- }
-}
-
-//--------------------------------------------------------------------+
-// UART
-//--------------------------------------------------------------------+
-#if CFG_UART_ENABLE
-uint32_t board_uart_send(uint8_t *buffer, uint32_t length)
-{
- return UART_Send(BOARD_UART_PORT, buffer, length, BLOCKING);
-}
-
-uint32_t board_uart_recv(uint8_t *buffer, uint32_t length)
-{
- return UART_Receive(BOARD_UART_PORT, buffer, length, BLOCKING);
-}
-
-uint8_t board_uart_getchar(void)
-{
- return UART_ReceiveByte(BOARD_UART_PORT);
-}
-#endif
-
-#endif
diff --git a/hw/bsp/lpcxpresso/board_lpclink2.h b/hw/bsp/lpcxpresso/board_lpclink2.h
deleted file mode 100644
index ddb2f80ec..000000000
--- a/hw/bsp/lpcxpresso/board_lpclink2.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_lpclink2.h
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#ifndef _TUSB_BOARD_LPCLINK2_H_
-#define _TUSB_BOARD_LPCLINK2_H_
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#include "LPC43xx.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_cgu.h"a
-#include "lpc43xx_gpio.h"
-#include "lpc43xx_uart.h"
-#include "lpc43xx_i2c.h"
-
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* _TUSB_BOARD_LPCLINK2_H_ */
diff --git a/hw/bsp/lpcxpresso/board_lpcxpresso11u14.c b/hw/bsp/lpcxpresso/board_lpcxpresso11u14.c
deleted file mode 100644
index 7b9705436..000000000
--- a/hw/bsp/lpcxpresso/board_lpcxpresso11u14.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_lpcxpresso11u14.c
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#include "../board.h"
-
-#ifdef BOARD_LPCXPRESSO11U14
-
-#define LED_PORT (0)
-#define LED_PIN (7)
-#define LED_ON (1)
-
-const static struct {
- uint8_t port;
- uint8_t pin;
-} buttons[] =
-{
- {1, 22 }, // Joystick up
- {1, 20 }, // Joystick down
- {1, 23 }, // Joystick left
- {1, 21 }, // Joystick right
- {1, 19 }, // Joystick press
- {0, 1 }, // SW3
-// {1, 4 }, // SW4 (require to remove J28)
-};
-
-
-enum {
- BOARD_BUTTON_COUNT = sizeof(buttons) / sizeof(buttons[0])
-};
-
-void board_init(void)
-{
- SystemInit();
-
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
- SysTick_Config(SystemCoreClock / BOARD_TICKS_HZ); // 1 msec tick timer
-#endif
-
- GPIOInit();
-
- //------------- LED -------------//
- GPIOSetDir(LED_PORT, LED_PIN, 1);
-
- //------------- BUTTON -------------//
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIOSetDir(buttons[i].port, buttons[i].pin, 0);
-
- //------------- UART -------------//
- UARTInit(CFG_UART_BAUDRATE);
-}
-
-//--------------------------------------------------------------------+
-// LEDS
-//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
-{
- if (on_mask & BIT_(0))
- {
- GPIOSetBitValue(LED_PORT, LED_PIN, LED_ON);
- }else if (off_mask & BIT_(0))
- {
- GPIOSetBitValue(LED_PORT, LED_PIN, 1 - LED_ON);
- }
-}
-
-//--------------------------------------------------------------------+
-// Buttons
-//--------------------------------------------------------------------+
-static bool button_read(uint8_t id)
-{
- return !GPIOGetPinValue(buttons[id].port, buttons[id].pin); // button is active low
-}
-
-uint32_t board_buttons(void)
-{
- uint32_t result = 0;
-
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? BIT_(i) : 0);
-
- return result;
-}
-
-//--------------------------------------------------------------------+
-// UART
-//--------------------------------------------------------------------+
-void board_uart_putchar(uint8_t c)
-{
- UARTSend(&c, 1);
-}
-
-uint8_t board_uart_getchar(void)
-{
-// *buffer = get_key(); TODO cannot find available code for uart getchar
- return 0;
-}
-
-#endif
diff --git a/hw/bsp/lpcxpresso/board_lpcxpresso11u14.h b/hw/bsp/lpcxpresso/board_lpcxpresso11u14.h
deleted file mode 100644
index 5da48c33b..000000000
--- a/hw/bsp/lpcxpresso/board_lpcxpresso11u14.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_lpcxpresso11u14.h
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#ifndef _TUSB_BOARD_LPCXPRESSO11U14_H_
-#define _TUSB_BOARD_LPCXPRESSO11U14_H_
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#include "LPC11Uxx.h"
-#include "lpc11uxx_gpio.h"
-#include "lpc11uxx_uart.h"
-
-//#define CFG_PRINTF_TARGET PRINTF_TARGET_SEMIHOST
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* _TUSB_BOARD_LPCXPRESSO11U14_H_ */
diff --git a/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c b/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c
index 854d8cda7..4349bbc68 100644
--- a/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c
+++ b/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c
@@ -36,16 +36,15 @@
*/
/**************************************************************************/
-#include "../board.h"
-
#ifdef BOARD_LPCXPRESSO11U68
-#define LED_PORT (1)
-#define LED_PIN (31)
-#define LED_ON (0)
-#define LED_OFF (1)
+#include "../board.h"
+
+#define LED_PORT 2
+#define LED_PIN 17
+#define LED_STATE_ON 0
-const static struct {
+static const struct {
uint8_t port;
uint8_t pin;
} buttons[] = { { 0, 1 } };
@@ -54,38 +53,78 @@ enum {
BOARD_BUTTON_COUNT = sizeof(buttons) / sizeof(buttons[0])
};
+/* System oscillator rate and RTC oscillator rate */
+const uint32_t OscRateIn = 12000000;
+const uint32_t RTCOscRateIn = 32768;
+
+/* Pin muxing table, only items that need changing from their default pin
+ state are in this table. Not every pin is mapped. */
+static const PINMUX_GRP_T pinmuxing[] =
+{
+ {0, 3, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)}, // USB VBUS
+ {0, 18, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)}, // UART0 RX
+ {0, 19, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)}, // UART0 TX
+ {2, 0, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // XTALIN
+ {2, 1, (IOCON_FUNC1 | IOCON_MODE_INACT)}, // XTALOUT
+};
+
+// Invoked by startup code
+void SystemInit(void)
+{
+ /* Enable IOCON clock */
+ Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);
+ Chip_IOCON_SetPinMuxing(LPC_IOCON, pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
+ Chip_SetupXtalClocking();
+}
+
void board_init(void)
{
- SystemInit();
+ SystemCoreClockUpdate();
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
+#if CFG_TUSB_OS == OPT_OS_NONE
SysTick_Config(SystemCoreClock / BOARD_TICKS_HZ); // 1 msec tick timer
#endif
- GPIOInit();
+ Chip_GPIO_Init(LPC_GPIO);
//------------- LED -------------//
- GPIOSetDir(LED_PORT, LED_PIN, 1);
+ Chip_GPIO_SetPinDIROutput(LPC_GPIO, LED_PORT, LED_PIN);
//------------- BUTTON -------------//
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIOSetDir(buttons[i].port, buttons[i].pin, 0);
+ //for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIOSetDir(buttons[i].port, buttons[i].pin, 0);
//------------- UART -------------//
- UARTInit(CFG_UART_BAUDRATE);
+ //UARTInit(CFG_UART_BAUDRATE);
+
+ // USB
+ Chip_USB_Init(); // Setup PLL clock, and power
}
+/*------------------------------------------------------------------*/
+/* TUSB HAL MILLISECOND
+ *------------------------------------------------------------------*/
+#if CFG_TUSB_OS == OPT_OS_NONE
+
+volatile uint32_t system_ticks = 0;
+
+void SysTick_Handler (void)
+{
+ system_ticks++;
+}
+
+uint32_t tusb_hal_millis(void)
+{
+ return board_tick2ms(system_ticks);
+}
+
+#endif
+
//--------------------------------------------------------------------+
// LEDS
//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
+void board_led_control(bool state)
{
- if (on_mask & BIT_(0))
- {
- GPIOSetBitValue(LED_PORT, LED_PIN, LED_ON);
- }else if (off_mask & BIT_(0))
- {
- GPIOSetBitValue(LED_PORT, LED_PIN, LED_OFF);
- }
+ Chip_GPIO_SetPinState(LPC_GPIO, LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
}
//--------------------------------------------------------------------+
@@ -94,7 +133,8 @@ void board_leds(uint32_t on_mask, uint32_t off_mask)
uint32_t board_buttons(void)
{
// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIOGetPinValue(buttons[i].port, buttons[i].pin);
- return GPIOGetPinValue(buttons[0].port, buttons[0].pin) ? 0 : 1; // button is active low
+// return GPIOGetPinValue(buttons[0].port, buttons[0].pin) ? 0 : 1; // button is active low
+ return 0;
}
//--------------------------------------------------------------------+
@@ -102,7 +142,8 @@ uint32_t board_buttons(void)
//--------------------------------------------------------------------+
void board_uart_putchar(uint8_t c)
{
- UARTSend(&c, 1);
+ (void) c;
+ //UARTSend(&c, 1);
}
uint8_t board_uart_getchar(void)
diff --git a/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.h b/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.h
index fa62315e5..74e68e5e2 100644
--- a/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.h
+++ b/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.h
@@ -43,12 +43,7 @@
extern "C" {
#endif
-#include "LPC11Uxx.h"
-#include "lpc11uxx_gpio.h"
-#include "lpc11uxx_uart.h"
-
-//#define CFG_PRINTF_TARGET PRINTF_TARGET_SEMIHOST
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
+#include "chip.h"
#ifdef __cplusplus
}
diff --git a/hw/bsp/lpcxpresso11u68/startup/xpresso/cr_startup_lpc11u.c b/hw/bsp/lpcxpresso11u68/startup/xpresso/cr_startup_lpc11u.c
deleted file mode 100644
index 582b71f15..000000000
--- a/hw/bsp/lpcxpresso11u68/startup/xpresso/cr_startup_lpc11u.c
+++ /dev/null
@@ -1,382 +0,0 @@
-//*****************************************************************************
-// +--+
-// | ++----+
-// +-++ |
-// | |
-// +-+--+ |
-// | +--+--+
-// +----+ Copyright (c) 2011 Code Red Technologies Ltd.
-//
-// Microcontroller Startup code for use with Red Suite
-//
-// Version : 110323
-//
-// Software License Agreement
-//
-// The software is owned by Code Red Technologies and/or its suppliers, and is
-// protected under applicable copyright laws. All rights are reserved. Any
-// use in violation of the foregoing restrictions may subject the user to criminal
-// sanctions under applicable laws, as well as to civil liability for the breach
-// of the terms and conditions of this license.
-//
-// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-// USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT
-// TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH
-// CODE RED TECHNOLOGIES LTD.
-//
-//*****************************************************************************
-#if defined (__cplusplus)
-#ifdef __REDLIB__
-#error Redlib does not support C++
-#else
-//*****************************************************************************
-//
-// The entry point for the C++ library startup
-//
-//*****************************************************************************
-extern "C" {
- extern void __libc_init_array(void);
-}
-#endif
-#endif
-
-#define WEAK __attribute__ ((weak))
-#define ALIAS(f) __attribute__ ((weak, alias (#f)))
-#define SVCall_Handler SVC_Handler
-
-// Code Red - if CMSIS is being used, then SystemInit() routine
-// will be called by startup code rather than in application's main()
-#if defined (__USE_CMSIS)
-#include "LPC11Uxx.h"
-#endif
-
-//*****************************************************************************
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-//*****************************************************************************
-//
-// Forward declaration of the default handlers. These are aliased.
-// When the application defines a handler (with the same name), this will
-// automatically take precedence over these weak definitions
-//
-//*****************************************************************************
- void ResetISR(void);
-WEAK void NMI_Handler(void);
-WEAK void HardFault_Handler(void);
-WEAK void SVCall_Handler(void);
-WEAK void PendSV_Handler(void);
-WEAK void SysTick_Handler(void);
-WEAK void IntDefaultHandler(void);
-//*****************************************************************************
-//
-// Forward declaration of the specific IRQ handlers. These are aliased
-// to the IntDefaultHandler, which is a 'forever' loop. When the application
-// defines a handler (with the same name), this will automatically take
-// precedence over these weak definitions
-//
-//*****************************************************************************
-
-void FLEX_INT0_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT1_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT2_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT3_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT4_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT5_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT6_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FLEX_INT7_IRQHandler (void) ALIAS(IntDefaultHandler);
-void GINT0_IRQHandler (void) ALIAS(IntDefaultHandler);
-void GINT1_IRQHandler (void) ALIAS(IntDefaultHandler);
-void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler);
-void I2C_IRQHandler (void) ALIAS(IntDefaultHandler);
-void TIMER16_0_IRQHandler (void) ALIAS(IntDefaultHandler);
-void TIMER16_1_IRQHandler (void) ALIAS(IntDefaultHandler);
-void TIMER32_0_IRQHandler (void) ALIAS(IntDefaultHandler);
-void TIMER32_1_IRQHandler (void) ALIAS(IntDefaultHandler);
-void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler);
-void UART_IRQHandler (void) ALIAS(IntDefaultHandler);
-void USB_IRQHandler (void) ALIAS(IntDefaultHandler);
-void USB_FIQHandler (void) ALIAS(IntDefaultHandler);
-void ADC_IRQHandler (void) ALIAS(IntDefaultHandler);
-void WDT_IRQHandler (void) ALIAS(IntDefaultHandler);
-void BOD_IRQHandler (void) ALIAS(IntDefaultHandler);
-void FMC_IRQHandler (void) ALIAS(IntDefaultHandler);
-void USBWakeup_IRQHandler (void) ALIAS(IntDefaultHandler);
-
-//*****************************************************************************
-//
-// The entry point for the application.
-// __main() is the entry point for redlib based applications
-// main() is the entry point for newlib based applications
-//
-//*****************************************************************************
-//
-// The entry point for the application.
-// __main() is the entry point for Redlib based applications
-// main() is the entry point for Newlib based applications
-//
-//*****************************************************************************
-#if defined (__REDLIB__)
-extern void __main(void);
-#endif
-extern int main(void);
-//*****************************************************************************
-//
-// External declaration for the pointer to the stack top from the Linker Script
-//
-//*****************************************************************************
-extern void _vStackTop(void);
-
-//*****************************************************************************
-#if defined (__cplusplus)
-} // extern "C"
-#endif
-//*****************************************************************************
-//
-// The vector table. Note that the proper constructs must be placed on this to
-// ensure that it ends up at physical address 0x0000.0000.
-//
-//*****************************************************************************
-extern void (* const g_pfnVectors[])(void);
-__attribute__ ((section(".isr_vector")))
-void (* const g_pfnVectors[])(void) = {
- &_vStackTop, // The initial stack pointer
- ResetISR, // The reset handler
- NMI_Handler, // The NMI handler
- HardFault_Handler, // The hard fault handler
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- SVCall_Handler, // SVCall handler
- 0, // Reserved
- 0, // Reserved
- PendSV_Handler, // The PendSV handler
- SysTick_Handler, // The SysTick handler
-
- // LPC11U specific handlers
- FLEX_INT0_IRQHandler, // 0 - GPIO pin interrupt 0
- FLEX_INT1_IRQHandler, // 1 - GPIO pin interrupt 1
- FLEX_INT2_IRQHandler, // 2 - GPIO pin interrupt 2
- FLEX_INT3_IRQHandler, // 3 - GPIO pin interrupt 3
- FLEX_INT4_IRQHandler, // 4 - GPIO pin interrupt 4
- FLEX_INT5_IRQHandler, // 5 - GPIO pin interrupt 5
- FLEX_INT6_IRQHandler, // 6 - GPIO pin interrupt 6
- FLEX_INT7_IRQHandler, // 7 - GPIO pin interrupt 7
- GINT0_IRQHandler, // 8 - GPIO GROUP0 interrupt
- GINT1_IRQHandler, // 9 - GPIO GROUP1 interrupt
- 0, // 10 - Reserved
- 0, // 11 - Reserved
- 0, // 12 - Reserved
- 0, // 13 - Reserved
- SSP1_IRQHandler, // 14 - SPI/SSP1 Interrupt
- I2C_IRQHandler, // 15 - I2C0
- TIMER16_0_IRQHandler, // 16 - CT16B0 (16-bit Timer 0)
- TIMER16_1_IRQHandler, // 17 - CT16B1 (16-bit Timer 1)
- TIMER32_0_IRQHandler, // 18 - CT32B0 (32-bit Timer 0)
- TIMER32_1_IRQHandler, // 19 - CT32B1 (32-bit Timer 1)
- SSP0_IRQHandler, // 20 - SPI/SSP0 Interrupt
- UART_IRQHandler, // 21 - UART0
- USB_IRQHandler, // 22 - USB IRQ
- USB_FIQHandler, // 23 - USB FIQ
- ADC_IRQHandler, // 24 - ADC (A/D Converter)
- WDT_IRQHandler, // 25 - WDT (Watchdog Timer)
- BOD_IRQHandler, // 26 - BOD (Brownout Detect)
- FMC_IRQHandler, // 27 - IP2111 Flash Memory Controller
- 0, // 28 - Reserved
- 0, // 29 - Reserved
- USBWakeup_IRQHandler, // 30 - USB wake-up interrupt
- 0, // 31 - Reserved
-};
-
-//*****************************************************************************
-// Functions to carry out the initialization of RW and BSS data sections. These
-// are written as separate functions rather than being inlined within the
-// ResetISR() function in order to cope with MCUs with multiple banks of
-// memory.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int *pulSrc = (unsigned int*) romstart;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = *pulSrc++;
-}
-
-__attribute__ ((section(".after_vectors")))
-void bss_init(unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = 0;
-}
-
-#ifndef USE_OLD_STYLE_DATA_BSS_INIT
-//*****************************************************************************
-// The following symbols are constructs generated by the linker, indicating
-// the location of various points in the "Global Section Table". This table is
-// created by the linker via the Code Red managed linker script mechanism. It
-// contains the load address, execution address and length of each RW data
-// section and the execution and length of each BSS (zero initialized) section.
-//*****************************************************************************
-extern unsigned int __data_section_table;
-extern unsigned int __data_section_table_end;
-extern unsigned int __bss_section_table;
-extern unsigned int __bss_section_table_end;
-#else
-//*****************************************************************************
-// The following symbols are constructs generated by the linker, indicating
-// the load address, execution address and length of the RW data section and
-// the execution and length of the BSS (zero initialized) section.
-// Note that these symbols are not normally used by the managed linker script
-// mechanism in Red Suite/LPCXpresso 3.6 (Windows) and LPCXpresso 3.8 (Linux).
-// They are provide here simply so this startup code can be used with earlier
-// versions of Red Suite which do not support the more advanced managed linker
-// script mechanism introduced in the above version. To enable their use,
-// define "USE_OLD_STYLE_DATA_BSS_INIT".
-//*****************************************************************************
-extern unsigned int _etext;
-extern unsigned int _data;
-extern unsigned int _edata;
-extern unsigned int _bss;
-extern unsigned int _ebss;
-#endif
-
-
-//*****************************************************************************
-// Reset entry point for your code.
-// Sets up a simple runtime environment and initializes the C/C++
-// library.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void
-ResetISR(void) {
-
-#ifndef USE_OLD_STYLE_DATA_BSS_INIT
- //
- // Copy the data sections from flash to SRAM.
- //
- unsigned int LoadAddr, ExeAddr, SectionLen;
- unsigned int *SectionTableAddr;
-
- // Load base address of Global Section Table
- SectionTableAddr = &__data_section_table;
-
- // Copy the data sections from flash to SRAM.
- while (SectionTableAddr < &__data_section_table_end) {
- LoadAddr = *SectionTableAddr++;
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- data_init(LoadAddr, ExeAddr, SectionLen);
- }
- // At this point, SectionTableAddr = &__bss_section_table;
- // Zero fill the bss segment
- while (SectionTableAddr < &__bss_section_table_end) {
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- bss_init(ExeAddr, SectionLen);
- }
-#else
- // Use Old Style Data and BSS section initialization.
- // This will only initialize a single RAM bank.
- unsigned int * LoadAddr, *ExeAddr, *EndAddr, SectionLen;
-
- // Copy the data segment from flash to SRAM.
- LoadAddr = &_etext;
- ExeAddr = &_data;
- EndAddr = &_edata;
- SectionLen = (void*)EndAddr - (void*)ExeAddr;
- data_init((unsigned int)LoadAddr, (unsigned int)ExeAddr, SectionLen);
- // Zero fill the bss segment
- ExeAddr = &_bss;
- EndAddr = &_ebss;
- SectionLen = (void*)EndAddr - (void*)ExeAddr;
- bss_init ((unsigned int)ExeAddr, SectionLen);
-#endif
-
-#ifdef __USE_CMSIS
- SystemInit();
-#endif
-
-#if defined (__cplusplus)
- //
- // Call C++ library initialisation
- //
- __libc_init_array();
-#endif
-
-#if defined (__REDLIB__)
- // Call the Redlib library, which in turn calls main()
- __main() ;
-#else
- main();
-#endif
- //
- // main() shouldn't return, but if it does, we'll just enter an infinite loop
- //
- while (1) {
- ;
- }
-}
-
-//*****************************************************************************
-// Default exception handlers. Override the ones here by defining your own
-// handler routines in your application code.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void NMI_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void HardFault_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SVCall_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void PendSV_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SysTick_Handler(void)
-{
- while(1)
- {
- }
-}
-
-//*****************************************************************************
-//
-// Processor ends up here if an unexpected interrupt occurs or a specific
-// handler is not present in the application code.
-//
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void IntDefaultHandler(void)
-{
- while(1)
- {
- }
-}
-
diff --git a/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c b/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c
index d72402d66..95812f84d 100644
--- a/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c
+++ b/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c
@@ -36,16 +36,14 @@
*/
/**************************************************************************/
-#include "../board.h"
-
#ifdef BOARD_LPCXPRESSO1347
-#define LED_PORT (0)
-#define LED_PIN (7)
-#define LED_ON (1)
-#define LED_OFF (0)
+#include "../board.h"
+
+#define LED_PORT 0
+#define LED_PIN 7
-const static struct {
+static const struct {
uint8_t port;
uint8_t pin;
} buttons[] =
@@ -63,55 +61,103 @@ enum {
BOARD_BUTTON_COUNT = sizeof(buttons) / sizeof(buttons[0])
};
+/* System oscillator rate and RTC oscillator rate */
+const uint32_t OscRateIn = 12000000;
+const uint32_t ExtRateIn = 0;
+
+/* Pin muxing table, only items that need changing from their default pin
+ state are in this table. */
+static const PINMUX_GRP_T pinmuxing[] =
+{
+ {0, 1, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_1 used for CLKOUT */
+ {0, 2, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_PULLUP)}, /* PIO0_2 used for SSEL */
+ {0, 3, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_3 used for USB_VBUS */
+ {0, 6, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_6 used for USB_CONNECT */
+ {0, 8, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_8 used for MISO0 */
+ {0, 9, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_9 used for MOSI0 */
+ {0, 11, (IOCON_FUNC2 | IOCON_ADMODE_EN | IOCON_FILT_DIS)}, /* PIO0_11 used for AD0 */
+ {0, 18, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_18 used for RXD */
+ {0, 19, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_19 used for TXD */
+ {1, 29, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO1_29 used for SCK0 */
+};
+
+// Invoked by startup code
+void SystemInit(void)
+{
+ /* Enable IOCON clock */
+ Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);
+ Chip_IOCON_SetPinMuxing(LPC_IOCON, pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
+ Chip_SetupXtalClocking();
+}
void board_init(void)
{
- SystemInit();
+ SystemCoreClockUpdate();
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
+#if CFG_TUSB_OS == OPT_OS_NONE
SysTick_Config(SystemCoreClock / BOARD_TICKS_HZ); // 1 msec tick timer
#endif
- GPIOInit();
+ Chip_GPIO_Init(LPC_GPIO_PORT);
//------------- LED -------------//
- GPIOSetDir(LED_PORT, LED_PIN, 1);
+ Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, LED_PORT, LED_PIN);
//------------- BUTTON -------------//
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIOSetDir(buttons[i].port, BIT_(buttons[i].pin), 0);
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIOSetDir(buttons[i].port, TU_BIT(buttons[i].pin), 0);
//------------- UART -------------//
- UARTInit(CFG_UART_BAUDRATE);
+ //UARTInit(CFG_UART_BAUDRATE);
+ // USB
+ Chip_USB_Init(); // Setup PLL clock, and power
}
+/*------------------------------------------------------------------*/
+/* TUSB HAL MILLISECOND
+ *------------------------------------------------------------------*/
+#if CFG_TUSB_OS == OPT_OS_NONE
+
+volatile uint32_t system_ticks = 0;
+
+void SysTick_Handler (void)
+{
+ system_ticks++;
+}
+
+uint32_t tusb_hal_millis(void)
+{
+ return board_tick2ms(system_ticks);
+}
+
+#endif
+
//--------------------------------------------------------------------+
// LEDS
//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
+void board_led_control(bool state)
{
- if (on_mask & BIT_(0))
- {
- GPIOSetBitValue(LED_PORT, LED_PIN, LED_ON);
- }else if (off_mask & BIT_(0))
- {
- GPIOSetBitValue(LED_PORT, LED_PIN, LED_OFF);
- }
+ Chip_GPIO_SetPinState(LPC_GPIO_PORT, LED_PORT, LED_PIN, state);
}
+
//--------------------------------------------------------------------+
// BUTTONS
//--------------------------------------------------------------------+
+#if 0
static bool button_read(uint8_t id)
{
- return !GPIOGetPinValue(buttons[id].port, buttons[id].pin); // button is active low
+ (void) id;
+// return !GPIOGetPinValue(buttons[id].port, buttons[id].pin); // button is active low
+ return 0;
}
+#endif
uint32_t board_buttons(void)
{
uint32_t result = 0;
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? BIT_(i) : 0);
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? TU_BIT(i) : 0);
return result;
}
@@ -121,7 +167,8 @@ uint32_t board_buttons(void)
//--------------------------------------------------------------------+
void board_uart_putchar(uint8_t c)
{
- UARTSend(&c, 1);
+ (void) c;
+// UARTSend(&c, 1);
}
uint8_t board_uart_getchar(void)
diff --git a/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.h b/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.h
index 643aec7f3..81a631fb5 100644
--- a/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.h
+++ b/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.h
@@ -43,11 +43,7 @@
extern "C" {
#endif
-#include "LPC13Uxx.h"
-#include "gpio.h"
-#include "uart.h"
-
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
+#include "chip.h"
#ifdef __cplusplus
}
diff --git a/hw/bsp/lpcxpresso1347/startup/xpresso/cr_startup_lpc13u.c b/hw/bsp/lpcxpresso1347/startup/xpresso/cr_startup_lpc13u.c
deleted file mode 100644
index 8b5d7eebb..000000000
--- a/hw/bsp/lpcxpresso1347/startup/xpresso/cr_startup_lpc13u.c
+++ /dev/null
@@ -1,354 +0,0 @@
-//*****************************************************************************
-// +--+
-// | ++----+
-// +-++ |
-// | |
-// +-+--+ |
-// | +--+--+
-// +----+ Copyright (c) 2012 Code Red Technologies Ltd.
-//
-// NXP LPC13U Microcontroller Startup code for use with Red Suite
-//
-// Version : 120202
-//
-// Software License Agreement
-//
-// The software is owned by Code Red Technologies and/or its suppliers, and is
-// protected under applicable copyright laws. All rights are reserved. Any
-// use in violation of the foregoing restrictions may subject the user to criminal
-// sanctions under applicable laws, as well as to civil liability for the breach
-// of the terms and conditions of this license.
-//
-// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-// USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT
-// TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH
-// CODE RED TECHNOLOGIES LTD.
-//
-//*****************************************************************************
-#if defined (__cplusplus)
-#ifdef __REDLIB__
-#error Redlib does not support C++
-#else
-//*****************************************************************************
-//
-// The entry point for the C++ library startup
-//
-//*****************************************************************************
-extern "C" {
- extern void __libc_init_array(void);
-}
-#endif
-#endif
-
-#define WEAK __attribute__ ((weak))
-#define ALIAS(f) __attribute__ ((weak, alias (#f)))
-
-// Code Red - if CMSIS is being used, then SystemInit() routine
-// will be called by startup code rather than in application's main()
-#if defined (__USE_CMSIS)
-#include "LPC13Uxx.h"
-#endif
-
-//*****************************************************************************
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-//*****************************************************************************
-//
-// Forward declaration of the default handlers. These are aliased.
-// When the application defines a handler (with the same name), this will
-// automatically take precedence over these weak definitions
-//
-//*****************************************************************************
-void ResetISR(void);
-WEAK void NMI_Handler(void);
-WEAK void HardFault_Handler(void);
-WEAK void MemManage_Handler(void);
-WEAK void BusFault_Handler(void);
-WEAK void UsageFault_Handler(void);
-WEAK void SVC_Handler(void);
-WEAK void DebugMon_Handler(void);
-WEAK void PendSV_Handler(void);
-WEAK void SysTick_Handler(void);
-WEAK void IntDefaultHandler(void);
-//*****************************************************************************
-//
-// Forward declaration of the specific IRQ handlers. These are aliased
-// to the IntDefaultHandler, which is a 'forever' loop. When the application
-// defines a handler (with the same name), this will automatically take
-// precedence over these weak definitions
-//
-//*****************************************************************************
-void PIN_INT0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT4_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT5_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT6_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PIN_INT7_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void OSTIMER_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2C_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CT16B0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CT16B1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CT32B0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CT32B1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USART_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USB_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USB_FIQHandler(void) ALIAS(IntDefaultHandler);
-void ADC_IRQHandler(void) ALIAS(IntDefaultHandler);
-void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
-void FMC_IRQHandler(void) ALIAS(IntDefaultHandler);
-void OSCFAIL_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PVTCIRCUIT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USBWakeup_IRQHandler(void) ALIAS(IntDefaultHandler);
-
-//*****************************************************************************
-//
-// The entry point for the application.
-// __main() is the entry point for Redlib based applications
-// main() is the entry point for Newlib based applications
-//
-//*****************************************************************************
-#if defined (__REDLIB__)
-extern void __main(void);
-#endif
-extern int main(void);
-//*****************************************************************************
-//
-// External declaration for the pointer to the stack top from the Linker Script
-//
-//*****************************************************************************
-extern void _vStackTop(void);
-
-//*****************************************************************************
-#if defined (__cplusplus)
-} // extern "C"
-#endif
-//*****************************************************************************
-//
-// The vector table. Note that the proper constructs must be placed on this to
-// ensure that it ends up at physical address 0x0000.0000.
-//
-//*****************************************************************************
-extern void (* const g_pfnVectors[])(void);
-__attribute__ ((section(".isr_vector")))
-void (* const g_pfnVectors[])(void) = {
- // Core Level - CM3
- &_vStackTop, // The initial stack pointer
- ResetISR, // The reset handler
- NMI_Handler, // The NMI handler
- HardFault_Handler, // The hard fault handler
- MemManage_Handler, // The MPU fault handler
- BusFault_Handler, // The bus fault handler
- UsageFault_Handler, // The usage fault handler
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- SVC_Handler, // SVCall handler
- DebugMon_Handler, // Debug monitor handler
- 0, // Reserved
- PendSV_Handler, // The PendSV handler
- SysTick_Handler, // The SysTick handler
-
- // LPC13U External Interrupts
- PIN_INT0_IRQHandler, // All GPIO pin can be routed to PIN_INTx
- PIN_INT1_IRQHandler,
- PIN_INT2_IRQHandler,
- PIN_INT3_IRQHandler,
- PIN_INT4_IRQHandler,
- PIN_INT5_IRQHandler,
- PIN_INT6_IRQHandler,
- PIN_INT7_IRQHandler,
- GINT0_IRQHandler,
- GINT1_IRQHandler, // PIO0 (0:7)
- 0,
- 0,
- OSTIMER_IRQHandler,
- 0,
- SSP1_IRQHandler, // SSP1
- I2C_IRQHandler, // I2C
- CT16B0_IRQHandler, // 16-bit Timer0
- CT16B1_IRQHandler, // 16-bit Timer1
- CT32B0_IRQHandler, // 32-bit Timer0
- CT32B1_IRQHandler, // 32-bit Timer1
- SSP0_IRQHandler, // SSP0
- USART_IRQHandler, // USART
- USB_IRQHandler, // USB IRQ
- USB_FIQHandler, // USB FIQ
- ADC_IRQHandler, // A/D Converter
- WDT_IRQHandler, // Watchdog timer
- BOD_IRQHandler, // Brown Out Detect
- FMC_IRQHandler, // IP2111 Flash Memory Controller
- OSCFAIL_IRQHandler, // OSC FAIL
- PVTCIRCUIT_IRQHandler, // PVT CIRCUIT
- USBWakeup_IRQHandler, // USB wake up
- 0,
- };
-
-//*****************************************************************************
-// Functions to carry out the initialization of RW and BSS data sections. These
-// are written as separate functions rather than being inlined within the
-// ResetISR() function in order to cope with MCUs with multiple banks of
-// memory.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int *pulSrc = (unsigned int*) romstart;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = *pulSrc++;
-}
-
-__attribute__ ((section(".after_vectors")))
-void bss_init(unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = 0;
-}
-
-//*****************************************************************************
-// The following symbols are constructs generated by the linker, indicating
-// the location of various points in the "Global Section Table". This table is
-// created by the linker via the Code Red managed linker script mechanism. It
-// contains the load address, execution address and length of each RW data
-// section and the execution and length of each BSS (zero initialized) section.
-//*****************************************************************************
-extern unsigned int __data_section_table;
-extern unsigned int __data_section_table_end;
-extern unsigned int __bss_section_table;
-extern unsigned int __bss_section_table_end;
-
-//*****************************************************************************
-// Reset entry point for your code.
-// Sets up a simple runtime environment and initializes the C/C++
-// library.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void
-ResetISR(void) {
-
- //
- // Copy the data sections from flash to SRAM.
- //
- unsigned int LoadAddr, ExeAddr, SectionLen;
- unsigned int *SectionTableAddr;
-
- // Load base address of Global Section Table
- SectionTableAddr = &__data_section_table;
-
- // Copy the data sections from flash to SRAM.
- while (SectionTableAddr < &__data_section_table_end) {
- LoadAddr = *SectionTableAddr++;
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- data_init(LoadAddr, ExeAddr, SectionLen);
- }
- // At this point, SectionTableAddr = &__bss_section_table;
- // Zero fill the bss segment
- while (SectionTableAddr < &__bss_section_table_end) {
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- bss_init(ExeAddr, SectionLen);
- }
-
-#ifdef __USE_CMSIS
- SystemInit();
-#endif
-
-#if defined (__cplusplus)
- //
- // Call C++ library initialisation
- //
- __libc_init_array();
-#endif
-
-#if defined (__REDLIB__)
- // Call the Redlib library, which in turn calls main()
- __main() ;
-#else
- main();
-#endif
- //
- // main() shouldn't return, but if it does, we'll just enter an infinite loop
- //
- while (1) {
- ;
- }
-}
-
-//*****************************************************************************
-// Default exception handlers. Override the ones here by defining your own
-// handler routines in your application code.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void NMI_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void HardFault_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void MemManage_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void BusFault_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void UsageFault_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SVC_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void DebugMon_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void PendSV_Handler(void) {
- while (1) {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SysTick_Handler(void) {
- while (1) {
- }
-}
-
-//*****************************************************************************
-//
-// Processor ends up here if an unexpected interrupt occurs or a handler
-// is not present in the application code.
-//
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void IntDefaultHandler(void) {
- //
- // Go into an infinite loop.
- //
- while (1) {
- }
-}
diff --git a/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.c b/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.c
index 4321a3f3c..f19b9b147 100644
--- a/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.c
+++ b/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.c
@@ -36,59 +36,81 @@
*/
/**************************************************************************/
-#include "../board.h"
#ifdef BOARD_LPCXPRESSO1769
-#define BOARD_LED_PORT (0)
-#define BOARD_LED_PIN (22)
+#include "../board.h"
+#include "tusb.h"
+
+#define LED_PORT 0
+#define LED_PIN 22
+
+#define BOARD_UART_PORT LPC_UART3
+
+/* System oscillator rate and RTC oscillator rate */
+const uint32_t OscRateIn = 12000000;
+const uint32_t RTCOscRateIn = 32768;
-const static struct {
- uint8_t port;
- uint8_t pin;
-} buttons[] =
+/* Pin muxing configuration */
+static const PINMUX_GRP_T pinmuxing[] =
{
- {2, 3 }, // Joystick up
- {0, 15 }, // Joystick down
- {2, 4 }, // Joystick left
- {0, 16 }, // Joystick right
- {0, 17 }, // Joystick press
- {0, 4 }, // SW3
-// {1, 31 }, // SW4 (require to remove J28)
+ {0, 0, IOCON_MODE_INACT | IOCON_FUNC2}, /* TXD3 */
+ {0, 1, IOCON_MODE_INACT | IOCON_FUNC2}, /* RXD3 */
+ {0, 22, IOCON_MODE_INACT | IOCON_FUNC0}, /* Led 0 */
+
+ /* Joystick buttons. */
+ {2, 3, IOCON_MODE_INACT | IOCON_FUNC0}, /* JOYSTICK_UP */
+ {0, 15, IOCON_MODE_INACT | IOCON_FUNC0}, /* JOYSTICK_DOWN */
+ {2, 4, IOCON_MODE_INACT | IOCON_FUNC0}, /* JOYSTICK_LEFT */
+ {0, 16, IOCON_MODE_INACT | IOCON_FUNC0}, /* JOYSTICK_RIGHT */
+ {0, 17, IOCON_MODE_INACT | IOCON_FUNC0}, /* JOYSTICK_PRESS */
+};
+
+static const PINMUX_GRP_T pin_usb_mux[] =
+{
+ {0, 29, IOCON_MODE_INACT | IOCON_FUNC1}, // D+
+ {0, 30, IOCON_MODE_INACT | IOCON_FUNC1}, // D-
+ {2, 9, IOCON_MODE_INACT | IOCON_FUNC1}, // Connect
+
+ {1, 19, IOCON_MODE_INACT | IOCON_FUNC2}, // USB_PPWR
+ {1, 22, IOCON_MODE_INACT | IOCON_FUNC2}, // USB_PWRD
+
+ /* VBUS is not connected on this board, so leave the pin at default setting. */
+ /*Chip_IOCON_PinMux(LPC_IOCON, 1, 30, IOCON_MODE_INACT, IOCON_FUNC2);*/ /* USB VBUS */
};
enum {
- BOARD_BUTTON_COUNT = sizeof(buttons) / sizeof(buttons[0])
+ BOARD_BUTTON_COUNT = 5
};
-#define BOARD_UART_PORT LPC_UART3
+// Invoked by startup code
+void SystemInit(void)
+{
+ /* Enable IOCON clock */
+ Chip_IOCON_SetPinMuxing(LPC_IOCON, pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
+ Chip_SetupXtalClocking();
+}
void board_init(void)
{
- SystemInit();
+ SystemCoreClockUpdate();
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
- SysTick_Config(SystemCoreClock / BOARD_TICKS_HZ); // 1 msec tick timer
+#if CFG_TUSB_OS == OPT_OS_NONE
+ SysTick_Config(SystemCoreClock / BOARD_TICKS_HZ);
+#elif CFG_TUSB_OS == OPT_OS_FREERTOS
+ // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
+ NVIC_SetPriority(USB_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
#endif
+ Chip_GPIO_Init(LPC_GPIO);
+
//------------- LED -------------//
- GPIO_SetDir(BOARD_LED_PORT, BIT_(BOARD_LED_PIN), 1);
+ Chip_GPIO_SetPinDIROutput(LPC_GPIO, LED_PORT, LED_PIN);
//------------- BUTTON -------------//
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIO_SetDir(buttons[i].port, BIT_(buttons[i].pin), 0);
-
-#if TUSB_OPT_DEVICE_ENABLED
- //------------- USB Device -------------//
- // VBUS sense is wrongly connected to P0_5 (instead of P1_30). So we need to always pull P1_30 to high
- // so that USB device block can work. However, Device Controller (thus tinyusb) cannot able to determine
- // if device is disconnected or not
- PINSEL_ConfigPin( &(PINSEL_CFG_Type) {
- .Portnum = 1, .Pinnum = 30,
- .Funcnum = 2, .Pinmode = PINSEL_PINMODE_PULLUP} );
-
- //P0_21 instead of P2_9 as USB connect
-#endif
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) GPIO_SetDir(buttons[i].port, TU_BIT(buttons[i].pin), 0);
+#if 0
//------------- UART -------------//
PINSEL_CFG_Type PinCfg =
{
@@ -110,35 +132,73 @@ void board_init(void)
UART_Init(BOARD_UART_PORT, &UARTConfigStruct);
UART_TxCmd(BOARD_UART_PORT, ENABLE); // Enable UART Transmit
+#endif
+
+ //------------- USB -------------//
+ Chip_USB_Init();
+
+ enum {
+ USBCLK_DEVCIE = 0x12, // AHB + Device
+ USBCLK_HOST = 0x19, // AHB + Host + OTG
+// 0x1B // Host + Device + OTG + AHB
+ };
+
+ uint32_t const clk_en = TUSB_OPT_DEVICE_ENABLED ? USBCLK_DEVCIE : USBCLK_HOST;
+
+ LPC_USB->OTGClkCtrl = clk_en;
+ while ( (LPC_USB->OTGClkSt & clk_en) != clk_en );
+
+#if TUSB_OPT_HOST_ENABLED
+ // set portfunc to host !!!
+ LPC_USB->StCtrl = 0x3; // should be 1
+#endif
+
+ Chip_IOCON_SetPinMuxing(LPC_IOCON, pin_usb_mux, sizeof(pin_usb_mux) / sizeof(PINMUX_GRP_T));
+}
+
+/*------------------------------------------------------------------*/
+/* TUSB HAL MILLISECOND
+ *------------------------------------------------------------------*/
+#if CFG_TUSB_OS == OPT_OS_NONE
+
+volatile uint32_t system_ticks = 0;
+
+void SysTick_Handler (void)
+{
+ system_ticks++;
+}
+
+uint32_t tusb_hal_millis(void)
+{
+ return board_tick2ms(system_ticks);
}
+#endif
+
//--------------------------------------------------------------------+
// LEDS
//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
+void board_led_control(bool state)
{
- if (on_mask & BIT_(0))
- {
- GPIO_SetValue(BOARD_LED_PORT, BIT_(BOARD_LED_PIN));
- }else if (off_mask & BIT_(0))
- {
- GPIO_ClearValue(BOARD_LED_PORT, BIT_(BOARD_LED_PIN));
- }
+ Chip_GPIO_SetPinState(LPC_GPIO, LED_PORT, LED_PIN, state);
}
//--------------------------------------------------------------------+
// BUTTONS
//--------------------------------------------------------------------+
+#if 0
static bool button_read(uint8_t id)
{
- return !BIT_TEST_( GPIO_ReadValue(buttons[id].port), buttons[id].pin ); // button is active low
+// return !TU_BIT_TEST( GPIO_ReadValue(buttons[id].port), buttons[id].pin ); // button is active low
+ return false;
}
+#endif
uint32_t board_buttons(void)
{
uint32_t result = 0;
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? BIT_(i) : 0);
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? TU_BIT(i) : 0);
return result;
}
@@ -148,12 +208,14 @@ uint32_t board_buttons(void)
//--------------------------------------------------------------------+
void board_uart_putchar(uint8_t c)
{
- UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
+ (void) c;
+// UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
}
uint8_t board_uart_getchar(void)
{
- return UART_ReceiveByte(BOARD_UART_PORT);
+// return UART_ReceiveByte(BOARD_UART_PORT);
+ return 0;
}
#endif
diff --git a/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.h b/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.h
index 06520e16b..cf8741590 100644
--- a/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.h
+++ b/hw/bsp/lpcxpresso1769/board_lpcxpresso1769.h
@@ -39,20 +39,11 @@
#ifndef _TUSB_BOARD_LPCXPRESSO1769_H_
#define _TUSB_BOARD_LPCXPRESSO1769_H_
-#include "LPC17xx.h"
-
-#include "lpc17xx_clkpwr.h"
-#include "lpc17xx_pinsel.h"
-#include "lpc17xx_gpio.h"
-#include "lpc17xx_uart.h"
-
#ifdef __cplusplus
extern "C" {
#endif
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
-//#define CFG_PRINTF_TARGET PRINTF_TARGET_SWO
-
+#include "chip.h"
#ifdef __cplusplus
}
diff --git a/hw/bsp/lpcxpresso1769/startup/xpresso/cr_startup_lpc176x.c b/hw/bsp/lpcxpresso1769/startup/xpresso/cr_startup_lpc176x.c
deleted file mode 100644
index fc6bed580..000000000
--- a/hw/bsp/lpcxpresso1769/startup/xpresso/cr_startup_lpc176x.c
+++ /dev/null
@@ -1,423 +0,0 @@
-//*****************************************************************************
-// +--+
-// | ++----+
-// +-++ |
-// | |
-// +-+--+ |
-// | +--+--+
-// +----+ Copyright (c) 2009-10 Code Red Technologies Ltd.
-//
-// Microcontroller Startup code for use with Red Suite
-//
-// Version : 101130
-//
-// Software License Agreement
-//
-// The software is owned by Code Red Technologies and/or its suppliers, and is
-// protected under applicable copyright laws. All rights are reserved. Any
-// use in violation of the foregoing restrictions may subject the user to criminal
-// sanctions under applicable laws, as well as to civil liability for the breach
-// of the terms and conditions of this license.
-//
-// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-// USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT
-// TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH
-// CODE RED TECHNOLOGIES LTD.
-//
-//*****************************************************************************
-#if defined (__cplusplus)
-#ifdef __REDLIB__
-#error Redlib does not support C++
-#else
-//*****************************************************************************
-//
-// The entry point for the C++ library startup
-//
-//*****************************************************************************
-extern "C" {
- extern void __libc_init_array(void);
-}
-#endif
-#endif
-
-#define WEAK __attribute__ ((weak))
-#define ALIAS(f) __attribute__ ((weak, alias (#f)))
-
-#define SVCall_Handler SVC_Handler
-
-// Code Red - if CMSIS is being used, then SystemInit() routine
-// will be called by startup code rather than in application's main()
-#if defined (__USE_CMSIS)
-#include "system_LPC17xx.h"
-#endif
-
-//*****************************************************************************
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-//*****************************************************************************
-//
-// Forward declaration of the default handlers. These are aliased.
-// When the application defines a handler (with the same name), this will
-// automatically take precedence over these weak definitions
-//
-//*****************************************************************************
- void ResetISR(void);
-WEAK void NMI_Handler(void);
-WEAK void HardFault_Handler(void);
-WEAK void MemManage_Handler(void);
-WEAK void BusFault_Handler(void);
-WEAK void UsageFault_Handler(void);
-WEAK void SVCall_Handler(void);
-WEAK void DebugMon_Handler(void);
-WEAK void PendSV_Handler(void);
-WEAK void SysTick_Handler(void);
-WEAK void IntDefaultHandler(void);
-
-//*****************************************************************************
-//
-// Forward declaration of the specific IRQ handlers. These are aliased
-// to the IntDefaultHandler, which is a 'forever' loop. When the application
-// defines a handler (with the same name), this will automatically take
-// precedence over these weak definitions
-//
-//*****************************************************************************
-void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PWM1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2C2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PLL0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void RTC_IRQHandler(void) ALIAS(IntDefaultHandler);
-void EINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
-void EINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void EINT2_IRQHandler(void) ALIAS(IntDefaultHandler);
-void EINT3_IRQHandler(void) ALIAS(IntDefaultHandler);
-void ADC_IRQHandler(void) ALIAS(IntDefaultHandler);
-void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USB_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CAN_IRQHandler(void) ALIAS(IntDefaultHandler);
-void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
-void I2S_IRQHandler(void) ALIAS(IntDefaultHandler);
-void ENET_IRQHandler(void) ALIAS(IntDefaultHandler);
-void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
-void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
-void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
-void PLL1_IRQHandler(void) ALIAS(IntDefaultHandler);
-void USBActivity_IRQHandler(void) ALIAS(IntDefaultHandler);
-void CANActivity_IRQHandler(void) ALIAS(IntDefaultHandler);
-
-//*****************************************************************************
-//
-// The entry point for the application.
-// __main() is the entry point for Redlib based applications
-// main() is the entry point for Newlib based applications
-//
-//*****************************************************************************
-#if defined (__REDLIB__)
-extern void __main(void);
-#endif
-extern int main(void);
-//*****************************************************************************
-//
-// External declaration for the pointer to the stack top from the Linker Script
-//
-//*****************************************************************************
-extern void _vStackTop(void);
-
-//*****************************************************************************
-#if defined (__cplusplus)
-} // extern "C"
-#endif
-//*****************************************************************************
-//
-// The vector table.
-// This relies on the linker script to place at correct location in memory.
-//
-//*****************************************************************************
-extern void (* const g_pfnVectors[])(void);
-__attribute__ ((section(".isr_vector")))
-void (* const g_pfnVectors[])(void) = {
- // Core Level - CM3
- &_vStackTop, // The initial stack pointer
- ResetISR, // The reset handler
- NMI_Handler, // The NMI handler
- HardFault_Handler, // The hard fault handler
- MemManage_Handler, // The MPU fault handler
- BusFault_Handler, // The bus fault handler
- UsageFault_Handler, // The usage fault handler
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- 0, // Reserved
- SVCall_Handler, // SVCall handler
- DebugMon_Handler, // Debug monitor handler
- 0, // Reserved
- PendSV_Handler, // The PendSV handler
- SysTick_Handler, // The SysTick handler
-
- // Chip Level - LPC17
- WDT_IRQHandler, // 16, 0x40 - WDT
- TIMER0_IRQHandler, // 17, 0x44 - TIMER0
- TIMER1_IRQHandler, // 18, 0x48 - TIMER1
- TIMER2_IRQHandler, // 19, 0x4c - TIMER2
- TIMER3_IRQHandler, // 20, 0x50 - TIMER3
- UART0_IRQHandler, // 21, 0x54 - UART0
- UART1_IRQHandler, // 22, 0x58 - UART1
- UART2_IRQHandler, // 23, 0x5c - UART2
- UART3_IRQHandler, // 24, 0x60 - UART3
- PWM1_IRQHandler, // 25, 0x64 - PWM1
- I2C0_IRQHandler, // 26, 0x68 - I2C0
- I2C1_IRQHandler, // 27, 0x6c - I2C1
- I2C2_IRQHandler, // 28, 0x70 - I2C2
- SPI_IRQHandler, // 29, 0x74 - SPI
- SSP0_IRQHandler, // 30, 0x78 - SSP0
- SSP1_IRQHandler, // 31, 0x7c - SSP1
- PLL0_IRQHandler, // 32, 0x80 - PLL0 (Main PLL)
- RTC_IRQHandler, // 33, 0x84 - RTC
- EINT0_IRQHandler, // 34, 0x88 - EINT0
- EINT1_IRQHandler, // 35, 0x8c - EINT1
- EINT2_IRQHandler, // 36, 0x90 - EINT2
- EINT3_IRQHandler, // 37, 0x94 - EINT3
- ADC_IRQHandler, // 38, 0x98 - ADC
- BOD_IRQHandler, // 39, 0x9c - BOD
- USB_IRQHandler, // 40, 0xA0 - USB
- CAN_IRQHandler, // 41, 0xa4 - CAN
- DMA_IRQHandler, // 42, 0xa8 - GP DMA
- I2S_IRQHandler, // 43, 0xac - I2S
- ENET_IRQHandler, // 44, 0xb0 - Ethernet
- RIT_IRQHandler, // 45, 0xb4 - RITINT
- MCPWM_IRQHandler, // 46, 0xb8 - Motor Control PWM
- QEI_IRQHandler, // 47, 0xbc - Quadrature Encoder
- PLL1_IRQHandler, // 48, 0xc0 - PLL1 (USB PLL)
- USBActivity_IRQHandler, // 49, 0xc4 - USB Activity interrupt to wakeup
- CANActivity_IRQHandler, // 50, 0xc8 - CAN Activity interrupt to wakeup
-};
-
-//*****************************************************************************
-// Functions to carry out the initialization of RW and BSS data sections. These
-// are written as separate functions rather than being inlined within the
-// ResetISR() function in order to cope with MCUs with multiple banks of
-// memory.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int *pulSrc = (unsigned int*) romstart;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = *pulSrc++;
-}
-
-__attribute__ ((section(".after_vectors")))
-void bss_init(unsigned int start, unsigned int len) {
- unsigned int *pulDest = (unsigned int*) start;
- unsigned int loop;
- for (loop = 0; loop < len; loop = loop + 4)
- *pulDest++ = 0;
-}
-
-#ifndef USE_OLD_STYLE_DATA_BSS_INIT
-//*****************************************************************************
-// The following symbols are constructs generated by the linker, indicating
-// the location of various points in the "Global Section Table". This table is
-// created by the linker via the Code Red managed linker script mechanism. It
-// contains the load address, execution address and length of each RW data
-// section and the execution and length of each BSS (zero initialized) section.
-//*****************************************************************************
-extern unsigned int __data_section_table;
-extern unsigned int __data_section_table_end;
-extern unsigned int __bss_section_table;
-extern unsigned int __bss_section_table_end;
-#else
-//*****************************************************************************
-// The following symbols are constructs generated by the linker, indicating
-// the load address, execution address and length of the RW data section and
-// the execution and length of the BSS (zero initialized) section.
-// Note that these symbols are not normally used by the managed linker script
-// mechanism in Red Suite/LPCXpresso 3.6 (Windows) and LPCXpresso 3.8 (Linux).
-// They are provide here simply so this startup code can be used with earlier
-// versions of Red Suite which do not support the more advanced managed linker
-// script mechanism introduced in the above version. To enable their use,
-// define "USE_OLD_STYLE_DATA_BSS_INIT".
-//*****************************************************************************
-extern unsigned int _etext;
-extern unsigned int _data;
-extern unsigned int _edata;
-extern unsigned int _bss;
-extern unsigned int _ebss;
-#endif
-
-
-//*****************************************************************************
-// Reset entry point for your code.
-// Sets up a simple runtime environment and initializes the C/C++
-// library.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void
-ResetISR(void) {
-
-#ifndef USE_OLD_STYLE_DATA_BSS_INIT
- //
- // Copy the data sections from flash to SRAM.
- //
- unsigned int LoadAddr, ExeAddr, SectionLen;
- unsigned int *SectionTableAddr;
-
- // Load base address of Global Section Table
- SectionTableAddr = &__data_section_table;
-
- // Copy the data sections from flash to SRAM.
- while (SectionTableAddr < &__data_section_table_end) {
- LoadAddr = *SectionTableAddr++;
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- data_init(LoadAddr, ExeAddr, SectionLen);
- }
- // At this point, SectionTableAddr = &__bss_section_table;
- // Zero fill the bss segment
- while (SectionTableAddr < &__bss_section_table_end) {
- ExeAddr = *SectionTableAddr++;
- SectionLen = *SectionTableAddr++;
- bss_init(ExeAddr, SectionLen);
- }
-#else
- // Use Old Style Data and BSS section initialization.
- // This will only initialize a single RAM bank.
- unsigned int * LoadAddr, *ExeAddr, *EndAddr, SectionLen;
-
- // Copy the data segment from flash to SRAM.
- LoadAddr = &_etext;
- ExeAddr = &_data;
- EndAddr = &_edata;
- SectionLen = (void*)EndAddr - (void*)ExeAddr;
- data_init((unsigned int)LoadAddr, (unsigned int)ExeAddr, SectionLen);
- // Zero fill the bss segment
- ExeAddr = &_bss;
- EndAddr = &_ebss;
- SectionLen = (void*)EndAddr - (void*)ExeAddr;
- bss_init ((unsigned int)ExeAddr, SectionLen);
-#endif
-
-#ifdef __USE_CMSIS
- SystemInit();
-#endif
-
-#if defined (__cplusplus)
- //
- // Call C++ library initialisation
- //
- __libc_init_array();
-#endif
-
-#if defined (__REDLIB__)
- // Call the Redlib library, which in turn calls main()
- __main() ;
-#else
- main();
-#endif
-
- //
- // main() shouldn't return, but if it does, we'll just enter an infinite loop
- //
- while (1) {
- ;
- }
-}
-
-//*****************************************************************************
-// Default exception handlers. Override the ones here by defining your own
-// handler routines in your application code.
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void NMI_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void HardFault_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void MemManage_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void BusFault_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void UsageFault_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SVCall_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void DebugMon_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void PendSV_Handler(void)
-{
- while(1)
- {
- }
-}
-__attribute__ ((section(".after_vectors")))
-void SysTick_Handler(void)
-{
- while(1)
- {
- }
-}
-
-//*****************************************************************************
-//
-// Processor ends up here if an unexpected interrupt occurs or a specific
-// handler is not present in the application code.
-//
-//*****************************************************************************
-__attribute__ ((section(".after_vectors")))
-void IntDefaultHandler(void)
-{
- while(1)
- {
- }
-}
diff --git a/hw/bsp/mcb1800/board_mcb1800.c b/hw/bsp/mcb1800/board_mcb1800.c
new file mode 100644
index 000000000..a321ffe61
--- /dev/null
+++ b/hw/bsp/mcb1800/board_mcb1800.c
@@ -0,0 +1,245 @@
+/**************************************************************************/
+/*!
+ @file board_mcb1800.c
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2018, hathach (tinyusb.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. Neither the name of the copyright holders 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 ''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 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.
+
+ This file is part of the tinyusb stack.
+*/
+/**************************************************************************/
+
+#ifdef BOARD_MCB1800
+
+#include "../board.h"
+#include "tusb.h"
+
+#define LED_PORT 6
+#define LED_PIN 24
+
+//--------------------------------------------------------------------+
+// MACRO TYPEDEF CONSTANT ENUM DECLARATION
+//--------------------------------------------------------------------+
+/* System configuration variables used by chip driver */
+const uint32_t ExtRateIn = 0;
+const uint32_t OscRateIn = 12000000;
+
+static const PINMUX_GRP_T pinmuxing[] =
+{
+ /* Board LEDs */
+ {0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)},
+ {0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)},
+ {0xD, 12, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)},
+ {0xD, 13, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)},
+ {0xD, 14, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)},
+ {0x9, 0, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0)},
+ {0x9, 1, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0)},
+ {0x9, 2, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0)},
+
+ /* I2S */
+ {0x3, 0, (SCU_PINIO_FAST | SCU_MODE_FUNC2)},
+ {0x6, 0, (SCU_PINIO_FAST | SCU_MODE_FUNC4)},
+ {0x7, 2, (SCU_PINIO_FAST | SCU_MODE_FUNC2)},
+ {0x6, 2, (SCU_PINIO_FAST | SCU_MODE_FUNC3)},
+ {0x7, 1, (SCU_PINIO_FAST | SCU_MODE_FUNC2)},
+ {0x6, 1, (SCU_PINIO_FAST | SCU_MODE_FUNC3)},
+};
+
+/* Pin clock mux values, re-used structure, value in first index is meaningless */
+static const PINMUX_GRP_T pinclockmuxing[] =
+{
+ {0, 0, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+ {0, 1, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+ {0, 2, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+ {0, 3, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)},
+};
+
+
+/*------------------------------------------------------------------*/
+/* BOARD API
+ *------------------------------------------------------------------*/
+// Invoked by startup code
+void SystemInit(void)
+{
+ /* Setup system level pin muxing */
+ Chip_SCU_SetPinMuxing(pinmuxing, sizeof(pinmuxing) / sizeof(PINMUX_GRP_T));
+
+ /* Clock pins only, group field not used */
+ for (int i = 0; i < (sizeof(pinclockmuxing) / sizeof(pinclockmuxing[0])); i++)
+ {
+ Chip_SCU_ClockPinMuxSet(pinclockmuxing[i].pinnum, pinclockmuxing[i].modefunc);
+ }
+
+ Chip_SetupXtalClocking();
+}
+
+void board_init(void)
+{
+ SystemCoreClockUpdate();
+
+#if CFG_TUSB_OS == OPT_OS_NONE
+ SysTick_Config( SystemCoreClock / BOARD_TICKS_HZ );
+#endif
+
+ Chip_GPIO_Init(LPC_GPIO_PORT);
+
+ //------------- LED -------------//
+ /* Port and bit mapping for LEDs on GPIOs */
+ const uint8_t ledports[] = {6, 6, 6, 6, 6, 4, 4, 4};
+ const uint8_t ledbits[] = {24, 25, 26, 27, 28, 12, 13, 14};
+
+ for (int i = 0; i < (sizeof(ledports) / sizeof(ledports[0])); i++)
+ {
+ Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, ledports[i], ledbits[i]);
+ Chip_GPIO_SetPinState(LPC_GPIO_PORT, LED_PORT, LED_PIN, false);
+ }
+
+#if 0
+ //------------- BUTTON -------------//
+ for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++)
+ {
+ scu_pinmux(buttons[i].mux_port, buttons[i].mux_pin, GPIO_NOPULL, FUNC0);
+ GPIO_SetDir(buttons[i].gpio_port, TU_BIT(buttons[i].gpio_pin), 0);
+ }
+
+ //------------- UART -------------//
+ scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_TX, MD_PDN, FUNC1);
+ scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_RX, MD_PLN | MD_EZI | MD_ZI, FUNC1);
+
+ UART_CFG_Type UARTConfigStruct;
+ UART_ConfigStructInit(&UARTConfigStruct);
+ UARTConfigStruct.Baud_rate = CFG_UART_BAUDRATE;
+ UARTConfigStruct.Clock_Speed = 0;
+
+ UART_Init(BOARD_UART_PORT, &UARTConfigStruct);
+ UART_TxCmd(BOARD_UART_PORT, ENABLE); // Enable UART Transmit
+#endif
+
+ //------------- USB -------------//
+ enum {
+ USBMODE_DEVICE = 2,
+ USBMODE_HOST = 3
+ };
+
+ enum {
+ USBMODE_VBUS_LOW = 0,
+ USBMODE_VBUS_HIGH = 1
+ };
+
+ // USB0
+#if CFG_TUSB_RHPORT0_MODE
+ Chip_USB0_Init();
+
+ // Reset controller
+ LPC_USB0->USBCMD_D |= 0x02;
+ while( LPC_USB0->USBCMD_D & 0x02 ) {}
+
+ // Set mode
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
+ LPC_USB0->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB0->USBMODE_D = USBMODE_DEVICE;
+ LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
+ #endif
+#endif
+
+ // USB1
+#if CFG_TUSB_RHPORT1_MODE
+ Chip_USB1_Init();
+
+ // Reset controller
+ LPC_USB1->USBCMD_D |= 0x02;
+ while( LPC_USB1->USBCMD_D & 0x02 ) {}
+
+ // Set mode
+ #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ LPC_USB1->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB1->USBMODE_D = USBMODE_DEVICE;
+ #endif
+
+ // USB1 as fullspeed
+ LPC_USB1->PORTSC1_D |= (1<<24);
+#endif
+}
+
+//------------- LED -------------//
+void board_led_control(bool state)
+{
+ Chip_GPIO_SetPinState(LPC_GPIO_PORT, LED_PORT, LED_PIN, state);
+}
+
+//------------- Buttons -------------//
+static bool button_read(uint8_t id)
+{
+// return !TU_BIT_TEST( GPIO_ReadValue(buttons[id].gpio_port), buttons[id].gpio_pin ); // button is active low
+}
+
+uint32_t board_buttons(void)
+{
+ uint32_t result = 0;
+
+// for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? TU_BIT(i) : 0);
+
+ return result;
+}
+
+
+//------------- UART -------------//
+uint8_t board_uart_getchar(void)
+{
+ //return UART_ReceiveByte(BOARD_UART_PORT);
+}
+void board_uart_putchar(uint8_t c)
+{
+ //UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
+}
+
+/*------------------------------------------------------------------*/
+/* TUSB HAL MILLISECOND
+ *------------------------------------------------------------------*/
+#if CFG_TUSB_OS == OPT_OS_NONE
+
+volatile uint32_t system_ticks = 0;
+
+void SysTick_Handler (void)
+{
+ system_ticks++;
+}
+
+uint32_t tusb_hal_millis(void)
+{
+ return board_tick2ms(system_ticks);
+}
+
+#endif
+
+#endif
+
diff --git a/hw/bsp/mcb1800/board_mcb1800.h b/hw/bsp/mcb1800/board_mcb1800.h
new file mode 100644
index 000000000..ac8bf124d
--- /dev/null
+++ b/hw/bsp/mcb1800/board_mcb1800.h
@@ -0,0 +1,51 @@
+/**************************************************************************/
+/*!
+ @file board_mcb1800.h
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2018, hathach (tinyusb.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. Neither the name of the copyright holders 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 ''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 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.
+
+ This file is part of the tinyusb stack.
+*/
+/**************************************************************************/
+#ifndef BOARD_MCB1800_H_
+#define BOARD_MCB1800_H_
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#include "chip.h"
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* BOARD_MCB1800_H_ */
diff --git a/hw/bsp/metro_m0_express/board_metro_m0_express.c b/hw/bsp/metro_m0_express/board_metro_m0_express.c
index db3f03a61..2471132e5 100644
--- a/hw/bsp/metro_m0_express/board_metro_m0_express.c
+++ b/hw/bsp/metro_m0_express/board_metro_m0_express.c
@@ -52,7 +52,7 @@
//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
-#define LED_STATE_ON 1
+#define LED_PIN 17
/* Referenced GCLKs, should be initialized firstly */
#define _GCLK_INIT_1ST (1 << 0 | 1 << 1)
@@ -74,8 +74,8 @@ void board_init(void)
_gclk_init_generators_by_fref(_GCLK_INIT_LAST);
// Led init
- gpio_set_pin_direction(BOARD_LED0, GPIO_DIRECTION_OUT);
- gpio_set_pin_level(BOARD_LED0, 1-LED_STATE_ON);
+ gpio_set_pin_direction(LED_PIN, GPIO_DIRECTION_OUT);
+ gpio_set_pin_level(LED_PIN, 0);
#if CFG_TUSB_OS == OPT_OS_NONE
// Tick init, samd SystemCoreClock may not correct
@@ -110,9 +110,9 @@ void board_init(void)
_gclk_enable_channel(TCC0_GCLK_ID, GCLK_CLKCTRL_GEN_GCLK0_Val);
}
-void board_led_control(uint32_t led_id, bool state)
+void board_led_control(bool state)
{
- gpio_set_pin_level(led_id, state ? LED_STATE_ON : (1-LED_STATE_ON));
+ gpio_set_pin_level(LED_PIN, state);
}
diff --git a/hw/bsp/metro_m0_express/board_metro_m0_express.h b/hw/bsp/metro_m0_express/board_metro_m0_express.h
index b727d144c..dc7721fab 100644
--- a/hw/bsp/metro_m0_express/board_metro_m0_express.h
+++ b/hw/bsp/metro_m0_express/board_metro_m0_express.h
@@ -42,8 +42,7 @@
extern "C" {
#endif
-#define BOARD_LED_NUM 1
-#define BOARD_LED0 17
+#include "sam.h"
#ifdef __cplusplus
}
diff --git a/hw/bsp/metro_m4_express/board_metro_m4_express.c b/hw/bsp/metro_m4_express/board_metro_m4_express.c
index 2bee1b84f..dbc322797 100644
--- a/hw/bsp/metro_m4_express/board_metro_m4_express.c
+++ b/hw/bsp/metro_m4_express/board_metro_m4_express.c
@@ -49,7 +49,7 @@
//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
-#define LED_STATE_ON 1
+#define LED_PIN 16
/* Referenced GCLKs, should be initialized firstly */
#define _GCLK_INIT_1ST 0xFFFFFFFF
@@ -72,8 +72,8 @@ void board_init(void)
_gclk_init_generators_by_fref(_GCLK_INIT_LAST);
// Led init
- gpio_set_pin_direction(BOARD_LED0, GPIO_DIRECTION_OUT);
- gpio_set_pin_level(BOARD_LED0, 1 - LED_STATE_ON);
+ gpio_set_pin_direction(LED_PIN, GPIO_DIRECTION_OUT);
+ gpio_set_pin_level(LED_PIN, 0);
// Systick init
#if CFG_TUSB_OS == OPT_OS_NONE
@@ -100,9 +100,9 @@ void board_init(void)
gpio_set_pin_function(PIN_PA25, PINMUX_PA25H_USB_DP);
}
-void board_led_control(uint32_t led_id, bool state)
+void board_led_control(bool state)
{
- gpio_set_pin_level(led_id, state ? LED_STATE_ON : (1-LED_STATE_ON));
+ gpio_set_pin_level(LED_PIN, state);
}
diff --git a/hw/bsp/metro_m4_express/board_metro_m4_express.h b/hw/bsp/metro_m4_express/board_metro_m4_express.h
index a50d71b16..27ff91937 100644
--- a/hw/bsp/metro_m4_express/board_metro_m4_express.h
+++ b/hw/bsp/metro_m4_express/board_metro_m4_express.h
@@ -42,8 +42,7 @@
extern "C" {
#endif
-#define BOARD_LED_NUM 1
-#define BOARD_LED0 16
+#include "sam.h"
#ifdef __cplusplus
}
diff --git a/hw/bsp/ngx/board_ngx4330.c b/hw/bsp/ngx/board_ngx4330.c
deleted file mode 100644
index d82decbea..000000000
--- a/hw/bsp/ngx/board_ngx4330.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_ngx4330.c
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#include "../board.h"
-
-#ifdef BOARD_NGX4330
-
-#define BOARD_UART_PORT LPC_USART0
-
-const static struct {
- uint8_t mux_port;
- uint8_t mux_pin;
-
- uint8_t gpio_port;
- uint8_t gpio_pin;
-}leds[] = { {2, 11, 1, 11}, {2, 12, 1,12} };
-
-enum {
- BOARD_MAX_LEDS = sizeof(leds) / sizeof(leds[0])
-};
-
-const static struct {
- uint8_t mux_port;
- uint8_t mux_pin;
-
- uint8_t gpio_port;
- uint8_t gpio_pin;
-}buttons[] = { {0x02, 7, 0, 7 } };
-
-enum {
- BOARD_BUTTON_COUNT = sizeof(buttons) / sizeof(buttons[0])
-};
-
-void board_init(void)
-{
- CGU_Init();
-
-#if CFG_TUSB_OS == OPT_OS_NONE // TODO may move to main.c
- SysTick_Config( CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/BOARD_TICKS_HZ ); /* 1 ms Timer */
-#endif
-
- //------------- USB Bus power HOST ONLY-------------//
- scu_pinmux(0x1, 7, MD_PUP | MD_EZI, FUNC4); // P1_7 USB0_PWR_EN, USB0 VBus function Xplorer
-
- scu_pinmux(0x2, 6, MD_PUP | MD_EZI, FUNC4); // P2_6 is configured as GPIO5[6] for USB1_PWR_EN
- GPIO_SetDir (5, BIT_(6), 1); // GPIO5[6] is output
- GPIO_SetValue (5, BIT_(6)); // GPIO5[6] output high
-
- //------------- LED -------------//
- for (uint8_t i=0; i<BOARD_MAX_LEDS; i++)
- {
- scu_pinmux(leds[i].mux_port, leds[i].mux_pin, MD_PUP|MD_EZI|MD_ZI, FUNC0);
- GPIO_SetDir(leds[i].gpio_port, BIT_(leds[i].gpio_pin), 1); // output
- }
-
- //------------- BUTTONS -------------//
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++)
- {
- scu_pinmux(buttons[i].mux_port, buttons[i].mux_pin, GPIO_NOPULL, FUNC0);
- GPIO_SetDir(buttons[i].gpio_port, BIT_(buttons[i].gpio_pin), 0);
- }
-
- //------------- UART init -------------//
- scu_pinmux(0x6 ,4, MD_PDN | MD_EZI, FUNC2); // UART0_TXD
- scu_pinmux(0x6 ,5, MD_PDN | MD_EZI, FUNC2); // UART0_RXD
-
- UART_CFG_Type UARTConfigStruct;
- UART_ConfigStructInit(&UARTConfigStruct); // default: baud = 9600, 8 bit data, 1 stop bit, no parity
- UARTConfigStruct.Baud_rate = CFG_UART_BAUDRATE; // Re-configure baudrate
- UARTConfigStruct.Clock_Speed = 0;
-
- UART_Init(BOARD_UART_PORT, &UARTConfigStruct);
- UART_TxCmd(BOARD_UART_PORT, ENABLE); // Enable UART
-}
-
-//--------------------------------------------------------------------+
-// LEDS
-//--------------------------------------------------------------------+
-void board_leds(uint32_t on_mask, uint32_t off_mask)
-{
- for (uint32_t i=0; i<BOARD_MAX_LEDS; i++)
- {
- if ( on_mask & BIT_(i))
- {
- GPIO_SetValue(leds[i].gpio_port, BIT_(leds[i].gpio_pin));
- }else if ( off_mask & BIT_(i)) // on_mask take precedence over off_mask
- {
- GPIO_ClearValue(leds[i].gpio_port, BIT_(leds[i].gpio_pin));
- }
- }
-}
-
-//--------------------------------------------------------------------+
-// BUTTONS
-//--------------------------------------------------------------------+
-static bool button_read(uint8_t id)
-{
- return !BIT_TEST_( GPIO_ReadValue(buttons[id].gpio_port), buttons[id].gpio_pin ); // button is active low
-}
-
-uint32_t board_buttons(void)
-{
- uint32_t result = 0;
-
- for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) result |= (button_read(i) ? BIT_(i) : 0);
-
- return result;
-}
-
-//--------------------------------------------------------------------+
-// UART
-//--------------------------------------------------------------------+
-uint8_t board_uart_getchar(void)
-{
- return UART_ReceiveByte(BOARD_UART_PORT);
-}
-
-void board_uart_putchar(uint8_t c)
-{
- UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
-}
-
-#endif
diff --git a/hw/bsp/ngx/board_ngx4330.h b/hw/bsp/ngx/board_ngx4330.h
deleted file mode 100644
index c5e2d0e26..000000000
--- a/hw/bsp/ngx/board_ngx4330.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**************************************************************************/
-/*!
- @file board_ngx4330.h
- @author hathach (tinyusb.org)
-
- @section LICENSE
-
- Software License Agreement (BSD License)
-
- Copyright (c) 2013, hathach (tinyusb.org)
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. 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.
- 3. Neither the name of the copyright holders 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 ''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 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.
-
- This file is part of the tinyusb stack.
-*/
-/**************************************************************************/
-
-#ifndef _TUSB_BOARD_NGX4330_H_
-#define _TUSB_BOARD_NGX4330_H_
-
-#include "LPC43xx.h"
-#include "lpc43xx_scu.h"
-#include "lpc43xx_cgu.h"
-#include "lpc43xx_gpio.h"
-#include "lpc43xx_uart.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#define CFG_PRINTF_TARGET PRINTF_TARGET_UART
-//#define CFG_PRINTF_TARGET PRINTF_TARGET_SWO
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* _TUSB_BOARD_NGX4330_H_ */
diff --git a/hw/bsp/pca10056/board_pca10056.c b/hw/bsp/pca10056/board_pca10056.c
index e34ed27fa..dc695deda 100644
--- a/hw/bsp/pca10056/board_pca10056.c
+++ b/hw/bsp/pca10056/board_pca10056.c
@@ -46,6 +46,7 @@
/*------------------------------------------------------------------*/
/* MACRO TYPEDEF CONSTANT ENUM
*------------------------------------------------------------------*/
+#define LED_PIN 13
#define LED_STATE_ON 0
uint8_t _button_pins[] = { 11, 12, 24, 25 };
@@ -92,15 +93,8 @@ void board_init(void)
NRF_CLOCK->TASKS_LFCLKSTART = 1UL;
// LEDs
- nrf_gpio_cfg_output(BOARD_LED0);
- nrf_gpio_cfg_output(BOARD_LED1);
- nrf_gpio_cfg_output(BOARD_LED2);
- nrf_gpio_cfg_output(BOARD_LED3);
-
- board_led_control(BOARD_LED0, false);
- board_led_control(BOARD_LED1, false);
- board_led_control(BOARD_LED2, false);
- board_led_control(BOARD_LED3, false);
+ nrf_gpio_cfg_output(LED_PIN);
+ board_led_control(false);
// Button
for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) nrf_gpio_cfg_input(_button_pins[i], NRF_GPIO_PIN_PULLUP);
@@ -223,9 +217,9 @@ void board_init(void)
}
}
-void board_led_control(uint32_t led_id, bool state)
+void board_led_control(bool state)
{
- nrf_gpio_pin_write(led_id, state ? LED_STATE_ON : (1-LED_STATE_ON));
+ nrf_gpio_pin_write(LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
}
uint32_t board_buttons(void)
@@ -248,7 +242,7 @@ uint8_t board_uart_getchar(void)
void board_uart_putchar(uint8_t c)
{
-
+ (void) c;
}
#endif
diff --git a/hw/bsp/pca10056/board_pca10056.h b/hw/bsp/pca10056/board_pca10056.h
index b2041f747..6f0dcf33c 100644
--- a/hw/bsp/pca10056/board_pca10056.h
+++ b/hw/bsp/pca10056/board_pca10056.h
@@ -45,12 +45,6 @@
extern "C" {
#endif
-#define BOARD_LED_NUM 4
-#define BOARD_LED0 13
-#define BOARD_LED1 14
-#define BOARD_LED2 15
-#define BOARD_LED3 16
-
// Flash type used for MSC example
#define BOARD_MSC_FLASH_QSPI
#define BOARD_MSC_FLASH_SIZE (8*1024*1024)
diff --git a/hw/bsp/readme.md b/hw/bsp/readme.md
index f6c0f619c..b4105046f 100644
--- a/hw/bsp/readme.md
+++ b/hw/bsp/readme.md
@@ -2,19 +2,28 @@
## Supported Boards ##
-This code base already had supported for a handful of boards. However due to my limited collection, **only bold ones are (probably) guaranteed to run out of the box**. Other are merely implemented based on their schematics and needed help from you to make it work.
+This code base already had supported for a handful of following boards
### NXP MCU ###
-- [LPCXpresso 11u14](http://www.embeddedartists.com/products/lpcxpresso/lpc11U14_xpr.php) with base board (for some peripherals to work)
-- [<b>LPCXpresso 1347</b>](http://www.embeddedartists.com/products/lpcxpresso/lpc1347_xpr.php) with base board (for some peripherals to work)
-- [<b>LPCXpresso 1769</b>](http://www.embeddedartists.com/products/lpcxpresso/lpc1347_xpr.php) with base board (for some peripherals to work)
-- [<b>Embedded Artists LPC4357 OEM & Base board</b>](http://www.embeddedartists.com/products/kits/lpc4357_kit.php)
-- [<b>NGX LPC4330 Explorer</b>](http://shop.ngxtechnologies.com/product_info.php?products_id=104)
-- [Keil MCB4357 Evaluation Board](http://www.keil.com/mcb4300)
+- [LPCXpresso 11U68](https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc11u68:OM13058)
+- [LPCXpresso 1347](https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc1347:OM13045)
+- [LPCXpresso 1769](https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc1769:OM13000)
+- [Keil MCB1800 Evaluation Board](http://www.keil.com/mcb1800)
+- [Embedded Artists LPC4088 Quick Start board](https://www.embeddedartists.com/products/lpc4088-quickstart-board)
+- [Embedded Artists LPC4357 Developer Kit](http://www.embeddedartists.com/products/kits/lpc4357_kit.php)
+
+### MicroChip SAMD ###
+
+- [Adafruit Metro M0 Express](https://www.adafruit.com/product/3505)
+- [Adafruit Metro M4 Express](https://www.adafruit.com/product/3382)
+
+### Nordic nRF52840 ###
+
+- [nRF52840-DK (aka pca10056)](https://www.nordicsemi.com/eng/Products/nRF52840-DK)
## Add your own board ##
If you don't possess any of supported board above. Don't worry you can easily implemented your own one by following this guide as long as the mcu is supported.
-**Guide to implement a new board is coming soon** ... \ No newline at end of file
+**Guide to implement a new board is coming soon** ...