1 /**************************************************************************//**
2 *
3 * @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Change Logs:
8 * Date            Author           Notes
9 * 2020-6-15       YHKuo            First version
10 *
11 ******************************************************************************/
12 
13 #ifndef __DRV_SPI_H__
14 #define __DRV_SPI_H__
15 
16 #include <rtconfig.h>
17 
18 #include <rtdevice.h>
19 #include "NuMicro.h"
20 #include <nu_bitutil.h>
21 
22 #if defined(BSP_USING_SPI_PDMA)
23     #include <drv_pdma.h>
24 #endif
25 
26 struct nu_spi
27 {
28     struct rt_spi_bus dev;
29     char *name;
30     SPI_T *spi_base;
31     uint32_t rstidx;
32     uint32_t dummy;
33 #if defined(BSP_USING_SPI_PDMA)
34     int16_t pdma_perp_tx;
35     int8_t  pdma_chanid_tx;
36     int16_t pdma_perp_rx;
37     int8_t  pdma_chanid_rx;
38     rt_sem_t m_psSemBus;
39 #endif
40     struct rt_qspi_configuration  configuration;
41 };
42 
43 typedef struct nu_spi *nu_spi_t;
44 
45 void nu_spi_drain_rxfifo(SPI_T *spi_base);
46 void nu_spi_transfer(struct nu_spi *spi_bus, uint8_t *tx, uint8_t *rx, int length, uint8_t bytes_per_word);
47 
48 #if defined(BSP_USING_SPI_PDMA)
49     rt_err_t nu_hw_spi_pdma_allocate(struct nu_spi *spi_bus);
50 #endif
51 
52 #endif // __DRV_SPI_H___
53