roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 13:41

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 16:03 
Не в сети

Зарегистрирован: 02 июн 2010, 19:55
Сообщения: 9
Доброго времени суток, форумчане! Возникла необходимость подключать внешнюю ПЗУ 25хх, которая работает через SPI. В процессе изучения столкнулся с проблемой - данные от МК уходят нормально, а память по запросу, не зависимо от адреса, возвращает 0xFF, хотя файл прошивки заполнен. Передача начинается по нажатию кнопки вот код:
Код:
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"

.def   tmp=R16

.cseg
.org   0x0000
   rjmp   Init

.org   PCI1addr
   rjmp   RcvInit

Init:
   ldi      tmp,(1<<PCINT8)
   sts      PCMSK1,tmp
   ldi      tmp,(1<<PCIE1)      ;External interrupt presetting
   sts      PCICR,tmp
   clr      tmp   
   out      DDRC,tmp
   
   ser      tmp
   out      DDRD,tmp      ;PortD for input data dispatching

   ldi      tmp,0b00101100      ;MOSI,SS,SCK-out, MISO-in
   out      DDRB,tmp
   ldi      tmp,(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)
   out      SPCR,tmp
   sei

Start:
   nop
   nop
   rjmp   Start

RcvInit:
   ldi      tmp,3            ;READ instruction
   out      SPDR,tmp
SendAddr:
   in      tmp,SPSR
   sbrs      tmp,SPIF
   rjmp      SendAddr         ;Waiting for previous transfer complete
   in      tmp,SPDR
   ldi      tmp,0x01         ;Read from 0x01
   out      SPDR,tmp
RcvData:
   in      tmp,SPSR
   sbrs      tmp,SPIF         ;Waiting for previous transfer complete
   rjmp      RcvData
   in      tmp,SPDR
   out      PORTD,tmp         ;Out PortD
   reti

Почему может не работать?
На всякий случай приложу проект целиком.


Вложения:
Комментарий к файлу: EEPROM mem.bin + Proteus test.dsn + AVR Studio test.aps
Prog.zip [34.43 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 16:39 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
вы бы хоть почитали и разобрались, как работает SPI...
Ну вообще же ерунда написана.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 17:42 
Не в сети

Зарегистрирован: 02 июн 2010, 19:55
Сообщения: 9
Michael_K писал(а):
вы бы хоть почитали и разобрались, как работает SPI...
Ну вообще же ерунда написана.

Правильно ли я понимаю суть: в ведомом и в ведущем устройстве стоят сдвиговые регистры. При передаче на каждый такт эти регистры обмениваются битом, сдвигаясь влево/вправо (в зависимости от режима). Если я пошлю байт с адресом в память, то данные с этого адреса прийдут только во время следующей посылки? Поправьте если я не прав.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 17:46 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
смысл верный...

вообще это все описывается вроде в ДШ на ИМС

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 18:12 
Не в сети

Зарегистрирован: 02 июн 2010, 19:55
Сообщения: 9
Пробую такой алгоритм: Отправить код операции -> Дождаться конца, считать SPDR -> Отправить адрес -> Дождаться конца, считать SPDR -> Отправить заглушку -> Считать ответ ПЗУ -> Вывести в порт. Все равно ерунда. Может я что-то настраиваю неправильно?
Код:
   ldi      tmp,(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)
   out      SPCR,tmp
   ldi      tmp,0b00101100
   out      DDRB,tmp

Такой вопрос, если я ставлю MSTR=1, то на чип селекте постоянно 0. Почему во время простоя SPI МК не подтягивает его сам?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 18:26 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
Мк не обязан трогать чип селект.. пин SS он для выбора МК как слейва... чип селект уж сами как нить дергайте )

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 18:42 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
SS на мастере должен быть настроен как выход или подтянут кверху снаружи
(иначе ваш мастер в режим слейва самопроизвольно будет падать).
ногой, которая идет на CS слейва вы должны управлять из своей программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATmega48+SPI EEPROM
СообщениеДобавлено: 19 июн 2010, 19:52 
Не в сети

Зарегистрирован: 02 июн 2010, 19:55
Сообщения: 9
Michael_K писал(а):
SS на мастере должен быть настроен как выход или подтянут кверху снаружи
(иначе ваш мастер в режим слейва самопроизвольно будет падать).
ногой, которая идет на CS слейва вы должны управлять из своей программы.

Спасибо. Похоже все работает, тоесть перед каждой операцией скидываю SS в 0:
Код:
   cbi      PORTB,2
   ldi      tmp,0x03 ;код операции чтения
   rcall   Snd
   ldi      tmp,0x00 ;адрес 1
   rcall   Snd
   ldi      tmp,0x01 ;адрес 2
   rcall   Snd
   ldi      tmp,0x02 ;адрес 3
   rcall   Snd
   sbi      PORTB,2

А не работало, потому что протеус как всегда глючит. Перед запуском указываю в настройках ПЗУ файл прошивки, а если во время симуляции открыть инспектор, то там одни FF. Кто-нибудь знает как пофиксить?
--
Сам себе отвечу Debug->Reset presistent model data


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO