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