|
|
  |
Прием по SPI в слейве |
|
|
|
Jan 24 2012, 19:24
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769

|
Цитата(Палыч @ Jan 24 2012, 22:06)  Но в слейве сигналом SS как раз включается/отключается SPI. Можно на эту ногу повесить низкий уровень - устройство будет выбрано (включено) всегда, но высвободить эту ногу под другие цели не удастся. Если нога будет занята - не беда. У меня не хватает провода, а не ножки. Но если я повешу вход SS на 0, то будет ли работать SPI? Ведь по циклограмме в даташите от передергивается.
|
|
|
|
|
Jan 25 2012, 17:29
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769

|
Цитата(_Артём_ @ Jan 25 2012, 00:23)  Не буду утверждать, что в 89S8253 spi работает аналогично авр. Но если также, то SS можно заземлить и тогда авр сразу после разрешения spi переходит slave-mode и остаётся там, пока SS=0 и spi разрешён, то есть перепад не нужен. Интересно, а вы по прерываниям работали? А то у меня не получается. Экспериментирую как раз с мегой128. В цикле периодически шлю байт. Так вот, если SS после каждой посылки дергать, то по приему возникает прерывание, а в буфере приемника лежит нужный байт. Но если SS оставлять в 0 постоянно, прерывания не возникают. Как будто по перепаду SS происходит какая то начальная установка чего то там вызывающего прерывание.
|
|
|
|
|
Jan 25 2012, 18:43
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(paskal @ Jan 25 2012, 19:29)  Интересно, а вы по прерываниям работали? А то у меня не получается. Экспериментирую как раз с мегой128. В цикле периодически шлю байт. Так вот, если SS после каждой посылки дергать, то по приему возникает прерывание, а в буфере приемника лежит нужный байт. Но если SS оставлять в 0 постоянно, прерывания не возникают. Как будто по перепаду SS происходит какая то начальная установка чего то там вызывающего прерывание. Я не то чтобы работал: Использовал всегда только режим spi-master (m128). Однажды вылез такой баг: на SS не было подтяжки к +, 1)программа bootloader-а включила SS на вход и передала упревление на вектор сброса 2) основная программа инициализировала SPI (SPCR=0x50 - master-mode) 3) так как SS оказался равен 0 spi перешёл в режим slave (что программой не предусматривалось) 4) программа зависла Цитата(paskal @ Jan 25 2012, 19:29)  Так вот, если SS после каждой посылки дергать, то по приему возникает прерывание, а в буфере приемника лежит нужный байт. по доке прерывание (или SPIF=1) возникает при переходе из master в slave и при окончании передач. Что-то не так в программе (master не шлёт данные?). Цитата(paskal @ Jan 25 2012, 19:29)  Но если SS оставлять в 0 постоянно, прерывания не возникают. Значит master не передал данные. Для spi-slave SPDR=<any_byte> не означает что передача началась. Цитата(paskal @ Jan 25 2012, 19:29)  Как будто по перепаду SS происходит какая то начальная установка чего то там вызывающего прерывание. переход в режим и сброс счётчика бит происходит.
|
|
|
|
|
Jan 25 2012, 19:05
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769

|
Цитата(_Артём_ @ Jan 25 2012, 21:43)  по доке прерывание (или SPIF=1) возникает при переходе из master в slave и при окончании передач. Что-то не так в программе (master не шлёт данные?).
Значит master не передал данные. Данные передаются, мастер выдает 8 тактов на SCLK, это я проверил осциллографом. Более того, у меня идет нормально обмен когда я даю импульс от мастера на SS в конце передачи байта. Но стоит убрать 2 команды на дерганье SS-ом, и прерывания замолкают. Цитата(_Артём_ @ Jan 25 2012, 21:43)  переход в режим и сброс счётчика бит происходит. Что то похоже на это. А нельзя ли этот счетчик сбросить не через импульс на SS, а как нибудь программным способом?
|
|
|
|
|
Jan 25 2012, 19:13
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(paskal @ Jan 25 2012, 21:05)  Данные передаются, мастер выдает 8 тактов на SCLK, это я проверил осциллографом. Более того, у меня идет нормально обмен когда я даю импульс от мастера на SS в конце передачи байта. Но стоит убрать 2 команды на дерганье SS-ом, и прерывания замолкают. Что-то странное: пока SS=0 байты должны приниматься без изменения на SS - 8 клоков достаточно. Правильно ли настроен вход CLK у slave? Цитата(paskal @ Jan 25 2012, 21:05)  А нельзя ли этот счетчик сбросить не через импульс на SS, а как нибудь программным способом? SPCR=0 - запрет spi SS=вход SPSR=<сброс флагов> SPCR=<включить> То есть запретить/разрешить spi.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|