QSPI driver worked on a simple test case.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9484 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
998ff59d1c
commit
0cdde1845d
|
@ -44,7 +44,7 @@ endif
|
||||||
ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),)
|
ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),)
|
||||||
HALSRC += $(CHIBIOS)/os/hal/src/hal_pwm.c
|
HALSRC += $(CHIBIOS)/os/hal/src/hal_pwm.c
|
||||||
endif
|
endif
|
||||||
ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),)
|
ifneq ($(findstring HAL_USE_QSPI TRUE,$(HALCONF)),)
|
||||||
HALSRC += $(CHIBIOS)/os/hal/src/hal_qspi.c
|
HALSRC += $(CHIBIOS)/os/hal/src/hal_qspi.c
|
||||||
endif
|
endif
|
||||||
ifneq ($(findstring HAL_USE_RTC TRUE,$(HALCONF)),)
|
ifneq ($(findstring HAL_USE_RTC TRUE,$(HALCONF)),)
|
||||||
|
|
|
@ -141,16 +141,16 @@ typedef struct {
|
||||||
* @post At the end of the operation the configured callback is invoked.
|
* @post At the end of the operation the configured callback is invoked.
|
||||||
*
|
*
|
||||||
* @param[in] qspip pointer to the @p QSPIDriver object
|
* @param[in] qspip pointer to the @p QSPIDriver object
|
||||||
* @param[in] cmd pointer to the command descriptor
|
* @param[in] cmdp pointer to the command descriptor
|
||||||
*
|
*
|
||||||
* @iclass
|
* @iclass
|
||||||
*/
|
*/
|
||||||
#define qspiCommandI(qspip, cmd) { \
|
#define qspiStartCommandI(qspip, cmdp) { \
|
||||||
osalDbgAssert(((cmd)->cfg & QSPI_CFG_DATA_MODE_MASK) == \
|
osalDbgAssert(((cmdp)->cfg & QSPI_CFG_DATA_MODE_MASK) == \
|
||||||
QSPI_CFG_DATA_MODE_NONE, \
|
QSPI_CFG_DATA_MODE_NONE, \
|
||||||
"data mode specified"); \
|
"data mode specified"); \
|
||||||
(qspip)->state = QSPI_ACTIVE; \
|
(qspip)->state = QSPI_ACTIVE; \
|
||||||
qspi_lld_command(qspip, cmd, n, txbuf); \
|
qspi_lld_command(qspip, cmdp); \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -159,18 +159,18 @@ typedef struct {
|
||||||
* @post At the end of the operation the configured callback is invoked.
|
* @post At the end of the operation the configured callback is invoked.
|
||||||
*
|
*
|
||||||
* @param[in] qspip pointer to the @p QSPIDriver object
|
* @param[in] qspip pointer to the @p QSPIDriver object
|
||||||
* @param[in] cmd pointer to the command descriptor
|
* @param[in] cmdp pointer to the command descriptor
|
||||||
* @param[in] n number of bytes to send or zero if no data phase
|
* @param[in] n number of bytes to send or zero if no data phase
|
||||||
* @param[in] txbuf the pointer to the transmit buffer
|
* @param[in] txbuf the pointer to the transmit buffer
|
||||||
*
|
*
|
||||||
* @iclass
|
* @iclass
|
||||||
*/
|
*/
|
||||||
#define qspiStartSendI(qspip, cmd, n, txbuf) { \
|
#define qspiStartSendI(qspip, cmdp, n, txbuf) { \
|
||||||
osalDbgAssert(((cmd)->cfg & QSPI_CFG_DATA_MODE_MASK) != \
|
osalDbgAssert(((cmdp)->cfg & QSPI_CFG_DATA_MODE_MASK) != \
|
||||||
QSPI_CFG_DATA_MODE_NONE, \
|
QSPI_CFG_DATA_MODE_NONE, \
|
||||||
"data mode required"); \
|
"data mode required"); \
|
||||||
(qspip)->state = QSPI_ACTIVE; \
|
(qspip)->state = QSPI_ACTIVE; \
|
||||||
qspi_lld_send(qspip, cmd, n, txbuf); \
|
qspi_lld_send(qspip, cmdp, n, txbuf); \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -179,18 +179,18 @@ typedef struct {
|
||||||
* @post At the end of the operation the configured callback is invoked.
|
* @post At the end of the operation the configured callback is invoked.
|
||||||
*
|
*
|
||||||
* @param[in] qspip pointer to the @p QSPIDriver object
|
* @param[in] qspip pointer to the @p QSPIDriver object
|
||||||
* @param[in] cmd pointer to the command descriptor
|
* @param[in] cmdp pointer to the command descriptor
|
||||||
* @param[in] n number of bytes to receive or zero if no data phase
|
* @param[in] n number of bytes to receive or zero if no data phase
|
||||||
* @param[out] rxbuf the pointer to the receive buffer
|
* @param[out] rxbuf the pointer to the receive buffer
|
||||||
*
|
*
|
||||||
* @iclass
|
* @iclass
|
||||||
*/
|
*/
|
||||||
#define qspiStartReceiveI(qspip, cmd, n, rxbuf) { \
|
#define qspiStartReceiveI(qspip, cmdp, n, rxbuf) { \
|
||||||
osalDbgAssert(((cmd)->cfg & QSPI_CFG_DATA_MODE_MASK) != \
|
osalDbgAssert(((cmdp)->cfg & QSPI_CFG_DATA_MODE_MASK) != \
|
||||||
QSPI_CFG_DATA_MODE_NONE, \
|
QSPI_CFG_DATA_MODE_NONE, \
|
||||||
"data mode required"); \
|
"data mode required"); \
|
||||||
(qspip)->state = QSPI_ACTIVE; \
|
(qspip)->state = QSPI_ACTIVE; \
|
||||||
qspi_lld_receive(qspip, cmd, n, rxbuf); \
|
qspi_lld_receive(qspip, cmdp, n, rxbuf); \
|
||||||
}
|
}
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,9 @@ void halInit(void) {
|
||||||
#if (HAL_USE_PWM == TRUE) || defined(__DOXYGEN__)
|
#if (HAL_USE_PWM == TRUE) || defined(__DOXYGEN__)
|
||||||
pwmInit();
|
pwmInit();
|
||||||
#endif
|
#endif
|
||||||
|
#if (HAL_USE_QSPI == TRUE) || defined(__DOXYGEN__)
|
||||||
|
qspiInit();
|
||||||
|
#endif
|
||||||
#if (HAL_USE_SERIAL == TRUE) || defined(__DOXYGEN__)
|
#if (HAL_USE_SERIAL == TRUE) || defined(__DOXYGEN__)
|
||||||
sdInit();
|
sdInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -137,7 +137,7 @@ void qspiStartCommand(QSPIDriver *qspip, const qspi_command_t *cmdp) {
|
||||||
|
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
||||||
qspiStartCommandI(qspip, cmd);
|
qspiStartCommandI(qspip, cmdp);
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ void qspiStartSend(QSPIDriver *qspip, const qspi_command_t *cmdp,
|
||||||
|
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
||||||
qspiStartSendI(qspip, cmd, n, txbuf);
|
qspiStartSendI(qspip, cmdp, n, txbuf);
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ void qspiStartReceive(QSPIDriver *qspip, const qspi_command_t *cmdp,
|
||||||
|
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
||||||
qspiStartReceiveI(qspip, cmd, n, rxbuf);
|
qspiStartReceiveI(qspip, cmdp, n, rxbuf);
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ void qspiStartReceive(QSPIDriver *qspip, const qspi_command_t *cmdp,
|
||||||
* without callbacks (@p end_cb = @p NULL).
|
* without callbacks (@p end_cb = @p NULL).
|
||||||
*
|
*
|
||||||
* @param[in] qspip pointer to the @p QSPIDriver object
|
* @param[in] qspip pointer to the @p QSPIDriver object
|
||||||
* @param[in] cmd pointer to the command descriptor
|
* @param[in] cmdp pointer to the command descriptor
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
@ -207,7 +207,7 @@ void qspiCommand(QSPIDriver *qspip, const qspi_command_t *cmdp) {
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
||||||
osalDbgAssert(qspip->config->end_cb == NULL, "has callback");
|
osalDbgAssert(qspip->config->end_cb == NULL, "has callback");
|
||||||
qspiStartCommandI(qspip, cmd, n, txbuf);
|
qspiStartCommandI(qspip, cmdp);
|
||||||
(void) osalThreadSuspendS(&qspip->thread);
|
(void) osalThreadSuspendS(&qspip->thread);
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
@ -220,7 +220,7 @@ void qspiCommand(QSPIDriver *qspip, const qspi_command_t *cmdp) {
|
||||||
* without callbacks (@p end_cb = @p NULL).
|
* without callbacks (@p end_cb = @p NULL).
|
||||||
*
|
*
|
||||||
* @param[in] qspip pointer to the @p QSPIDriver object
|
* @param[in] qspip pointer to the @p QSPIDriver object
|
||||||
* @param[in] cmd pointer to the command descriptor
|
* @param[in] cmdp pointer to the command descriptor
|
||||||
* @param[in] n number of bytes to send
|
* @param[in] n number of bytes to send
|
||||||
* @param[in] txbuf the pointer to the transmit buffer
|
* @param[in] txbuf the pointer to the transmit buffer
|
||||||
*
|
*
|
||||||
|
@ -235,7 +235,7 @@ void qspiSend(QSPIDriver *qspip, const qspi_command_t *cmdp,
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
||||||
osalDbgAssert(qspip->config->end_cb == NULL, "has callback");
|
osalDbgAssert(qspip->config->end_cb == NULL, "has callback");
|
||||||
qspiStartSendI(qspip, cmd, n, txbuf);
|
qspiStartSendI(qspip, cmdp, n, txbuf);
|
||||||
(void) osalThreadSuspendS(&qspip->thread);
|
(void) osalThreadSuspendS(&qspip->thread);
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
@ -248,7 +248,7 @@ void qspiSend(QSPIDriver *qspip, const qspi_command_t *cmdp,
|
||||||
* without callbacks (@p end_cb = @p NULL).
|
* without callbacks (@p end_cb = @p NULL).
|
||||||
*
|
*
|
||||||
* @param[in] qspip pointer to the @p QSPIDriver object
|
* @param[in] qspip pointer to the @p QSPIDriver object
|
||||||
* @param[in] cmd pointer to the command descriptor
|
* @param[in] cmdp pointer to the command descriptor
|
||||||
* @param[in] n number of bytes to send
|
* @param[in] n number of bytes to send
|
||||||
* @param[out] rxbuf the pointer to the receive buffer
|
* @param[out] rxbuf the pointer to the receive buffer
|
||||||
*
|
*
|
||||||
|
@ -263,7 +263,7 @@ void qspiReceive(QSPIDriver *qspip, const qspi_command_t *cmdp,
|
||||||
osalSysLock();
|
osalSysLock();
|
||||||
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
osalDbgAssert(qspip->state == QSPI_READY, "not ready");
|
||||||
osalDbgAssert(qspip->config->end_cb == NULL, "has callback");
|
osalDbgAssert(qspip->config->end_cb == NULL, "has callback");
|
||||||
qspiStartReceiveI(qspip, cmd, n, rxbuf);
|
qspiStartReceiveI(qspip, cmdp, n, rxbuf);
|
||||||
(void) osalThreadSuspendS(&qspip->thread);
|
(void) osalThreadSuspendS(&qspip->thread);
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,23 @@
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
|
|
||||||
|
QSPIConfig qspicfg1 = {
|
||||||
|
NULL,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
qspi_command_t cmd_read_id = {
|
||||||
|
QSPI_CFG_CMD(0x9E) | QSPI_CFG_CMD_MODE_ONE_LINE |
|
||||||
|
QSPI_CFG_ADDR_MODE_NONE |
|
||||||
|
QSPI_CFG_ALT_MODE_NONE |
|
||||||
|
QSPI_CFG_DUMMY_CYCLES(0) |
|
||||||
|
QSPI_CFG_DATA_MODE_ONE_LINE,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t buffer[512];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LED blinker thread, times are in milliseconds.
|
* LED blinker thread, times are in milliseconds.
|
||||||
*/
|
*/
|
||||||
|
@ -58,6 +75,12 @@ int main(void) {
|
||||||
*/
|
*/
|
||||||
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL);
|
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Starting QSPI driver 1.
|
||||||
|
*/
|
||||||
|
qspiStart(&QSPID1, &qspicfg1);
|
||||||
|
qspiReceive(&QSPID1, &cmd_read_id, 17, buffer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Normal main() thread activity, in this demo it does nothing.
|
* Normal main() thread activity, in this demo it does nothing.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue