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

Проблемы с DCMI-модулем на STM32H743


DimaK

Рекомендуемые сообщения

Приветствую, коллеги!
Вот уже несколько дней веду неравный бой с модулем DCMI контролера STM32H743.
Фишка в том, что я хочу через этот интерфейс затащить данные с параллельной АЦП.
Т.е. использовать совсем не по прямому назначению. Вроде все настроил - и модуль и ДМА.
Написал тестовую прошивку, запихивающую содержимое шины в буфер (для начала просто притянул
несколько пинов шины данных к питанию, чтобы получить значение 0х0403). Импульсы синхронизации 
H_Sync и V_Sync подаю с соседних же пинов. Частота пиксельного клока - 50 МГц.
Проблема вот в чем: прием останавливается после приема примерно 30-40 значений. При этом срабатывает 
интеррапт по переполнению ФИФО (overrun). Т.е. судя по всему, ДМА тупо не успевает разгребать значения. 
Вероятно это как-то связано с кешем - начало хоть как-то работать только  после того, как закоментил
инициализацию кеша данных (т.е. строку SCB_EnableDCache() ). Буду благодарен за любую идею!

Картинки прилагаются.

Вот код:

 /* USER CODE BEGIN 2 */

      uint16_t BUFF_Size = 2000;         // Размер буфера

      uint32_t DCMI_Data [BUFF_Size];    // Буфер приема данных от DCMI
      #if defined ( __ICCARM__ )
      #pragma location = 0x24004000
      uint32_t DCMI_Data [BUFF_Size];
      #elif defined ( __CC_ARM )
      ALIGN_32BYTES(__attribute__((section (".RAM_D2"))) uint32_t DCMI_Data [BUFF_Size]);
      #endif

     uint16_t i;
     uint16_t Count_AUX;
     for (i=0; i<BUFF_Size; i++)    // Обнуляем буфер
     {
       DCMI_Data = 0;
     }

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
     while (1)
     {
        HAL_GPIO_WritePin (DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin,1);
        HAL_GPIO_WritePin(DCMI_H_Sync_GPIO_Port, DCMI_H_Sync_Pin, 1);

        HAL_DCMI_Start_DMA (&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)DCMI_Data, BUFF_Size);

        HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 0);
        for (Count_AUX=0; Count_AUX<500; Count_AUX++)    //
        {
                                                                // Delay
        }
        HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 1);
        for (Count_AUX=0; Count_AUX<500; Count_AUX++)    //
        {
                                                                // Delay
        }
        HAL_GPIO_WritePin(DCMI_H_Sync_GPIO_Port, DCMI_H_Sync_Pin, 0);   // Начало приема данных
        for (Count_AUX=0; Count_AUX<3000; Count_AUX++)    //
        {
                                                               // Delay

        }
        HAL_GPIO_WritePin(DCMI_H_Sync_GPIO_Port, DCMI_H_Sync_Pin, 1);
        for (Count_AUX=0; Count_AUX<500; Count_AUX++)    //
        {
                                                                // Delay
        }
        HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 0);
        for (Count_AUX=0; Count_AUX<500; Count_AUX++)    //
        {
                                                                // Delay
        }
        HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 1);  // Окончание приема

        HAL_Delay (3);
     }
  /* USER CODE END 3 */

 

DCMI_Con.png

DMA_Con.png

H_V_Sync.png

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

4 часа назад, MasterElectric сказал:

идея только одна никто не использует кеш с ДМА 

Да это я понял, уже убрал. И вроде даже заработало, но все еще как-то странно.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...