|
SPI на stm32f2xx и прерывания |
|
|
|
Jun 11 2013, 17:38
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Здравствуйте Пытаюсь реализовать обмен по SPI как описано в мануале, на прерываниях: Цитата 2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag). 3. Wait until TXE=1 and write the second data item to be transmitted. Then wait until RXNE=1 and read the SPI_DR to get the first received data item (this clears the RXNE bit). Repeat this operation for each data item to be transmitted/received until the n–1 received data. 4. Wait until RXNE=1 and read the last received data. По пунктам (жирным - мои действия, курсивом - предположения о работе железа): 1. пишем в DR байт 0 для передачи2. байт копируется в TX, Срабатывает прерывание по TXE, в котором пишем в DR байт 1. При этом передача из TX возможно еще не завершена3. Передача TX завершается, при этом в DR оказывается принятый байт 0, а байт 1 копируется в TX4. Если теперь прерывание по RXNE (в котором читем DR) обработается до окончания передачи байта 1 из TX - все здорово. Но если после, то будет переполнение и один из принятых байтов окажется потерян Я реализовал передачу только на одном прерывании RXNE, т.е. пишу очередной байт после вычитки предыдущего. Это работает, но дает относительно большие задержки между байтами на шине. Рекомендованный в даташите алгоритм дает меньшие задержки, но иногда вызывает переполнение. Или я где-то напутал и его все же можно реализовать для случая, когда возможна задержка обработка прерывания по RXNE? Спасибо!
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Jun 13 2013, 08:09
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425

|
Цитата(jcxz @ Jun 13 2013, 11:23)  Вот почему оно не подключается, вот в чём вопрос? И фифо на SPI в стм наверняка нету...  Почему всё так обрезано??? В LPC-ках, к примеру, и фифо есть и CS-ом рулить по DMA можно (хоть не всегда гуд). В STM32 DMA довольно простой, указали адрес, количество и вперед, применять очень легко. Я видел, как CS подключен к DMA на AVR32 и это был обычный костыль - бит CS указывался в старших битах 32-х разрядного регистра данных. Т.е. чтобы передавать 8-ми битные данные с поддержкой CS, DMA нужно было настроить на 32 бита и в поток данных искусственно вставлять биты CS.
|
|
|
|
|
Jun 13 2013, 08:20
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(jcxz @ Jun 13 2013, 11:23)  И фифо на SPI в стм наверняка нету...  Нету, увы. В регистре хранится последний прочитанный байт, плюс есть внутренний регистр, в который идет чтение из шины. Сделали бы они хотя б 2-байтное fifo на прием, было бы здорово... Цитата(Dopler @ Jun 13 2013, 12:09)  Я видел, как CS подключен к DMA на AVR32 и это был обычный костыль - бит CS указывался в старших битах 32-х разрядного регистра данных. Т.е. чтобы передавать 8-ми битные данные с поддержкой CS, DMA нужно было настроить на 32 бита и в поток данных искусственно вставлять биты CS. Ну а как по другому то сделать? Надо ж где-то сообщать, когда изменять CS. Кстати интересный вопрос - у CS же еще и задержка должна быть. А она как настраивается в таком случае?
|
|
|
|
|
Jun 14 2013, 07:39
|

Профессионал
    
Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952

|
Цитата(jcxz @ Jun 13 2013, 11:23)  Вот почему оно не подключается, вот в чём вопрос? И фифо на SPI в стм наверняка нету...  Почему всё так обрезано??? В LPC-ках, к примеру, и фифо есть и CS-ом рулить по DMA можно (хоть не всегда гуд). Бросается в глаза то, что по LPC(1343, 1114) вопросов у форумчан нет. Действительно удачные процессоры. Откуда у народа тяга к STM32?
|
|
|
|
|
Jun 15 2013, 15:41
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(etoja @ Jun 14 2013, 11:39)  LPC(1343, 1114) .... удачные процессоры. Откуда у народа тяга к STM32? Там есть свои "прелести". Тот же PWM на 1343 аппаратно сделать не выйдет. По нынешним временам это совсем странно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|