Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2131 SPI через SSP
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Laptop
Пытаюсь настроить передачу через SSP. Реакция нулевая...

void SSP_Init(void)
{
PINSEL1 |= 0x88; // configure SPI0 pins
SSPCR0 = 0x0007; // 8 bit
SSPCR1 = 0x02; // enable, master
SSPCPSR = 20; // SCK = 7.5 MHz, counter > 2 and even
}

unsigned char SSP_write (unsigned char data)
{
volatile unsigned char result;

result = SSPDR;
SSPDR = data; // send next SPI channel 0 data
while ((SSPSR & 0x10)) ; // wait for transfer completed
return result;

}
Romario
Цитата(Laptop @ Jul 6 2006, 18:48) *
Пытаюсь настроить передачу через SSP. Реакция нулевая...

void SSP_Init(void)
{
PINSEL1 |= 0x88; // configure SPI0 pins
SSPCR0 = 0x0007; // 8 bit
SSPCR1 = 0x02; // enable, master
SSPCPSR = 20; // SCK = 7.5 MHz, counter > 2 and even
}

unsigned char SSP_write (unsigned char data)
{
volatile unsigned char result;

result = SSPDR;
SSPDR = data; // send next SPI channel 0 data
while ((SSPSR & 0x10)) ; // wait for transfer completed
return result;

}


да собственно всё верно. у меня такая же инициализация, правда для 38 и все работает. Правда
MISO в PINSEL1 я все таки разрешил, хотя по идее передача и без него должна быть.

требуется доп. информация типа :
- как смотрите что нет реакции? осциллом? случаем не на SPI0 ноги смотрите?smile.gif
- немного смущает SSPCPSR = 20; и SCK=7.5М - это же какая тактовая должна быть?smile.gif) м.б. развертку у осцилла "сжать"? smile.gif
- объявлены ли регистры SSP как volatile (правильные ли у них адреса наконецsmile.gif


больше ничего придумать не могу


p.s.
ну и логика работы у меня немного другая

Код
#define SPI_WAIT_BSY0()  do {} while (  SPI12138->SSPSR & 0x10)
#define SPI_DR                          SPI12138->SSPDR


static u8_t   spi_mov1  (u32_t b) {
            SPI_DR = b;
            SPI_WAIT_BSY0();
    return SPI_DR;
}
Laptop
Цитата(Romario @ Jul 6 2006, 20:57) *
да собственно всё верно. у меня такая же инициализация, правда для 38 и все работает. Правда
MISO в PINSEL1 я все таки разрешил, хотя по идее передача и без него должна быть.

требуется доп. информация типа :
- как смотрите что нет реакции? осциллом? случаем не на SPI0 ноги смотрите?smile.gif

Вот SPI0 как раз работает нормально, только с делителем на 8 сбоит и пришлось увеличить до 20, откуда и берется комментарий в следующей строчкеwink.gif
Но потребовался еще один канал и ...
Цитата
- немного смущает SSPCPSR = 20; и SCK=7.5М - это же какая тактовая должна быть?smile.gif) м.б. развертку у осцилла "сжать"? smile.gif

- объявлены ли регистры SSP как volatile (правильные ли у них адреса наконецsmile.gif

Все взято от IARаsmile.gif

Да, кстати, SPI0 заработал без сбоев только при делителе больше 16. А тактовая у меня и на процессор и на периферию 14745600*4
GetSmart
Цитата
unsigned char SSP_write (unsigned char data)
{
volatile unsigned char result;

result = SSPDR;
SSPDR = data; // send next SPI channel 0 data
while ((SSPSR & 0x10)) ; // wait for transfer completed
return result;

}

1. Писать в данном случае volatile нет смысла.

2. Почему чтение перед записью и ожиданием? Может надо после паузы? Или так, но ожидание в самом начале процедуры.

3. После установки SSPCR1=2 уже нельзя менять параметры SPI'я. Система не позволяет. Эта команда должна быть последней. Ну а для 100% надёжности первую команду инициализации лучше сделать: SSPCR1 = 0x00
GetSmart
Помогло?
Laptop
Всем спасибоsmile.gif

Все оказалось более прозаично...
С распиновкой разъема перемудрили, не выходили туда нужные сигналы.
Вот что значит все нужно проверять самомуsmile.gif

Теперь буду смотреть изза чего при делителе меньше 16 начинаются сбои и в SPI и в SSP, может в схеме внешнего устройства проблемы или с линией связи...
Сбой проявляется в неправильной загрузке во внешний регистр, то ли теряется импульс то ли лишний добавляется. Частота то пустяковая, всего 3,75 МГц. В понедельник гляну осциллографом.
Romario
Цитата
Все оказалось более прозаично...
С распиновкой разъема перемудрили, не выходили туда нужные сигналы.
Вот что значит все нужно проверять самомуsmile.gif


Если у меня чего то не работает я в первую очередь осциллом смотрю на _ноги_ проца.
И если на ногах есть, а на "разъеме" нет, кидаю сразу же плату
схемотехнику - типа сам #бись чего у тебя тутsmile.gif)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.