| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*
- * @File name : driver_spi.h
- * @Author : Bluetrum IOT Team
- * @Date : 2023-02-15
- * @Description : This file contains all the functions prototypes for the SPI library.
- *
- * Copyright (c) by Bluetrum, All Rights Reserved.
- */
- #ifndef _DRIVER_SPI_H
- #define _DRIVER_SPI_H
- #include "driver_com.h"
- //--------------- SPI[0..1] Flag Definition ---------------//
- #define SPI_FLAG_PENDING ((uint32_t)0x00010000)
- /**
- * @brief SPI Role Mode Enumeration
- */
- typedef enum {
- SPI_ROLE_MODE_MASTER = 0x00000000,
- SPI_ROLE_MODE_SLAVE = 0x00000002,
- } SPI_ROLE_MODE_TYPEDEF;
- /**
- * @brief SPI Bus Mode Enumeration
- */
- typedef enum {
- SPI_3WIRE_MODE = 0x00000000,
- SPI_2WIRE_MODE = 0x00000004,
- SPI_2BIT_BID_MODE = 0x00000008,
- SPI_4BIT_BID_MODE = 0x0000000c,
- } SPI_BUS_MODE_TYPEDEF;
- /**
- * @brief SPI Output Data Edge Enumeration
- */
- typedef enum {
- SPI_OUTPUT_DATA_EDGE_FALLING = 0x00000000,
- SPI_OUTPUT_DATA_EDGE_RISING = 0x00000040,
- } SPI_OUTPUT_DATA_EDGE_TYPEDEF;
- /**
- * @brief SPI Sample Clock Enumeration
- */
- typedef enum {
- SPI_SAMPLE_AND_OUTPUT_CLOCK_DIFF = 0x00000000,
- SPI_SAMPLE_AND_OUTPUT_CLOCK_SAME = 0x00000400,
- } SPI_SAMPLE_AND_OUTPUT_CLOCK_TYPEDEF;
- /**
- * @brief SPI Direction
- */
- typedef enum {
- SPI_DIR_TX = 0x00,
- SPI_DIR_RX = 0x01,
- } SPI_DIR_TYPEDEF;
- /**
- * @brief SPI Clock State When Idle
- */
- typedef enum {
- SPI_CLOCK_IDLE_LOW = 0x00000000,
- SPI_CLOCK_IDLE_HIGH = 0x00000020,
- } SPI_CLOCK_IDLE_STATE_TYPEDEF;
- /* SPI Init Structure */
- typedef struct{
- uint32_t baud;
- SPI_ROLE_MODE_TYPEDEF role_mode;
- SPI_BUS_MODE_TYPEDEF bus_mode;
- SPI_OUTPUT_DATA_EDGE_TYPEDEF output_data_edge;
- SPI_SAMPLE_AND_OUTPUT_CLOCK_TYPEDEF sample_clk_edge;
- SPI_CLOCK_IDLE_STATE_TYPEDEF clkids; //if SPI1BAUD is equal to 0, then CLKIDS forces 0 by designed
- } spi_init_typedef;
- void spi_init(spi_typedef* spix, spi_init_typedef* spi_init_struct);
- void spi_deinit(spi_typedef* spix);
- void spi_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- void spi_dir_sel(spi_typedef* spix, SPI_DIR_TYPEDEF direction);
- void spi_it_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- void spi_lfsr_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- void spi_multi_bit_bus_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- void spi_hold_rx_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- void spi_hold_tx_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- void spi_soft_hold_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
- FLAG_STATE spi_get_flag(spi_typedef* spix, uint32_t spi_flag);
- void spi_clear_flag(spi_typedef* spix, uint32_t spi_flag);
- void spi_set_dma_cnt(spi_typedef* spix, uint32_t cnt);
- void spi_set_dma_addr(spi_typedef* spix, uint32_t addr);
- uint8_t spi_receive_data(spi_typedef* spix);
- void spi_send_data(spi_typedef* spix, uint8_t data);
- #endif // _DRIVER_SPI_H
|