Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Synchronous Serial Port (SSP) в режиме SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mihask
Нет даже клоков с выхода SCK1. Может кто подскажет где ошибка ?
Или на MCB2103 неможно воспользоваться SPI1 ?

Программа:
#define SPIF (1<<4)
#define SPSR SSPSR
#define SPDR SSPDR


Инициализация:
void init_spi_SPI1(void)
{


SSPCR1 =0x0;
SetModeSpi_8bit_SPI1();
/* Configure Pin Connect Block */
PINSEL0 |=0x20000000;//PINSEL0.29=1 PINSEL0.28=0 -SCK1 (SSP1)
PINSEL1 |=0x140; // PINSEL1.7=0 PINSEL1.6=1 - MISO1 (SPI1)
//PINSEL1.9=0 PINSEL1.8=1 - MOSI1 (SPI1)

/* Set pclk to same as cclk */
//VPBDIV=0x1;
/* Set to highest speed for SPI at 60 MHz- > 1.85 MHz */
//PCLK / (CPSDVSR * [SCR+1])
SSPCPSR = 0x8;//CPSDVSR
/* Device selected as master,enabled */
SSPCR1 |= 0x2;
}

Вот процедура записи:
void WriteSpi_SPI1(unsigned DataSpi,unsigned Pin_SelectDevice)
{
/* Write data out */
SPDR=DataSpi;
/* Wait for transfer to be completed */
while(!(SPSR & SPIF)){}
DataSpi=SPDR;
}
mihask
Ну хоть намекните куда копать. smile.gif
mihask
Тем кто работал с SPI1 (т.е. SSP) на оценочной плате для процессора LPC2103 - MCB2103.

Получилось ли запустить этот интерфейс в работу?
Alex03
Цитата(mihask @ Nov 28 2006, 11:30) *
SetModeSpi_8bit_SPI1();


Вот это что?

Цитата
while(!(SPSR & SPIF)){}


И где в SSPSR бит SPIF?

ТАкое впечатление что Вы пытаетесь с SSP работать как со SPI, а они разные, притом сильно, и SSP нифига не совместим по регистрам/битам со SPI.
mihask
Цитата
Цитата
SetModeSpi_8bit_SPI1();


Вот это что?


Это вот что:

void SetModeSpi_8bit_SPI1(void)
{
SSPCR1 =0x0; //Disable SPI
SSPCR0 |= (SSPCR0 & (~0xF)) | 0x7; //Установить восьмибитный режим
SSPCR1 |=0x2; //Enable SPI
}



Цитата
Цитата
while(!(SPSR & SPIF)){}


И где в SSPSR бит SPIF?

вот где- #define SPIF (1<<4) -Это бит BSY из Status Register SSPSR

Цитата
ТАкое впечатление что Вы пытаетесь с SSP работать как со SPI, а они разные, притом сильно, и SSP нифига не совместим по регистрам/битам со SPI.

Нет я вроде все правильно работаю с SSP, просто я названия некоторых регистров и битов переопределил подогнав их названия под стандартный SPI.




Код
//Вот программа с дополнительными комментариями:

#define SPIF (1<<4)   //-Это бит BSY из Status Register (SSPSR)
#define SPSR SSPSR
#define SPDR SSPDR



void SetModeSpi_8bit_SPI1(void) //Установка восьмибитного режима
{
   SSPCR1 =0x0; //Disable SPI
   SSPCR0 |= (SSPCR0 & (~0xF)) | 0x7; //Установить восьмибитный режим
   SSPCR1 |=0x2; //Enable SPI
}


//Инициализация:
void init_spi_SPI1(void)
{

SSPCR1 =0x0;

SetModeSpi_8bit_SPI1();

/* Configure Pin Connect Block */
PINSEL0 |=0x20000000;   //PINSEL0.29=1 PINSEL0.28=0 -SCK1 (SSP1)

PINSEL1 |=0x140;            // PINSEL1.7=0 PINSEL1.6=1 - MISO1 (SPI1)
                                      //PINSEL1.9=0 PINSEL1.8=1 - MOSI1 (SPI1)

/* Set pclk to same as cclk */
//VPBDIV=0x1;

/* Set to highest speed for SPI at 60 MHz- > 1.85 MHz */
SSPCPSR = 0x8;             //  PCLK / (CPSDVSR * [SCR+1])      SCR=0  

/* Device selected as master,enabled */
SSPCR1 |= 0x2;
}

//Вот процедура записи:
void WriteSpi_SPI1(unsigned DataSpi,unsigned Pin_SelectDevice)
{
/* Write data out */
SPDR=DataSpi;
/* Wait for transfer to be completed */
while(!(SPSR & SPIF)){}
DataSpi=SPDR;
}
aaarrr
Офф, но форматирование лучше исправить - в глазах рябит.
Alex03
Цитата(mihask @ Dec 5 2006, 08:39) *
SSPCR0 |= (SSPCR0 & (~0xF)) | 0x7; //Установить восьмибитный режим

Подозреваю что хотели написать так
Код
SSPCR0 = (SSPCR0 & (~0xF)) | 0x7; //Установить восьмибитный режим

ИМХО SSPCR0 не плохо было-бы весь явно проинициализировать, а не только младшие 4 бита.

Цитата
while(!(SPSR & SPIF)){}


У Вас это while(!(SPSR & SSPSR_BSY)){}, т.е. пока не занят впустую вертимся, видимо наоборот хотели?


Цитата(aaarrr @ Dec 5 2006, 09:14) *
Офф, но форматирование лучше исправить - в глазах рябит.


mihask забыл [ / code ] в конце.
Пользуйся всегда "Предварительным просмотром" перд отправкой
zltigo
Цитата(mihask @ Nov 30 2006, 05:44) *
Нет даже клоков с выхода SCK1. Может кто подскажет где ошибка ?

Ошибка номер "раз" при портировании SPI на SSP:
Бит SSE в регистре SSPCR1 - глобальная выборка.
Без него естесвенно будет глухо, как в танке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.