|
LPC2220 SPI, вписываешь одно, стоит другое |
|
|
|
Aug 29 2006, 14:59
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
 |
Ответов
(1 - 6)
|
Aug 29 2006, 15:18
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(schaulin) если постояно пророверять регистр S1SPSR в строчке /*4*/ то там всегда стоит 0х80 хотя после while(!(S1SPSR & 0x80)); должно стоять 0х00??? А это ещё почему? вроде при выходе из цикла как раз должен быть 0х80. По поводу всего остального - в регистрах наверняка стоит защита от изменения параметров в активном режиме. Это значит сначала нужно выключить SPI, затем изменить его настройки, а уж затем включить его. По крайней мере две или три команды. все подробности должны быть описаны в описании данных регистров. Читать лень?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 29 2006, 15:47
|
Группа: Новичок
Сообщений: 11
Регистрация: 26-01-06
Из: Germany
Пользователь №: 13 649

|
да нет читать не лень уже целую неделю читаю голова уже дымит посмотри пожалуйста в поиске lpc22xx spi может ты уже знаком с этой проблемойроблемой
--------------------
spi
|
|
|
|
|
Aug 29 2006, 16:02
|
.
     
Группа: Участник
Сообщений: 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; }
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 29 2006, 16:29
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
Aug 29 2006, 16:54
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
pdf что-то не видно. Я например ещё не работал с spi в режиме только на вывод. Может там что-то особенное есть. Например читать в холостую тот же SPDR для сброса флагов. А может для работы позарез нужна линия MISO. Цитата PINSEL1 = 0x00000288;// (P0.17 == SCK1, P0.19 == MOSI1); Мне кажется или тут SSEL1 разрешается? Если да, то зачем?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 30 2006, 07:50
|
Группа: Новичок
Сообщений: 11
Регистрация: 26-01-06
Из: Germany
Пользователь №: 13 649

|
это я уже просто все варианты проходил... вот линк к описанию lpc2220 http://www.semiconductors.philips.com/acro...h=%22um10114%22попробую сейчас в обои стороны штобы хоть каккойнибуть сигнал на осцилоскопе увидеть
--------------------
spi
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|