Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-авг-22 05:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3 Все  След.
Автор Сообщение
 Заголовок сообщения: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-04 03:46 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
Есть работащий пример с запуском видеокамеры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-04 03:57 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
И вроде как на плате с 1967vn034 есть разъёмы, чтобы подключить плату с камерой OV7670.
у неё SCCB-интерфейс для настройки регистров. (I2C-соместивый интерфейс).

На плате пины называются, как I2C_CLK_CAM и I2C_DATA_CAM.
Эти пины заведены в проц на пини PA23 и PA24.

Но на этих пинах нет и2ц интерфейса.
В даташите на весь проц вообще не нашёл описание и2ц.
В HAL библиотеке тоже нет файлика с и2ц.

Предполагалось, что камера запуститься сразу без предварительной настройки?
У меня не вышло.
В скрине прикреплю пример, поставляемый вместе с халом.
Он нерабочий!


ps: похоже, что автор кода даже не запускал этот пример.
Потому что он даже не компилируется.


Вложения:
Capture.PNG
Capture.PNG [ 29.97 КБ | Просмотров: 537 ]


Последний раз редактировалось Анисимов Александр 2019-июн-12 22:02, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-04 08:09 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 199
Откуда: Миландр
Интерфейс I2C реализуется программно.
Пример я вам отправил. Возьмите из него нужный вам код.
Пример писался давным давно. Тогда ещё использовался не LLVM компилятор
с никудышной оптимизацией. Сейчас такой код с LLVM компилятором нужно использовать
с отключенной оптимизацией т.к. всевозможные задержки реализуются в Си обычным счетчиком и
компилятор все это чистит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 05:28 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
Пример получил, спасибо.
I2C подстроил под свой проект. Работает.
У меня похоже немного другая камера, так как откликается на другой адрес слейва.
Ну это неважно. Сейчас камера пишет и читает успешно любой регистр, но всё равно не работет.

Настроил на ней выдачу данных в RGB565.
Судя по осциллографу камера начинает шпарить сразу после включения питания.

Настраиваю камеру такой функцией:
Код:
  HAL_CAMERA_Disable();
  HAL_CAMERA_SetupGpio();
  HAL_CAMERA_StartDma(CAM_DMA_CHANNEL,
                      video_buf, //Буфер, куда кладётся изображение. С этого же буфера читает дма по каналу 4 и отправляет его в дисплей
                      picture_xsize, // это размеры моего дисплея
                      picture_ysize,
                      picture_xsize / 2, // не понял что это. В примере написано, что это приращение адреса после передачеи одной строки. Поэтому пославил сюда длину строки
                      PIXELS_IN_WORD, // 2 пикселя в слове. Так как один пикслель описывается 16ю битами.
                      CamDmaDoneTransfIrqHandler);
  HAL_CAMERA_Enable(RECEIVE_MODE_CAMERA);

  ov7670HwInit();
  ov7670Reset();
  ov7670Init();



Обработчик прерывания CamDmaDoneTransfIrqHandler() никогда не вызывается


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 05:30 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
Вот код обработчика
Код:
#pragma interrupt
static void CamDmaDoneTransfIrqHandler(void) {
  HAL_CAMERA_Disable();
  HAL_CAMERA_StartDma(CAM_DMA_CHANNEL,
                    video_buf,
                    picture_xsize,
                    picture_ysize,
                    picture_xsize/2,
                    PIXELS_IN_WORD,
                    CamDmaDoneTransfIrqHandler);
  HAL_CAMERA_Enable(RECEIVE_MODE_CAMERA);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 09:06 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 199
Откуда: Миландр
А просто присланный пример не пробовали адаптировать?

1. Сначала вы должны настроить камеру, т.е. через I2C интерфейс запрограммировать все нужные
параметры и режимы работы. Камера действительно сразу начинает шпарить.
2. Несмотря на то, что кто-то нам гонит инфу на входы, мы можем не торопиться, а спокойно настраивать
внутренности. В примере, после // Camera device setup
идет настройка LCD // LCD setup and run
Использовать LCD не обязательно, но в данном случае через панель глазами проверяется,
что что-то работает.
3. после этого мы переходим к включению интерфейса который будет принимать данные от видеокамеры.
Важен порядок действий.
- настраиваем интерфейс, но пока не включаем бит разрешения работы.
Не вижу HAL_CAMERA_Config , но возможно значения по сбросу вам подходят.
- настраиваем канал DMA который забирает данные от интерфейса и грузит в буфер, откуда их берет
другой канал DMA и передает в интерфейс к LCD.// Start camera DMA
Канал DMA интерфейса к видеокамере не заработает пока не включим интерфейс.
При настройке канала DMA смотрим НЕ размер LCD панели, а тот размер картинки которую
шпарит видеокамера. Врят-ли она дает 480х272.
Параметр, который вы не поняли, задан ошибочно. Нужно читать док на DMA и смотреть как работает 2-D пересылка.
Скорее всего вам нужно было записать 4, т.к. данные у вас грузятся непрерывно.
- включаем интерфейс, просто установив в 1 бит разрешения. Не знаю почему у вас вызов
HAL_CAMERA_Enable(RECEIVE_MODE_CAMERA);
Я нашел в HAL такую функцию
void HAL_CAMERA_Enable( void ){ LX_CAMERA->CR.b.VCON = 1; }

Как бы вы не настроили канал DMA интерфейса к камере , он что-то отгрузит если к нему будут запросы от интерфейса.
После отгрузки канал DMA даст запрос на прерывание.

Хотя камера передает данные непрерывно, интерфейс должен работать в режиме фотоаппарата.
Канал ДМА отгрузит одну картинку и выключится. Интерфейс будет продолжать принимать данные,
но они никуда не будут отсылаться.
Чтобы сделать следующую фотку нужно сначала выключить интерфейс ,// Stop camera and reset flags
настроить канал ДМА,// Start camera DMA
а потом включить бит разрешения // Start video


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 10:11 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 199
Откуда: Миландр
В модуле CMU есть регистр блокирующий клоки различных интерфейсов.
По сбросу всё разрешено, но, в стартовом ПЗУ многие режимы загрузки все клоки блокируют.
Поэтому первое , что нужно сделать, это разрешить прохождение клока шины и
клока видеокамеры на интерфейс.

При отладке возможны разные ситуации. Отладочник может не дать стартовому ПЗУ выполнить блокировку
и загрузит свой код. И все будет работать. Но если запустите не в отладочном режиме,
то ничего работать не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 15:35 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 199
Откуда: Миландр
Попробовал пример, который отослал вам, на своей плате ВН44.
Обнаружил неточность в программе :)
При настройках канала DMA
*(ptr + 3) = TCB_EXTMEM | TCB_TWODIM | TCB_HPRIORITY | TCB_QUAD | TCB_INT
| TCB_DMA8DEST | TCB_CHAIN | ((unsigned int)&qw_tcb_cam >> 2);
не нужно включать цепочку операций.
Правильно
*(ptr + 3) = TCB_EXTMEM | TCB_TWODIM | TCB_HPRIORITY | TCB_QUAD | TCB_INT;
Иначе канал ДМА непрерывно принимает данные от интерфейса камеры, а в цикле мы
интерфейс выключаем и работающий канал DMA активируем заново.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 15:44 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
BY_man писал(а):
В модуле CMU есть регистр блокирующий клоки различных интерфейсов.
По сбросу всё разрешено, но, в стартовом ПЗУ многие режимы загрузки все клоки блокируют.
Поэтому первое , что нужно сделать, это разрешить прохождение клока шины и
клока видеокамеры на интерфейс.

При отладке возможны разные ситуации. Отладочник может не дать стартовому ПЗУ выполнить блокировку
и загрузит свой код. И все будет работать. Но если запустите не в отладочном режиме,
то ничего работать не будет.


При включении после настройки pll
выставляю в регистре CFG8 следующее:
Код:
*(unsigned int* )(CMU_CFG8_LOAD_LOC) = 0x30e0;

То есть интерфейс камеры заклокирован


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 15:46 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 199
Откуда: Миландр
0-е значение разрешает синхронизацию. Бит 2 в нуле , значит интерфейс работает.
Бит 14 тоже в 0, значит LCD интерфейс тоже активен.

Пока не могу понять почему у вас нет прерывания.
Даже если вы неправильно запрограммировали ДМА канал, то все равно когда-то он
отошлет куда-то все данные и даст прерывание.
Нужно проверить, что прерывания везде разрешены:
- в канале ДМА
- в контроллере прерываний
- в SQCTL регистре
Если нет прерываний , можно остановить процессор отладочником и посмотреть состояние ДМА канала.
Если канал ничего никуда не отсылал, значит нет запросов от интерфейса.
Тогда нужно копать там.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 16:05 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
BY_man писал(а):
Нужно проверить, что прерывания везде разрешены:
- в канале ДМА
- в контроллере прерываний
- в SQCTL регистре

Да, всё это разрешено.
Похоже нужно проверить жив ли интерфейс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 16:07 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 199
Откуда: Миландр
можно включить камеру, затем интерфейс, но не включать ДМА канал.
По регистру состояния камеры можно определить есть ли переполнение буфера , т.е.
были ли на входе данные.
Интерфейс для старта приема ждет определенную комбинацию сигналов вертикальной и горизонтальной развертки.
Посмотрите полярности сигналов развертки. Возможно они подстраиваются в камере.
Гляньте еще схему платы - может там (случайно) какие-нибудь инверторы на этих сигналах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 21:49 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
BY_man писал(а):
А просто присланный пример не пробовали адаптировать?

Пробовал.
Если делаю настройку dma для камеры так, как в примере, то есть
Код:
   // Use channel 8
   // Select request source Video for channel 8
   *(unsigned int *)base_DMACFGH = 4 << 0;
   
   // Setup channel
    ptr = (unsigned int *)&qw_tcb_cam;;
   *(ptr + 0) = 0x40000000;
   *(ptr + 1) = ((640 / 2) << 16) | 4;
   *(ptr + 2) = (480 << 16) | 4;
   *(ptr + 3) = TCB_EXTMEM | TCB_TWODIM | TCB_HPRIORITY | TCB_QUAD | TCB_INT;

   __builtin_sysreg_write4 (__DC8, qw_tcb_cam);


То прилетает постоянно прерывание intHW.
Судя по даташиту данное прерывание сейчас возникает только из-за неверной настройки ДМА.
Так как всё остальное работает хорошо. (в прерывание считываю регистр статуса и убеждаюсь, что всё норм).
Отсюда делаю вывод, что неверно настроен канал дма.

При использование функции из хал такой ошибки не возникает, но, к сожалению, пока что всё ещё не работает.
Ищу ошибку дальше


Вложения:
Capture.PNG
Capture.PNG [ 44.77 КБ | Просмотров: 441 ]


Последний раз редактировалось Анисимов Александр 2019-июн-05 23:35, всего редактировалось 2 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-05 22:08 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
Вообще не очень понимаю как в дисплей 480х272 можно вывести картинку с камеры 640х480. И то и то в RGB565.
В итоге не совсем понятно какой буфер (речь про видеобуфер) задавать в функциях
Код:
void HAL_LCD_StartDma(uint32_t ulChannel,
                      void *pvLcdBuf,
                      uint32_t ulXSize,
                      uint32_t ulYSize,
                      uint32_t ulRgbMode,
                      void *pvDmaIsrHandler );

И какой в
Код:

void HAL_CAMERA_StartDma(uint32_t ulChannel,
                         void *pvCameraBuf,
                         uint32_t ulXSize,
                         uint32_t ulYSize,
                         uint32_t ulDelta,
                         uint8_t ucPixelsInWord,
                         void *pvDmaIsrHandler)

Речь про параметр void *pvLcdBuf и void *pvCameraBuf,.
Я полагал, что раз я хочу, чтобы картинка с камеры вывелась на дисплей, то надо, чтобы этот буфер был один. То есть канал 8 ДМА пишет в этот буфер, а канал 4 читает с этого буфера и отправляет в дисплей. (второе работает хорошо. Я могу программно рисовать на дисплее, записывая байты в буфер pvLcdBuf).

Но как это должно работать, если эти буферы разные в размере? (один теоритеически это 640х480, другой 480х272)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видеоинтерфейс
СообщениеДобавлено: 2019-июн-06 01:20 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 60
Откуда: НИЯУ МИФИ
BY_man писал(а):
можно включить камеру, затем интерфейс, но не включать ДМА канал.
По регистру состояния камеры можно определить есть ли переполнение буфера , т.е.
были ли на входе данные.


В регистре состояния камеры (SR) после старта интерфейса записано 0x01. То есть - нет данных в буфере :(
При это камера по i2c отвечает и по осциллографу на линиях есть данные.

Буду разбираться с полярностью сигналов синхронизации.

UPD:
Разобрался с полярность. Необходимо было в камере выставить битик, который превратит HREF в HSYNC.
Теперь на дисплей выводится "что-то" (какие-то полосы, которые реагируют на освещение).
Видимо тут проблема как раз с выводом сиганала с камеры 640х480 в дисплей меньшего разрешения.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3 Все  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB