Перейти к содержанию
    

M_Andrey

Свой
  • Постов

    162
  • Зарегистрирован

  • Посещение

Весь контент M_Andrey


  1. Опять вы все смотрите через терминал, одних граблей вам мало, загадочные "*" и "Shift" говорят о том что у вас как минимум 2 промежуточных звена возможных ошибок. У вас есть (судя по схеме) кнопки, дисплей, для проверки больше и мечтать не о чем - заведите команды на кнопки и смотрите ответы на дисплее (если конечно они работают :-) ).
  2. До инициализации TFT. После рестарта сначала инициализация SDRAM, тест SDRAM правильный, затем идет инициализация TFT, снова тест SDRAM но уже с ошибками. Похоже что даже при 8- и 16-битном доступе EMC пытается работать с полной шиной. Но когда работает DMA LCD контроллера, EMC экономит шину и тут всплывают мои грабли.
  3. Разобрался Соврал. Для упрощения разводки поменял местами разряды шины данных и теперь эти грабли всплыли. Надо было хотя-бы при этом соблюсти привязку DQMOUT0-D0..D7, DQMOUT1-D8..D15, DQMOUT2-D16..D23, DQMOUT3-D24..D31. Теперь придется плату переразводить, а пока софтом изголяться.
  4. Но 32-битный доступ работает без ошибок. Если выводить на дисплей информацию в Int32, то пишется и отображается правильно.
  5. Это вопрос или ответ? Если вопрос, то плата действительно двухслойная.
  6. Конфликт TFT и SDRAM

    Отлаживаю плату. Имеется LPC2478 + SDRAM 32 бита (K4S561632C - 2 шт) + TFT 640x480x(R6-G6-B6) (OSD056TN53). Схема один в один со стартеркитом Olimex, разводка моя. Завелась без проблем, но столкнулся с неприятным эффектом мерцания чет/нечет. строк, особенно если смотреть под углом. Стал повышать частоту LCDDCLK - остановился на 9Мгц (LCD_CFG_bit.CLKDIV = 7), т.к. при дальнейшем увеличении частоты начинается нестабильная работа других узлов - отваливается USB и/или срывается синхронизация изображения. Да и для этой частоты пришлось настраивать AHB: AHBCFG1_bit.SHDL = 0; // Priority scheduling. AHBCFG1_bit.EP1 = 1; // CPU AHBCFG1_bit.EP2 = 5; // GPDMA AHBCFG1_bit.EP3 = 4; // AHB1 AHBCFG1_bit.EP4 = 3; // USB AHBCFG1_bit.EP5 = 2; // LCD Решил попробовать режим 5-6-5 и тут началось самое интересное. При выводе любой информации на дисплей она случайным образом искажается. Смотрю под отладчиком - действительно записываю одно значение - считываю совсем другое. Вывожу черный текст (0x0000) на сером фоне (0xCE9A), а получаю чаще розовый с черными вкраплениями на сером с зелеными вкраплениями: 0x0000 -> 0x081A 0xCE9A -> 0xС098, 0xC680, 0x0E02 Частота LCDDCLK = 18Мгц (LCD_CFG_bit.CLKDIV = 3), кадровая 43Гц. Понижал частоту до 3 МГц - ошибок меньше, но они есть! В 8-8-8 режиме ничего подобного не было. Полноцветная картинка выведенная до включения LCD_CTRL_bit.LcdEn = 1 и LCD_CTRL_bit.LcdPwr = 1 отображается правильно без искажений и практически не мерцает (что и хотел получить). Но после включения вновь записываемые данные искажаются. Написал тест SDRAM с 32, 16 и 8-битным доступом - до включения TFT проходит полностью, после - только для 32-битного доступа, для 16 и 8-битного - ошибки. Кто-нибудь сталкивался с подобным, что я делаю не так? Исходники работы с TFT и SDRAM брал из примеров IAR EWARM 5.50, только подправил для вывода 16-битного цвета.
  7. А как вы определяете что программа считывает 2 байта - по UART-у? Так может у вас UART неправильно работает - ведь плата другая и могут быть ошибки как минимум в разводке. И вообще как можно доверять симуляциям во всяких протеусах? Выводите считываемые данные сразу на индикатор.
  8. Тогда-уж лучше STM32F205/207 там есть готовый интерфейс для камеры, вот только куда данные складывать будете (640*480*3 байта=921600 байта)?
  9. Фазовый сдвиг зависит от типа трансформатора. Если первичка и вторичка намотаны друг на друга, то меньше. Но сейчас в готовых трансформаторах обмотки разделены - у таких фазовый сдвиг больше. А почему вы так хотите использовать компаратор? Воспользуйтесь входами INT0/INT1 и заведите на них выход каждого оптрона.
  10. Если вам нужен детектор фазы и перехода через ноль сетевого напряжения, то трансформатор тут совершенно не подходит, так-как сам вносит фазовый сдвиг! Тут подойдет к примеру схема рис.3.2а или 3.2в (стр.78) упомянутой выше книги (оптрон можно взять один PC814A).
  11. Попробуйте команды местами поменять: void init_uart(void) { UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; UCSRC=(1<<URSEL)|(3<<UCSZ0)|(2<<UPM0); #if USE_2X UCSRA |= (1 << U2X); #else UCSRA &= ~(1 << U2X); #endif UCSRB=(1<<RXEN)|(1<<TXEN); }
  12. Нет. Я имел в виду прерывание от GPIO. Настраиваем на фронт (или спад). Сработало прерывание - плюсанули счетчик. А таймер можно использовать для подсчета периода или интервала некоторого количества импульсов (для точности). Или считать импульсы за фиксированное время. Если-же речь зашла о конкретной ножке P1.19, то туда заведен вход CAP1[1], тогда вообще проще некуда. Настраиваете Interrupt on CAP1.1 event и анализируете T1CR1.
  13. Лучше всего по прерыванию, но опять-же не все - можно только P0[31:0] и P2[31:0].
  14. Все примеры из IAR EW for ARM (IAR-LPC-2478) работают на этом ките. /************************************************************************* * * Used with ICCARM and AARM. * * © Copyright IAR Systems 2007 * * File name : sdram_32M_16bit_drv.c * Description : SDRAM driver K4S561632E-TC(L)75 16MBx16bit * * History : * 1. Date : 6, March 2008 * Author : Stanimir Bonev * Description : Create * * * $Revision: 24636 $ **************************************************************************/ #include <stdio.h> #include "board.h" #include "sdram_32M_16bit_drv.h" extern Int32U SDRAM_BASE_ADDR; #if SYS_FREQ == (72MHZ) #define SDRAM_PERIOD 13.8 // 72MHz #elif SYS_FREQ == (57MHZ) #define SDRAM_PERIOD 17.4 // 57.6MHz #elif SYS_FREQ == (48MHZ) #define SDRAM_PERIOD 20.8 // 48MHz #elif SYS_FREQ == (36MHZ) #define SDRAM_PERIOD 27.8 // 36MHz #elif SYS_FREQ == (24MHZ) #define SDRAM_PERIOD 41.7 // 24MHz #else #error Frequency not defined #endif #define P2C(Period) (((Period<SDRAM_PERIOD)?0:(Int32U)((Flo32)Period/SDRAM_PERIOD))+1) #define SDRAM_REFRESH 7813 #define SDRAM_TRP 20 #define SDRAM_TRAS 45 #define SDRAM_TAPR 1 #define SDRAM_TDAL 3 #define SDRAM_TWR 3 #define SDRAM_TRC 65 #define SDRAM_TRFC 66 #define SDRAM_TXSR 67 #define SDRAM_TRRD 15 #define SDRAM_TMRD 3 /************************************************************************* * Function Name: SDRAM_Init * Parameters: none * * Return: none * * Description: SDRAM controller and memory init * *************************************************************************/ void SDRAM_Init (void) { // Assign pins to SDRAM controller PINSEL5 &= BIN32(11110000,11111100,11111100,11000000); PINSEL5 |= BIN32(00000101,00000001,00000001,00010101); PINMODE5&= BIN32(11110000,11111100,11111100,11000000); PINMODE5|= BIN32(00001010,00000010,00000010,00101010); PINSEL6 = BIN32(01010101,01010101,01010101,01010101); PINMODE6 = BIN32(10101010,10101010,10101010,10101010); PINSEL8 &= BIN32(11000000,00000000,00000000,00000000); PINSEL8 |= BIN32(00010101,01010101,01010101,01010101); PINMODE8&= BIN32(11000000,00000000,00000000,00000000); PINMODE8|= BIN32(00101010,10101010,10101010,10101010); PINSEL9 &= BIN32(11111111,11110011,11111111,11111111); PINSEL9 |= BIN32(00000000,00000100,00000000,00000000); PINMODE9&= BIN32(11111111,11110011,11111111,11111111); PINMODE9|= BIN32(00000000,00001000,00000000,00000000); // Init SDRAM controller // Enable EMC clock PCONP_bit.PCEMC = 1; EMCCONTROL = 1; // enable EMC EMCDINAMICRDCFG = 1; EMCDYNAMICRASCAS0_bit.CAS = 3; EMCDYNAMICRASCAS0_bit.RAS = 3; EMCDYNAMICRP = P2C(SDRAM_TRP); EMCDYNAMICRAS = P2C(SDRAM_TRAS); EMCDYNAMICSREX = P2C(SDRAM_TXSR); EMCDYNAMICAPR = SDRAM_TAPR; EMCDYNAMICDAL = SDRAM_TDAL+P2C(SDRAM_TRP); EMCDYNAMICWR = SDRAM_TWR; EMCDYNAMICRC = P2C(SDRAM_TRC); EMCDYNAMICRFC = P2C(SDRAM_TRFC); EMCDYNAMICXSR = P2C(SDRAM_TXSR); EMCDYNAMICRRD = P2C(SDRAM_TRRD); EMCDYNAMICMRD = SDRAM_TMRD; EMCDYNAMICCFG0 = 0x0000680; // 13 row, 9 - col, SDRAM // JEDEC General SDRAM Initialization Sequence // DELAY to allow power and clocks to stabilize ~100 us // NOP EMCDINAMICCTRL = 0x0183; for(volatile Int32U i = 200*30; i;i--); // PALL EMCDINAMICCTRL_bit.I = 2; EMCDINAMICRFR = 1; for(volatile Int32U i= 128; i; --i); // > 128 clk EMCDINAMICRFR = P2C(SDRAM_REFRESH) >> 4; // COMM EMCDINAMICCTRL_bit.I = 1; // Burst 8, Sequential, CAS-2 volatile unsigned long Dummy = *(volatile unsigned short *) ((Int32U)&SDRAM_BASE_ADDR + (0x33UL << (12))); // NORM EMCDINAMICCTRL = 0x0000; EMCDYNAMICCFG0_bit.B = 1; for(volatile Int32U i = 10000; i;i--); } Boolean SDRAM_Test (void) { // 32 bits access for (Int32U i = 0; i < 0x2000000; i+=sizeof(Int32U)) { *(Int32U*)((Int32U)&SDRAM_BASE_ADDR+i) = i; } for (Int32U i = 0; i < 0x2000000; i+=sizeof(Int32U)) { if (*(Int32U*)((Int32U)&SDRAM_BASE_ADDR+i) != i) { printf("Verification error on address : 0x%x\n",(Int32U)&SDRAM_BASE_ADDR+i); return(FALSE); } } // 16 bits access for (Int32U i = 0; i < 0x10000; i+=sizeof(Int16U)) { *(Int16U*)((Int32U)&SDRAM_BASE_ADDR+i) = i; } for (Int32U i = 0; i < 0x10000; i+=sizeof(Int16U)) { if (*(Int16U*)((Int32U)&SDRAM_BASE_ADDR+i) != i) { printf("Verification error on address : 0x%x\n",(Int32U)&SDRAM_BASE_ADDR+i); return(FALSE); } } // 8 bits access for (Int32U i = 0; i < 0x100; i+=sizeof(Int8U)) { *(Int8U*)((Int32U)&SDRAM_BASE_ADDR+i) = i; } for (Int32U i = 0; i < 0x100; i+=sizeof(Int8U)) { if (*(Int8U*)((Int32U)&SDRAM_BASE_ADDR+i) != i) { printf("Verification error on address : 0x%x\n",(Int32U)&SDRAM_BASE_ADDR+i); return(FALSE); } } return(TRUE); }
  15. Вот именно что бегло, топикстартеру нужно автоматически переключать направление без участия МК.
  16. Давно пользуюсь подобной схемой: ASC24TrevB1.pdf На одновибраторе тоже неплохо.
  17. usb ft232-lpc2478 мост

    Да действительно MAX ненужен, я почему-то подумал что там +-12В, а там питание от VCCIO=1.8...5.25V.
  18. usb ft232-lpc2478 мост

    Предполагаю, что такая связка понадобилась для прошивки LPC к примеру "Flash Magic"-ом. Для этого кроме RXD/TXD дополнительно потребуются сигналы DTR (выв.2 FT232R) через MAX3232 на Reset (выв.35 LPC2478) и RTS (выв.3 FT232R) через MAX3232 на ISP_E, он-же EINT0 (выв.110 LPC2478), впрочем можно и без них обойтись если ISP_E - замкнуть перемычкой, а Reset - кнопочкой. Для прочих нужд FT232R - никчемная затея.
  19. Это пришло через неделю после регистрации.
  20. Меня как-раз напрягает то что вы мне это говорите, говорите топикстартеру, я это и без вас знал.
×
×
  • Создать...