Пытаюсь запустить дисплей на контроллере LS020 с STM32VL Discovery. Инициализация проходит, заливка работает, но вывести какую-либо графику не получается. Все время начинается вывод с краю дисплея и все время какая-то абракадабра. Инициализация вот такая:
Спойлер
Код: Выделить всё
void SPIsend(int Data)
{
SPI1->DR = Data;
while(!((SPI1->SR)&SPI_SR_TXE));
}
void lcd_init_c(void)
{
const unsigned int INIT1[2] ={0xFDFD,0xFDFD};
const unsigned int INIT2[10] ={0xEF00,0xEE04,0x1B04,0xFEFE,0xFEFE,0xEF90,0x4A04,0x7F3F,0xEE04,0x4306};
const unsigned int INIT3[20]={0xEF90,0x0983,0x0800,0x0BAF,0x0A00,0x0500,0x0600,0x0700,0xEF00,0xEE0C,
0xEF90,0x0080,0xEFB0,0x4902,0xEF00,0x7F01,0xE181,0xE202,0xE276,0xE183};
const unsigned int INIT4[3] ={0x8001,0xEF90,0x0000};
unsigned char cnt;
RSHi;
CSHi;
delay_ms(10);
RSTLow;
RSLow;
delay_ms(15);
RSTHi;
CSHi;
delay_ms(15);
RSHi;
delay_ms(15);
CSLow;
delay_ms(15);
for (cnt=0; cnt<2; cnt++)
SPIsend(INIT1[cnt]);
delay_ms(50);
for (cnt=0; cnt<10; cnt++)
SPIsend(INIT2[cnt]);
delay_ms(7);
for (cnt=0; cnt<20; cnt++)
SPIsend(INIT3[cnt]);
delay_ms(50);
for (cnt=0; cnt<3; cnt++)
SPIsend(INIT4[cnt]);
delay_ms(3);
CSHi;
}Заливка
Спойлер
Код: Выделить всё
uint8_t lcd_cmd(uint16_t data)
{
RSHi;
CSLow;
SPI1->DR = data;
while (!((SPI1->SR)&SPI_SR_RXNE));
RSLow;
CSHi;
return(SPI1->DR);
}
void fill_screen(uint16_t color)
{
uint16_t i;
lcd_cmd(0xEF90);
lcd_cmd(0x0500);
lcd_cmd(0x0600);
lcd_cmd(0x0700);
for (i = 0; i < DISP_W*DISP_H; i++)
SPIsend(color);
}А вот так пытаюсь вывести пиксель:
Спойлер
Код: Выделить всё
void put_pixel(int x, int y,long int color)
{
RSHi;
CSLow;
SPIsend(0xEF90);
SPIsend(0x0504);
SPIsend((0x06<<8)+y);
SPIsend((0x07<<8)+x);
RSLow;
CSHi;
lcd_dat(color);
}В итоге начинается вывод точек из угла дисплея и постепенно заполняются горизонтальные строки. SPI настроен вот так:
Спойлер
Код: Выделить всё
void SPIinit (void)
{
SPI1->CR1 |= SPI_CR1_MSTR;
SPI1->CR1 |= SPI_CR1_DFF;
SPI1->CR1 |= SPI_CR1_SSI | SPI_CR1_SSM;
SPI1->CR1 |= SPI_CR1_SPE;
}Что я делаю неправильно?
P.S.
На AVR дисплей работал нормально.
