Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC22xx SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
schaulin
Пытаюсь настроить передачу через SPI. Реакция нулевая...

void SPI_Init(void)
{
PINSEL1 |= 0x88; // configure SPI1 pins

SPCCR = 0x08; /* Clock Counter = 8 */
SPCR = 0x08A0; /* SPIE and MSTR enable, transfer with 8 bits */

}

int SPI_write (void)
{
unsigned char result;

SPDR = data; // send next SPI channel 0 data
while (!(SPSR & 0x80)) ; // wait for transfer completed

return (0);

}
solidreg
From PDF:
"Note: LPC2119/2129/2194/2292/2294 configured to operate as SPI master MUST select
SSEL functionality on an apropriate pin and have HIGH level on this pin in order to act
as a master."

Kak tam y vas dela c SSEL?
schaulin
Unlike earlier Philips ARM devices, LPC2210/2220 configured as a SPI0/1
master does not need an external pull-up on the SSEL0/1 pin in order to perform.
LPC2210/2220 based SPI master can use the pin hosting SSEL0/1 function for a
non-SPI purpose, too. For example, pin providing the SSEL0 function can be
configured as an output digital GPIO pin and used to select one of the SPI0
slaves. This is usually the case with a SPI system is designed around a single
master device
zltigo
Цитата(schaulin @ Aug 25 2006, 11:34) *
Unlike earlier Philips ARM devices, LPC2210/2220 configured as a SPI0/1

1. Вы даже не потрудились указать свой контроллер указав 22XX, а они все разные
и указание solidreg было абсолютно уместным.
2. Пишите инициализацию более понятно, например, в таком стиле (это для 213x IAR)
Код
int init_SPI1( void )
{
    // Prescaler = 2 (Maximum Clock for Master)
    SSPCPSR_bit.CPSDVSR =  2;                    
          
    // Configure Pin Connect Block
    PINSEL1_bit.P0_17 = 0x2;    // SCK1
    PINSEL1_bit.P0_18 = 0x2;    // MISO1
    PINSEL1_bit.P0_19 = 0x2;    // MOSI1
    PINSEL1_bit.P0_20 = 0x2;    // SSEL1

    PINSEL0_bit.P0_12 = 0x0;    // SSEL_SOFT
    IO0SET =  BIT12;        // Set Hi (Disabled)
    IO0DIR |= BIT12;        // Set ports to output

    SSPCR0_bit.FRF    =   0;             // SPI Mode
    SSPCR0_bit.DSS    =  (8-1);         // 8bit Transfer
    SSPCR0_bit.CPOL =     1;             // Polarity
    SSPCR0_bit.CPHA =     1;            // Phase
    SSPCR0_bit.SCR     =  (2-1);        // Divider

    // Device selected as master
    SSPCR1_bit.MS      = 0;                // Master
    SSPCR1_bit.SSE  = 1;                // Global Enable

      for( int i = 0; i < 8; i++ )
      {    ulong dummy = SSPDR;         // Clear the RxFIFO
          dummy = dummy;    
    }

....

    return( 0 );
}


И самому будет понятнее и другим.

Ну а по существу у Вас 222x и Вы как минимум забыли про SSPCR1(0xE005C004) SSE бит

3. Что Вы называете "нулевой реакцией"? Или предполагается предварительная консультация отвечающего с экстрасенсом?
schaulin
Я конечно извиняюсь за недоразумения и попытаюсь разъеснить мою проблему ещё раз.
мой микроконтроллер называется lpc2220 и я провожу следующие операции.
1. я ставлю P0.4, P0.6, P0.17, P0.19 (SCK0, MOSI0, SCK1, MOSI1) на 0
IO0CLR |= (P0.4 | P0.6 | P0.17 | P0.19);

2. я ставлю эти же пины как "output"
IO0DIR |= (P0.4 | P0.6 | P0.17 | P0.19);

3. PINSEL0/1
PINSEL0 |= 0x00001100 (P0.4 == SCK0, P0.6 == MOSI0);
PINSEL1 |= 0x00000088 (P0.17 == SCK1, P0.19 == MOSI1);


4. Clock Counter = 8
SPCCR0 |= 0x08;
SPCCR1 |= 0x08;

5 SPCR
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)


6. потом я питаюсь отослать даты с помощу следующего кода
int SPI_write (void)
{
unsigned char result;
SPDR = data; // send next SPI channel 0 data
while (!(SPSR & 0x80)) ; // wait for transfer completed
return (0);
}

7. ПРОБЛЕМА
Если смотреть на регистры то всё идёт нормально но если подсоединить осцилоскоп то из чипа не одного сигнала невыходит

я переделал код для SPI1 и настроил SSP как SPI ... всё работает нормально как и надо а вот если без SSP то никаких сигналов снаружи микроконтроллера неувидиш
zltigo
Цитата(schaulin @ Aug 28 2006, 15:12) *
7. ПРОБЛЕМА

Повторяю:
Цитата
забыли про SSPCR1(0xE005C004) SSE бит
schaulin
пробывал ещё следующий код добавлять ... ефект тот-же
SSPCR0 |= 0x0007; // 8 bit
SSPCPSR |= 0x02; //
SSPCR1 |= 0x02; // SSE = 1, master

Только вот я никак непойму зачем вообще SSP настраивать если я хочу только SPI преминять
schaulin
Цитата(solidreg @ Aug 24 2006, 16:03) *
From PDF:
"Note: LPC2119/2129/2194/2292/2294 configured to operate as SPI master MUST select
SSEL functionality on an apropriate pin and have HIGH level on this pin in order to act
as a master."

Kak tam y vas dela c SSEL?

Цитата
Unlike earlier Philips ARM devices, LPC2210/2220 configured as a SPI0/1
master does not need an external pull-up on the SSEL0/1 pin in order to perform.
LPC2210/2220 based SPI master can use the pin hosting SSEL0/1 function for a
non-SPI purpose, too. For example, pin providing the SSEL0 function can be
configured as an output digital GPIO pin and used to select one of the SPI0
slaves. This is usually the case with a SPI system is designed around a single
master device


всем привет
я нашёл ошибку
всё дело было в SSEL сигнале несмотря на то что в датешите стоит что его можно непреминять
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.