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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Программный SPI, реализация на avr
Rst7
сообщение Oct 18 2009, 18:30
Сообщение #16


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Кстати, как по мне, все это очень медленно smile.gif Если использовать камень из свежих (периферия которого поддерживает запись в PINx), то 4 такта на бит вполне получается, хоть на асме, хоть на Си.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 18 2009, 19:15
Сообщение #17


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Rst7 @ Oct 18 2009, 22:30) *
Кстати, как по мне, все это очень медленно smile.gif Если использовать камень из свежих (периферия которого поддерживает запись в PINx), то 4 такта на бит вполне получается, хоть на асме, хоть на Си.


Так и я о том, что как только в голове появляются мысли про такты, следует обращаться к ассемблеру, чтобы эти вопросы урегулировать. Он для того и сделан, чтобы программить в тактах. Но если мысли о тактах вас не посещают, то и думать о них не надо - используйте C. Последннее дело - думать про такты, но програмировать на С smile.gif.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 18 2009, 21:17
Сообщение #18


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Так и я о том,


Причем тут "и я"? Я только что утверждал, что результаты будут одинаковы, что на асме, что на Си, что совсем не стыкуется с Вашим:
Цитата
что как только в голове появляются мысли про такты, следует обращаться к ассемблеру, чтобы эти вопросы урегулировать.


В первую очередь нужно думать. А потом - писать. Во всех смыслах.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Oct 19 2009, 07:13
Сообщение #19


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Код
Биг спс. Для 8 ми битного, правильно поправил? =)
Это на запись. А как на чтение? В случае двухстороннего обмена.


Подправили правильно smile.gif
Можно поменять unsigned int recv на unsigned char recv если нет необходимости в возврате intov.
Чтобы прочитать из слейва нужно в него записать байт и использовать результат recv - это будет ответ от слейва.
Запись нужна чтобы сгенерировать 8 клоков на SCK по которым слейв выведет байт данных.

По поводу быстродействия - вот то что генерирует мой иар (без оптимизации):
Код
In  segment CODE, align 2, keep-with-next
   \   __nearfunc __version_3 unsigned int SPIWriteWord(unsigned int)
   \                     ??SPIWriteWord:
   \   00000000   E020               LDI     R18, 0
   \   00000002   E030               LDI     R19, 0
   \   00000004   982D               CBI     0x05, 0x05
   \   00000006   982A               CBI     0x05, 0x02
   \   00000008   E060               LDI     R22, 0
   \   0000000A   C00A               RJMP    ??SPIWriteWord_1
   \                     ??SPIWriteWord_2:
   \   0000000C   982B               CBI     0x05, 0x03
   \                     ??SPIWriteWord_3:
   \   0000000E   9A2D               SBI     0x05, 0x05
   \   00000010   0F22               LSL     R18
   \   00000012   1F33               ROL     R19
   \   00000014   991C               SBIC    0x03, 0x04
   \   00000016   6021               ORI     R18, 0x01
   \                     ??SPIWriteWord_4:
   \   00000018   982D               CBI     0x05, 0x05
   \   0000001A   0F00               LSL     R16
   \   0000001C   1F11               ROL     R17
   \   0000001E   9563               INC     R22
   \                     ??SPIWriteWord_1:
   \   00000020   3160               CPI     R22, 16
   \   00000022   F420               BRCC    ??SPIWriteWord_5
   \   00000024   FB17               BST     R17, 7
   \   00000026   F796               BRTC    ??SPIWriteWord_2
   \   00000028   9A2B               SBI     0x05, 0x03
   \   0000002A   CFF1               RJMP    ??SPIWriteWord_3
   \                     ??SPIWriteWord_5:
   \   0000002C   9A2A               SBI     0x05, 0x02
   \   0000002E   0189               MOVW    R17:R16, R19:R18
   \   00000030   9508               RET
   \   00000032                      REQUIRE _A_PORTB
   \   00000032                      REQUIRE _A_PINB


Со времён последнего моего проекта на ассемблере прошло почти 5 лет. Поэтому сказать что либо об эффективности этого кода я затрудняюсь.
От меня требуют внятно написанные программы на С - я их пишу, а снова влезать в дебри ассемблера не хочу smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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