|
|
  |
Как работать с SPI?, STM32F103 |
|
|
|
Sep 1 2011, 07:45
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(AHTOXA @ Sep 1 2011, 09:51)  Есть буфер передачи, и есть сдвиговый регистр. Прерывание передатчика возникает при опустошении буфера. Сдвиговый регистр в это время ещё не пуст, и передача ещё идёт. Это обеспечивает непрерывность передачи. Значит можно пользоваться только прерыванием приемника? Максимум что от этого будет - промежутки в передаче байтов. Цитата(AHTOXA @ Sep 1 2011, 09:51)  Добавлю, что сбрасывать чипселект нужно чуть позже, чем возникнет прерывание от приёмника последнего байта. Потому что в момент этого прерывания клок ещё не дотикал. А почему же прерывание возникло если последний клок не дотикал? Об этом написано в даташите? В любом случае, я полагаю, что пока программа войдет в прерывание, он уже дотикает? Частота SPI 1.25 МГц. Цитата(Flexz @ Sep 1 2011, 10:06)  Еще перед началом передачи стоит вычитывать DR дабы удостовериться, что прерывание RXNE не возникнет сразу после включения SPI. У меня сложилось впечатление, что если его не вычитывать, то новая передача не начинается вообще.
|
|
|
|
|
Sep 1 2011, 07:56
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Sep 1 2011, 13:45)  Значит можно пользоваться только прерыванием приемника? Максимум что от этого будет - промежутки в передаче байтов. Да. Цитата(777777 @ Sep 1 2011, 13:45)  А почему же прерывание возникло если последний клок не дотикал? Об этом написано в даташите? В любом случае, я полагаю, что пока программа войдет в прерывание, он уже дотикает? Частота SPI 1.25 МГц. Потому что прерывание возникает сразу же, как только защёлкнется последний бит байта. То есть, при CHPA=0 - по первому перепаду SCK. Даташит про это явно не говорит. Это - практические грабли  Успеет или нет дотикать за время входа в прерывание - посмотрите по осциллографу. Думаю, что придётся добавить несколько NOP-ов. Цитата(Flexz @ Sep 1 2011, 12:06)  Чипселект можно снимать при получении последнего RXNE. Нет. См. выше.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 1 2011, 08:06
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(AHTOXA @ Sep 1 2011, 11:56)  Потому что прерывание возникает сразу же, как только защёлкнется последний бит байта. То есть, при CHPA=0 - по первому перепаду SCK. Даташит про это явно не говорит. Это - практические грабли  А, понятно, но ведь это уже не страшно - последний бит уже защелкнулся, а что там будет с устройством при убирании чипселекта - нас уже не интересует. Впрочем, зависит от устройства. Цитата(AHTOXA @ Sep 1 2011, 11:56)  Успеет или нет дотикать за время входа в прерывание - посмотрите по осциллографу. Думаю, что придётся добавить несколько NOP-ов. Несколько NOP-ов не страшно, у меня же проблема хуже - у меня тут дурная микросхема ADS1282, там даташит требует чтобы между байтами были паузы не меньше 6 мкс. А у меня при синхронизации по RXNE паузы получились 1,5...2 мкс. Вот не знаю как их обеспечить - задержку в обработчике прерывания лепить некрасиво, а заряжать таймер на 6 микросекунд - тоже глупо.
|
|
|
|
|
Sep 1 2011, 08:22
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Sep 1 2011, 14:06)  А, понятно, но ведь это уже не страшно - последний бит уже защелкнулся, а что там будет с устройством при убирании чипселекта - нас уже не интересует. Впрочем, зависит от устройства. При чтении действительно не важно. А вот при записи... Что если устройство ещё не успело защёлкнуть последний бит? Или ему непременно нужны все такты клока для того чтобы обработать команду? Не, тут лучше перестраховаться. Цитата(777777 @ Sep 1 2011, 14:06)  заряжать таймер на 6 микросекунд - тоже глупо. Почему же глупо? Это очень приличное время по меркам 72МГц, 432 такта. Вполне можно зарядить.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|