Уже достаточно долго пытаюсь завести 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 и подобными или просто любые самплы.
|