|
глобальные грабли с spi1 в lpc214x, не работает на прием |
|
|
|
Sep 29 2006, 06:56
|
Местный
  
Группа: Свой
Сообщений: 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)
мож кто сталкивался с подобным?
Заранее благодарствую
|
|
|
|
|
 |
Ответов
|
Oct 2 2006, 08:02
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(zltigo @ Sep 30 2006, 01:20)  Честно прочитал четыре раза. После процесса иницализации и 'стартую 1 2 3' не смог ничего понять из дальнейших действий :-( С 213x/4x работаю из "проблем" с FIFO только одна - нет возможности сбросить его содержимое без тупого вычитывания. Все испробованые режимы соответствуют документации. Возможные грабли весьма интересуют посему просьба описать более ясно ситуацию - попробую повторить. Грабли такие - 1. Размер очереди на передачу - по документации она == 8, у меня ее размер, вычисленный путем проверки флага в SSPSR получается не более 2х. 2. Флаг наличия данных в приемной очереди никогда не бывает равен 1. Т.е. такое впечатление, что очередь всегда пуста.
|
|
|
|
Сообщений в этой теме
diwil глобальные грабли с spi1 в lpc214x Sep 29 2006, 06:56   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|