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

 
 
> Реально достижимая скорость по 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
Ответов
Yura_K
сообщение Jul 14 2006, 17:21
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



2 ksv198
Цитата
Поэтому все правильно - сначала пишем в SPDR, потом читаем.

Чего-то я не допираю, счего вдруг сначала писать, а потом читать. Тем не менее мой вариант:
Код
    ld        r19,X
_spi_loop:
    in        r18,SPDR    ;1
    out        SPDR,r19    ;1
    st        X+,r18    ;2
    ld        r19,X        ;2
_spi_wait_spif:
    sbis    SPSR,SPIF    ;1 2
    rjmp    _spi_wait_spif;2
    dec        r16    ;1
    brne    _spi_loop    ;2 1
итого:
Замечу, что проверка флага - вышло неудачно. 6 nop у GetSmart эффективнее wink.gif
2 =GM=
Цитата
Нормально, Григорий(:-). Хотя у вас 10 МЦ, а в исходной проге было 8 МЦ.

Зато у GetSmart с проверкой количества байт.
P.S. Приведенный код может содержать ошибки, укажите пожалуйста если таковые будут обнаружены.
P.P.S. Мне вообще кажется, что довольно трудно оптимизировать программу на RISC, кроме случаев когда она писалась бездумно smile.gif .


--------------------
Чудес не бывает - бывает мало знаний и опыта!
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
- - KRS   Может вы имели ввиду не мегагерцы а такты? т.е про...   Jul 12 2006, 16:08
|- - =GM=   Цитата(KRS @ Jul 12 2006, 15:08) Может вы...   Jul 12 2006, 16:31
- - 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
- - GetSmart   Ошибок вроде нету. Этот вариант идеально подходит ...   Jul 14 2006, 17:44


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

 


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


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