|
Реально достижимая скорость по SPI, Программно-аппаратные трюки для достижения максимальной скорости перед |
|
|
|
Jul 12 2006, 13:34
|

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

|
Тема была навеяна $ilent, но она была закрыта прежде, чем я успел в ней поучаствовать :-). Интересует, прежде всего, потенциально достижимая скорость как в аппаратном исполнении, так и в программном. Какие требования в "железном" исполнении? Необходимо передать по SPI nByte байт из буфера txBuffer (ОЗУ МК) и одновременно принять массив байт такой же длины в rxBuffer (ОЗУ МК). Моя программа выполняется за 8МЦ, т.е. ровно один такт на 1 бит. Интересно, можно ли добиться большего? Что скажут эксперты? Программа $ilent работает в полудуплексе, следовательно можно снизить требования к программной реализации SPI, а именно, необходимо программно формировать только биты данных и синхронизацию на передачу ИЛИ принимать биты данных по положительным фронтам импульсов синхронизации на прием. Моя программа передает один байт за 36МЦ, т.е. за 4,5 такта на 1 бит. Как добиться большего? Народ, не воспринимайте топик слишком сурово, это мой первый на этом сайте...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
 |
Ответов
|
Jul 12 2006, 16:08
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Может вы имели ввиду не мегагерцы а такты? т.е программа выполняется за 36 тактов ( 4.5 такта на бит) 1 такт на бит не получить аппаратно мин прескалер равен 2 и получится 2 такта на бит пограммно теоретически максимум можно получить тоже 2 такта на бит, но только для отправки и отправлять например константу т.е тупо 16 раз записать в порт (не используя SBI CBI) примерно так Код LDI R16, 1; pin0 - CLK=1 LDI R17, 0; pin0 - CLK=0
OUT PORTA, R16; bit 7 OUT PORTA, R17
OUT PORTA, R16; bit 6 OUT PORTA, R17
; и т.д нужное число бит но ценность этого кода сомнительна можно так, но уже 3 такта на бит Код LDI R17, 0
LDI R16, 1 | ((val>>6) & 2); pin0 - CLK=1 pin1 - MOSI=bit 7 OUT PORTA, R16; bit 7 OUT PORTA, R17
LDI R16, 1 | ((val>>5) & 2); pin0 - CLK=1 pin1 - MOSI=bit 6 OUT PORTA, R16; bit 7 OUT PORTA, R17
; и т.д нужное число бит
|
|
|
|
|
Jul 12 2006, 16:31
|

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

|
Цитата(KRS @ Jul 12 2006, 15:08)  Может вы имели ввиду не мегагерцы а такты? т.е программа выполняется за 36 тактов ( 4.5 такта на бит) МЦ - это сокращение слов Машинный Цикл. Я думал, это общепринято. Цитата(KRS @ Jul 12 2006, 15:08)  1 такт на бит не получить аппаратно мин прескалер равен 2 и получится 2 такта на бит Я в курсе, что максимальная частота клока равна половине тактовой. Скажем для тактовой частоты процессора в 10 МГц, можно получить 5 Мгц частоту сихронизации для SPI, тогда для передачи одного бита требуется 0,2 мкс, т.е. 2 МЦ(машинных цикла или такта), а для передачи байта потребуется 8*0,2=1,6 мкс или 16 МЦ. Все это делается аппаратно, но моя программа сохраняет принятый байт и передает новый байт за 8МЦ, остальные 8МЦ она простаивает. Если бы был второй SPI, можно было бы успеть и его обработать(:-). А так машина тратит 1 такт своего машинного времени на передачу/прием одного бита, ну и работает вхолостую половину времени. Цитата(KRS @ Jul 12 2006, 15:08)  пограммно теоретически максимум можно получить тоже 2 такта на бит, но только для отправки и отправлять например константу т.е тупо 16 раз записать в порт (не используя SBI CBI) Нет, это не интересно. Надо именно произвольные байты гонять туда-сюда.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
=GM= Реально достижимая скорость по SPI Jul 12 2006, 13:34 Yura_K А что значит программа выполняется за 8МЦ? Передае... Jul 12 2006, 14:52 SpiritDance Ничего не понял. Толи у меня башка уже не варит то... Jul 12 2006, 15:15 =GM= Цитата(SpiritDance @ Jul 12 2006, 14:15) ... Jul 12 2006, 16:14 Yura_K А какие ограничения на использование регистров? Об... Jul 13 2006, 15:57 =GM= Цитата(Yura_K @ Jul 13 2006, 14:57) А как... Jul 13 2006, 21:51 ksv198 Цитата(Yura_K @ Jul 13 2006, 19:57) 2) от... Jul 14 2006, 07:00  =GM= Цитата(ksv198 @ Jul 14 2006, 06:00) Цитат... Jul 14 2006, 11:59   zltigo Цитата(=GM= @ Jul 14 2006, 14:59) Как я у... Jul 14 2006, 12:12    =GM= Цитата(zltigo @ Jul 14 2006, 11:12) Цитат... Jul 14 2006, 12:30     rezident Цитата(=GM= @ Jul 14 2006, 18:30) Я приве... Jul 14 2006, 13:01      =GM= Цитата(rezident @ Jul 14 2006, 12:01) Цит... Jul 14 2006, 13:40   rezident Цитата(=GM= @ Jul 14 2006, 17:59) Посколь... Jul 14 2006, 12:19   ksv198 Цитата(=GM= @ Jul 14 2006, 15:59) Как я у... Jul 14 2006, 12:47   ksv198 2'=GM=
Пришел домой, подумал внимательно и пон... Jul 15 2006, 06:02    =GM= Цитата(ksv198 @ Jul 15 2006, 05:02) 2... Jul 15 2006, 17:21 unichorn Интересный подход. А остальная программа в момент ... Jul 14 2006, 12:39 =GM= Цитата(unichorn @ Jul 14 2006, 11:39) Инт... Jul 14 2006, 13:25 GetSmart Да врут они все тут. Всё будет работать в тех рамк... Jul 14 2006, 13:06 GetSmart Код <nop x 8 раз или другая задача на 8МЦ... Jul 14 2006, 13:53 rezident =GM=, есть несколько нюансов в описываемой вами сх... Jul 14 2006, 13:55 =GM= Цитата(rezident @ Jul 14 2006, 12:55) =GM... Jul 14 2006, 14:50 GetSmart ЦитатаНормально, Григорий(:-). Хотя у вас 10 МЦ, а... Jul 14 2006, 14:58 =GM= Цитата(GetSmart @ Jul 14 2006, 13:58) Цит... Jul 14 2006, 15:16 GetSmart 1. А кто тогда Георгий?
2. А когда у вас в цикле ... Jul 14 2006, 15:32 =GM= Цитата(GetSmart @ Jul 14 2006, 14:32) 1. ... Jul 14 2006, 15:57 GetSmart ЦитатаНадеюсь, передается индивидуальная для каждо... Jul 14 2006, 16:16 =GM= Цитата(GetSmart @ Jul 14 2006, 15:16) Цит... Jul 14 2006, 16:27 GetSmart Делитель тока 1/4. Это обычный делитель синхросигн... Jul 14 2006, 16:40 Yura_K 2 ksv198
ЦитатаПоэтому все правильно - сначала пиш... Jul 14 2006, 17:21 GetSmart Ошибок вроде нету. Этот вариант идеально подходит ... Jul 14 2006, 17:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|