Manhoso 0 7 апреля, 2009 Опубликовано 7 апреля, 2009 · Жалоба Еще интереснее стало. Вчера код работал прекрасно. Прихожу с утра, загружаю абсолютно тот же код - вместо картинки в память опять записывается какое-то дерьмо...Что происходит??????????????????????? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 7 апреля, 2009 Опубликовано 7 апреля, 2009 · Жалоба Вероятнее всего что-то мешало DMA в процессе записи во внешнюю память - это недочеты самой VDK. Вы точно даете преимущество DMA над процессором при обращении к памяти? *pEBIU_AMGCTL |= 0x100; Иначе, как известно, LWIP не работает Еще интереснее стало. Вчера код работал прекрасно. Прихожу с утра, загружаю абсолютно тот же код - вместо картинки в память опять записывается какое-то дерьмо...Что происходит??????????????????????? Вообще-то так бывает, когда что-то нужное не инициализировано Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 7 апреля, 2009 Опубликовано 7 апреля, 2009 (изменено) · Жалоба Да, я установил cdmaprio в 1, один хрен. Сузил проблему. Вобщем, после загрузки всех данных во внешнюю память в регистре DMA1_0_IRQ_STATUS бит DMA_DONE устанавливается в 1, а бит DMA_RUN НЕ переходит в 0, хотя должен. Вызов функции printf("DMA done") переводит бит DMA_RUN в нулевое состояние (хрен его знает почему). Если не использовать VDK, то при загрузке всех данных во внешнюю память DMA_RUN всегда сбрасывается в ноль, а бит DMA_DONE устанавливается в единицу. Следовательно, при работе VDK DMA1 не может завершить корректно свою работу. Как это исправить? Изменено 7 апреля, 2009 пользователем Мухаммор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 8 апреля, 2009 Опубликовано 8 апреля, 2009 · Жалоба Эммм...Кажися, получилось. VDK_PushCriticalRegion(); VideoSensorFrameCapture ( 0x02200000 ); while(DMA1_0_IRQ_STATUS&0x08){} //ждать пока не сбросится бит DMA_RUN VDK_PopCriticalRegion(); Код функции захвата картинки: void VideoSensorFrameCapture ( unsigned short *usPTR ) { *pDMA1_0_X_COUNT = 720; // MI350 pixels per line *pDMA1_0_Y_COUNT = 480; // lines per frame from the sensor *pDMA1_0_X_MODIFY = 2; // Modifier 2 because of 16-bit DMA mode *pDMA1_0_Y_MODIFY = 2; // Modifier 2 because of 16-bit DMA mode *pDMA1_0_START_ADDR = usPTR; // Destination address of the image *pDMA1_0_CONFIG = STOP_MODE | RESTART | DMA2D | WDSIZE_16 | WNR; // PPI0 setup *pPPI0_FRAME = 480; //The PPI is set to receive X lines per frame *pPPI0_COUNT = 719; //The PPI is set to stop receiving after X number of samples for each liene *pPPI0_CONTROL = POL_S | POL_C | DATALEN | DataPacking | CFG_GP_Input_3Syncs | GP_Input_Mode; *pDMA1_0_CONFIG |= DMAEN; // | DMA enable ssync(); *pPPI0_CONTROL |= PORT_EN; // | Start PPI ssync(); } А ведь так хотелось кого-нибудь убить... :maniac: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 8 апреля, 2009 Опубликовано 8 апреля, 2009 · Жалоба Следовательно, при работе VDK DMA1 не может завершить корректно свою работу. Как это исправить? Выбросить это гавм... VDK. Работать с RTOS, не имея ее исходников, IMHO, несколько не комфортно. void VideoSensorFrameCapture ( unsigned short *usPTR ) { ... *pDMA1_0_CONFIG = STOP_MODE | RESTART | DMA2D | WDSIZE_16 | WNR; ... } У вас ведь BF561? Почему не хотите использовать 32-х битный DMA? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 (изменено) · Жалоба Не хочу, потому что параллельный порт исключительно шестнадцатиразряден! =) Есть библиотеки для RTOS uCOS. А к ней LwIP прикрутить можно? Изменено 9 апреля, 2009 пользователем Мухаммор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Не хочу, потому что параллельный порт исключительно шестнадцатиразряден! =) Ну и что? Внутренние шины и SDRAM ведь 32-х разрядные. А упаковка данных с PPI в 32 бита - забота DMA. Есть библиотеки для RTOS uCOS. А к ней LwIP прикрутить можно? Можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Ну и что? Внутренние шины и SDRAM ведь 32-х разрядные. А упаковка данных с PPI в 32 бита - забота DMA. Спасибо, не знал о таком способе. Но все равно, в данном конкретном случае он никакой выгоды не даст... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Не хочу, потому что параллельный порт исключительно шестнадцатиразряден! =) Есть библиотеки для RTOS uCOS. А к ней LwIP прикрутить можно? В uCOS есть свой стек. Так что ничего прикручивать и не нужно по большому счету Но uCOS хочет роялти http://www.micrium.com/analog/index.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба В uCOS есть свой стек. Так что ничего прикручивать и не нужно по большому счету Но uCOS хочет роялти Чего хочет uCOS??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Чего хочет uCOS??? Денег отчислений от прибыли :rolleyes: Это коммерческая RTOS Если проект некоммерческий они дают исходники а иначе говорят - надо делиться http://www.micrium.com/products/tcp-ip/tcp-ip_download.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Ничем не могу им помочь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться