LPC2478的spi使用
LPC2748具有一個SPI控制器,可以當做SPI主機或者從機使用,有以下特性
其使用起來很方便,并且支持中斷,使用的寄存器如下
基本上,使用起來就是設(shè)置控制為,CPOL CPOA等等,數(shù)據(jù)長度的配置等,設(shè)置分頻率,發(fā)送數(shù)據(jù),等待狀態(tài)或者中斷,發(fā)送完成,就OK了
官方給出的流程如下
操作過程見以下代碼
#ifndef__SPI0_H_
#define__SPO0_H_
#include"common.h"
#include"lpc24xx.h"
#include"clock.h"
typedefenumSPI0_SPEED
{
SPI_SPEED1=100000,
SPI_SPEED2=500000,
SPI_SPEED3=1000000,
SPI_SPEED4=1500000,
SPI_SPEED5=2000000,
SPI_SPEED6=3125000
}SPI0_SPEED;
typedefenumSPI_BITFRIST
{
msbFrist=0,
lsbFrist=1
}SPI_BITFRIST;
voidSpi0SelectCs(void);
voidSpi0DisSelectCs(void);
u8Spi0RwData(u8writeByte,u8*readByte);
voidSpi0SetSpeed(SPI0_SPEEDspeed);
voidSpi0Init(SPI0_SPEEDspeed,SPI_BITFRISTbitFrist);
#endif
#include"spi.h"
#defineBIT_ENABLE_POSITION2
#defineCPHA_POSITION3
#defineCPOL_POSITION4
#defineMSTR_POSITION5
#defineLSBF_POSITION6
#defineSPIE_POSITION7
#defineBITS_POSITION8
voidSpi0Init(SPI0_SPEEDspeed,SPI_BITFRISTbitFrist)
{
u32spiClock=(SystemCoreClock/4)/speed;
PCONP|=(1<<8);//打開SPI時鐘
SCS|=(1<<0);//設(shè)置高速寄存器組方式訪問端口
//sck
PINSEL0&=~(0x03u<<30);
PINSEL0|=(0x03u<<30);
PINMODE0&=~(0x03u<<30);
//csn普通GPIO不用硬件CSN
PINSEL1&=~(0x03<<0);
PINMODE1&=~(0x03<<0);
FIO0DIR|=(1<<16);
//miso
PINSEL0&=~(0x03<<2);
PINSEL0|=(0x03<<2);
PINMODE0&=~(0x03<<2);
//mosi
PINSEL0&=~(0x03<<4);
PINSEL0|=(0x03<<4);
PINMODE0&=~(0x03<<4);
//spi接口初始化
S0SPCR=(0< |(0< //八位數(shù)據(jù),主模式關(guān)中斷 S0SPCCR=spiClock; } voidSpi0SelectCs(void) { FIO0CLR|=(1<<16); } voidSpi0DisSelectCs(void) { FIO0SET|=(1<<16); } u8Spi0RwData(u8writeByte,u8*readByte) { u8retry=200; if((S0SPSR&0x80)) { retry=S0SPDR; return1; } S0SPDR=writeByte; retry=200; while(!(S0SPSR&0x80)) { retry--; if(retry==0)return1; } *readByte=S0SPDR; return0; } voidSpi0SetSpeed(SPI0_SPEEDspeed) { u32spiClock=(SystemCoreClock/4)/speed; S0SPCCR=spiClock; }