/************************************************************************ * Copyright(c) 2023 Levetop Semiconductor Co.,Led. All rights reserved. * @file if_port.c * @author UartTFT Application Team * @version V1.0.0 * @date 2023-02-24 * @brief Different drive interfaces *************************************************************************/ #include "if_port.h" // ------------------------------------------------------------ SPI drive -------------------------------------------------------------------- #if IF_SPI void SPI2_Init(void) { SPI_InitTypeDef SPI_InitStruct; SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_CPOL = SPI_CPOL_High; SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; // According to SPI_ The parameter specified in InitStruct initializes the peripheral SPIx registe SPI_Init(SPI2, &SPI_InitStruct); SPI_Cmd(SPI2, ENABLE); EPORT_ConfigGpio(EPORT_PIN12, GPIO_OUTPUT); } uint16_t SPI2_ReadWriteByte(uint16_t TxData) { while ((SPI2->SPISRHW) & (SPISR_TXFFULL_MASK)) // The waiting sending area is empty { } SPI2->SPIDR = TxData; // Send a byte while ((SPI2->SPISRHW) & (SPISR_RXFEMP_MASK)) // Wait for receiving a byte { } return SPI2->SPIDR; // Return received data } void SPI2_WriteByte(uint16_t TxData) { UINT8 uint8_t; SPI2->SPIDR = TxData; // Send a byte while ((SPI2->SPISRHW) & (SPISR_RXFEMP_MASK)) // Wait for receiving a byte { } uint8_t = SPI2->SPIDR; } void SPI_CmdWrite(uint8_t cmd) { SS_RESET; SPI2_ReadWriteByte(0x00); SPI2_ReadWriteByte(cmd); SS_SET; } void SPI_DataWrite(uint8_t data) { SS_RESET; SPI2_ReadWriteByte(0x80); SPI2_ReadWriteByte(data); SS_SET; } void SPI_DataWrite_Pixel(uint16_t data) { SPI2_ReadWriteByte(data); SPI2_ReadWriteByte(data >> 8); } uint8_t SPI_StatusRead(void) { uint8_t temp = 0; SS_RESET; SPI2_ReadWriteByte(0x40); temp = SPI2_ReadWriteByte(0xff); SS_SET; return temp; } uint16_t SPI_DataRead(void) { uint16_t temp = 0; SS_RESET; SPI2_ReadWriteByte(0xc0); temp = SPI2_ReadWriteByte(0xff); SS_SET; return temp; } #endif //----------------------------------------------------------------------------------------------------------------------------------- void LCD_CmdWrite(uint8_t cmd) { SS_RESET; SPI2_ReadWriteByte(0x00); SPI2_ReadWriteByte(cmd); SS_SET; } void LCD_DataWrite(uint8_t data) { SS_RESET; SPI2_ReadWriteByte(0x80); SPI2_ReadWriteByte(data); SS_SET; } void LCD_DataWrite_Pixel(uint16_t data) { SPI2_ReadWriteByte(data); SPI2_ReadWriteByte(data >> 8); } uint8_t LCD_StatusRead(void) { uint8_t temp = 0; #if IF_SPI temp = SPI_StatusRead(); #endif return temp; } uint16_t LCD_DataRead(void) { uint16_t temp = 0; SS_RESET; SPI2_ReadWriteByte(0xc0); temp = SPI2_ReadWriteByte(0xff); SS_SET; return temp; } void Delay_us(uint16_t time) { uint16_t i = 0; while (time--) { i = 12; // Self-defined while (i--); } } void Delay_ms(uint16_t time) { uint16_t i = 0; while (time--) { i = 12000; // Self-defined while (i--); } } void Parallel_Init(void) { #if IF_SPI SPI2_Init(); #endif }