spi: simplify the caps header

This commit is contained in:
Michael (XIAO Xufeng)
2020-05-12 02:31:30 +08:00
parent 6f410cb7c4
commit d2666545d1
5 changed files with 30 additions and 10 deletions

View File

@ -40,7 +40,16 @@
#define SPI_FLASH_LL_CLKREG_VAL_80MHZ ((spi_flash_ll_clock_reg_t){.val=0x80000000}) ///< Clock set to 80 MHz #define SPI_FLASH_LL_CLKREG_VAL_80MHZ ((spi_flash_ll_clock_reg_t){.val=0x80000000}) ///< Clock set to 80 MHz
/// Get the start address of SPI peripheral registers by the host ID /// Get the start address of SPI peripheral registers by the host ID
#define spi_flash_ll_get_hw(host_id) ((host_id)==SPI1_HOST? &SPI1:((host_id)==SPI2_HOST?&SPI2:((host_id)==SPI3_HOST?&SPI3:({abort();(spi_dev_t*)0;})))) #define spi_flash_ll_get_hw(host_id) ( ((host_id)==SPI1_HOST) ? &SPI1 :(\
((host_id)==SPI2_HOST) ? &SPI2 :(\
((host_id)==SPI3_HOST) ? &SPI3 :(\
{abort();(spi_dev_t*)0;}\
))) )
#define spi_flash_ll_hw_get_id(dev) ( ((dev) == &SPI1) ? SPI1_HOST :(\
((dev) == &SPI2) ? SPI2_HOST :(\
((dev) == &SPI3) ? SPI3_HOST :(\
-1\
))) )
/// type to store pre-calculated register value in above layers /// type to store pre-calculated register value in above layers
typedef typeof(SPI1.clock) spi_flash_ll_clock_reg_t; typedef typeof(SPI1.clock) spi_flash_ll_clock_reg_t;
@ -155,12 +164,12 @@ static inline void spi_flash_ll_write_word(spi_dev_t *dev, uint32_t word)
/** /**
* Set the data to be written in the data buffer. * Set the data to be written in the data buffer.
* *
* @param dev Beginning address of the peripheral registers. * @param dev Beginning address of the peripheral registers.
* @param buffer Buffer holding the data * @param buffer Buffer holding the data
* @param length Length of data in bytes. * @param length Length of data in bytes.
*/ */
static inline void spi_flash_ll_set_buffer_data(spi_dev_t *dev, const void *buffer, uint32_t length) static inline void spi_flash_ll_set_buffer_data(spi_dev_t *dev, const void *buffer, uint32_t length)
{ {
// Load data registers, word at a time // Load data registers, word at a time
int num_words = (length + 3) >> 2; int num_words = (length + 3) >> 2;

View File

@ -60,4 +60,4 @@
//#define SOC_SPI_SLAVE_SUPPORT_SEG_TRANS //#define SOC_SPI_SLAVE_SUPPORT_SEG_TRANS
//#define SOC_SPI_SUPPORT_CD_SIG //#define SOC_SPI_SUPPORT_CD_SIG
#define SOC_SPI_PERIPH_SUPPORT_MULTILINE_MODE(SPI_HOST) true #define SOC_SPI_PERIPH_SUPPORT_MULTILINE_MODE(SPI_HOST) ({(void)SPI_HOST; true;})

View File

@ -31,10 +31,14 @@
#include <string.h> #include <string.h>
#define gpspi_flash_ll_get_hw(host_id) (((host_id)==SPI2_HOST ? &GPSPI2 \ #define gpspi_flash_ll_get_hw(host_id) ( ((host_id)==SPI2_HOST) ? &GPSPI2 : (\
: ((host_id)==SPI3_HOST ? &GPSPI3 \ ((host_id)==SPI3_HOST) ? &GPSPI3 : (\
: ((host_id)==SPI4_HOST ? &GPSPI4 \ {abort();(spi_dev_t*)0;}\
: ({abort();(spi_dev_t*)0;}))))) )) )
#define gpspi_flash_ll_hw_get_id(dev) ( ((dev) == (void*)&GPSPI2) ? SPI2_HOST : (\
((dev) == (void*)&GPSPI3) ? SPI3_HOST : (\
-1 \
)) )
typedef typeof(GPSPI2.clock) gpspi_flash_ll_clock_reg_t; typedef typeof(GPSPI2.clock) gpspi_flash_ll_clock_reg_t;

View File

@ -37,6 +37,12 @@
#define spi_flash_ll_get_hw(host_id) (((host_id)<=SPI1_HOST ? (spi_dev_t*) spimem_flash_ll_get_hw(host_id) \ #define spi_flash_ll_get_hw(host_id) (((host_id)<=SPI1_HOST ? (spi_dev_t*) spimem_flash_ll_get_hw(host_id) \
: gpspi_flash_ll_get_hw(host_id))) : gpspi_flash_ll_get_hw(host_id)))
#define spi_flash_ll_hw_get_id(dev) ({int dev_id = spimem_flash_ll_hw_get_id(dev); \
if (dev_id < 0) {\
dev_id = gpspi_flash_ll_hw_get_id(dev);\
}\
dev_id; \
})
typedef union { typedef union {
gpspi_flash_ll_clock_reg_t gpspi; gpspi_flash_ll_clock_reg_t gpspi;

View File

@ -31,7 +31,8 @@
#include "hal/spi_types.h" #include "hal/spi_types.h"
#include "hal/spi_flash_types.h" #include "hal/spi_flash_types.h"
#define spimem_flash_ll_get_hw(host_id) (((host_id)==SPI1_HOST ? &SPIMEM1 : NULL )) #define spimem_flash_ll_get_hw(host_id) (((host_id)==SPI1_HOST ? &SPIMEM1 : NULL ))
#define spimem_flash_ll_hw_get_id(dev) ((dev) == (void*)&SPIMEM1? SPI1_HOST: -1)
typedef typeof(SPIMEM1.clock) spimem_flash_ll_clock_reg_t; typedef typeof(SPIMEM1.clock) spimem_flash_ll_clock_reg_t;