#include "SWM341.h" #include "CH392SPI_HW_HAL.h" #include "delay.h" SPI_TypeDef *_pSPIx = SPI1; #define USE_SPI0 1 #define USE_SPI1 1 #if(USE_SPI0==1) #define GPIO_SPI0_INT GPIOC #define PORT_SPI0_INT PIN12 //PB14 #define GPIO_SPI0_RST GPIOB #define PORT_SPI0_RST PIN14 #define GPIO_SPI0_CS GPIOM #define PORT_SPI0_CS PIN3 #define GPIO_SPI0 PORTM #define PORT_SPI0_SCLK PIN2 #define PORT_SPI0_MISO PIN4 #define PORT_SPI0_MOSI PIN5 #endif #if(USE_SPI1==1) #define GPIO_SPI1_INT GPIOC #define PORT_SPI1_INT PIN13 #define GPIO_SPI1_RST GPIOB #define PORT_SPI1_RST PIN12 #define GPIO_SPI1_CS GPION #define PORT_SPI1_CS PIN1 #define GPIO_SPI1 PORTN #define PORT_SPI1_SCLK PIN0 #define PORT_SPI1_MISO PIN4 #define PORT_SPI1_MOSI PIN5 #endif #if(USE_SPI0==1) #define SPI0_CS_Low() GPIO_ClrBit(GPIO_SPI0_CS, PORT_SPI0_CS) #define SPI0_CS_High() GPIO_SetBit(GPIO_SPI0_CS, PORT_SPI0_CS) void SPI0Init(void) { SPI_InitStructure SPI_initStruct; GPIO_Init(GPIO_SPI0_INT, PORT_SPI0_INT, 0, 1, 0, 0); GPIO_Init(GPIO_SPI0_RST, PORT_SPI0_RST, 1, 0, 0, 0); GPIO_ClrBit(GPIO_SPI0_RST, PORT_SPI0_RST); delay_ms(300); GPIO_SetBit(GPIO_SPI0_RST, PORT_SPI0_RST); SPI0_CS_High(); GPIO_Init(GPIO_SPI0_CS, PORT_SPI0_CS, 1, 0, 0, 0); SPI0_CS_High(); PORT_Init(GPIO_SPI0, PORT_SPI0_SCLK, PORTM_PIN2_SPI0_SCLK, 0); PORT_Init(GPIO_SPI0, PORT_SPI0_MISO, PORTM_PIN4_SPI0_MISO, 1); PORT_Init(GPIO_SPI0, PORT_SPI0_MOSI, PORTM_PIN5_SPI0_MOSI, 0); SPI_initStruct.clkDiv = SPI_CLKDIV_32; SPI_initStruct.FrameFormat = SPI_FORMAT_SPI; //SPI_initStruct.SampleEdge = SPI_FIRST_EDGE; //SPI_initStruct.IdleLevel = SPI_LOW_LEVEL; SPI_initStruct.SampleEdge = SPI_SECOND_EDGE; SPI_initStruct.IdleLevel = SPI_HIGH_LEVEL; SPI_initStruct.WordSize = 8; SPI_initStruct.Master = 1; SPI_initStruct.RXThreshold = 0; SPI_initStruct.RXThresholdIEn = 0; SPI_initStruct.TXThreshold = 0; SPI_initStruct.TXThresholdIEn = 0; SPI_initStruct.TXCompleteIEn = 0; SPI_Init(SPI0, &SPI_initStruct); SPI_Open(SPI0); /* while(1) { SPI0_CS_Low(); SPI_ReadWrite(SPI0,0xAA); delay_ms(1); SPI0_CS_High(); delay_ms(1); } */ } #endif #if(USE_SPI1==1) #define SPI1_CS_Low() GPIO_ClrBit(GPIO_SPI1_CS, PORT_SPI1_CS) #define SPI1_CS_High() GPIO_SetBit(GPIO_SPI1_CS, PORT_SPI1_CS) void SPI1Init(void) { GPIO_Init(GPIO_SPI1_INT, PORT_SPI1_INT, 0, 1, 0, 0); GPIO_Init(GPIO_SPI1_RST, PORT_SPI1_RST, 1, 0, 0, 0); GPIO_ClrBit(GPIO_SPI1_RST, PORT_SPI1_RST); delay_ms(300); GPIO_SetBit(GPIO_SPI1_RST, PORT_SPI1_RST); SPI_InitStructure SPI_initStruct; SPI1_CS_High(); GPIO_Init(GPIO_SPI1_CS, PORT_SPI1_CS, 1, 0, 0, 0); SPI1_CS_High(); PORT_Init(GPIO_SPI1, PORT_SPI1_SCLK, PORTM_PIN2_SPI0_SCLK, 0); PORT_Init(GPIO_SPI1, PORT_SPI1_MISO, PORTM_PIN4_SPI0_MISO, 1); PORT_Init(GPIO_SPI1, PORT_SPI1_MOSI, PORTM_PIN5_SPI0_MOSI, 0); SPI_initStruct.clkDiv = SPI_CLKDIV_32; SPI_initStruct.FrameFormat = SPI_FORMAT_SPI; //SPI_initStruct.SampleEdge = SPI_FIRST_EDGE; //SPI_initStruct.IdleLevel = SPI_LOW_LEVEL; SPI_initStruct.SampleEdge = SPI_SECOND_EDGE; SPI_initStruct.IdleLevel = SPI_HIGH_LEVEL; SPI_initStruct.WordSize = 8; SPI_initStruct.Master = 1; SPI_initStruct.RXThreshold = 0; SPI_initStruct.RXThresholdIEn = 0; SPI_initStruct.TXThreshold = 0; SPI_initStruct.TXThresholdIEn = 0; SPI_initStruct.TXCompleteIEn = 0; SPI_Init(SPI1, &SPI_initStruct); SPI_Open(SPI1); /* while(1) { SPI1_CS_Low(); SPI_ReadWrite(SPI1,0xAA); delay_ms(1); SPI1_CS_High(); delay_ms(1); } */ } /******************************************************************************* * Function Name : CH392_Port_Init * Description : Initializes the port * Input : None * Return : None *******************************************************************************/ void CH392_Port_Init(SPI_TypeDef *SPI_PORT ) { UINT8 i = 0; #if(USE_SPI1==1) if(SPI_PORT == SPI1) { _pSPIx = SPI_PORT; SPI1Init(); } #endif #if(USE_SPI0==1) if(SPI_PORT == SPI0) { _pSPIx = SPI_PORT; SPI0Init(); } #endif //初始化CS1 CS2 //初始化SPI1 SPI2 /* GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1 , &SPI_InitStructure); SPI_Cmd(SPI1 , ENABLE); */ i = QUERY_SPI_INT(); (void)i; } /******************************************************************************* * Function Name : SPI1_WriteRead * Description : spi 读写一个字节 * Input : UINT8 Data * Return : None *******************************************************************************/ UINT8 SPI_WriteRead(UINT8 data) { return SPI_ReadWrite(_pSPIx, data); } void SPI_MasterTransByte( UINT8 data) { UINT8 i = SPI_ReadWrite(_pSPIx, data); (void)i; } UINT8 SPI_MasterRecvByte(void) { return SPI_ReadWrite(_pSPIx, 0x0); } //CSH void xCH392CmdEnd(void) { if(_pSPIx == SPI1) { #if(USE_SPI1==1) SPI1_CS_High(); #endif } if(_pSPIx == SPI0) { #if(USE_SPI0==1) SPI0_CS_High(); #endif } } //CS 拉低 void xCH392CmdStart(void) //CSL { if(_pSPIx == SPI1) { #if(USE_SPI1==1) SPI1_CS_Low(); #endif } if(_pSPIx == SPI0) { #if(USE_SPI0==1) SPI0_CS_Low(); #endif } } UINT8 QUERY_SPI_INT(void) { UINT8 iRead = 0; if(_pSPIx == SPI1) { #if(USE_SPI1==1) iRead = GPIO_GetBit(GPIO_SPI1_INT, PORT_SPI1_INT); #endif } if(_pSPIx == SPI0) { #if(USE_SPI0==1) iRead = GPIO_GetBit(GPIO_SPI0_INT, PORT_SPI0_INT); #endif } return iRead; } #endif