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

 
 
> LPC2129 проблема SPI
hermit2008
сообщение May 5 2008, 15:46
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 9-01-08
Пользователь №: 33 936



Уже достаточно долго пытаюсь завести SPI на данном контроллере. Может подскажите что не так.

void spiInit(void)
{
// Select PIN
PINSEL0 &= ~0xFF00; // 0xFF00 for SSEL0
PINSEL0 |= 0x5500; // 0x5500 for SSEL0

// set SPI rate
S0SPCCR = 64;

// set master mode, clock polarity and phase
S0SPCR = (1<<SPCR_MSTR);
}

unsigned char spiTransferByte(unsigned char data)
{
// write SPI data
S0SPDR = data;

// wait until SPI transfer completes
while(!(S0SPSR & (1<<SPSR_SPIF)));
}


// чтение ID flash памяти M25P64
unsigned short spiflashGetID(void)
{
unsigned short id;
spiTransferByte(SPIFLASH_CMD_RDID);
id = spiTransferByte(0x00)<<8;
id |= spiTransferByte(0x00);
return id;
}

void test1()
{
spiInit();

// бесконечный цикл чтения ID для снятия осцилограммы
int i = 0;
while (1){
spiflashGetID();
}
}

Проблемка в том что на осцилограмме пин CLK0 не наблюдается никаких импульсов.
Если подозрения на SSEL0, он видит не задействованным. Пробовал подвоить к нему 3.3 вольта. как пишут на сайте NXP, результат такой же.

Выдержка с NXP.
Q I am using the SPI in only the master mode. Hence, I mapped MOSI and SCLK to the respective port pins. Why don't I see any output?
A This only occurs with our LPC2104/2105/2106, LPC2114/2124, LPC2214/2224, LPC2119/2129/2292/2294/2194, and LPC2210/2290 microcontrollers. When you are using the SPI in master mode with these devices, you also need to map SSEL pin to P0.7 and drive it high. You do not need to map the MISO pin.

Работаю с SPI первый раз, поэтому буду благодарен за любую помощь и советы.
Если у кого есть исходники с работой SPI с памятью M25P64 и подобными или просто любые самплы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vet
сообщение Sep 23 2008, 12:17
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



LPC2378, та же проблема - не удаётся оживить SPI.
Код
  //SCK
  PINSEL3_bit.P1_20   = 3; //SCK0
  FIO1CLR_bit.P1_20   = 1; //low
  FIO1DIR_bit.P1_20   = 1; //output
  PINMODE3_bit.P1_20  = 2; //no pull-up
  //SSEL
  PINSEL3_bit.P1_21   = 3; //SSEL0
  FIO1SET_bit.P1_21   = 1; //high
  FIO1DIR_bit.P1_21   = 1; //output
  PINMODE3_bit.P1_21  = 0; //pull-up
  //MISO
  PINSEL3_bit.P1_23   = 3; //MISO0
  FIO1DIR_bit.P1_23   = 0; //input
  PINMODE3_bit.P1_23  = 0; //pull-up (вход выведен на разъём)
  //MOSI
  PINSEL3_bit.P1_24   = 3; //MOSI0
  FIO1CLR_bit.P1_24   = 1; //low
  FIO1DIR_bit.P1_24   = 1; //output
  PINMODE3_bit.P1_24  = 2; //no pull-up

  //SPI
  PCLKSEL0_bit.PCLK_SPI = 3; //PCLK_SPI = CCLK/8
  S0SPCCR = 0x80; //prescaler
  S0SPCR  = 1<<5 /*MSTR*/;

После записи в S0SPDR через некоторое время выставляется флаг SPIF в S0SPSR; тем не менее, активности на ногах MOSI, SCK не наблюдается. Выходом SSEL управляю через FIOSET/FIOCLR; пробовал выставлять его в режим GPIO. Внешний подтягивающий к 3,3В 10кОм резистор на SSEL ставил. Программный SPI работает без проблем.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post



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

 


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


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