208 lines
7.4 KiB
C
208 lines
7.4 KiB
C
/*
|
||
*Copyright ,2023 , NANOCHAP
|
||
*File name: ENS1_SPI.H
|
||
*Author:
|
||
*Version: V1.0
|
||
*Date: 2023-11-
|
||
*Description:
|
||
*Function List:
|
||
1 uint8_t READ_SPI_MODE(CMSDK_SPI_TypeDef* SPIx)
|
||
2 uint8_t CLR_TX_FIFO(CMSDK_SPI_TypeDef* SPIx)
|
||
3 uint8_t CLR_RX_FIFO(CMSDK_SPI_TypeDef* SPIx)
|
||
4 uint8_t RX_FIFO_LEN(CMSDK_SPI_TypeDef* SPIx)
|
||
5 uint8_t TX_FIFO_LEN(CMSDK_SPI_TypeDef* SPIx)
|
||
6 SPI_BUSY_STATE BUSY_STATE(CMSDK_SPI_TypeDef* SPIx)
|
||
7 uint8_t RX_FIFO_FULL(CMSDK_SPI_TypeDef* SPIx)
|
||
8 uint8_t RX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx)
|
||
9 uint8_t TX_FIFO_FULL(CMSDK_SPI_TypeDef* SPIx)
|
||
10 uint8_t TX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx)
|
||
11 uint8_t SPI_FIFO_STATE(CMSDK_SPI_TypeDef* SPIx)
|
||
12 uint8_t SPI_FIFO_ENABLE(CMSDK_SPI_TypeDef* SPIx )
|
||
13 uint8_t SPI_FIFO_DISABLE(CMSDK_SPI_TypeDef* SPIx )
|
||
14 uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,bool TXDMA_SET ,bool RXDMA_SET)
|
||
15 uint8_t SPI_NSS_CHANNEL(CMSDK_SPI_TypeDef* SPIx ,NSS_CHANNEL_SEL NSSx ,FunctionalState ENorDIS)
|
||
16 uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , struct SPI_ModeConfig_Struct SPI_Config ,struct SPI_FIFO_Struct FIFO_Struct)
|
||
17 uint8_t SPI_START(CMSDK_SPI_TypeDef* SPIx)
|
||
18 uint8_t SPI_STOP(CMSDK_SPI_TypeDef* SPIx)
|
||
19 uint16_t READ_SPI_RCVBuff(CMSDK_SPI_TypeDef* SPIx )
|
||
20 void WRITE_SPI_THRBuff(CMSDK_SPI_TypeDef* SPIx,uint8_t data)
|
||
21 uint8_t SPI_INT_SET(IRQn_Type IRQn, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET)
|
||
History:
|
||
1.V1.0
|
||
Date:
|
||
Author:
|
||
Modification: ³õ°æ
|
||
*/
|
||
|
||
#ifndef ENS1_SPI_H
|
||
#define ENS1_SPI_H
|
||
#include "my_header.h"
|
||
|
||
/*
|
||
Ò»¡¢Òý½Å¹ØÏµ£º
|
||
ALT Function2
|
||
SPI1_SCK --- GPIO16
|
||
SPI1_MOSI --- GPIO17
|
||
SPI1_MISO --- GPIO18
|
||
SPI1_NSS0 --- GPIO19
|
||
SPI1_NSS1 --- GPIO2
|
||
SPI1_NSS2 --- GPIO3
|
||
SPI1_NSS3 --- GPIO4
|
||
|
||
ALT Function2
|
||
SPI0_SCK --- GPIO8
|
||
SPI0_MOSI --- GPIO9
|
||
SPI0_MISO --- GPIO10
|
||
SPI0_NSS0 --- GPIO11
|
||
SPI0_NSS1 --- GPIO13
|
||
SPI0_NSS2 --- GPIO14
|
||
SPI0_NSS3 --- GPIO15
|
||
|
||
¶þ¡¢SPI¹¦ÄÜÁбí˵Ã÷£º
|
||
ÈýÌõÏß·ÉϵÄȫ˫¹¤Í¬²½´«Êä
|
||
Ë«Ïß°ëË«¹¤Í¬²½´«Êä
|
||
Á½Ïßµ¥¹¤Í¬²½´«Ê䣨´øµ¥ÏòÊý¾ÝÏߣ©
|
||
16*16bits FIFO ÊÕ·¢»º³åÇø
|
||
4-16λÊý¾Ý´óСѡÔñ
|
||
Ö÷ģʽ²¨ÌØÂÊ·¢ÉúÆ÷¸ß´ïFpclk/2
|
||
´Óģʽ²¨ÌØÂÊ·¢ÉúÆ÷¸ß´ïFpclk/4
|
||
Èí¼þ»òÓ²¼þ¹ÜÀí NSS
|
||
¿É±à³ÌʱÖÓ¼«ÐÔºÍÏàλ
|
||
¿É±à³ÌµÄÊý¾Ý˳ÐòÓëMSB»òLSBÒÆÎ»
|
||
DMAʼþÖ§³Ö
|
||
ÖжÏÖ§³Ö
|
||
|
||
*/
|
||
|
||
|
||
|
||
typedef enum {MASTER = 1 ,SLAVE= 0}MASTER_SLAVE_SEL;
|
||
typedef enum {NSS0= 8 ,NSS1 ,NSS2 ,NSS3}NSS_CHANNEL_SEL ;
|
||
typedef enum {NOTBUSY = 0, BUSY}SPI_BUSY_STATE ;
|
||
typedef enum {EMPTY=0,FULL}FIFO_FULL_EMPTY_STATE;
|
||
|
||
struct SPI_ModeConfig_Struct
|
||
{
|
||
uint8_t BAUD_FPCLKdivx ; //²¨ÌØÂÊ·ÖÆµÏµÊý
|
||
uint8_t SPI_MODE ; //SPI¹¤×÷ģʽ
|
||
uint8_t SPI_TRANS_MODE; //´«ÊäģʽѡÔñ
|
||
MASTER_SLAVE_SEL MS_SEL; //Ö÷´ÓģʽѡÔñ
|
||
uint16_t CHAR_LEN ; //ÉèÖô«Ê䳤¶È £¨4 - 16 bit£©
|
||
NSS_CHANNEL_SEL NSSx ;
|
||
uint8_t SAMP_PHASE ;
|
||
|
||
};
|
||
struct SPI_FIFO_Struct //ÉèÖÃFIFO¼°DMA´«Êä
|
||
{
|
||
uint8_t TX_FIFO_TH; // 0 - 16 char
|
||
uint8_t RX_FIFO_TH; // 0 - 16 char
|
||
int FIFO_ENABLE_SET;
|
||
int TXDMA_SET; //Ñ¡ÔñÊÇ·ñÆô¶¯DMA(fifo¿ªÆôµÄǰÌáÏÂ)
|
||
int RXDMA_SET;
|
||
};
|
||
|
||
/* ÖжÏÀàÐÍʹÄܽṹÌå
|
||
1¡¢·¢ËͲ¿·ÖÓÐ ÏÂÒç Öжϣ¨·¢ËÍÊý¾ÝûÓÐÀ²£©
|
||
2¡¢½ÓÊÕ²¿·ÖÓÐ Òç³ö Öжϣ¨½ÓÂúÀ²£©
|
||
3¡¢ÊÕ·¢Íê³ÉÖжϣ¿
|
||
4¡¢·¢ËÍ»º³åÇø¿Õ ÖжÏ
|
||
5¡¢½ÓÊÕ»º³åÇø·Ç¿Õ ÖжÏ
|
||
*/
|
||
//ÖжÏʹÄÜ
|
||
#define UNDERRUN_INT_EN (uint8_t)0x10
|
||
#define OVERRUN_INT_EN (uint8_t)0x8
|
||
#define CMPL_INT_EN (uint8_t)0x4
|
||
#define TXE_INT_EN (uint8_t)0x2
|
||
#define RXNE_INT_EN (uint8_t)0x1
|
||
|
||
//ÅжÏÊÇ·ñ¼ì²âµ½¶ÔÓ¦µÄÖжÏ
|
||
#define UNDERRUN_INT (uint8_t)0x10
|
||
#define OVERRUN_INT (uint8_t)0x8
|
||
#define CMPL_INT (uint8_t)0x4
|
||
#define TXE_INT (uint8_t)0x2
|
||
#define RXNE_INT (uint8_t)0x1
|
||
|
||
|
||
/*ģʽ£º | ½ÓÏß·½Ê½£º Ö÷»ú ´Ó»ú
|
||
ȫ˫¹¤ | MISO/MOSI MISO/MOSI
|
||
°ëË«¹¤ | MOSI MISO
|
||
Ö÷»ú½ö·¢ËÍ£¬´Ó»ú½ö½ÓÊÕģʽ | MOSI MOSI
|
||
Ö÷»ú½ö½ÓÊÕ£¬´Ó»ú½ö·¢ËÍģʽ | MISO MISO
|
||
|
||
SPI_TRANS_MODE ´«ÊäģʽѡÔñ£º
|
||
2Ïßµ¥Ïò / 1ÏßË«Ïò
|
||
ÊÕ+·¢ / ½ö·¢ /½öÊÕ/ µ¥Ïò½ö·¢ËÍ / ½ö½ÓÊÕ
|
||
*/
|
||
#define L2_UniDirect_TandR (uint8_t)0x0 //BIT[15:12] 0 0 00
|
||
#define L2_UniDirect_T (uint8_t)0x1 //BIT[15:12] 0 0 01
|
||
#define L2_UniDirect_R (uint8_t)0x2 //BIT[15:12] 0 0 10
|
||
#define L1_BiDirect_T (uint8_t)0x8 //BIT[15:12] 1 0 00
|
||
#define L1_BiDirect_R (uint8_t)0xc//BIT[15:12] 1 1 00
|
||
|
||
/*NSSÏà¹ØÉèÖÃ*/
|
||
#define NSS_PULSE 1 //ÓÐnss
|
||
#define NO_NSS_PULSE 0 //ûÓÐnss
|
||
#define NSS_ASSERTED 0 //
|
||
#define NSS_DEASSERYED 1 //Èí¼þ·¢³önssÐźÅ
|
||
#define NSS_CTRL_HW 0 //ÉèÖÃΪӲ¼þÉú³ÉNSS
|
||
#define NSS_CTRL_SW 1 //ÉèÖÃΪÈí¼þÉú³ÉNSS
|
||
|
||
/*²¨ÌØÂÊÉèÖÃ*/
|
||
#define BAUD_FPCLKdiv2 (uint8_t)0x0
|
||
#define BAUD_FPCLKdiv4 (uint8_t)0x1
|
||
#define BAUD_FPCLKdiv8 (uint8_t)0x2
|
||
#define BAUD_FPCLKdiv16 (uint8_t)0x3
|
||
#define BAUD_FPCLKdiv32 (uint8_t)0x4
|
||
#define BAUD_FPCLKdiv64 (uint8_t)0x5
|
||
#define BAUD_FPCLKdiv128 (uint8_t)0x6
|
||
#define BAUD_FPCLKdiv256 (uint8_t)0x7
|
||
|
||
/*SPI_MODE ¹¤×÷ģʽѡÔñ*/
|
||
#define SPI_MODE0 (uint8_t)0x0 //bit[3:2] 00
|
||
#define SPI_MODE1 (uint8_t)0x1 // 01
|
||
#define SPI_MODE2 (uint8_t)0x2 // 10
|
||
#define SPI_MODE3 (uint8_t)0x3 // 11
|
||
|
||
|
||
/*SAMP_PHASE Ñ¡Ïî*/
|
||
#define PRE_1_PCLK_PERIOD (uint8_t)0X0
|
||
#define SAMP_PHASE_NORMAL (uint8_t)0X1
|
||
#define DELAY_1_PCLK_PERIOD (uint8_t)0X2
|
||
#define DELAY_2_PCLK_PERIOD (uint8_t)0X3
|
||
|
||
/*****************************ÉùÃ÷ ºÍ ¶¨Òå***************************/
|
||
#define SPI0_CS_SET GPIO_SetOutput(GPIO_11)
|
||
#define SPI0_CS_RESET GPIO_ResetOutput(GPIO_11)
|
||
#define SPI1_CS_SET GPIO_SetOutput(GPIO_19)
|
||
#define SPI1_CS_RESET GPIO_ResetOutput(GPIO_19)
|
||
|
||
|
||
//¶ÁSPIµ±Ç°ÉèÖõÄģʽ
|
||
extern uint8_t READ_SPI_MODE(CMSDK_SPI_TypeDef* SPIx);
|
||
/*Çå³ýFIFOºÍ¼ÆÊýÇå0*/
|
||
extern uint8_t CLR_TX_FIFO(CMSDK_SPI_TypeDef* SPIx);
|
||
extern uint8_t CLR_RX_FIFO(CMSDK_SPI_TypeDef* SPIx) ;
|
||
/*FIFO ״̬¶ÁÈ¡*/
|
||
extern uint8_t RX_FIFO_LEN(CMSDK_SPI_TypeDef* SPIx); //¶ÁÈ¡µ±Ç°½ÓÊÕFIFOÊý¾Ý³¤¶È
|
||
extern uint8_t TX_FIFO_LEN(CMSDK_SPI_TypeDef* SPIx) ; //¶ÁÈ¡µ±Ç°·¢ËÍFIFOÊý¾Ý³¤¶È
|
||
extern SPI_BUSY_STATE BUSY_STATE(CMSDK_SPI_TypeDef* SPIx) ; //¶ÁÈ¡µ±Ç°SPIÊÇ·ñ·±Ã¦
|
||
extern uint8_t RX_FIFO_FULL(CMSDK_SPI_TypeDef* SPIx) ; //µ±Ç°¶ÁÈ¡FIFOÊÇ·ñΪÂú£¿
|
||
extern uint8_t RX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx) ; //µ±Ç°¶ÁÈ¡FIFOÊÇ·ñΪ¿Õ£¿
|
||
extern uint8_t TX_FIFO_FULL(CMSDK_SPI_TypeDef* SPIx) ;//µ±Ç°·¢ËÍFIFOÊÇ·ñΪÂú£¿
|
||
extern uint8_t TX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx) ; //µ±Ç°·¢ËÍFIFOÊÇ·ñΪ¿Õ£¿
|
||
extern uint8_t SPI_FIFO_STATE(CMSDK_SPI_TypeDef* SPIx);
|
||
extern uint8_t SPI_FIFO_ENABLE(CMSDK_SPI_TypeDef* SPIx ); //FIFO¹¦ÄÜʹÄÜ
|
||
extern uint8_t SPI_FIFO_DISABLE(CMSDK_SPI_TypeDef* SPIx ); //FIFO¹¦ÄÜʧÄÜ
|
||
extern uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,int TXDMA_SET ,int RXDMA_SET); //DMAÉèÖÃ
|
||
extern uint8_t SPI_NSS_CHANNEL(CMSDK_SPI_TypeDef* SPIx ,NSS_CHANNEL_SEL NSSx ,FunctionalState ENorDIS); //nssͨµÀÑ¡Ôñ
|
||
extern uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , struct SPI_ModeConfig_Struct SPI_Config ,struct SPI_FIFO_Struct FIFO_Struct); //spiµÄ³õʼÅäÖÃ
|
||
extern uint8_t SPI_START(CMSDK_SPI_TypeDef* SPIx);
|
||
extern uint8_t SPI_STOP(CMSDK_SPI_TypeDef* SPIx);
|
||
//¶Á±»½ÓÊÕµÄÊý¾Ý ×î¶à16bits
|
||
extern uint16_t READ_SPI_RCVBuff(CMSDK_SPI_TypeDef* SPIx );
|
||
//дÊý¾Ý
|
||
extern void WRITE_SPI_THRBuff(CMSDK_SPI_TypeDef* SPIx,uint8_t data);
|
||
extern uint8_t SPI_INT_SET(IRQn_Type IRQn, int SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET);
|
||
|
||
#endif
|