先配置SCI_SPI


波特率10MHz.引脚选择

还需要配置P014-DC P015-CS
基本驱动代码
#define DC_Set R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_00_PIN_14,BSP_IO_LEVEL_HIGH)
#define DC_Clr R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_00_PIN_14,BSP_IO_LEVEL_LOW)
#define CS_Set R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_00_PIN_15,BSP_IO_LEVEL_HIGH)
#define CS_Clr R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_00_PIN_15,BSP_IO_LEVEL_LOW)
static void SCI_SPI_Init(void);
static void LCD_WriteData(uint8_t data);
static void LCD_WriteData16(uint16_t data);
static void LCD_WriteCommond(uint8_t cmd);
static volatile bool sci_spi_send_complete_flag = false;
void LCD_Init(void)
{
SCI_SPI_Init();
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
LCD_WriteCommond(0x11);
R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS);
LCD_WriteCommond(0xB1);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteCommond(0xB2);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteCommond(0xB3);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteCommond(0xB4);
LCD_WriteData(0x03);
LCD_WriteCommond(0xC0);
LCD_WriteData(0x28);
LCD_WriteData(0x08);
LCD_WriteData(0x04);
LCD_WriteCommond(0xC1);
LCD_WriteData(0XC0);
LCD_WriteCommond(0xC2);
LCD_WriteData(0x0D);
LCD_WriteData(0x00);
LCD_WriteCommond(0xC3);
LCD_WriteData(0x8D);
LCD_WriteData(0x2A);
LCD_WriteCommond(0xC4);
LCD_WriteData(0x8D);
LCD_WriteData(0xEE);
LCD_WriteCommond(0xC5);
LCD_WriteData(0x1A);
LCD_WriteCommond(0x36);
LCD_WriteData(0x00);
LCD_WriteCommond(0xE0);
LCD_WriteData(0x04);
LCD_WriteData(0x22);
LCD_WriteData(0x07);
LCD_WriteData(0x0A);
LCD_WriteData(0x2E);
LCD_WriteData(0x30);
LCD_WriteData(0x25);
LCD_WriteData(0x2A);
LCD_WriteData(0x28);
LCD_WriteData(0x26);
LCD_WriteData(0x2E);
LCD_WriteData(0x3A);
LCD_WriteData(0x00);
LCD_WriteData(0x01);
LCD_WriteData(0x03);
LCD_WriteData(0x13);
LCD_WriteCommond(0xE1);
LCD_WriteData(0x04);
LCD_WriteData(0x16);
LCD_WriteData(0x06);
LCD_WriteData(0x0D);
LCD_WriteData(0x2D);
LCD_WriteData(0x26);
LCD_WriteData(0x23);
LCD_WriteData(0x27);
LCD_WriteData(0x27);
LCD_WriteData(0x25);
LCD_WriteData(0x2D);
LCD_WriteData(0x3B);
LCD_WriteData(0x00);
LCD_WriteData(0x01);
LCD_WriteData(0x04);
LCD_WriteData(0x13);
LCD_WriteCommond(0x3A);
LCD_WriteData(0x05);
LCD_WriteCommond(0x29);
}
void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{
LCD_WriteCommond(0x2a);
LCD_WriteData16(x1+2);
LCD_WriteData16(x2+2);
LCD_WriteCommond(0x2b);
LCD_WriteData16(y1+1);
LCD_WriteData16(y2+1);
LCD_WriteCommond(0x2c);
}
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{
uint16_t i,j;
LCD_Address_Set(xsta,ysta,xend-1,yend-1);
for(i=ysta;i<yend;i++)
{
for(j=xsta;j<xend;j++)
{
LCD_WriteData16(color);
}
}
}
static void SCI_SPI_Init(void)
{
fsp_err_t err = R_SCI_SPI_Open(&g_spi0_ctrl,&g_spi0_cfg);
assert(err == FSP_SUCCESS);
}
static void LCD_WriteData(uint8_t data)
{
CS_Clr;
DC_Set;
R_SCI_SPI_Write(&g_spi0_ctrl,(uint8_t*)&data,1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
CS_Set;
}
static void LCD_WriteData16(uint16_t data)
{
uint8_t buffer[2];
buffer[0] = (uint8_t)(data >> 8);
buffer[1] = (uint8_t)data;
CS_Clr;
DC_Set;
R_SCI_SPI_Write(&g_spi0_ctrl,(uint8_t*)&buffer[0],1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
R_SCI_SPI_Write(&g_spi0_ctrl,(uint8_t*)&buffer[1],1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
CS_Set;
}
static void LCD_WriteCommond(uint8_t cmd)
{
CS_Clr;
DC_Clr;
R_SCI_SPI_Write(&g_spi0_ctrl,(uint8_t*)&cmd,1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
CS_Set;
}
void sci_spi_callback(spi_callback_args_t *arg)
{
if(arg->event == SPI_EVENT_TRANSFER_COMPLETE)
{
sci_spi_send_complete_flag = true;
}
}
测试程序
void hal_entry(void)
{
UART_Init();
LCD_Init();
while(1)
{
LCD_Fill(0,0,128,160,WHITE );
LCD_Fill(0,0,128,160,BLACK );
LCD_Fill(0,0,128,160,BLUE );
LCD_Fill(0,0,128,160,BRED );
LCD_Fill(0,0,128,160,GRED );
LCD_Fill(0,0,128,160,GBLUE );
LCD_Fill(0,0,128,160,RED );
LCD_Fill(0,0,128,160,MAGENTA );
LCD_Fill(0,0,128,160,GREEN );
LCD_Fill(0,0,128,160,CYAN );
LCD_Fill(0,0,128,160,YELLOW );
LCD_Fill(0,0,128,160,BROWN );
LCD_Fill(0,0,128,160,BRRED );
LCD_Fill(0,0,128,160,GRAY );
LCD_Fill(0,0,128,160,DARKBLUE );
LCD_Fill(0,0,128,160,LIGHTBLUE );
LCD_Fill(0,0,128,160,GRAYBLUE );
LCD_Fill(0,0,128,160,LIGHTGREEN );
LCD_Fill(0,0,128,160,LGRAY );
LCD_Fill(0,0,128,160,LGRAYBLUE );
LCD_Fill(0,0,128,160,LBBLUE );
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}