From 4097d022542708ee2bc441552679834477a58cf6 Mon Sep 17 00:00:00 2001 From: hathach Date: Fri, 2 Mar 2018 15:20:55 +0700 Subject: refactor hal --- tinyusb/hal/hal.h | 10 ++-- tinyusb/hal/hal_lpc11uxx.c | 12 ++++ tinyusb/hal/hal_lpc11uxx.h | 11 ---- tinyusb/hal/hal_lpc13uxx.c | 15 +++++ tinyusb/hal/hal_lpc13uxx.h | 11 ---- tinyusb/hal/hal_lpc175x_6x.c | 14 ++++- tinyusb/hal/hal_lpc175x_6x.h | 14 ----- tinyusb/hal/hal_lpc43xx.c | 135 ------------------------------------------- tinyusb/hal/hal_lpc43xx.h | 64 -------------------- tinyusb/osal/osal_common.h | 8 --- tinyusb/tusb.h | 2 + 11 files changed, 44 insertions(+), 252 deletions(-) delete mode 100644 tinyusb/hal/hal_lpc43xx.c delete mode 100644 tinyusb/hal/hal_lpc43xx.h (limited to 'tinyusb') diff --git a/tinyusb/hal/hal.h b/tinyusb/hal/hal.h index 24e39289d..cdaa3c773 100644 --- a/tinyusb/hal/hal.h +++ b/tinyusb/hal/hal.h @@ -50,7 +50,7 @@ #include "common/compiler/compiler.h" // callback from tusb.h -extern void tusb_isr(uint8_t coreid); +void tusb_isr(uint8_t coreid); //--------------------------------------------------------------------+ // HAL API @@ -74,14 +74,14 @@ tusb_error_t hal_init(void); * \note Some MCUs such as NXP LPC43xx has multiple USB controllers. It is necessary to know which USB controller for * those MCUs. */ -static inline void hal_interrupt_enable(uint8_t coreid) ATTR_ALWAYS_INLINE; +void hal_interrupt_enable(uint8_t coreid); /** \brief Disable USB Interrupt on a specific USB Controller * \param[in] coreid is a zero-based index to identify USB controller's ID * \note Some MCUs such as NXP LPC43xx has multiple USB controllers. It is necessary to know which USB controller for * those MCUs. */ -static inline void hal_interrupt_disable(uint8_t coreid) ATTR_ALWAYS_INLINE; +void hal_interrupt_disable(uint8_t coreid); //--------------------------------------------------------------------+ // INCLUDE DRIVEN @@ -91,7 +91,7 @@ static inline void hal_interrupt_disable(uint8_t coreid) ATTR_ALWAYS_INLINE; #elif TUSB_CFG_MCU == MCU_LPC13UXX #include "hal_lpc13uxx.h" #elif TUSB_CFG_MCU == MCU_LPC43XX - #include "hal_lpc43xx.h" + #include "mcu/nxp/lpc43xx/usb/hal_lpc43xx.h" #elif TUSB_CFG_MCU == MCU_LPC175X_6X #include "hal_lpc175x_6x.h" #else @@ -102,8 +102,6 @@ static inline void hal_interrupt_disable(uint8_t coreid) ATTR_ALWAYS_INLINE; extern "C" { #endif - -static inline bool hal_debugger_is_attached(void) ATTR_PURE ATTR_ALWAYS_INLINE; static inline bool hal_debugger_is_attached(void) { // TODO check core M3/M4 defined instead diff --git a/tinyusb/hal/hal_lpc11uxx.c b/tinyusb/hal/hal_lpc11uxx.c index 8a8232904..36755bdd5 100644 --- a/tinyusb/hal/hal_lpc11uxx.c +++ b/tinyusb/hal/hal_lpc11uxx.c @@ -41,6 +41,18 @@ #if TUSB_CFG_MCU == MCU_LPC11UXX +void hal_interrupt_enable(uint8_t coreid) +{ + (void) coreid; // discard compiler's warning + NVIC_EnableIRQ(USB_IRQn); +} + +void hal_interrupt_disable(uint8_t coreid) +{ + (void) coreid; // discard compiler's warning + NVIC_DisableIRQ(USB_IRQn); +} + tusb_error_t hal_init(void) { // TODO remove magic number diff --git a/tinyusb/hal/hal_lpc11uxx.h b/tinyusb/hal/hal_lpc11uxx.h index d94aa3dd3..1fd20aff6 100644 --- a/tinyusb/hal/hal_lpc11uxx.h +++ b/tinyusb/hal/hal_lpc11uxx.h @@ -45,17 +45,6 @@ extern "C" { #endif -static inline void hal_interrupt_enable(uint8_t coreid) -{ - (void) coreid; // discard compiler's warning - NVIC_EnableIRQ(USB_IRQn); -} - -static inline void hal_interrupt_disable(uint8_t coreid) -{ - (void) coreid; // discard compiler's warning - NVIC_DisableIRQ(USB_IRQn); -} #ifdef __cplusplus } diff --git a/tinyusb/hal/hal_lpc13uxx.c b/tinyusb/hal/hal_lpc13uxx.c index 9f3361d35..afa67ff21 100644 --- a/tinyusb/hal/hal_lpc13uxx.c +++ b/tinyusb/hal/hal_lpc13uxx.c @@ -41,6 +41,18 @@ #if TUSB_CFG_MCU == MCU_LPC13UXX +void hal_interrupt_enable(uint8_t coreid) +{ + (void) coreid; // discard compiler's warning + NVIC_EnableIRQ(USB_IRQ_IRQn); +} + +void hal_interrupt_disable(uint8_t coreid) +{ + (void) coreid; // discard compiler's warning + NVIC_DisableIRQ(USB_IRQ_IRQn); +} + tusb_error_t hal_init(void) { // TODO remove magic number @@ -65,4 +77,7 @@ void USB_IRQHandler(void) tusb_isr(0); } + + + #endif diff --git a/tinyusb/hal/hal_lpc13uxx.h b/tinyusb/hal/hal_lpc13uxx.h index c5dc8afd4..07bf7f2bd 100644 --- a/tinyusb/hal/hal_lpc13uxx.h +++ b/tinyusb/hal/hal_lpc13uxx.h @@ -45,17 +45,6 @@ extern "C" { #endif -static inline void hal_interrupt_enable(uint8_t coreid) -{ - (void) coreid; // discard compiler's warning - NVIC_EnableIRQ(USB_IRQ_IRQn); -} - -static inline void hal_interrupt_disable(uint8_t coreid) -{ - (void) coreid; // discard compiler's warning - NVIC_DisableIRQ(USB_IRQ_IRQn); -} #ifdef __cplusplus } diff --git a/tinyusb/hal/hal_lpc175x_6x.c b/tinyusb/hal/hal_lpc175x_6x.c index c611656a6..f7f1d6a7d 100644 --- a/tinyusb/hal/hal_lpc175x_6x.c +++ b/tinyusb/hal/hal_lpc175x_6x.c @@ -41,9 +41,17 @@ #if TUSB_CFG_MCU == MCU_LPC175X_6X -#ifdef __CC_ARM -#pragma diag_suppress 66 // Suppress Keil warnings #66-D: enumeration value is out of "int" range -#endif +void hal_interrupt_enable(uint8_t coreid) +{ + (void) coreid; // discard compiler's warning + NVIC_EnableIRQ(USB_IRQn); +} + +void hal_interrupt_disable(uint8_t coreid) +{ + (void) coreid; // discard compiler's warning + NVIC_DisableIRQ(USB_IRQn); +} //--------------------------------------------------------------------+ // IMPLEMENTATION diff --git a/tinyusb/hal/hal_lpc175x_6x.h b/tinyusb/hal/hal_lpc175x_6x.h index 744454110..053c34442 100644 --- a/tinyusb/hal/hal_lpc175x_6x.h +++ b/tinyusb/hal/hal_lpc175x_6x.h @@ -46,20 +46,6 @@ extern "C" { #endif -//--------------------------------------------------------------------+ -// -//--------------------------------------------------------------------+ -static inline void hal_interrupt_enable(uint8_t coreid) -{ - (void) coreid; // discard compiler's warning - NVIC_EnableIRQ(USB_IRQn); -} - -static inline void hal_interrupt_disable(uint8_t coreid) -{ - (void) coreid; // discard compiler's warning - NVIC_DisableIRQ(USB_IRQn); -} #ifdef __cplusplus } diff --git a/tinyusb/hal/hal_lpc43xx.c b/tinyusb/hal/hal_lpc43xx.c deleted file mode 100644 index af6fba126..000000000 --- a/tinyusb/hal/hal_lpc43xx.c +++ /dev/null @@ -1,135 +0,0 @@ -/**************************************************************************/ -/*! - @file hal_lpc43xx.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 "common/common.h" -#include "hal.h" - -#if TUSB_CFG_MCU == MCU_LPC43XX - -#include "lpc43xx_cgu.h" -#include "lpc43xx_scu.h" - -enum { - LPC43XX_USBMODE_DEVICE = 2, - LPC43XX_USBMODE_HOST = 3 -}; - -enum { - LPC43XX_USBMODE_VBUS_LOW = 0, - LPC43XX_USBMODE_VBUS_HIGH = 1 -}; - -static tusb_error_t hal_controller_reset(uint8_t coreid) -{ // TODO timeout expired to prevent trap - volatile uint32_t * p_reg_usbcmd; - - p_reg_usbcmd = (coreid ? &LPC_USB1->USBCMD_D : &LPC_USB0->USBCMD_D); -// NXP chip powered with non-host mode --> sts bit is not correctly reflected - (*p_reg_usbcmd) |= BIT_(1); - -// timeout_timer_t timeout; -// timeout_set(&timeout, 2); // should not take longer the time to stop controller - while( ((*p_reg_usbcmd) & BIT_(1)) /*&& !timeout_expired(&timeout)*/) {} -// -// return timeout_expired(&timeout) ? TUSB_ERROR_OSAL_TIMEOUT : TUSB_ERROR_NONE; - return TUSB_ERROR_NONE; -} - -tusb_error_t hal_init(void) -{ - LPC_CREG->CREG0 &= ~(1<<5); /* Turn on the phy */ - - //------------- USB0 -------------// -#if TUSB_CFG_CONTROLLER_0_MODE - CGU_EnableEntity(CGU_CLKSRC_PLL0, DISABLE); /* Disable PLL first */ - ASSERT_INT( CGU_ERROR_SUCCESS, CGU_SetPLL0(), TUSB_ERROR_FAILED); /* the usb core require output clock = 480MHz */ - CGU_EntityConnect(CGU_CLKSRC_XTAL_OSC, CGU_CLKSRC_PLL0); - CGU_EnableEntity(CGU_CLKSRC_PLL0, ENABLE); /* Enable PLL after all setting is done */ - - // reset controller & set role - ASSERT_STATUS( hal_controller_reset(0) ); - - #if TUSB_CFG_CONTROLLER_0_MODE & TUSB_MODE_HOST - LPC_USB0->USBMODE_H = LPC43XX_USBMODE_HOST | (LPC43XX_USBMODE_VBUS_HIGH << 5); - #else // TODO OTG - LPC_USB0->USBMODE_D = LPC43XX_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)*/; - #if TUSB_CFG_DEVICE_FULLSPEED // TODO for easy testing - LPC_USB0->PORTSC1_D |= (1<<24); // force full speed - #endif - #endif -#endif - - //------------- USB1 -------------// -#if TUSB_CFG_CONTROLLER_1_MODE - // Host require to config P2_5, TODO confirm whether device mode require P2_5 or not - scu_pinmux(0x2, 5, MD_PLN | MD_EZI | MD_ZI, FUNC2); // USB1_VBUS monitor presence, must be high for bus reset occur - - /* connect CLK_USB1 to 60 MHz clock */ - CGU_EntityConnect(CGU_CLKSRC_PLL1, CGU_BASE_USB1); /* FIXME Run base BASE_USB1_CLK clock from PLL1 (assume PLL1 is 60 MHz, no division required) */ - LPC_SCU->SFSUSB = (TUSB_CFG_CONTROLLER_1_MODE & TUSB_MODE_HOST) ? 0x16 : 0x12; // enable USB1 with on-chip FS PHY - - ASSERT_STATUS( hal_controller_reset(1) ); - - #if TUSB_CFG_CONTROLLER_1_MODE & TUSB_MODE_HOST - LPC_USB1->USBMODE_H = LPC43XX_USBMODE_HOST | (LPC43XX_USBMODE_VBUS_HIGH << 5); - #else // TODO OTG - LPC_USB1->USBMODE_D = LPC43XX_USBMODE_DEVICE; - #endif - - LPC_USB1->PORTSC1_D |= (1<<24); // TODO abstract, force port to fullspeed -#endif - - return TUSB_ERROR_NONE; -} - -#if TUSB_CFG_CONTROLLER_0_MODE -void USB0_IRQHandler(void) -{ - tusb_isr(0); -} -#endif - -#if TUSB_CFG_CONTROLLER_1_MODE -void USB1_IRQHandler(void) -{ - tusb_isr(1); -} -#endif - -#endif diff --git a/tinyusb/hal/hal_lpc43xx.h b/tinyusb/hal/hal_lpc43xx.h deleted file mode 100644 index 899f14445..000000000 --- a/tinyusb/hal/hal_lpc43xx.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************/ -/*! - @file hal_lpc43xx.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_HAL_LPC43XX_H_ -#define _TUSB_HAL_LPC43XX_H_ - -#include "LPC43xx.h" -#include "lpc43xx_cgu.h" - -#ifdef __cplusplus - extern "C" { -#endif - -static inline void hal_interrupt_enable(uint8_t coreid) -{ - NVIC_EnableIRQ(coreid ? USB1_IRQn : USB0_IRQn); -} - -static inline void hal_interrupt_disable(uint8_t coreid) -{ - NVIC_DisableIRQ(coreid ? USB1_IRQn : USB0_IRQn); -} - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_HAL_LPC43XX_H_ */ - diff --git a/tinyusb/osal/osal_common.h b/tinyusb/osal/osal_common.h index 0a2608933..977b7d59d 100644 --- a/tinyusb/osal/osal_common.h +++ b/tinyusb/osal/osal_common.h @@ -48,10 +48,6 @@ #include "common/common.h" -#ifdef __CC_ARM -#pragma diag_suppress 66 // Suppress Keil warnings #66-D: enumeration value is out of "int" range -#endif - enum { OSAL_TIMEOUT_NOTIMEOUT = 0, // for use within ISR, return immediately @@ -59,10 +55,6 @@ enum OSAL_TIMEOUT_WAIT_FOREVER = 0xFFFFFFFF }; -#ifdef __CC_ARM -#pragma diag_default 66 // return Keil 66 to normal severity -#endif - static inline uint32_t osal_tick_from_msec(uint32_t msec) ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint32_t osal_tick_from_msec(uint32_t msec) { diff --git a/tinyusb/tusb.h b/tinyusb/tusb.h index f34749133..5eabf0666 100644 --- a/tinyusb/tusb.h +++ b/tinyusb/tusb.h @@ -102,6 +102,8 @@ */ tusb_error_t tusb_init(void); +void tusb_isr(uint8_t coreid); + #if TUSB_CFG_OS == TUSB_OS_NONE /** \brief Run all tinyusb's internal tasks (e.g host task, device task). * \note This function is only required when using no RTOS (\ref TUSB_CFG_OS == TUSB_OS_NONE). All the stack functions -- cgit v1.3.1