LPC1768的SPI通讯
SPI是一種全雙工串行接口,可處理多個連接到指定總線上的主機(jī)和從機(jī)。在數(shù)據(jù)傳輸過程中總線上只能有一個主機(jī)和一個從機(jī)通信。在數(shù)據(jù)傳輸中,主機(jī)總是會向從機(jī)發(fā)送一幀8到16個位的數(shù)據(jù),而從機(jī)也總會向主機(jī)發(fā)送一幀字節(jié)數(shù)據(jù)
?
使用代碼如下
void SpiInit(SPI_SPEED speed)
{
??? u8 div=25000000/speed;
??? LPC_SC->PCONP |= (1 << 8);//打開SPI時鐘
??? LPC_SC->PCONP |= (1<<15);//打開GPIO時鐘
????
??? //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<<BIT_ENABLE_POSITION)|(0<<CPHA_POSITION)|(1<<CPOL_POSITION)|(1<<MSTR_POSITION)\
??????? |(0<LSBF_POSITION)|(0<<SPIE_POSITION)|(0x08<<BITS_POSITION);
?
?? 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;
??? return writeData;
}
?
?
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);
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/dengxiaojun/p/4338682.html
總結(jié)
以上是生活随笔為你收集整理的LPC1768的SPI通讯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL注入法攻击一日通
- 下一篇: 网络电话