/*! * @defgroup SPI * @brief Synchronous serial communication
SPI-LCD pins
Pin Function Description
PB9 SPI1 SCLK PB6 GPIO CS LCD SPI CS
PB0 GPIO CS SDC SPI CS
PB8 SPI1 PICO LCD SPI data (SPI)
PB7 SPI1 POCI SCD SPI data (SPI)
PB15GPIO J2.17 LCD !RST =1 for run, =0 for reset
PB16GPIO J4.31 LCD D/C RS =1 for data, =0 for command
* @{*/ /** * @file SPI1.h * @brief Synchronous serial communication * @details SPI uses a chip select, clock, data out and data in. This interface is used for TFT and SDC * This interface can be used for MKII LCD and the ST7735R LCD * \image html SPIinterface.png width=500px * @version RTOS v7.0 * @author Daniel Valvano and Jonathan Valvano * @copyright Copyright 2025 by Jonathan W. Valvano, valvano@mail.utexas.edu, * @warning AS-IS * @note For more information see http://users.ece.utexas.edu/~valvano/ * @date Dec 26, 2025
SPI-LCD pins
Pin Function Description
PB9 SPI1 SCLK PB6 GPIO CS LCD SPI CS
PB0 GPIO CS SDC SPI CS
PB8 SPI1 PICO LCD SPI data (SPI)
PB7 SPI1 POCI SCD SPI data (SPI)
PB15GPIO J2.17 LCD !RST =1 for run, =0 for reset
PB16GPIO J4.31 LCD D/C RS =1 for data, =0 for command
******************************************************************************/ #ifndef __SPI_H__ #define __SPI_H__ // PB0 output used for SDC CS #define SDC_CS GPIOB #define SDC_CS_PIN (1<<0) // CS controlled by software #define SDC_CS_INDEX (PB0INDEX) // PB0 GPIO #define SDC_CS_LOW() (SDC_CS->DOUTCLR31_0 = SDC_CS_PIN) // PB0 low #define SDC_CS_HIGH() (SDC_CS->DOUTSET31_0 = SDC_CS_PIN) // PB0 high // PB6 output used for SDC CS //#define TFT_CS_LOW() (GPIOB->DOUTCLR31_0 = (1<<6)) // PB6 low //#define TFT_CS_HIGH() (GPIOB->DOUTSET31_0 = (1<<6)) // PB6 high #define TFT_CS GPIOB #define TFT_CS_PIN (1<<6) // TFT CS controlled by software #define TFT_CS_INDEX (PB6INDEX) // PB6 GPIO #define TFT_CS_LOW() (TFT_CS->DOUTCLR31_0 = TFT_CS_PIN) // PB6 low #define TFT_CS_HIGH() (TFT_CS->DOUTSET31_0 = TFT_CS_PIN) // PB6 high #define TFT_DC GPIOB #define TFT_DC_PIN (1<<16) // D/C controlled by software #define TFT_DC_INDEX (PB16INDEX) // PB16 GPIO #define TFT_DC_LOW() (TFT_DC->DOUTCLR31_0 = TFT_DC_PIN) // PB16 low #define TFT_DC_HIGH() (TFT_DC->DOUTSET31_0 = TFT_DC_PIN) // PB16 high #define TFT_RST GPIOB #define TFT_RST_PIN (1<<15) // !RST controlled by software #define TFT_RST_INDEX (PB15INDEX) // PB15 GPIO #define TFT_RST_LOW() (TFT_RST->DOUTCLR31_0 = TFT_RST_PIN) // PB15 low #define TFT_RST_HIGH() (TFT_RST->DOUTSET31_0 = TFT_RST_PIN) // PB15 high /** * Output 8-bit data to SPI port. * RS=PA13=1 for data. * @param data is an 8-bit data to be transferred * @return none * @brief Output data */ void SPI_OutData(char data); /** * Output 8-bit command to SPI port. * RS=PA13=0 for command * @param command is an 8-bit command to be transferred * @return none * @brief Output command */ void SPI_OutCommand(char command); /** * Reset LCD * -# drive RST high for 500ms * -# drive RST low for 500ms * -# drive RST high for 500ms * * @param none * @return none * @brief Reset LCD */ void SPI1_Reset(void); // SDC CS initialization void CS_Init(void); /** * Initialize SPI1 for 8 MHz baud clock * for both SDC and TFT * using busy-wait synchronization. * Calls Clock_Freq to get bus clock * - PB9 SPI1 SCLK * - PB6 SPI1 CS0 * - PB8 SPI1 PICO * - PB15 GPIO !RST =1 for run, =0 for reset * - PA13 GPIO RS =1 for data, =0 for command * * @note SPI0,SPI1 in power domain PD1 SysClk equals bus CPU clock * @param none * @return none * @brief initialize SPI1 */ void SPI1_Init(void); //---------TFT_OutCommand------------ // Output 8-bit command to SPI port // Input: data is an 8-bit data to be transferred // Output: none void TFT_OutCommand(char command); /** * Output 8-bit data to SPI port. * RS=PB16=1 for data. * @param data is an 8-bit data to be transferred * @return none * @brief Output data */ void TFT_OutData(char data); #endif // __SPI_H__ /** @}*/