Jump to content

    

ianpo

Участник
  • Content Count

    48
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ianpo

  • Rank
    Участник
  1. 1. Как задавать инверсный вывод ПЛИС (PLL1_CLKOUTn)? 2. Можно ли использовать прямой вывод ПЛИС как выход ФАПЧ, одновременно используя инверсный выход как обычный I\O? output oCLK_84 - это сигнал, прямой вывод ФАПЧ, идет на SDRAM_CLK set_location_assignment PIN_113 -to oCLK_84 (EP4E6E22) Мне нужен снаружи еще инверсный, как его задать? И если мне нужен инверсный как просто другой сигнал, как его задать?
  2. Добрый день! Подключил 14" дисплей UB141X01 от ноутбука к WaveShare CoreEP4CE6 (VIO = 3.3 вольта, а не 2.5, но для проверки ничего другого не было). Все работает, как ожидалось, но мне нужно обновлять экран раз в 70 мс, а не в 20 мс максимум, как в даташите. Возник вопрос: а если передать сигналы RGB и развертку только 1 раз? Оказалось, изображение после 1 кадра сразу пропадает. Если управлять таким способом сигналом CK_IN+- (тактовый вход дисплея), то изображение после передачи кадра возникает, потом расплывается с артефактами за несколько секунд, и остается неподвижным, но искаженным. Тогда я сделал двухбитовый счетчик кадров, и управлял уже сигналом CK_IN+-: сигнал подавался, когда счетчик == 3 (каждый четвертый кадр), то есть период обновления стал в 4 раза больше. В этом случае на экране возникали артефакты (две гориз. линии), но остальное изображение было нормальным. Собственно, вопросы: 1) можно ли как-то передавать данные на матрицу без артефактов и с бОльшим периодом обновления? 2) изображение на матрице само не держится ( как на e-ink ), надо постоянно обновлять?
  3. iosifk, cпасибо за ответ Между записью в регистр и последующим чтением гарантированно проходит очень много тактов, тогда и один регистр, наверно, не нужен.
  4. Разрабатываю устройство на Cyclone II. Есть два домена(модуля): 60 и 100 МГц Первый пишет ЗАРАНЕЕ в некий регистр regA, который читается ПОТОМ во втором домене. Но значение regA не меняется во время работы второго домена. ОБЯЗАТЕЛЬНО ли использовать два последовательных регистра для передачи данных регистра в данном случае? TimeQuest ругается сейчас(без регистров), но можно запретить анализировать переход данныз из 60 в 100.
  5. Кнопка опрашивается только до отключения диска в ОС - проверено. Потом suspend и, если диск был отключен, оттуда уже не выходит.
  6. Нет, не должна, девайс уходит в Suspend. Куда уходит управление, описано тут: http://forum.easyelectronics.ru/viewtopic....542&start=0 Коротко: в usb_istr.c есть переход в Suspend, если нет пакетов от хоста. Решение: main.c __IO bool DevWasConfigured = false; Set_System(); Set_USBClock(); USB_Interrupts_Config(); USB_Init(); while ( bDeviceState != CONFIGURED ); DevWasConfigured = true; while ( 1 ); usb_istr.c extern __IO bool DevWasConfigured; #if (IMR_MSK & ISTR_SUSP) if (wIstr & ISTR_SUSP & wInterrupt_Mask) { if ( DevWasConfigured ) NVIC_SystemReset(); // <<<<<< вот это добавляем /* check if SUSPEND is possible */ if (fSuspendEnabled) { Suspend(); } else { /* if not possible then resume after xx ms */ Resume(RESUME_LATER); } Т.е., если девайс был сконфигурирован, а потом отключился, то МК перезагружается. В случае сбоев он тоже перезагружается, что, наверное, неплохой вариант. З.Ы. Альтернативное "решение" менять fSuspendEnabled на false приведет к тому, что USB-кабель надо будет подключать ДО переключения в режим USB (мой девайс переводится в режим флешки по кнопке). А так можно и до, и после, что удобнее и не приводит к появлению неопознанных USB-устройств. З.Ы.2. Теперь девайс уже не перезагружается по кнопке, но у меня на случай сбоев есть еще кнопка Reset
  7. Здравствуйте! С наступающим вас! Собственно, такой код: Set_System(); Set_USBClock(); USB_Interrupts_Config(); USB_Init(); while ( bDeviceState != CONFIGURED ); while ( pBUTTs2->IDR & FE_BUT_UM ); // крутим, пока кнопка не нажата NVIC_SystemReset(); МК перезагружается по кнопке, только пока диск подключен в Windows. Как только я его отключаю, на кнопку уже не реагирует :( Как сделать автоматическую перезагрузку МК при отключении? Или скажите, хотя бы, в какую часть кода МК я попадаю при отключении диска в ОС (может, в прерывание или исключение какое-нибудь) !
  8. Красные победили - чтение 667, запись 333 кБайт/с на Transcend 2 Гб (на 8 Гб SanDisk чтение ~700/500, на Kingston 4Гб ~700/400). Основная суть переделки в memory.c - расширен буфер с 512 байт до 8 кБ. Замечания: 1. Код Nemui Trinomius, похоже, негодный - работает только как низкоскоростной, после расширения буфера часть карт стала запарываться на записи. 2. Код от STM для 3210E-EVAL - хороший, протестирован на разных картах, все карты на выс.скорости работают нормально (файлы stm3210e_eval_sdio_sd.c и .h подойдут для 103 серии, вероятно, для 10х даже). 3. Сделаны кое-какие мелкие поправки (карта вставлена/нет и какой вывод это проверяет). 4. В свой основной проект (на Em::Blocks) код я пока не адаптировал, но, вроде, не должно быть проблем. Будем посмотреть. Проект прилагаю. STM32_USB_FS_Device_Lib_V4.0.0.7z
  9. Как настроить Em::Blocks для заливки прошивки без отладчика http://ravenium.ru/r-emblocks-patch/#download
  10. Если я правильно понял, то вместо WriteBlock я делаю копирование memcpy( myDestBuffer, (uint8_t*)Writebuff, TransferLength ) ? uint8_t myDestBuffer[512]; #define SD_DMA_MODE //#define SD_POLLING_MODE #if defined(SD_POLLING_MODE) #define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x6) #else #define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x1) #endif Соответственно, 48/(1+2)=16. Менял на 4 и 6 - скорости чтения-записи заметно не изменились. С копированием в ОЗУ скорость ровно такая же - 667 кБ/с. Status = SD_OK; memcpy( myDestBuffer, (uint8_t*)Writebuff, Transfer_Length ); //SD_WriteBlock( (uint8_t*)Writebuff, Memory_Offset, Transfer_Length ); --------------------------------------------------------------------------------------------------------------- Поправил функции ReadBlock и WriteBlock, как в примерах ST - получаю 285 кБ/с чтение и 111 - запись. Уныло как-то.
  11. Сделал вот так: uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length) { switch (lun) { case 0: Status = SD_OK; //SD_WriteBlock( (uint8_t*)Writebuff, Memory_Offset, Transfer_Length ); if ( Status != SD_OK ) { return MAL_FAIL; } break; default: return MAL_FAIL; } return MAL_OK; } Ничего не пишется теперь. Скорость записи средняя 667 КБ/с, местами до 1 МБ/с. Т.е. почти на порядок выше.
  12. Я уже это делал - убирал из функции WriteMultiBlocks цикл задержки - скорость записи увеличивалась до 1 МБайт/с, но на карточку в файл писались нули :)
  13. USB DP подтягивается к "1" на ноге контроллера через резистор. Схему прилагаю. На флешках 4ГБ скорость чтения 500 кБайт/с, а записи - около 100. Это явно не LS. Кстати, в примере от ST функции типа WaitReadOperation виснут. Пришлось делать через опрос флага TransferComplete TC4. Попробую завтра померять время записи сектора, посмотрю, где задержки.
  14. Вот я и пытаюсь понять, что не так. Кстати, FS = 12 Мбит/с , т.е. 1.5 МБ/с максимум. Девайс FullSpeed