Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USI в качестве SPI Slave (ATtiny2313)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Alexey V.
для инициализации интерфейса и передачи/приема данных пользуюсь следующим кодом:

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 - подскажите в чем может быть проблема?
WHALE
в студии usi не эмулируется,пробуй в железе.
Alexey V.
Цитата(WHALE @ May 10 2006, 11:24) *
в студии usi не эмулируется,пробуй в железе.


пробовал - тоже не работает (
Счетчик также не инкрементируется
bodja74
Цитата(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
Alexey V.
Цитата(bodja74 @ May 11 2006, 00:18) *
Ну и...
DDRB.5=1
DDRB.6=1
DDRB.7=1

не совсем понятно, зачем все линии на выход настраивать - у меня устройство будет в качестве слэйва работать, да и линия DI все равно должна быть входом...
WHALE
сходи на [url=http://www.gaw.ru/html.cgi/txt/app/micros/avr/] avr 312 usi-slave i2c.я месяца 2 назад тоже
разбирался c usi,может я тупой но разобрался с его работой только по исходнику,ds атмеловский в этой
части,по моему,как-то криво написан.
Alexey V.
Цитата(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 резисторы у линий настроенных на вход
WHALE
вообще-то pull-up cтавят на мастер,так-как slave может быть несколько.
vladimir_orl
Здравствуйте. Поднимаю уже давнюю тему дабы не плодить много новых.

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

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

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.