реклама на сайте
подробности

 
 
> Реально достижимая скорость по SPI, Программно-аппаратные трюки для достижения максимальной скорости перед
=GM=
сообщение Jul 12 2006, 13:34
Сообщение #1


Ambidexter
*****

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



Тема была навеяна $ilent, но она была закрыта прежде, чем я успел в ней поучаствовать :-).

Интересует, прежде всего, потенциально достижимая скорость как в аппаратном исполнении, так и в программном.

Какие требования в "железном" исполнении? Необходимо передать по SPI nByte байт из буфера txBuffer (ОЗУ МК) и одновременно принять массив байт такой же длины в rxBuffer (ОЗУ МК). Моя программа выполняется за 8МЦ, т.е. ровно один такт на 1 бит. Интересно, можно ли добиться большего? Что скажут эксперты?

Программа $ilent работает в полудуплексе, следовательно можно снизить требования к программной реализации SPI, а именно, необходимо программно формировать только биты данных и синхронизацию на передачу ИЛИ принимать биты данных по положительным фронтам импульсов синхронизации на прием. Моя программа передает один байт за 36МЦ, т.е. за 4,5 такта на 1 бит. Как добиться большего?

Народ, не воспринимайте топик слишком сурово, это мой первый на этом сайте...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Jul 12 2006, 16:08
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 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

; и т.д нужное число бит
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 12 2006, 16:31
Сообщение #3


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)

Нет, это не интересно. Надо именно произвольные байты гонять туда-сюда.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- =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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016