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

 
 
> нечего не пойму SPI не хотит работать, что такое может кто скажет
asen
сообщение May 27 2006, 13:45
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Вот подключил к SPI0 в LPC2292 внешнею EEPROM и вроде SPI0 конфигурирую как надо гружу данные в регистр данных но на выводах все спокойно и не чего не происходит, думал линии эти мертвые проверил переконфигурив в режим портов ввода /вывода все дрыгаются. Может что я забыл или какой то секрет есть вот функции конфигурирования



#define CS_EEPROM 1<<14//P0


void SPI_init (void)
{
//*************SPI EEPROM****************
PINSEL0_bit.P0_4=1;
PINSEL0_bit.P0_5=5;
PINSEL0_bit.P0_6=1;

IO0DIR |=CS_EEPROM;
IO0SET |=CS_EEPROM;
//***************************************
S0SPCR_bit.CPOL=0;
S0SPCR_bit.CPHA=0;
S0SPCR_bit.MSTR=1;
S0SPCR_bit.LSBF=1;
S0SPCR_bit.SPIE=0;
S0SPCCR=80;
}


unsigned char EEPROM_RDSR (void)
{
IO0CLR = CS_EEPROM;
S0SPDR = 5;
for (;S0SPSR_bit.SPIF != 1;)
{;}
S0SPDR = 0;
for (;S0SPSR_bit.SPIF != 1;)
{;}
IO0SET = CS_EEPROM;
return S0SPDR;

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
zltigo
сообщение May 27 2006, 14:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(asen @ May 27 2006, 16:45) *
Может что я забыл или какой то секрет есть вот функции конфигурирования

Сконфигурить _все_ 4pin ПРАВИЛЬНО без '=5' и прочитать примечание в документации
по поводу SSEL в режиме Master. Не забыть выставить тактовую частоту.
Все.


Цитата
for (;S0SPSR_bit.SPIF != 1;)
{;}

И не использовать таких диких языковых конструкций :-(
И не забывать обрабатывать прочие биты ошибок из SPSR.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
asen
сообщение May 27 2006, 14:08
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



хотел бы я посмотреть тому разработчику каторый придумал эту фичу с подтяжкой SSEL к питанию
гении блин !
Спасибо всем!
Go to the top of the page
 
+Quote Post
Tria
сообщение Jun 30 2006, 12:59
Сообщение #4





Группа: Новичок
Сообщений: 2
Регистрация: 16-05-06
Пользователь №: 17 141



Столкнулся с проблемой работы SPI на LPC2129 по прерыванию - оно не срабатывает angry.gif , хотя прерывания от таймеров, UART'ов работают как часы.

инициализация прерывания:
....
VICIntSelect &= ~(1<<VIC_SPI1);
VICVectAddr2 = (unsigned int)&SPI1Interrupt;
VICVectCntl2 = 0x20 | VIC_SPI1;
VICIntEnable = (1<<VIC_SPI1);
....
инициализация SPI1
void SPI1Init(void)
{
S1SPCCR = 0x08;
S1SPCR = 0xE0;
}

начало передачи данных
S1SPDR = *Pointer;

при пошаговой отладке в IAR'е видно что флаги SPIF, SPINT после передачи байта = 1
но прерывание не срабатывает.
при "ручной" передаче все работает (все 4 порта инициализированны как SPI)
while(1)
{
S1SPDR = *Pointer;
while(!S1SPSR_bit.SPIF);
}

в чем я не прав?! help.gif где собака зарылась?????
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 30 2006, 13:43
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



SSEL = 1 ???

И S1SPINT в прерывании прописываете?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Tria
сообщение Jun 30 2006, 16:18
Сообщение #6





Группа: Новичок
Сообщений: 2
Регистрация: 16-05-06
Пользователь №: 17 141



SSEL подвешен через 10к к Vcc

а обработчик следующий:
void SPI1Interrupt(void)
{
S1SPINT = 0x01;
*Pointer++ = S1SPDR;
if(--Counter) {S1SPDR = *Pointer;}
}
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2006, 17:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А VIC сбросить (VICVectAddr=XX) не забываете?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 30 2006, 17:18
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Во-первых, в прерывании нужно перед обращением к S1SPDR обязательно прочитать S1SPSR.

А вообще, проверьте адреса всех регистров в iolpc2129.h
ну и все VIC_... заодно.
Я у себя в ИАРе для 2138 подправлял немного вручную.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jul 2 2006, 06:50
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Плюс, не забывайте что при чтении регистров по JTAG, если в регистрах есть сбрасывающиеся по чтению биты, то они сбрасываются.
Т.е. при пошаговой отладке с просмотром всевозможных флагов прерываний легко эти самые прерывания потерять.
У некоторых производителей бывают специальные теневые регистры для чтения из отладчиков (да и не только). Филипс этим не озадачился. sad.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 15:26
Рейтинг@Mail.ru


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