基于LPC2103的SPI总线技术的应用

时间:2010-05-20来源:网络


图4为SPI接口与74HC595的连接原理图。其中QA~QH分别连接共阳LED数码管的8个段。在SPI输出1个字节的数据时,SSEL产生1个低电平,SPI主机串行地发该字节的各个位,各个位都依次被锁存在74HC595的移位寄存器内,当1个字节的数据传输完成后,SSEL由低电平变为高电平,从而使74HC595的移位寄存器的值被锁存到74HC595的锁存器并从其QA~QH引脚输出;在SPI输出1个字节数据的同时,74HC595移位寄存器之前的值也通过MISO引脚被SPI主机读回。

3 软件设计[5]
软件设计包括:进行I/O口初始化,设置SPI引脚连接,启用LPC2103的SPI 0总线,设置GPIO的P0.4、P0.5、P0.6、P0.7为SPI 0总线的SCK0、MISO0、MOSI0、SSEL0特殊功能,置74HC595片选端的I/O口为输出功能。其代码如下:
PINSEL0=0x00005500; //设置SPI引脚连接
PINSEL1=0x00000000;
IODIR=HC595_CS; //设置片选端I/O口为输出
3.1 SPI总线操作初始化
图5为SPI总线操作流程图。使用LPC2103的SPI总线主模式下实现对74HC595的数据传输,用来驱动外围LED数码管。设置SPI时钟,在SPI主模式下,SPCCR寄存器控制SCK的频率,SPI速率为Fpclk / SPCCR。通过SPCR控制寄存器设置时钟相位、时钟极性、主模式控制、字节移动方向及SPI中断使能等。代码实现如下:


Void MSpiIni(void)
{ SPI_SPCCR = 0x52;//设置SPI时钟分频
SPI_SPCR = (03)|//CPHA=0,数据再从SCK的第一时钟沿采样
(14)|//CPOL=1,SCK为低有效
(15)|//MSTR=1,SPI处于主模式
(06)|//LSBF=0,SPI数据传输MSB(位7)在先
(07);//SPIE=0,SPI中断被禁止
}
3.2 SPI总线主模式下数据发送过程
首先选择从机,设置片选。选择74HC595为从机,置片选端SSEL为低有效。将发送的数据写入SPDR,发送出去。等待SPIF置位,即数据发送完毕。最后可从SPDR读取收到的数据。以下为发送函数:
uint8 MSendData(uint8 data)
{ IOCLR=HC595_CS; //片选端,由LPC2103指定的I/O口置位
SPI_SPDR=data;
while(0==(SPI_SPSR0x80)); //等待SPIF置位,即等待数据发送完毕
IOSET=HC595_CS; //片选置高无效,结束发送
return(SPI_SPDR); //返回接收到的数据
}
3.3 控制LED数码管主函数
主函数使用LPC2103的SPI接口输出给74HC595,用来控制LED数码管显示。DISP_TAB[ ]为LED显示0-F字模的16进制码表。MSendData( )实现每一字节数据的发送。
#define HC595_CS 0x00000100 //P0.8口为74HC595的片选
uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
int main(void)
{ uint8 rcv_data;
uint8 i;
PINSEL0=0x00005500; //设置SPI引脚连接
PINSEL1=0x00000000;
IODIR=HC595_CS; //设置LPC2103片选I/O口为输出功能
MSpiIni( ); //初始化SPI接口
while(1)
{ for (i=0;i16;i++)
{rcv_data=MSendData(DISP_TAB[i]); //发送显示数据
DelayNS(50); //延时
 }
}
return(0);
 }
基于SPI总线的数据通信技术已经广泛应用在MCU与各种外围设备的串行通信中。如存储系统、A/D转换系统、网络控制器和多MCU构成的分布式系统。本文给出了74HC595芯片驱动LED数码管显示的电路,采用SPI总线技术实现对LED显示的数据传输,方便快捷、准确性高、速度快,满足了复杂微控制系统对外围设备控制的要求。

1 2 3

关键词: 技术 应用 总线 SPI LPC2103 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版