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

mungo

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о mungo

  • Звание
    Участник
    Участник
  • День рождения 01.02.1977

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Суть проблемы. Свою плату сделали, макетную. LPC4078FET180. BGA сами понимаете не особенно гибкий в вариациях корпус, но для решения моей задачи подходит. Есть USB device port с обычным USB mini. По какой-то непонятной причине стандартные примеры, которые есть в инете, не хотят нормально работать. Кейлом сгенеренное все заточено именно под плату Embedded Artists LPC4088 Developer's Kit board. Вот и хотелось бы увидеть, что в схеме затупил, где различие. Наша схема взята из даташита на камень. Происходит что-то непонятное - то енумерации нет вообще, и прерывания при подключении не происходят, то при передаче данных размером больше эндпоинта (например, 80 байт) переходит в исключение "плл1 сдох". Покупать их плату за 99 евро, только чтобы схему увидеть (а иначе не дают) дороговато...
  2. IAR 4.40A

    ББ - Большой Брат. Комп то есть. Ок, я был не прав, дьявол кроется в деталях. Похоже, что хардварный калькулятор в ББ работает иначе, как впрочем и софтварный в IAR 7.5. То есть для данной точности в 4.40 он то, что считает слишком малым числом, оставляет хвостом, а остальные его отбрасывают. Поэтому получаем не ровно 1, а 1.[куча нолей]9. Вот оттуда и минус... Кто же знал про такие особенности...
  3. IAR 4.40A

    Чуть выше видно, что она есть. Более того, как объяснить, что с теми же данными по таким же формулам ББ считает верно?
  4. IAR 4.40A

    double x,x1; x=1092/1001; // Оба числа целые и результаты измерения входного сигнала x1=1/11; // Константы, указывающие на приращение по отношению измерения 1092 x-=x1; // Исключаем из измерения результат приращения измерения, являющийся погрешностью sprintf(s,"%.14g",x-1.0); // здесь выводим абсолютную погрешность измерений, которая не должна быть больше 1 (-1) На каждую строку специально делал вывод значений, всё вычислялось верно. А вот когда делаю -1, то видим -1.11022е-16. Вроде куда уж подробнее...
  5. IAR 4.40A

    "%.14g"? Не помогает. Здесь идет вычисление погрешности измерений. Нужна точность, которая является никакой, если брать 2 знака.
  6. IAR 4.40A

    Приветствую, господа! Есть типа код: double x,x1; x=1.09; // На самом деле результат вычилений 1.[09] x1=.09; // аналогично, 0.[09] x-=x1; // ожидаемо, 1 sprintf(s,"%g",x-1.0); // Вот и проблема! -1.11022е-16 У кого есть идеи, как побороть? Пробовал в другом компилере, результат, ессно, 0. Более того, эти же данные (в сыром виде) передаются на комп, там по той же формуле из тех же данных идет вычисление, и получается 0. Компилер менять не тема - много переносить, и слишком много использовано особенностей данной версии. Исходные данные: IAR 4.40A (4.42A), AT91SAM7X256 (ARM7), CPP.
  7. LPC4088 + USB

    Господа, ткните нуба в примерчик простой реализации USB Device HID. Те примеры, что идут от производителя, универсальные, и начинающему в данном случае ничего не понять... Задача пока простая - подлючить к компу плату, избежать установки специфических драйверов, принять байтик и выкинуть в ответ что-нибудь...
  8. JetLink9

    Господа, никто не подскажет, что делать? Поставил новый IAR, он сказал, что прошивка в моем программаторе древняя, надо обновить. Ничтоже сумняшеся я согласился. Теперь программатор при включении загорается красным, думает, потом отваливается от шины, потом коннектится и видится в системе, как J-Link. Но! Не работает, то есть никак. И при каждом обращении к нему просит обновить прошивку. Пробовал через утилиту консольную, jlink.exe. Пишет "Replacing firmware: J-Link V9 compiled Oct 12 2012 BTL". И так бесконечно. Производитель признал, что это их проблема, но отправлять его в Киев из Минска - это жесть. Растаможка знаете-ли... Никто сам не смог вылечить подобное?
  9. SK-MLPC2478 (4088)

    Попала такая плата с целью изучить, как работает чудный камень LPC4088. В комплекте шел кабель для РС-232. Больше ничего. Слил с нета FlashMagic. Запустил по умолчанию, попробовал прошить одну из демок. И посыпалось - то ошибка Autobaud, то после этого нет обмена данными. Кабель естественно проверил. Вопрос: если кто имел дело с этой платой, то как её прошить кабелем? З.Ы.: с предшественником LPC2478 знаком, он прошивался без вопросов по РС.
  10. IAR 6.21

    Так и сделал. Появился еще вопрос - можно как-то глобально выравнивание поменять, не выписывая везде прагму? А то 8 байт дофига, когда работаешь с епром на 8 кб, а подбирать всюду надоедает...
  11. IAR 6.21

    Дело в том, что таких названий секциий нету, это раз, а два - код и данные разделились как я понял, поэтому нет точного адреса окончания прошивки.
  12. IAR 6.21

    Чудесно, сегменты исчезли, появились секции, и они ни к чему не обязывают.... Здорово... Хоть возвращайся к старому компилеру... А по второму вопросу?
  13. IAR 6.21

    Вот обновился и впал в ступор. Раньше была директива #pragma segment="CODE_ID" и по ней я мог вычислить, где начало/конец прошивки. Мне это нужно для проверки целостности было. Это первая проблема. Взял старт код из примеров. У меня AT91SAM7X256. Все конечно заработало. Но дальше стало совсем интересно. Решил добавить формирование CRC линкером. Но как оказалось происходит ремап из адреса 0 в 0x100000. И как результат линкер впадает в ступор - генерит прошивку размером более мегабайта, и, ессно, прошивальщик грит что прошивка не влезет. Кто знает, как найти конец прошивки и сформировать вменяемую прошивку с CRC?
  14. LPC 2478 проблемы

    Частота по датешите 25,175, а делителем можно выставить только 24. Или 36, но это много и не работает. С выставлением всех вот проблемы - взято готовое, и не понимаю, как связать то, что в .пдф на ЖК с тем, что задается для LPC. В первом задано время, во втором - какие-то такты непонятно чего. Может вы просто пояните, что к чему в LPC (каюсь, до этого работал только с атмелами).
  15. LPC 2478 проблемы

    Есть LPC2478, SDRAM Samsung K4S561632H, TFT AM-640480G2TNQW-T08H. Досталась самодельная платка. Схема как по даташитам, ничего особенного. Кварц 12 МГц, множитель 12 делитель 1, PLL 288 МГц. Частота проца 72, USB 48. То есть классика. Запуск SDRAM: SCS|=0x00000002; // Reset EMC. EMCCONTROL=0x00000001; // Enable EMC and Disable Address mirror. PCONP|=0x00000800; // Turn on EMC PCLK. PINSEL5=0x05050555; // CAS,RAS,CLKOUT0_1,DYCS0_1,CKEOUT0_1,DQMOUT0_1. PINSEL6=0x55555555; // D0-D15. PINSEL8=0x55555555; // A0-A15. PINSEL9=0x10555555; // A16-A23,OE,WE,BLS0_1,CS_0_. EMCDYNAMICRP =2; // Command period: 3(n+1) clock cycles. EMCDYNAMICRAS =3; // RAS command period: 4(n+1) clock cycles. EMCDYNAMICSREX=7; // Self-refresh period: 8(n+1) clock cycles. EMCDYNAMICAPR =2; // Data out to active: 3(n+1) clock cycles. EMCDYNAMICDAL =5; // Data in to active: 5(n+1) clock cycles. EMCDYNAMICWR =1; // Write recovery: 2(n+1) clock cycles. EMCDYNAMICRC =5; // Active to Active cmd: 6(n+1) clock cycles. EMCDYNAMICRFC =5; // Auto-refresh: 6(n+1) clock cycles. EMCDYNAMICXSR =7; // Exit self-refresh: 8(n+1) clock cycles. EMCDYNAMICRRD =1; // Active bank A->B: 2(n+1) clock cycles. EMCDYNAMICMRD =2; // Load Mode to Active cmd: 3(n+1) clock cycles. EMCDINAMICRDCFG=1; // Command delayed strategy. EMCDYNAMICRASCAS0=0x00000303; // Default setting, RAS latency 3 CCLKs, CAS latenty 3 CCLKs. EMCDYNAMICCFG0=0x00000680; // 256MB, 16Mx16, 4 banks, row=13, column=9. delayMs(100); // 100 ms. EMCDINAMICCTRL=0x00000183; // Mem clock enable, CLKOUT runs, send command: NOP. delayMs(200); // 200 ms. EMCDINAMICCTRL=0x00000103; // Send command: PRECHARGE-ALL, shortest possible refresh period. EMCDINAMICRFR=2; // Set 32 CCLKs between SDRAM refresh cycles. for (int i=0; i<0x40; i++) asm("nop"); // Wait 128 AHB clock cycles. EMCDINAMICRFR=28; // Set 28 x 16CCLKs=448CCLK=7us between SDRAM refresh cycles. //To set mode register in SDRAM, enter mode by issue //MODE command, after finishing, bailout and back to NORMAL mode. EMCDINAMICCTRL=0x00000083; // Mem clock enable, CLKOUT runs, send command: MODE. dummy=*((volatile unsigned int*)(SDRAM_BASE|(0x33<<12))); // Set mode register in SDRAM. EMCDINAMICCTRL=0x00000000; // Send command: NORMAL. EMCDYNAMICCFG0|=0x00080000; // Enable buffer. delayMs(1); // 1 ms. EMCSTATICWAITWEN0 =0x2; // Selects the delay from chip select 0 to write enable. EMCSTATICWAITOEN0 =0x2; // Selects the delay from chip select 0 or address change, whichever is later, to output enable. EMCSTATICWAITRD0 =0x1f; // Selects the delay from chip select 0 to a read access. EMCSTATICWAITPG0 =0x1f; // Selects the delay for asynchronous page mode sequential accesses for chip select 0. EMCSTATICWAITWR0 =0x1f; // Selects the delay from chip select 0 to a write access. EMCSTATICWAITTURN0=0xf; // Selects the number of bus turnaround cycles for chip select 0. EMCSTATICCNFG0 =0x00000081; // Selects the memory configuration for static chip select 0. LCD: PCONP|=0x00100000; // Power Control for CLCDC. // Assign pin: PINSEL0&=BIN32(11111111,11111111,11111111,11111111); PINSEL0|=BIN32(00000000,00000101,01010101,00000000); // P0.4(LCD0), P0.5(LCD1), P0.6(LCD8), P0.7(LCD9), P0.8(LCD16), P0.9(LCD17). PINMODE0&= BIN32(00000000,00000000,00000000,00000000); PINSEL3&=BIN32(11111111,11111111,11111111,11111111); PINSEL3|=BIN32(00000101,01010101,01010101,00000000); // P1.20(LCD10), P1.21(LCD11), P1.22(LCD12), P1.23(LCD13), P1.24(LCD14), P1.25(LCD15), P1.26(LCD20), P1.27(LCD21), P1.28(LCD22), P1.29(LCD23). PINMODE3&=BIN32(00000000,00000000,00000000,00000000); PINSEL4&=BIN32(11111111,11111111,11111111,11111111); PINSEL4|=BIN32(00000101,01001111,11111111,11111111); // P2.0(LCDPWR), P2.1(LCDLE), P2.2(LCDDCP), P2.3(LCDFP), P2.4(LCDENAB), P2.5(LCDLP), P2.6(LCD4), P2.7(LCD5), P2.8(LCD6), P2.9(LCD7), P2.12(LCD18), P2.13(LCD19). PINMODE4&=BIN32(00000000,00000000,00000000,00000000); PINSEL9&=BIN32(11111111,11111111,11111111,11111111); PINSEL9|=BIN32(00001010,00000000,00000000,00000000); // P4.28(LCD2), P4.29(LCD3). PINMODE9&=BIN32(00000000,00000000,00000000,00000000); PINSEL11&=BIN32(11111111,11111111,11111111,11111111); PINSEL11|=BIN32(00000000,00000000,00000000,00001101); // bit0=1 - LCD port is enabled. bit1...3 = 110 TFT 16-bit. (1:5:5:5 mode) // ADJ_PH. PINSEL7_bit.P3_24=0x00; FIO3DIR_bit.P3_24=1; FIO3SET_bit.P3_24=1; // Pixel serializer. /* This block reads the 32-bit wide LCD data from the output port of the DMA FIFO and extracts 24, 16, 8, 4, 2, or 1 bpp data, depending on the current mode of operation. The LCD controller supports big-endian, little-endian, and Windows CE data formats. */ // For HV Mode, DV Mode 16-bit LCD_CFG=2; LCD_TIMH=((131<<24)|(17<<16)|(11<<8)|(((640/16)-1)<<2)); LCD_TIMV=((11<<24)|(32<<16)|(2<<10)|480); LCD_POL=((0<<27)|(1<<26)|(((640/1)-1)<<16)|(0<<14)|(0<<13)|(1<<12)|(1<<11)|(0<<6)|(0<<5)|(2<<0)); LCD_CTRL=((0<<10)|(0<<9)|(0<<8)|(1<<5)|(4<<1)|(0<<0)); // 100 = 16 bpp, 1:5:5:5 mode. 101 = 24 bpp (TFT panel only). 110 = 16 bpp, 5:6:5 mode. LCD_UPBASE=SDRAM_BASE; LCD_LPBASE=SDRAM_BASE; for (int i=0;i<50000;i++); LCD_CTRL|=1; for (int i=0;i<50000;i++); LCD_CTRL|=1<<11; Код почищен, есть только запуск. Затем тупо записываем муар в видеопамять - чередование черный цвет/серый 50%. Видим: изображение дрожит, будто низкая частота кадров. При этом проц крутится в пустом цикле, ничего не делая. Если вставляем в пустой цикл запись любого значения в любой адрес SDRAM, картинка разваливается - выглядит, как помехи на телевизоре при отсутствии сигнала. При этом память значения держит, ничего не изменяется и не теряется. То есть очевидно, что контроллер дисплея тупит. Поэтому вопросы: 1. Кто знает, что не так запущено? Как убрать мерцание муара? 2. Какие могут быть особенности, чтобы контроллер LCD не обваливался при записи в SDRAM? 3. Не к железу вопрос, а к софту. Как IARу объяснить, что SDRAM можно использовать под HEAP например? Ручками назначать указатели и писать свой менеджер памяти неохота... 4. Хотел приделать работу с масштабируемыми шрифтами, но задача переделки freetype linux'ового под МК мне показалсь слишком сложной. Есть ли что попроще готовое? Буду крайне благодарен за любые советы.
×
×
  • Создать...