|
AT45DB*** Есть вопросы |
|
|
|
Jan 5 2011, 07:32
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Alt.F4 @ Jan 5 2011, 03:48)  По тактам указано только до 72 включительно. Причем 64 такта это команда, адреса страницы и байта, и 4 dummy bytes. Затем 8тактов - чтение. Следующих за чтением тактов не описано, что для того чтобы читать далее, надо слать только один dummy и затем читать, потом опять один dummy и чтение и так пока CS не будет = 1. Это и так понятно любому здравомыслящему инженеру. И вам должно быть понятно, т.к. вы уже знаете - для того, чтобы что-то прочитать нужно что-то передать потому, что так работает синхронный интерфейс SPI.
|
|
|
|
|
Jan 5 2011, 07:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
Вы меня не понимаете!!! Приведу листинг: Код SPI_exchange: out SPDR,data_temp; передаем wait_spi_transmit:; in temp,SPSR; sbrs temp,(SPIF);ждем когда произойдет передача rjmp wait_spi_transmit; in data_temp,SPDR;читаем принятое ret ; Теперь представим, что команду, адреса страницы и байта, и dummy передали. Пробуем читать дальше не дергая CS. rcall SPI_exchange ; rcall SPI_exchange ; грузим data_temp в регистр сравнения таймера, для управления ШИМомВот таким образом читается без потерь! Если делать только одну транзакцию перед загрузкой "звукового байта" в регистр сравнения таймера, происходит пропуск байта!
Сообщение отредактировал Alt.F4 - Jan 5 2011, 07:59
|
|
|
|
|
Jan 5 2011, 08:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
Я по SPI передачу осуществляю без прерываний. Т.е. по идее байт должен был прочитаться за одну транзакцию? По сути, там и настроек SPI у AVR минимум, вот они. Мои настройки: прерывания выключены, SPE=1 (вкл), старший бит первым, режим Master, полярность SCK - низкий уровень, фаза тактового сигнала - по нарастающему фронту.
Сообщение отредактировал Alt.F4 - Jan 5 2011, 08:34
|
|
|
|
|
Jan 5 2011, 08:36
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Alt.F4 @ Jan 5 2011, 16:26)  По сути, там и настроек SPI у AVR минимум, вот они. Ага. Кажется понятно, где тут собака порылась. См. описание бита SPIF на следующей странице. Цитата Bit 7 - SPIF: SPI Interrupt Flag - Флаг прерывания по SPI По завершении обмена последовательными данными бит SPIF устанавливается в состояние 1 и, если бит SPIE в регистре SPCR установлен и разрешено глобальное прерывание, генерируется сигнал прерывания. Бит SPIF очищается аппаратно при выполнении подпрограммы обработки соответствующего вектора прерывания. Бит SPIF может быть очищен также при первом считывании состояния регистра статуса SPI, с установленным битом SPIF, с последующим обращением к регистру данных SPI (SPDR). Добавьте в свою функцию команду чтения регистра SPSR перед записью в регистр SPDR.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|