реклама на сайте
подробности

 
 
> глобальные грабли с spi1 в lpc214x, не работает на прием
diwil
сообщение Sep 29 2006, 06:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Уважаемые,

Я тут наткнулся на следующие грабли -
запускаю СПИ1 в режиме мастера - CPOL = 1, CPHA = 1,
разрешаю прерывания - SSPIMSC = 8 (прерывания, когда очередь на передачу на половину пуста).

Стартую СПИ1 так -
1. очищаю приемную очередь:
while( SSPSR & (1<<2)) __dummy = SSPDR;

2. Записываю 1 байт в очередь
SSPDR = *out_buff++;

3. Разрешаю прерывания.

Осциллом смотрю на все ноги. На ногу MISO подаю данные, которые знаю.
Однако ножку SSEL1 дергаю сам. Вижу следующее -
Посылается один байт. Вызывается обработчик прерывания.

В обработчике прерывания я
1. проверяю - есть ли данные в приемной очереди :
while(SSPSR & (1<<2)) *in_buff++ = SSPDR;

2. Набиваю очередь на передачу
while(SSPSR & (1<<1)) SSPDR = *out_buff++;

3. Естественно, контролирую количество байт, но это не затрагивает обращение к переферийным регистрам.


Теперь собственно ГРАБЛИ:
1. В обработчике прерывания бит RNE (receive FIFO not empty) никогда не бывает установлен в единицу. А это значит, что ничего не принято - а это не понятно почему. Тем не менее, при запуске СПИ1 в приемной очереди есть данные всегда.

2. Передающая очередь никогда не бывает размером больше 2х - т.е. цикл
while(SSPSR & (1<<1)) SSPDR = *out_buff++;
выполняется не более 2х раз!!! (размер очереди - 8)


мож кто сталкивался с подобным?

Заранее благодарствую
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- diwil   глобальные грабли с spi1 в lpc214x   Sep 29 2006, 06:56
- - zltigo   Честно прочитал четыре раза. После процесса иницал...   Sep 29 2006, 21:20
|- - diwil   Цитата(zltigo @ Sep 30 2006, 01:20) Честн...   Oct 2 2006, 08:02
|- - zltigo   Цитата(diwil @ Oct 2 2006, 11:02) Грабли ...   Oct 2 2006, 09:08
|- - diwil   Цитата(zltigo @ Oct 2 2006, 13:08) Цитата...   Oct 2 2006, 10:16
- - zltigo   Урвал минутку, посмотрел. Для начала, так: Код w...   Oct 2 2006, 11:36
|- - diwil   хм... байты по СПИ1 передаются правильно... смотр...   Oct 2 2006, 11:46
|- - zltigo   Цитата(diwil @ Oct 2 2006, 14:46) хм... ...   Oct 2 2006, 12:09
|- - diwil   Цитата(zltigo @ Oct 2 2006, 16:09) Давайт...   Oct 2 2006, 13:02
|- - zltigo   Цитата(diwil @ Oct 2 2006, 16:02) 2. PCLK...   Oct 2 2006, 14:58
|- - diwil   Цитата(zltigo @ Oct 2 2006, 18:58) Самый ...   Oct 2 2006, 16:17
- - zltigo   Простейший вариант без прерывания. На частоте SPI...   Oct 2 2006, 17:33
- - diwil   Цитата(zltigo @ Oct 2 2006, 21:33) Просте...   Oct 3 2006, 07:26
- - zltigo   Цитата(diwil @ Oct 3 2006, 10:26) 1. част...   Oct 3 2006, 07:48
- - diwil   Цитата(zltigo @ Oct 3 2006, 11:48) Но: 2....   Oct 3 2006, 08:06
- - zltigo   Цитата(diwil @ Oct 3 2006, 11:06) Дело, н...   Oct 3 2006, 08:14
- - diwil   получилось так: Кодvoid spi1_transfer(uint8_t ...   Oct 3 2006, 17:45


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016