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

 
 
> LPC2220 SPI, вписываешь одно, стоит другое
schaulin
сообщение Aug 29 2006, 14:59
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 26-01-06
Из: Germany
Пользователь №: 13 649



Пытаюсь вписать в регистры
S0SPCR |= 0x0824; //(BitEnable = 1, CPHA = 0, CPOL = 0, MSTR = 1, LSBF/SPIE = 0, BITS = 8)
S1SPCR |= 0x0824; //(BitEnable = 1, CPHA = 0, CPOL = 0, MSTR = 1, LSBF/SPIE = 0, BITS = 8)

а вписывается только 0х0020

и ещё

/*1*/ while(1)
/*2*/ {
/*3*/
/*4*/ S1SPDR = *addr_of_data++;
/*5*/
/*6*/ while(!(S1SPSR & 0x80));
}

если постояно пророверять регистр S1SPSR в строчке /*4*/ то там всегда стоит 0х80 хотя после while(!(S1SPSR & 0x80)); должно стоять 0х00???

помогите кто может

Сообщение отредактировал schaulin - Aug 29 2006, 15:01


--------------------
spi
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
GetSmart
сообщение Aug 29 2006, 15:18
Сообщение #2


.
******

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



Цитата(schaulin)
если постояно пророверять регистр S1SPSR в строчке /*4*/ то там всегда стоит 0х80 хотя после while(!(S1SPSR & 0x80)); должно стоять 0х00???

А это ещё почему? вроде при выходе из цикла как раз должен быть 0х80.
По поводу всего остального - в регистрах наверняка стоит защита от изменения параметров в активном режиме. Это значит сначала нужно выключить SPI, затем изменить его настройки, а уж затем включить его. По крайней мере две или три команды. все подробности должны быть описаны в описании данных регистров. Читать лень?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
schaulin
сообщение Aug 29 2006, 15:47
Сообщение #3





Группа: Новичок
Сообщений: 11
Регистрация: 26-01-06
Из: Germany
Пользователь №: 13 649



да нет читать не лень уже целую неделю читаю голова уже дымит help.gif
посмотри пожалуйста в поиске lpc22xx spi может ты уже знаком с этой проблемойроблемой


--------------------
spi
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 29 2006, 16:02
Сообщение #4


.
******

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



у меня нет pdf на 2220. а искать в сети жалко денег. приведу свой пример для lpc213x:
Код
void LPC213xInitSPI1Master()
{
    PINSEL1 = (PINSEL1 & ~0x3fc) | 0x0a8;   // for SCK0, MISO, MOSI, SSEL-
    SSPCR1 = 0x00;      // master mode
//    SSPCR0 = 0xc7;      // SPI, 8 bit, mode 3, 0 - активный уровень SCK
    SSPCR0 = 0x07;      // SPI, 8 bit, mode 0, 1 - активный уровень SCK
    SSPCPSR = PCLKFREQ / 9830400;      // = 6 (обязательно чётное)
    SSPIMSC = 0;        // прерывания запрещены
    SSPCR1 = 0x02;      // SSP enable in master
    if (SSPSR) {};
    SSPDR = 0;
}


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





Группа: Новичок
Сообщений: 11
Регистрация: 26-01-06
Из: Germany
Пользователь №: 13 649



што у меня тут не так????

void Spi_Init( void )
{
u32 portConfig;
u8 i, Dummy;
IO0CLR |= (P0_4 | P0_6 | P0_17 | P0_19);
IO0DIR |= (P0_4 | P0_6 | P0_17 | P0_19 | P0_20 | P0_7);
IO0SET |= (P0_20 | P0_7);

PINSEL0 = 0x00005100;// (P0.4 == SCK0, P0.6 == MOSI0);
PINSEL1 = 0x00000288;// (P0.17 == SCK1, P0.19 == MOSI1);
PINSEL2 = 0x0F614114;

S0SPCCR |= 0x08;
S1SPCCR |= 0x08;

S0SPCR |= 0x0824; //(BitEnable = 1, CPHA = 0, CPOL = 0, MSTR = 1, LSBF/SPIE = 0, BITS = 8)
S1SPCR |= 0x0824; //(BitEnable = 1, CPHA = 0, CPOL = 0, MSTR = 1, LSBF/SPIE = 0, BITS = 8)

// PCONP = 0x00201BBE; //SSP on SPI1 of
SSPCR0 = 0x0007; // 8 bit
SSPCPSR = 0x02; //
SSPCR1 = 0x02; // enable, master

for ( i = 0; i < 8; i++ )
{
Dummy = S0SPDR; /* clear the RxFIFO */
Dummy = S1SPDR; /* clear the RxFIFO */
Dummy = SSPDR; /* clear the RxFIFO */

}

return;
}



int write_to_spi(void)
{
u32 i = 0;
u32 Dummy;
u8 *addr_of_data = ADDR_OF_NETLIST1;

while( ((IO0PIN & DONE1) == 0) && (i++ < (SPACE_SIZE_XC4VLX100 + 100)) ) //hardware
{

S0SPDR = *addr_of_data++;

while(!(S0SPSR & 0x80));;

}

if(i >= (SPACE_SIZE_XC4VLX100 + 100) ) //+100 space for done
{
return(1);
}
else
{
return(0);
}
}


datasheet приклеплен

Сообщение отредактировал schaulin - Aug 29 2006, 16:33


--------------------
spi
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 29 2006, 16:54
Сообщение #6


.
******

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



pdf что-то не видно. Я например ещё не работал с spi в режиме только на вывод. Может там что-то особенное есть. Например читать в холостую тот же SPDR для сброса флагов. А может для работы позарез нужна линия MISO.

Цитата
PINSEL1 = 0x00000288;// (P0.17 == SCK1, P0.19 == MOSI1);
Мне кажется или тут SSEL1 разрешается? Если да, то зачем?


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





Группа: Новичок
Сообщений: 11
Регистрация: 26-01-06
Из: Germany
Пользователь №: 13 649



это я уже просто все варианты проходил...
вот линк к описанию lpc2220

http://www.semiconductors.philips.com/acro...h=%22um10114%22

попробую сейчас в обои стороны штобы хоть каккойнибуть сигнал на осцилоскопе увидеть


--------------------
spi
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:19
Рейтинг@Mail.ru


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