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

 
 
 
Reply to this topicStart new topic
> Synchronous Serial Port (SSP) в режиме SPI, не работает на MCB2103(Keil)
mihask
сообщение Nov 28 2006, 09:30
Сообщение #1


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Нет даже клоков с выхода 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;
}
Go to the top of the page
 
+Quote Post
mihask
сообщение Nov 30 2006, 06:44
Сообщение #2


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Ну хоть намекните куда копать. smile.gif
Go to the top of the page
 
+Quote Post
mihask
сообщение Nov 30 2006, 07:11
Сообщение #3


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Тем кто работал с SPI1 (т.е. SSP) на оценочной плате для процессора LPC2103 - MCB2103.

Получилось ли запустить этот интерфейс в работу?
Go to the top of the page
 
+Quote Post
Alex03
сообщение Nov 30 2006, 10:53
Сообщение #4


Местный
***

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



Цитата(mihask @ Nov 28 2006, 11:30) *
SetModeSpi_8bit_SPI1();


Вот это что?

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


И где в SSPSR бит SPIF?

ТАкое впечатление что Вы пытаетесь с SSP работать как со SPI, а они разные, притом сильно, и SSP нифига не совместим по регистрам/битам со SPI.
Go to the top of the page
 
+Quote Post
mihask
сообщение Dec 5 2006, 06:39
Сообщение #5


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Цитата
Цитата
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;
}


Сообщение отредактировал mihask - Dec 5 2006, 07:34
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 5 2006, 07:14
Сообщение #6


Гуру
******

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



Офф, но форматирование лучше исправить - в глазах рябит.
Go to the top of the page
 
+Quote Post
Alex03
сообщение Dec 5 2006, 07:28
Сообщение #7


Местный
***

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



Цитата(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 ] в конце.
Пользуйся всегда "Предварительным просмотром" перд отправкой
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 5 2006, 11:54
Сообщение #8


Гуру
******

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



Цитата(mihask @ Nov 30 2006, 05:44) *
Нет даже клоков с выхода SCK1. Может кто подскажет где ошибка ?

Ошибка номер "раз" при портировании SPI на SSP:
Бит SSE в регистре SSPCR1 - глобальная выборка.
Без него естесвенно будет глухо, как в танке.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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