Electricity/FWLIB/include/ENS1_SPI.h

208 lines
7.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*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
bool FIFO_ENABLE_SET;
bool TXDMA_SET; //Ñ¡ÔñÊÇ·ñÆô¶¯DMA(fifo¿ªÆôµÄǰÌáÏÂ)
bool 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 ,bool TXDMA_SET ,bool 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, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET);
#endif