Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/79: Рейтинг темы: голосов - 79, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838

Видеоконтроллер без прерываний, да и вообще без процессора

27.03.2016, 20:48. Показов 15632. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только два таймера, spi, dma и 40 строчек программы инициализации )
Полный размер кадра - 288 точек x 312 строк x 1 бит.
Но это включая и невидимую часть, а видимой будет картинка где-то 200x200, зависит от телевизора.
Ниже настройки для stm32f103, 72 МГц, но всё это легко перестраивается и под другой мк.

Первый таймер выдаёт строчные синхроимпульсы - период 64 мкс, импульс 4.7 мкс, активный ноль.
Выдаёт он их только когда нет кадрового синхроимпульса, поэтому режим gated.
Code
1
2
3
4
5
6
7
8
9
TIM4->PSC  = 16-1;
TIM4->ARR  = 288-1;                    // 64 us
TIM4->CCR3 = 21;                       // hsync 4.7 us
BIS (TIM,4,CCMR2, OC3M);               // pwm mode 2
BIS (TIM,4,CCER,  CC3E);
BIX (TIM,4,SMCR,  SMS, SMS_2,SMS_0);   // gated mode
BIX (TIM,4,SMCR,  TS, TS_1);           // tim3
BIS (TIM,4,CR1,   CEN);
BIX (GPIO,B,CRH,  CNF8, CNF8_1,MODE8); // push-pull ch3
Второй таймер управляет первым, оставляя его в низком уровне на время кадровых синхроимпульсов, тем самым формируется синхросмесь.
Период кадровых синхроимпульсов 20 мс (312 строк), импульс 256 мкс, активный ноль.
Code
1
2
3
4
5
6
7
TIM3->PSC  = 16*288-1;
TIM3->ARR  = 312-1;       // 20 ms
TIM3->CCR4 = 4;           // vsync 256 us
BIS (TIM,3,CCMR2, OC4M);  // pwm mode 2
BIS (TIM,3,CCER,  CC4E);
BIS (TIM,3,CR2,   MMS);   // oc4ref
BIS (TIM,3,CR1,   CEN);
Картинка формируется непрерывной передачей потока байтов по spi, spi используется просто как сдвиговый регистр.
Частота 4.5 МГц, байтовая передача, 36 байт (288 точек) на строку (64 мкс).
Используется только вывод mosi.
Code
1
2
3
4
BIX (SPI,1,CR1,  BR, BR_1,BR_0,MSTR,LSBFIRST);  // 72/16 MHz
BIS (SPI,1,CR2,  TXDMAEN);
BIX (AFIO,,MAPR, SWJ_CFG, SWJ_CFG_1,SPI1_REMAP);
BIX (GPIO,B,CRL, CNF5, CNF5_1,MODE5);           // push-pull mosi
Поток байтов автоматически циклически вычитывается по dma из массива uint8_t x_bits[312][36].
Такое странное название потому, что так xnview называет массивы в xbm-формате )
Code
1
2
3
4
5
DMA1_Channel3->CMAR  = (uint32_t) &x_bits;
DMA1_Channel3->CPOR  = (uint32_t) &(SPI1->DR);
DMA1_Channel3->CNDTR = 36*312;
BIS (DMA,1_Channel3,CCR, DIR,MINC,CIRC);
BIS (DMA,1_Channel3,CCR, EN);
Последний штрих - синхронизация таймеров и dma.
Code
1
2
3
BIS (TIM,4,EGR, UG);
BIS (TIM,3,EGR, UG);
BIS (SPI,1,CR1, SPE);
Это всё )

Схема подключения:
PB8 (sync) ---[620 Ом]---> VIDEO
PB5 (data) ---[300 Ом]---> VIDEO

BIS и BIX в тексте - просто макросы установки битов в регистрах.




<Изображение удалено>

[3.73 Кб]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2016, 20:48
Ответы с готовыми решениями:

Windows 7 тормозит без видимых причин и без загрузки процессора
Добрый день! Уже неделю бьюсь над проблемой: конфигурация моего компа не самая лучшая, но Семерку должна тянуть без особых проблем, а на...

Нужно написать программу без перегрузок операторов и вообще без перегрузок
Рациональная (несократимая) дробь представляется парой целых чисел (а, b), где а — числитель, b — знаменатель. Создать класс Rational для...

Как завершить com программу без прерываний.
Подскажите, пожалуйста, как завершить без прерывания программу com (и без ret).

44
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 3
29.03.2016, 12:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от vt340
kos, ну частоты посчитайте, память, времянки прерываний, тестик попробуйте того что предлагаете, потом будем дальше про факт или не факт говорить )
А что касается "ресурсов", которые будут заняты этим моим простеньким видео, то шину по dma он занимает где-то на 1% по моим прикидкам, а манимуляции с байтиками видимой области - т.е. с 4-5 Кбайтиками - порядка миллисекунды на полную заливку, причём не подстраиваясь под синхроимпульсы, время обратного хода и т.п.
Кстати, не обязательно вообще чего-то формировать.
Например, если в области видео-памяти разместить какие-то буферы какой-то приёмо-передачи, то занятно просто наблюдать в реальном времени как там шевелятся байтики )
Э-э-э-э... Я кстати не наезжал на Ваше решение. Я сказал только то что если его доводить до полного GUI то оно тоже начнет есть ресурсы.. На подготовку этого самого GUI. Это ж так? Если обходится без ГУЯ то все хорошо и просто. Да и с ним все хорошо и просто. Но кстати решение STM тоже не шибко то ресурсоемкое. Я имею ввиду F429. И не всегда ему нужен SDROM. Все от задач.
Но ваше проще если видео используется для отладки и только. В остальных случаях его может быть недостаточно.
Я отвечал человеку что графика вообщем-то возможна не только на Малинке(и подобном) и не факт что на Малинке правильно и дешевле. Повторюсь все от задач.
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
29.03.2016, 13:00
kos, вы не читаете что ли то на что отвечаете? )
Мне глубоко фиолетово кто тут на что наезжает, я вам предлагал от абстрактных оценочных суждений к конкретике какой-то перейти, чтоб предметный разговор был.
Сферических коней в вакууме можно тоже конечно пообсуждать, но не интересно )
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
29.03.2016, 13:29
Вывод на телевизор средствами микроконтроллера - это в любом случае некое дополнение к другим задачам, которые мк выполняет. Если основная задача - качественная графика, конечно, надо брать другое железо.

На OpenCores есть два проекта видеоконтроллеров PAL.
Один простой, с небольшим количеством цветов и разрешением, на одной CPLD типа MAX2.
Другой - полноценный, с внешним видео-ЦАП, и кажется, внешней SDROM, высокое разрешение, 16 бит цвет.

Прямо сейчас передо мной лежит разветвитель VGA. Он на одной Cyclone2 сделан, содержит vga АЦП и 2 vga цап, позволяет как дублировать картинку, так и растянуть на 2 экрана.

По задачам - и инструменты.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
29.03.2016, 13:34
Цитата Сообщение от kos
А чем графика 800х480 не качественная?? Ее вполне реализует stm32f469.
Примечательно, что F469-Dysco этот экран большого разрешения подключает по интерфейсу DSI (линк 500 Мбит/с), в то время как F429-Dysco и даже F746-Dysco свои экраны низкого разрешения (320*240 и 480*272, соответственно) подключают по более медленному RGB parallel.

Может, это просто совпадение. А может, стм-ки на 800*480 уже притормаживают, из-за чего был выбран суперскоростной интерфейс. Х.з.
0
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 3
29.03.2016, 14:14
Цитата Сообщение от OtyxPM
Цитата Сообщение от kos
А чем графика 800х480 не качественная?? Ее вполне реализует stm32f469.
Примечательно, что F469-Dysco этот экран большого разрешения подключает по интерфейсу DSI (линк 500 Мбит/с), в то время как F429-Dysco и даже F746-Dysco свои экраны низкого разрешения (320*240 и 480*272, соответственно) подключают по более медленному RGB parallel.

Может, это просто совпадение. А может, стм-ки на 800*480 уже притормаживают, из-за чего был выбран суперскоростной интерфейс. Х.з.
Я работал с обоими.. Хочу сказать что 800*480 работает чуть медленее. Думаю что это скорее из-за объемов пересчета. Хотя конечно ХЗ.. Мне не до анализов было..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2016, 14:14
Помогаю со студенческими работами здесь

Как написать ввод/вывод без прерываний?
Код на ассемблере встроенном в турбо паскаль. В массиве из 10 целых чисел сосчитать сумму чётных и сумму нечётных чисел. Вывести...

AVR ATtiny13A Assembler нажатие кнопки без прерываний
Доброго времени суток. Изучаю программирование микроконтроллеров по книге Белова Л.В. &quot;Самоучитель разработчика устройств на...

NASM и C. Как считать ввод с клавиатуру без прерываний
Первичный загрузчик global start extern long_mode_start section .text bits 32 start: mov esp, stack_top

ASM, DOS, FAT32. Атрибуты файла без использования прерываний
Добрый день! Столкнулась с такой проблемой. В файловой системе FAT32 нужно прочитать атрибуты у заданного файла и установить атрибут...

Как программно на Си определить фронт импульса без прерываний? Atmega AVR
Всем привет.... столкнулся с задачкой - требуется определить фронт импульса.... (на МК Атмега.... :) ) раньше сталкивался.... но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru