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

 
 
 
Reply to this topicStart new topic
> USI в качестве SPI Slave (ATtiny2313), не принимает данные
Alexey V.
сообщение May 10 2006, 06:28
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 10-05-06
Из: Russia, Tomsk
Пользователь №: 16 936



для инициализации интерфейса и передачи/приема данных пользуюсь следующим кодом:

USICR = (1 << USICS1) | (1 << USIWM0);
USIDR = 0x55;
USISR = (1 << USIOIF);
while((USISR & (1 << USIOIF)) == 0);
bTmp = USIDR;
Main.Ch1RxData = bTmp;
USICR = (0 << USICS1) | (0 << USIWM0);

в AVR Studio 4.12 SP1 вообще никакого эффекта (по идее должен инкрементироваться 4-x битный счетчик при наличии на ножке UCSK импульсов).
Может кто-нибудь пользовался USI в качестве SPI - подскажите в чем может быть проблема?
Go to the top of the page
 
+Quote Post
WHALE
сообщение May 10 2006, 08:24
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



в студии usi не эмулируется,пробуй в железе.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Alexey V.
сообщение May 10 2006, 09:00
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 10-05-06
Из: Russia, Tomsk
Пользователь №: 16 936



Цитата(WHALE @ May 10 2006, 11:24) *
в студии usi не эмулируется,пробуй в железе.


пробовал - тоже не работает (
Счетчик также не инкрементируется
Go to the top of the page
 
+Quote Post
bodja74
сообщение May 10 2006, 21:18
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(Alexey V. @ May 10 2006, 09:28) *
USICR = (1 << USICS1) | (1 << USIWM0);
USIDR = 0x55;
USISR = (1 << USIOIF);
while((USISR & (1 << USIOIF)) == 0);
bTmp = USIDR;
Main.Ch1RxData = bTmp;
USICR = (0 << USICS1) | (0 << USIWM0);

А как насчет того чтобы открыть нужные порты на тип
DDRB.5=1
DDRB.6=1
DDRB.7=1

Вот код инициализации на прием по SPI,я задейсвовал для прерывания USI Overflov
USISR=$40
USICR=$5C
Ну и...
DDRB.5=1
DDRB.6=1
DDRB.7=1
Go to the top of the page
 
+Quote Post
Alexey V.
сообщение May 11 2006, 02:22
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 10-05-06
Из: Russia, Tomsk
Пользователь №: 16 936



Цитата(bodja74 @ May 11 2006, 00:18) *
Ну и...
DDRB.5=1
DDRB.6=1
DDRB.7=1

не совсем понятно, зачем все линии на выход настраивать - у меня устройство будет в качестве слэйва работать, да и линия DI все равно должна быть входом...
Go to the top of the page
 
+Quote Post
WHALE
сообщение May 11 2006, 06:43
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



сходи на [url=http://www.gaw.ru/html.cgi/txt/app/micros/avr/] avr 312 usi-slave i2c.я месяца 2 назад тоже
разбирался c usi,может я тупой но разобрался с его работой только по исходнику,ds атмеловский в этой
части,по моему,как-то криво написан.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Alexey V.
сообщение May 11 2006, 08:36
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 10-05-06
Из: Russia, Tomsk
Пользователь №: 16 936



Цитата(WHALE @ May 11 2006, 09:43) *
сходи на [url=http://www.gaw.ru/html.cgi/txt/app/micros/avr/] avr 312 usi-slave i2c.я месяца 2 назад тоже
разбирался c usi,может я тупой но разобрался с его работой только по исходнику,ds атмеловский в этой
части,по моему,как-то криво написан.


спасибо, заработало - надо было подключить pull-up резисторы у линий настроенных на вход
Go to the top of the page
 
+Quote Post
WHALE
сообщение May 11 2006, 18:05
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



вообще-то pull-up cтавят на мастер,так-как slave может быть несколько.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Dec 6 2013, 04:35
Сообщение #9


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

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



Здравствуйте. Поднимаю уже давнюю тему дабы не плодить много новых.

Сейчас приходится писать SPI slave на attiny (2313 или 4313), где, как я понимаю, SPI отсутствует. Режим работы третий.
Т.е. вначале идёт выставление бита на шину, затем его чтение. Как я посмотрел в даташитах, в USI, в отличие от SPI, старший выставляемый бит уже отображён на линию (MISO).
В SPI когда мы сдвигаем байт, его старший бит «уходит» на линию, а его место занимает следующий бит, как и полагается.
В USI же старший бит уже отображён на линию. И когда мы работаем в режиме «сначала выставление(сдвиг), затем чтение» выставляется не старший а следующий за ним бит. Так вот я это понял.

И подскажите про просыпание в tiny2313.
Правильно ли я понял, что в режиме power-down мы можем просыпаться по состоянию "старт" на шине USI? Но это состояние возможно только в two-wire режиме? В режиме эмуляции SPI можно ли сделать просыпание?

Go to the top of the page
 
+Quote Post

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

 


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


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