я тоже только что фунции для spi писал.
вот мои кусочки которые работают
инициализация для LPC2368
Код
PINSEL0 |= 0xC00A8000; // CLK; MOSI1, MISO1, CLK1
PINSEL1 |= 0x0000003C; // MISO, MOSI;
FIO0DIR |= (1<<CS_FPGA); // CS_FPGA
FIO0SET |= (1<<CS_FPGA); // CS_FPGA
FIO0DIR |= (1<<CS_FLASH1); // CS_FLASH1
FIO0SET |= (1<<CS_FLASH1); // CS_FLASH1
S0SPCCR = 8; // max freq clock = 6MHz
S0SPCR = SPI0_MSTR;
SSP1CR0 = 0x00000007; // max freq, clk- low defalt, second edge, spi, 8bit
SSP1CR1 = 0x00000002; // SSP Enable, master
SSP1CPSR = 4; // max freq
посылка значений
Код
unsigned int i; unsigned int b;
FIO0CLR |= (1<<CS_FPGA);
S0SPDR = adr;
while ( !(S0SPSR & SPIF) );
i = S0SPDR; // Flush the RxFIFO
S0SPDR = data;
while ( !(S0SPSR & SPIF) );
b = (data >> 8);
S0SPDR = b;
while ( !(S0SPSR & SPIF) );
FIO0SET |= (1<<CS_FPGA);
return i;
или
Код
void Flash1_ReadType(void)
{
volatile unsigned int i;
FIO0CLR |= (1<<CS_FLASH1);
SSP1DR = 0x9F;
SSP1DR = 0;
SSP1DR = 0;
SSP1DR = 0;
// while ( !(SSP1SR & SSPSR_BSY) ); // SSPSR_TFE SSPSR_RNE
i = SSP1DR;
Flash1_ManID = SSP1DR;
Flash1_MemType = SSP1DR;
Flash1_MemSize = SSP1DR;
FIO0SET |= (1<<CS_FLASH1);
}
но что я не понимаю - почему последняя функция выполняется 3.6 us? я вроде и частоту процессора настроил 72 МГц и spi 18МГц.
за сколько должна выполнятся команда MOV ?