|
|
  |
16-ти, 24-х, 32=битный SPI на атмега, Возможно ли? |
|
|
|
Aug 1 2012, 10:37
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Палыч @ Aug 1 2012, 11:51)  Вот-так и читаете, не проверяя: "а, были ли второй и третий байты приняты устройством ?" Даже немного странно, что такое работает... Согласен, что как-то странно это выглядит. Цитата(Палыч @ Aug 1 2012, 11:51)  Да, и с флагом SPIF - непонятно... По приёму первого байта и переходу на обработчик прерывания он будет сброшен... А, по приходу второго и третьего байта - кто этот флаг сбросит? Никто не сбросит.
|
|
|
|
|
Aug 1 2012, 16:55
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата _Артём_Никто не сбросит. Цитата inventor пробую в обработчике прерывания .......получаю в сейве правильно все Цитата SPIF is cleared by hardware when executing the corresponding interrupt handling vector.  Он тои раза и входит в обработчик, я думаю что он сократил код
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Aug 1 2012, 18:22
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(ILYAUL @ Aug 1 2012, 20:38)  Так всегда же можно посидеть в прерывании , если знаешь количество необходимых байт . Вошёл и сиди пока все не примешь, просто можно и так написать обработчик. Типа такого: Код unsigned char byte_conter=0; while (byte_conter<SPI_BYTE_QTY) { while ((SPSR&(1<<SPIF))==0) ; spi_rx_buffer[byte_conter++]=SPDR; } ? Так сойдёт наверное.
|
|
|
|
|
Aug 2 2012, 13:36
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
на avr freaks задал такой же вопрос-несколько противоречивых мнений. но как я понял если первый байт принимается в прерывании то второй и третий нужно принять после проверки ожидания готовности бита данных в буфере. как то так. но я не стал испытывать судьбу и просто написал State mashine для приема трех байт в обработчике прерывания. http://www.avrfreaks.net/index.php?name=PN...ic&t=123491
|
|
|
|
|
Aug 2 2012, 17:40
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Dikoy @ Aug 2 2012, 20:17)  Если приём быстрый, на максимальной частоте, есть смысл вообще отказаться от прерываний. А на изменение SS как успеть отреагировать? Цитата(Dikoy @ Aug 2 2012, 20:17)  Как раз пока новый адрес ячейки вычислится, байт и уйдёт. Там вычислятся нечему - адрес первого байта - константа, а дальше можно просто делать ST с постинкрементом.
|
|
|
|
|
Aug 3 2012, 03:50
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата но прерывание spi произойдет сначала от перехода в 0 линии SS Это правило для мастера. Если SS как вход и появляется лог.0 , то произойдёт прерывание. К мастеру кто-то хочет достучаться. Ну а обычно Цитата When a serial transfer is complete, the SPIF Flag is set.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|