|
STM32F407, SSD1963, SD Memory card, отображение графической информации на дисплее |
|
|
|
Jan 28 2013, 21:05
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Allregia @ Jan 29 2013, 00:49)  А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено? HW flow control просто отрубает клок, если контроллер по каким-либо причинам не может отдать или принять данные. У F4 это процесс сопровождается глитчами на линии CLK, что в результате приводит к ошибкам. Цитата(Allregia @ Jan 29 2013, 00:49)  И какая ему альтернатива, если он как в ф4 не работает? Никакой. На F4 придется или разгребать ошибки CRC, если управление потоком включено (что, понятно, не рекомендуется), или же разгребать ошибки overrun / underrun. В любом случае некоторая головная боль.
|
|
|
|
|
Feb 6 2013, 18:53
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Добрый вечер. Сегодня, наконец, спаяли модуль. пробую включить SSD1963 через FSMC. Команда Display On проходит - по крайней мере, экран загорается. На экране цветной мусор из памяти. На остальные команды никакой реакции Кто работал с SSD1963 - не подскажете, в какой последовательности подаются команды? Я сначала делаю программный RES, потом Display On. Потом установка режима- AddrMode, Далее устанавливаю начальный и конечный адреса и формат пикселя. 0x2C и начинаю посылать массив данных. Смотрю шину анализатором- картинки вроде соответствуют даташиту, данные отправляются, стробы есть. после команды 0x29 - DisplayOn, экран загорается. но больше никаких изменений. TE у меня не выведен на внешний разъем модуля, поэтому приходится без него Может, нужна какая-то другая последовательность команд? И вопрос по формату данных - судя по даташиту, для SSD1963 нужно настроить FSMC на 8-битный режим, команды-то у него 8битные. Это так или я ошибаюсь?  Кто работал с SSD1963 - отзовитесь
|
|
|
|
|
Feb 6 2013, 20:48
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
Дарья, вы хоть бы поиском пользовались или доку читали бы инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию CODE // Horizontal and vertical display resolution (from the glass datasheet) #define DISP_HOR_RESOLUTION 800 #define DISP_VER_RESOLUTION 480
// Horizontal synchronization timing in pixels (from the glass datasheet) #define DISP_HOR_PULSE_WIDTH 48 // 1..48 (Min .. Typ) #define DISP_HOR_BACK_PORCH 40 // Typ #define DISP_HOR_FRONT_PORCH 40 // Typ
// Vertical synchronization timing in lines (from the glass datasheet) #define DISP_VER_PULSE_WIDTH 3 // Typ #define DISP_VER_BACK_PORCH 29 // Typ #define DISP_VER_FRONT_PORCH 13 // Typ
// ***************************************************************************** // Инициализация контроллера SSD1963 for PCLK, HSYNC, VSYNC etc void SSD1963_Init(void) { // Програмный сброс set_reg(0x01); // Soft reset (Сбрасываются все регистры кроме 0xE0 и 0xE5) LCD_Delay(5); // Нужно ожидать 5 мс // * Настройка PLL на 100 МГц перед его включением (для фнешего кыарца 10 МГц) * // Установка множителя M для PLL: VCO = crystal freq * (N+1) (где - 250MHz < VCO < 800MHz) // Частота PLL = VCO/M, макс 110MHz. set_reg(0xE2); // Уст. PLL для OSC = 10MHz set_data(0x1D); // Множитель N = 29, VCO (>250MHz)= OSC*(N+1), VCO = 300MHz set_data(0x02); // Делитель M = 2, PLL = 300/(M+1) = 100MHz set_data(0x04); // Установить использование M (множителя) и N (делителя) значений
// * Запуск PLL * set_reg(0xE0); // Start PLL command set_data(0x01); // включить PLL LCD_Delay(1); // ожидание стабильности (100 мскек) минимум set_reg(0xE0); // Start PLL command again set_data(0x03); // Теперь PLL выход используя как системные часы LCD_Delay(1); // ожидание стабильности (100 мксек) минимум // Програмный сброс после включения PLL set_reg(0x01); // Soft reset LCD_Delay(10000); // Установить LSHIFT частоту, т.е DCLK для TFT если частота PLL 100 МГц set previously // Значение DCLK для HSD050IDW1-A20 равняется 33 МГц (по даташиту) // 33 MHz = 100MHz*(LCDC_FPR + 1)/2^20 // LCDC_FPR = 346030 (0x547AE) // Time per line = (DISP_HOR_RESOLUTION + DISP_HOR_PULSE_WIDTH + DISP_HOR_BACK_PORCH + // DISP_HOR_FRONT_PORCH)/30.3 нсек = 928/30.3 = 30.6 нсек set_reg(0xE6); set_data(0x05); set_data(0x47); set_data(0xAE); //Set panel mode, varies from individual manufacturer set_reg(0xB0); // set_data(0x10); // set 18-bit for 7" panel TY700TFT800480 // set_data(0x80); // set TTL mode // set_data(0x08); // SET TFT MODE & hsync + Vsync + DEN MODE set_data(0x20); // set 24-bit set_data(0x00); // SET TFT MODE & hsync + Vsync + DEN MODE set_data(((DISP_HOR_RESOLUTION - 1) >> 8) & 0x0007); // Set panel size set_data((DISP_HOR_RESOLUTION - 1) & 0x00FF); set_data(((DISP_VER_RESOLUTION - 1) >> 8) & 0x0007); set_data((DISP_VER_RESOLUTION - 1) & 0x00FF); set_data(0x00); // RGB sequence
// Set horizontal period set_reg(0xB4); #define HT (DISP_HOR_RESOLUTION + DISP_HOR_PULSE_WIDTH + DISP_HOR_BACK_PORCH + DISP_HOR_FRONT_PORCH) set_data(((HT - 1) >> 8) & 0x0007); // HT - horizontal total period set_data((HT - 1) & 0x00FF); // ... #define HPS (DISP_HOR_PULSE_WIDTH + DISP_HOR_BACK_PORCH) set_data(((HPS - 1) >> 8) & 0x0007); // HPS: Horizontal Sync Pulse Start Position set_data((HPS - 1) & 0x00FF); // ... set_data(DISP_HOR_PULSE_WIDTH - 1); // HPW: Horizontal Sync Pulse Width set_data(0x00); // LPS: Horizontal Display Period Start Position set_data(0x00); // ... set_data(0x00); // LPSPP: Horizontal Sync Pulse Subpixel Start Position // (for serial TFT interface). Dummy value for TFT interface. // Set vertical period set_reg(0xB6); #define VT (DISP_VER_RESOLUTION + DISP_VER_PULSE_WIDTH + DISP_VER_BACK_PORCH + DISP_VER_FRONT_PORCH) set_data(((VT - 1) >> 8) & 0x0007); // VT: Vertical Total set_data((VT - 1) & 0x00FF); // ... #define VSP (DISP_VER_PULSE_WIDTH + DISP_VER_BACK_PORCH) set_data(((VSP - 1) >> 8) & 0x0007); // VPS: Vertical Sync Pulse Start Position set_data((VSP - 1) & 0x00FF); // ... set_data(DISP_VER_PULSE_WIDTH - 1); // VPW: Vertical Sync Pulse Width set_data(0x00); // FPS: Vertical Display Period Start Position set_data(0x00); // ... // SET Address mode set_reg(0x36); set_data(0x00); // set_data(0xA0); // set_data(0x03); //Set pixel format, i.e. the bpp (команда была удалена см. даташит вер 1.1) // set_reg(0x3A); // set_data(0x50); // set 16bpp
// Set pixel data interface set_reg(0xF0); set_data(0x03); // 16-bit(565 format) data set_reg(0x29); // Turn on display; show the image on display LCD_Delay(5); // Нужно ожидать 5 мс return; }
Сообщение отредактировал IgorKossak - Feb 6 2013, 21:20
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Feb 7 2013, 05:53
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(Rash @ Feb 7 2013, 00:48)  Дарья, вы хоть бы поиском пользовались или доку читали бы инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию Да, уже нашла пару вариантов Но ваш, кстати, самый понятный  Большое спасибо, сегодня попробую
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|