From c7a343c1721124be84ce84fd8d60c95da86172e4 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Thu, 7 Jul 2016 08:37:51 +0000 Subject: QSPI templates. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9685 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/common/platform.mk | 85 ---------------- os/hal/src/hal_usb.c | 4 +- os/hal/templates/hal_qspi_lld.c | 208 ++++++++++++++++++++++++++++++++++++++++ os/hal/templates/hal_qspi_lld.h | 158 ++++++++++++++++++++++++++++++ os/hal/templates/platform.mk | 89 +++++++++++++++++ 5 files changed, 457 insertions(+), 87 deletions(-) delete mode 100644 os/hal/ports/common/platform.mk create mode 100644 os/hal/templates/hal_qspi_lld.c create mode 100644 os/hal/templates/hal_qspi_lld.h create mode 100644 os/hal/templates/platform.mk (limited to 'os') diff --git a/os/hal/ports/common/platform.mk b/os/hal/ports/common/platform.mk deleted file mode 100644 index 15d5a087a..000000000 --- a/os/hal/ports/common/platform.mk +++ /dev/null @@ -1,85 +0,0 @@ -# List of all the template platform files. -ifeq ($(USE_SMART_BUILD),yes) -HALCONF := $(strip $(shell cat halconf.h | egrep -e "\#define")) - -PLATFORMSRC := ${CHIBIOS}/os/hal/templates/hal_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_st_lld.c -ifneq ($(findstring HAL_USE_ADC TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_adc_lld.c -endif -ifneq ($(findstring HAL_USE_CAN TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_can_lld.c -endif -ifneq ($(findstring HAL_USE_DAC TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_dac_lld.c -endif -ifneq ($(findstring HAL_USE_EXT TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_ext_lld.c -endif -ifneq ($(findstring HAL_USE_GPT TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_gpt_lld.c -endif -ifneq ($(findstring HAL_USE_I2C TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_i2c_lld.c -endif -ifneq ($(findstring HAL_USE_I2S TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_i2s_lld.c -endif -ifneq ($(findstring HAL_USE_ICU TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_icu_lld.c -endif -ifneq ($(findstring HAL_USE_MAC TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_mac_lld.c -endif -ifneq ($(findstring HAL_USE_PAL TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_pal_lld.c -endif -ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_pwm_lld.c -endif -ifneq ($(findstring HAL_USE_RTC TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_rtc_lld.c -endif -ifneq ($(findstring HAL_USE_SDC TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_sdc_lld.c -endif -ifneq ($(findstring HAL_USE_SERIAL TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_serial_lld.c -endif -ifneq ($(findstring HAL_USE_SPI TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_spi_lld.c -endif -ifneq ($(findstring HAL_USE_UART TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_uart_lld.c -endif -ifneq ($(findstring HAL_USE_USB TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_usb_lld.c -endif -ifneq ($(findstring HAL_USE_WDG TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_wdg_lld.c -endif -else -PLATFORMSRC = ${CHIBIOS}/os/hal/templates/hal_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_adc_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_can_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_dac_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_ext_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_gpt_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_i2c_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_i2s_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_icu_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_mac_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_pal_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_pwm_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_rtc_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_sdc_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_serial_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_spi_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_st_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_uart_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_usb_lld.c \ - ${CHIBIOS}/os/hal/templates/hal_wdg_lld.c -endif - -# Required include directories -PLATFORMINC = ${CHIBIOS}/os/hal/templates diff --git a/os/hal/src/hal_usb.c b/os/hal/src/hal_usb.c index 261ff6822..028e42152 100644 --- a/os/hal/src/hal_usb.c +++ b/os/hal/src/hal_usb.c @@ -148,9 +148,9 @@ static bool default_handler(USBDriver *usbp) { procedure on the current configuration.*/ if (usbp->state == USB_ACTIVE) { /* Current configuration cleared.*/ - chSysLockFromISR (); + osalSysLockFromISR (); usbDisableEndpointsI(usbp); - chSysUnlockFromISR (); + osalSysUnlockFromISR (); usbp->configuration = 0U; usbp->state = USB_SELECTED; _usb_isr_invoke_event_cb(usbp, USB_EVENT_UNCONFIGURED); diff --git a/os/hal/templates/hal_qspi_lld.c b/os/hal/templates/hal_qspi_lld.c new file mode 100644 index 000000000..d380b6c20 --- /dev/null +++ b/os/hal/templates/hal_qspi_lld.c @@ -0,0 +1,208 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file hal_qspi_lld.c + * @brief PLATFORM QSPI subsystem low level driver source. + * + * @addtogroup QSPI + * @{ + */ + +#include "hal.h" + +#if HAL_USE_QSPI || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/** @brief QSPID1 driver identifier.*/ +#if PLATFORM_QSPI_USE_QSPI1 || defined(__DOXYGEN__) +QSPIDriver QSPID1; +#endif + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level QSPI driver initialization. + * + * @notapi + */ +void qspi_lld_init(void) { + +#if PLATFORM_QSPI_USE_QSPI1 + qspiObjectInit(&QSPID1); +#endif +} + +/** + * @brief Configures and activates the QSPI peripheral. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * + * @notapi + */ +void qspi_lld_start(QSPIDriver *qspip) { + + /* If in stopped state then full initialization.*/ + if (qspip->state == QSPI_STOP) { +#if PLATFORM_QSPI_USE_QSPI1 + if (&QSPID1 == qspip) { + } +#endif + + /* Common initializations.*/ + } + + /* QSPI setup and enable.*/ +} + +/** + * @brief Deactivates the QSPI peripheral. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * + * @notapi + */ +void qspi_lld_stop(QSPIDriver *qspip) { + + /* If in ready state then disables QSPI.*/ + if (qspip->state == QSPI_READY) { + + /* QSPI disable.*/ + + /* Stopping involved clocks.*/ +#if PLATFORM_QSPI_USE_QSPI1 + if (&QSPID1 == qspip) { + } +#endif + } +} + +/** + * @brief Sends a command without data phase. + * @post At the end of the operation the configured callback is invoked. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * @param[in] cmd pointer to the command descriptor + * + * @notapi + */ +void qspi_lld_command(QSPIDriver *qspip, const qspi_command_t *cmdp) { + + (void)qspip; + (void)cmdp; +} + +/** + * @brief Sends a command with data over the QSPI bus. + * @post At the end of the operation the configured callback is invoked. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * @param[in] cmd pointer to the command descriptor + * @param[in] n number of bytes to send + * @param[in] txbuf the pointer to the transmit buffer + * + * @notapi + */ +void qspi_lld_send(QSPIDriver *qspip, const qspi_command_t *cmdp, + size_t n, const uint8_t *txbuf) { + + (void)qspip; + (void)cmdp; + (void)n; + (void)txbuf; +} + +/** + * @brief Sends a command then receives data over the QSPI bus. + * @post At the end of the operation the configured callback is invoked. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * @param[in] cmd pointer to the command descriptor + * @param[in] n number of bytes to send + * @param[out] rxbuf the pointer to the receive buffer + * + * @notapi + */ +void qspi_lld_receive(QSPIDriver *qspip, const qspi_command_t *cmdp, + size_t n, uint8_t *rxbuf) { + + (void)qspip; + (void)cmdp; + (void)n; + (void)rxbuf; +} + +#if (QSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__) +/** + * @brief Maps in memory space a QSPI flash device. + * @pre The memory flash device must be initialized appropriately + * before mapping it in memory space. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * @param[in] cmdp pointer to the command descriptor + * @param[out] addrp pointer to the memory start address of the mapped + * flash or @p NULL + * + * @notapi + */ +void qspi_lld_map_flash(QSPIDriver *qspip, + const qspi_command_t *cmdp, + uint8_t **addrp) { + + (void)qspip; + (void)cmdp; + (void)addrp; +} + +/** + * @brief Maps in memory space a QSPI flash device. + * @post The memory flash device must be re-initialized for normal + * commands exchange. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * + * @notapi + */ +void qspi_lld_unmap_flash(QSPIDriver *qspip) { + + (void)qspip; +} +#endif /* QSPI_SUPPORTS_MEMMAP == TRUE */ + +#endif /* HAL_USE_QSPI */ + +/** @} */ diff --git a/os/hal/templates/hal_qspi_lld.h b/os/hal/templates/hal_qspi_lld.h new file mode 100644 index 000000000..18e07f9e6 --- /dev/null +++ b/os/hal/templates/hal_qspi_lld.h @@ -0,0 +1,158 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file hal_qspi_lld.h + * @brief PLATFORM QSPI subsystem low level driver header. + * + * @addtogroup QSPI + * @{ + */ + +#ifndef HAL_QSPI_LLD_H +#define HAL_QSPI_LLD_H + +#if HAL_USE_QSPI || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/** + * @name QSPI capabilities + * @{ + */ +#define QSPI_SUPPORTS_MEMMAP TRUE +/** @} */ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @name Configuration options + * @{ + */ +/** + * @brief QSPID1 driver enable switch. + * @details If set to @p TRUE the support for QSPID1 is included. + * @note The default is @p FALSE. + */ +#if !defined(PLATFORM_QSPI_USE_QSPI1) || defined(__DOXYGEN__) +#define PLATFORM_QSPI_USE_QSPI1 FALSE +#endif +/** @} */ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Type of a structure representing an QSPI driver. + */ +typedef struct QSPIDriver QSPIDriver; + +/** + * @brief Type of a QSPI notification callback. + * + * @param[in] qspip pointer to the @p QSPIDriver object triggering the + * callback + */ +typedef void (*qspicallback_t)(QSPIDriver *qspip); + +/** + * @brief Driver configuration structure. + */ +typedef struct { + /** + * @brief Operation complete callback or @p NULL. + */ + qspicallback_t end_cb; + /* End of the mandatory fields.*/ +} QSPIConfig; + +/** + * @brief Structure representing an QSPI driver. + */ +struct QSPIDriver { + /** + * @brief Driver state. + */ + qspistate_t state; + /** + * @brief Current configuration data. + */ + const QSPIConfig *config; +#if QSPI_USE_WAIT || defined(__DOXYGEN__) + /** + * @brief Waiting thread. + */ + thread_reference_t thread; +#endif /* QSPI_USE_WAIT */ +#if QSPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) + /** + * @brief Mutex protecting the peripheral. + */ + mutex_t mutex; +#endif /* QSPI_USE_MUTUAL_EXCLUSION */ +#if defined(QSPI_DRIVER_EXT_FIELDS) + QSPI_DRIVER_EXT_FIELDS +#endif + /* End of the mandatory fields.*/ +}; + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#if PLATFORM_QSPI_USE_QSPI1 && !defined(__DOXYGEN__) +extern QSPIDriver QSPID1; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + void qspi_lld_init(void); + void qspi_lld_start(QSPIDriver *qspip); + void qspi_lld_stop(QSPIDriver *qspip); + void qspi_lld_command(QSPIDriver *qspip, const qspi_command_t *cmdp); + void qspi_lld_send(QSPIDriver *qspip, const qspi_command_t *cmdp, + size_t n, const uint8_t *txbuf); + void qspi_lld_receive(QSPIDriver *qspip, const qspi_command_t *cmdp, + size_t n, uint8_t *rxbuf); +#if QSPI_SUPPORTS_MEMMAP == TRUE + void qspi_lld_map_flash(QSPIDriver *qspip, + const qspi_command_t *cmdp, + uint8_t **addrp); + void qspi_lld_unmap_flash(QSPIDriver *qspip); +#endif +#ifdef __cplusplus +} +#endif + +#endif /* HAL_USE_QSPI */ + +#endif /* HAL_QSPI_LLD_H */ + +/** @} */ diff --git a/os/hal/templates/platform.mk b/os/hal/templates/platform.mk new file mode 100644 index 000000000..dfa472e94 --- /dev/null +++ b/os/hal/templates/platform.mk @@ -0,0 +1,89 @@ +# List of all the template platform files. +ifeq ($(USE_SMART_BUILD),yes) +HALCONF := $(strip $(shell cat halconf.h | egrep -e "\#define")) + +PLATFORMSRC := ${CHIBIOS}/os/hal/templates/hal_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_st_lld.c +ifneq ($(findstring HAL_USE_ADC TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_adc_lld.c +endif +ifneq ($(findstring HAL_USE_CAN TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_can_lld.c +endif +ifneq ($(findstring HAL_USE_DAC TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_dac_lld.c +endif +ifneq ($(findstring HAL_USE_EXT TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_ext_lld.c +endif +ifneq ($(findstring HAL_USE_GPT TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_gpt_lld.c +endif +ifneq ($(findstring HAL_USE_I2C TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_i2c_lld.c +endif +ifneq ($(findstring HAL_USE_I2S TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_i2s_lld.c +endif +ifneq ($(findstring HAL_USE_ICU TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_icu_lld.c +endif +ifneq ($(findstring HAL_USE_MAC TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_mac_lld.c +endif +ifneq ($(findstring HAL_USE_PAL TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_pal_lld.c +endif +ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_pwm_lld.c +endif +ifneq ($(findstring HAL_USE_QSPI TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_qspi_lld.c +endif +ifneq ($(findstring HAL_USE_RTC TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_rtc_lld.c +endif +ifneq ($(findstring HAL_USE_SDC TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_sdc_lld.c +endif +ifneq ($(findstring HAL_USE_SERIAL TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_serial_lld.c +endif +ifneq ($(findstring HAL_USE_SPI TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_spi_lld.c +endif +ifneq ($(findstring HAL_USE_UART TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_uart_lld.c +endif +ifneq ($(findstring HAL_USE_USB TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_usb_lld.c +endif +ifneq ($(findstring HAL_USE_WDG TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_wdg_lld.c +endif +else +PLATFORMSRC = ${CHIBIOS}/os/hal/templates/hal_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_adc_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_can_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_dac_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_ext_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_gpt_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_i2c_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_i2s_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_icu_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_mac_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_pal_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_pwm_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_qspi_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_rtc_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_sdc_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_serial_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_spi_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_st_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_uart_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_usb_lld.c \ + ${CHIBIOS}/os/hal/templates/hal_wdg_lld.c +endif + +# Required include directories +PLATFORMINC = ${CHIBIOS}/os/hal/templates -- cgit v1.2.3