LPC2478的SPI使用
扫描二维码
随时随地手机看文章
LPC2478的spi使用
LPC2748具有一个SPI控制器,可以当做SPI主机或者从机使用,有以下特性
其使用起来很方便,并且支持中断,使用的寄存器如下
基本上,使用起来就是设置控制为,CPOL CPOA等等,数据长度的配置等,设置分频率,发送数据,等待状态或者中断,发送完成,就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);//设置高速寄存器组方式访问端口
//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< //八位数据,主模式关中断 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; }