SPI是一種全雙工串行接口,可處理多個(gè)連接到指定總線上的主機(jī)和從機(jī)。在數(shù)據(jù)傳輸過程中總線上只能有一個(gè)主機(jī)和一個(gè)從機(jī)通信。在數(shù)據(jù)傳輸中,主機(jī)總是會向從機(jī)發(fā)送一幀8到16個(gè)位的數(shù)據(jù),而從機(jī)也總會向主機(jī)發(fā)送一幀字節(jié)數(shù)據(jù)
使用代碼如下
void SpiInit(SPI_SPEED speed)
{
u8 div=25000000/speed;
LPC_SC->PCONP"=(1<<8);//打開SPI時(shí)鐘
LPC_SC->PCONP|=(1<<15);//打開GPIO時(shí)鐘
//sck
LPC_PINCON->PINSEL0&=~(0x03u<<30);
LPC_PINCON->PINSEL0|=(0x03u<<30);
//csn
LPC_PINCON->PINSEL1&=~(0x03<<0);
// LPC_PINCON->PINMODE1 &= ~(0x03<<0);
// LPC_PINCON->PINMODE_OD0 &= ~(0x01<<16);
P0dir(16)=1;
//miso
LPC_PINCON->PINSEL1&=~(0x03<<2);
LPC_PINCON->PINSEL1|=(0x03<<2);
//mosi
LPC_PINCON->PINSEL1&=~(0x03<<4);
LPC_PINCON->PINSEL1|=(0x03<<4);
SPI_CS_HIGH;
//spi接口初始化 每次8位數(shù)據(jù) sck上升沿采樣 sck高有效 主模式 禁止中斷 msb高位在前
LPC_SPI->SPCR=(0< |(0 if(div<8)div=8; LPC_SPI->SPCCR=div; } u8 SpiRW(u8 writeData) { LPC_SPI->SPDR=writeData; while((LPC_SPI->SPSR&0x80)!=0x80); writeData=(LPC_SPI->SPDR)&0xff; returnwriteData; } void SpiSetSpeed(SPI_SPEED speed) { u8 div=25000000/speed; if(div<8)div=8; LPC_SPI->SPCCR=div; } void SpiSetSpeedHigh(void) { SpiSetSpeed(SPI_SPEED5); } void SpiSetSpeedLow(void) { SpiSetSpeed(SPI_SPEED1); }