QSPI templates.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9685 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
53055a4b73
commit
c7a343c172
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
||||
/** @} */
|
|
@ -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 */
|
||||
|
||||
/** @} */
|
|
@ -37,6 +37,9 @@ 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
|
||||
|
@ -71,6 +74,7 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/templates/hal_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 \
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?fileVersion 4.0.0?>
|
||||
|
||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="0.1422654280">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1422654280" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||
|
|
|
@ -91,7 +91,7 @@ CHIBIOS = ../../..
|
|||
include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f4xx.mk
|
||||
# HAL-OSAL files (optional).
|
||||
include $(CHIBIOS)/os/hal/hal.mk
|
||||
include $(CHIBIOS)/os/hal/ports/common/platform.mk
|
||||
include $(CHIBIOS)/os/hal/templates/platform.mk
|
||||
include $(CHIBIOS)/os/hal/templates/board/board.mk
|
||||
include $(CHIBIOS)/os/hal/templates/osal/osal.mk
|
||||
# RTOS files (optional).
|
||||
|
|
Loading…
Reference in New Issue