From 3eb7465e5ee8ea6298fcf134f853174fd9560a4c Mon Sep 17 00:00:00 2001 From: hathach Date: Mon, 10 Dec 2012 14:58:25 +0700 Subject: [PATCH] abstract usb enable/disable interrupt to hal layer --- demos/bsp/boards/board.h | 4 +- demos/bsp/boards/board_lpcxpresso1347.c | 4 +- demos/bsp/boards/board_ngx43xx.c | 8 +- .../{makefile.defs => _makefile.defs} | 0 tinyusb/common/common.h | 43 ++++++---- tinyusb/common/fifo.h | 2 +- tinyusb/device/dcd.c | 9 +-- tinyusb/{ => doxygen}/license.md | 0 tinyusb/{ => doxygen}/overview.md | 0 tinyusb/hal/hal.h | 18 +++++ tinyusb/hal/hal_lpc11uxx.h | 80 +++++++++++++++++++ tinyusb/hal/hal_lpc13uxx.h | 79 ++++++++++++++++++ 12 files changed, 218 insertions(+), 29 deletions(-) rename demos/device/keyboard/{makefile.defs => _makefile.defs} (100%) rename tinyusb/{ => doxygen}/license.md (100%) rename tinyusb/{ => doxygen}/overview.md (100%) create mode 100644 tinyusb/hal/hal_lpc11uxx.h create mode 100644 tinyusb/hal/hal_lpc13uxx.h diff --git a/demos/bsp/boards/board.h b/demos/bsp/boards/board.h index 11e4a2bc1..74030f2f0 100644 --- a/demos/bsp/boards/board.h +++ b/demos/bsp/boards/board.h @@ -60,8 +60,8 @@ #define TICKS_PER_SECOND 1000 /// n-th Bit -#ifndef BIT -#define BIT(n) (1 << (n)) +#ifndef BIT_ +#define BIT_(n) (1 << (n)) #endif #define BOARD_NGX43XX 1 diff --git a/demos/bsp/boards/board_lpcxpresso1347.c b/demos/bsp/boards/board_lpcxpresso1347.c index 206f5b69c..c937bb29f 100644 --- a/demos/bsp/boards/board_lpcxpresso1347.c +++ b/demos/bsp/boards/board_lpcxpresso1347.c @@ -59,7 +59,9 @@ void board_init(void) void board_leds(uint32_t mask, uint32_t state) { if (mask) - GPIOSetBitValue(CFG_LED_PORT, CFG_LED_PIN, mask & state); + { + GPIOSetBitValue(CFG_LED_PORT, CFG_LED_PIN, mask & state ? CFG_LED_ON : CFG_LED_OFF); + } } #endif diff --git a/demos/bsp/boards/board_ngx43xx.c b/demos/bsp/boards/board_ngx43xx.c index 7cb93584d..0f14214c2 100644 --- a/demos/bsp/boards/board_ngx43xx.c +++ b/demos/bsp/boards/board_ngx43xx.c @@ -76,7 +76,7 @@ void board_init(void) for (i=0; i (y)) ? (x) : (y)) -#endif +#define MAX_(x, y) (((x) > (y)) ? (x) : (y)) /// n-th Bit -#ifndef BIT -#define BIT(n) (1 << (n)) -#endif +#define BIT_(n) (1 << (n)) /// set n-th bit of x to 1 -#ifndef BIT_SET -#define BIT_SET(x, n) ( (x) | BIT(n) ) -#endif +#define BIT_SET_(x, n) ( (x) | BIT_(n) ) /// clear n-th bit of x -#ifndef BIT_CLR -#define BIT_CLR(x, n) ( (x) & (~BIT(n)) ) -#endif +#define BIT_CLR_(x, n) ( (x) & (~BIT_(n)) ) + +/// add hex represenation +#define HEX_(n) 0x##n##LU + +// internal macro of B8, B16, B32 +#define _B8__(x) ((x&0x0000000FLU)?1:0) \ + +((x&0x000000F0LU)?2:0) \ + +((x&0x00000F00LU)?4:0) \ + +((x&0x0000F000LU)?8:0) \ + +((x&0x000F0000LU)?16:0) \ + +((x&0x00F00000LU)?32:0) \ + +((x&0x0F000000LU)?64:0) \ + +((x&0xF0000000LU)?128:0) + +#define B8_(d) ((unsigned char)_B8__(HEX_(d))) +#define B16_(dmsb,dlsb) (((unsigned short)B8(dmsb)<<8) + B8(dlsb)) +#define B32_(dmsb,db2,db3,dlsb) \ + (((unsigned long)B8(dmsb)<<24) \ + + ((unsigned long)B8(db2)<<16) \ + + ((unsigned long)B8(db3)<<8) \ + + B8(dlsb)) + + //#if ( defined CFG_PRINTF_UART || defined CFG_PRINTF_USBCDC || defined CFG_PRINTF_DEBUG ) #if CFG_TUSB_DEBUG_LEVEL diff --git a/tinyusb/common/fifo.h b/tinyusb/common/fifo.h index d9e8389f1..7f8312e1f 100644 --- a/tinyusb/common/fifo.h +++ b/tinyusb/common/fifo.h @@ -74,7 +74,7 @@ void fifo_init(fifo_t* f, uint8_t* buffer, uint16_t size, bool overwritable, IRQ bool fifo_write(fifo_t* f, uint8_t data); bool fifo_read(fifo_t* f, uint8_t *data); uint16_t fifo_readArray(fifo_t* f, uint8_t * rx, uint16_t maxlen); -void fifo_clear(fifo_t*); +void fifo_clear(fifo_t *f); static inline bool fifo_isEmpty(fifo_t* f) { diff --git a/tinyusb/device/dcd.c b/tinyusb/device/dcd.c index 0310e7643..ee4ce361c 100644 --- a/tinyusb/device/dcd.c +++ b/tinyusb/device/dcd.c @@ -135,13 +135,8 @@ TUSB_Error_t dcd_init(uint8_t coreid) &membase , &memsize) ); #endif - // FIXME abstract to hal - /* Enable the USB interrupt */ -#if MCU == MCU_LPC13UXX - NVIC_EnableIRQ(USB_IRQ_IRQn); -#elif MCU == MCU_LPC11UXX - NVIC_EnableIRQ(USB_IRQn); -#endif + hal_interrupt_enable(); /* Enable the USB interrupt */ + /* Perform USB soft connect */ USBD_API->hw->Connect(g_hUsb, 1); #endif diff --git a/tinyusb/license.md b/tinyusb/doxygen/license.md similarity index 100% rename from tinyusb/license.md rename to tinyusb/doxygen/license.md diff --git a/tinyusb/overview.md b/tinyusb/doxygen/overview.md similarity index 100% rename from tinyusb/overview.md rename to tinyusb/doxygen/overview.md diff --git a/tinyusb/hal/hal.h b/tinyusb/hal/hal.h index 4229f6ea1..10fcc6155 100644 --- a/tinyusb/hal/hal.h +++ b/tinyusb/hal/hal.h @@ -55,6 +55,7 @@ extern "C" { #endif +#include "common/compiler/compiler.h" #include "common/errors.h" /** \brief USB hardware init @@ -66,6 +67,23 @@ */ TUSB_Error_t hal_init(); +/** + * Enable USB Interrupt + */ +static inline void hal_interrupt_enable() ATTR_ALWAYS_INLINE; + +/** + * Disable USB Interrupt + */ +static inline void hal_interrupt_disable() ATTR_ALWAYS_INLINE; + +#if MCU == MCU_LPC11UXX + #include "hal_lpc11uxx.h" +#elif MCU == MCU_LPC13UXX + #include "hal_lpc13uxx.h" +#elif MCU == MCU_LPC43XX + +#endif #ifdef __cplusplus } #endif diff --git a/tinyusb/hal/hal_lpc11uxx.h b/tinyusb/hal/hal_lpc11uxx.h new file mode 100644 index 000000000..f65f95ad0 --- /dev/null +++ b/tinyusb/hal/hal_lpc11uxx.h @@ -0,0 +1,80 @@ +/* + * hal_lpc11uxx.h + * + * Created on: Dec 10, 2012 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.net) + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 tiny usb stack. + */ + +/** \file + * \brief TBD + * + * \note TBD + */ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_HAL_LPC11UXX_H_ +#define _TUSB_HAL_LPC11UXX_H_ + +#include "common/mcu/mcu.h" + +#ifdef __cplusplus + extern "C" { +#endif + + +static inline void hal_interrupt_enable() +{ + NVIC_EnableIRQ(USB_IRQn); +} + +/** + * Disable USB Interrupt + */ +static inline void hal_interrupt_disable() +{ + NVIC_DisableIRQ(USB_IRQn); +} + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_HAL_LPC11UXX_H_ */ + +/** @} */ diff --git a/tinyusb/hal/hal_lpc13uxx.h b/tinyusb/hal/hal_lpc13uxx.h new file mode 100644 index 000000000..795782fc3 --- /dev/null +++ b/tinyusb/hal/hal_lpc13uxx.h @@ -0,0 +1,79 @@ +/* + * hal_lpc13uxx.h + * + * Created on: Dec 10, 2012 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.net) + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 tiny usb stack. + */ + +/** \file + * \brief TBD + * + * \note TBD + */ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_HAL_LPC13UXX_H_ +#define _TUSB_HAL_LPC13UXX_H_ + +#include "common/mcu/mcu.h" + +#ifdef __cplusplus + extern "C" { +#endif + +static inline void hal_interrupt_enable() +{ + NVIC_EnableIRQ(USB_IRQ_IRQn); +} + +/** + * Disable USB Interrupt + */ +static inline void hal_interrupt_disable() +{ + NVIC_DisableIRQ(USB_IRQ_IRQn); +} + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_HAL_LPC13UXX_H_ */ + +/** @} */