|
|
  |
SPI: равномерный вывод нескольких байт, на максимальной допустимой скорости |
|
|
|
Mar 4 2008, 17:30
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Народ, тема навеяна постом по выводу символов на экран путём врезки отдельных пикселей в композитный видеосигнал. Хотелось бы поделиться своими результатами и обсудить их со специалистами. Задача была такая: добиться равномерного вывода пикселей без каких-либо зазоров между байтами на максимально допустимой скорости Fclk/2. Для экспериментов была взята атмега8515 (частота кварца 10 МГц) из старых запасов, чтобы не жалко было покурочить плату и пожечь кристалл в случае чего. Сначала была попытка вывода отдельных бит через SPI, работающего в режиме ведущего (мастер). Но как я ни бился, получался зазор в 1МЦ, т.е. полпиксела. Было решено перейти к режиму ведомого (слейв), а на вход SCK подать Fclk/2=5МГц. В документации отмечено, что слейв работает только до частот Fclk/4, так как необходимо синхронизировать внешнюю частоту. Но идея была такая, что поскольку источником 5 МГц будет тот же самый микроконтроллер (вывод XCK синхронного USART), то вроде бы проблем с синхронизацией не должно быть. Сказано, сделано. Оказалось, что устройство прекрасно работает на Fclk/2=5МГц в режиме слейва. Вот тестовая программка, которая выдавала байты в регистр данных SPI. Данные можно было менять, переключая ключи, подключенные к порту С. Код spsout: out spdr,r16;current data in r16,pinc;reading the switch nop nop nop nop nop nop nop nop nop nop nop nop rjmp spsout Вот картинка с экрана осциллографа, видно, что между байтами зазоров нет. Вроде всё важное сказал. Что меня смущает, так это то, что слейв работает на частоте в два раза выше, чем описано в документации. Привлекает то, что для 20МГц атмеги максимальная скорость будет 10МГц. Что скажете?
Эскизы прикрепленных изображений
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 4 2008, 19:04
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ Mar 4 2008, 20:30)  Сначала была попытка вывода отдельных бит через SPI, работающего в режиме ведущего (мастер). Но как я ни бился, получался зазор в 1МЦ, т.е. полпиксела. Было решено перейти к режиму ведомого (слейв), а на вход SCK подать Fclk/2=5МГц. В документации отмечено, что слейв работает только до частот Fclk/4, так как необходимо синхронизировать внешнюю частоту. Но идея была такая, что поскольку источником 5 МГц будет тот же самый микроконтроллер (вывод XCK синхронного USART), то вроде бы проблем с синхронизацией не должно быть. Что скажете? Да, ИМХО идея правильная! хотя наверное то что не понадобилось дополнительных тактов для синхронизации, это просто везение, видимо так складывается, что момент опроса/синхронизации происходит в самом начале машинного такта... Вобщем, вероятно, так действительно можно получать Fclk/2...
|
|
|
|
|
Mar 5 2008, 16:46
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=GM= @ Mar 4 2008, 19:30)  Что меня смущает, так это то, что слейв работает на частоте в два раза выше, чем описано в документации. Привлекает то, что для 20МГц атмеги максимальная скорость будет 10МГц. Что скажете? Я думаю, что для вывода непринципиальна Fclk. Максимум сигнал будет смещен на такт для каждого семпла (кстати, а Вы не попробовали подать не F/2, а F ?  ), а вот для ввода, такое смещение неприемлемо, т.к. может привести к искажению данных, потому в документации и F/4. Решение красивое
|
|
|
|
|
Mar 5 2008, 17:28
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(defunct @ Mar 5 2008, 16:46)  Я думаю, что для вывода непринципиальна Fclk. Максимум сигнал будет смещен на такт для каждого семпла (кстати, а Вы не попробовали подать не F/2, а F ?  ), а вот для ввода, такое смещение неприемлемо, т.к. может привести к искажению данных, потому в документации и F/4. Решение красивое Спасибо. У меня SPI работает как слейв, значит входная частота F/2 проходит через синхронизатор, который опрашивается клоком F. Если подать F на вход синхронизатора, то на выходе будет постоянка, ну а не будет клоков - не будет работать SPI слейв. Мне кажется, что смещения не будет, т.к. входная частота для слейва идёт постоянно, какая разница какой импульс защёлкивает данные, задержанный на один такт или на два такта. Посмотрите на блок-схему SPI.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 5 2008, 18:07
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ Mar 5 2008, 02:01)  Что за момент опроса? Поясните свою мысль, не доходит чё-то. Имелось в виду что XCK осуществляет переходы 0->1 и 1->0 в определенные моменты такта MCU, и для того чтобы SPI Slave работало на F/2, схема синхронизации SPI должна засечь этот переход в том же такте MCU.
|
|
|
|
|
Mar 5 2008, 22:06
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(singlskv @ Mar 6 2008, 00:10)  Кстати, для проверки такого режима работы, я бы просто... Если "просто", то это просто проверяется почти любым цифровым осциллографом с установкой запуска по длительности импульса превышающей номинальную. Что, полагаю, и было сделано.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|