📄 spi.c
字号:
// spi 控制定义IO如下:
// LCD_VF2: GPC7 ---------------> LCD_DAT
// LCD_VF1: GPC6 ---------------> SPI_CLK
// LCD_VF0: GPC5 ---------------> SPI_CS
// VM: GPC4 ---------------> LCD_RESET
#define SET_RST_HIGH { rGPCDAT |= (0x01<<4); }
#define SET_RST_LOW { rGPCDAT &= (~(0x01<<4)); }
#define SET_CS_HIGH { rGPCDAT |= (0x01<<5); }
#define SET_CS_LOW { rGPCDAT &= (~(0x01<<5)); }
#define SET_SCK_HIGH { rGPCDAT |= (0x01<<6); }
#define SET_SCK_LOW { rGPCDAT &= (~(0x01<<6)); }
#define SET_SDA_HIGH { rGPCDAT |= (0x01<<7); }
#define SET_SDA_LOW { rGPCDAT &= (~(0x01<<7)); }
void SPI_Init(void)
{
SET_CS_HIGH;
SET_SCK_HIGH;
SET_SDA_HIGH;
}
#if 0
// for sumsung:
// type = 0: Index
// = 1: data
// WRite ID code: Index: 01110100 0x74
// Data: 01110110 0x76
void spi_Write(U8 type, U16 value)
{
U8 i,startByte;
SET_CS_LOW;
if(type ==0)
{
startByte = 0x74;
}
else {
startByte = 0x76;
}
for(i=0; i<8; i++)
{
SET_SCK_LOW;
if(startByte & 0x80)
{
SET_SDA_HIGH;
}
else {
SET_SDA_LOW;
}
Delay(10);
SET_SCK_HIGH; // 上升沿将数据写出去......
Delay(10);
startByte <<= 1;
}
// Write Cmd/Data:
for(i=0; i<16; i++)
{
SET_SCK_LOW;
if(value & 0x8000)
{
SET_SDA_HIGH;
}
else {
SET_SDA_LOW;
}
Delay(10);
SET_SCK_HIGH; // 上升沿将数据写出去......
Delay(10);
value <<= 1;
}
SET_CS_HIGH;
}
void SPI_WriteReg(U8 reg, U16 data)
{
spi_Write(0,(U16)reg);
spi_Write(1,data);
}
void SPI_ConfigLCM(void)
{
SPI_WriteReg(9, 0x0000);
Delay(20);
SPI_WriteReg(9, 0x4000);
SPI_WriteReg(10, 0x2000);
SPI_WriteReg(9, 0x4055);
Delay(80);
SPI_WriteReg(1, 0x409d);
SPI_WriteReg(2, 0x0204);
SPI_WriteReg(3, 0x0100);
SPI_WriteReg(4, 0x3000);
SPI_WriteReg(5, 0x4003);
SPI_WriteReg(6, 0x000a);
SPI_WriteReg(7, 0x0021);
SPI_WriteReg(8, 0x0c00);
SPI_WriteReg(10, 0x0103);
SPI_WriteReg(11, 0x0301);
SPI_WriteReg(12, 0x1f0f);
SPI_WriteReg(13, 0x1f0f);
SPI_WriteReg(14, 0x0707);
SPI_WriteReg(15, 0x0307);
SPI_WriteReg(16, 0x0707);
SPI_WriteReg(17, 0x0000);
SPI_WriteReg(18, 0x0004);
SPI_WriteReg(19, 0x0000);
Delay(40);
SPI_WriteReg(9, 0x4a55);
SPI_WriteReg(5, 0x5003);
}
#else
void SPI_WriteReg(U8 reg, U8 value)
{
U8 i,startByte;
SET_CS_LOW;
Delay(5);
startByte = (reg&0x0f);
for(i=0; i<5; i++)
{
SET_SCK_LOW;
if(startByte & 0x10) // 0001 0000
{
SET_SDA_HIGH;
}
else {
SET_SDA_LOW;
}
Delay(20);
SET_SCK_HIGH; // 上升沿将数据写出去......
Delay(20);
startByte <<= 1;
}
for(i=0; i<8; i++)
{
SET_SCK_LOW;
if(value & 0x80)
{
SET_SDA_HIGH;
}
else {
SET_SDA_LOW;
}
Delay(20);
SET_SCK_HIGH; // 上升沿将数据写出去......
Delay(20);
value <<= 1;
}
SET_CS_HIGH;
}
//0x02,0x02,0x31,0x2b,
void SPI_ConfigLCM(void)
{
// SPI_WriteReg(0x00,0x02); // R0
// SPI_WriteReg(0x01,0x02); // R1
// SPI_WriteReg(0x02,0x31); // R2 0011 0001
// SPI_WriteReg(0x03,0x2b); // R3 0010 1111
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -