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

发布者:bdwhsc最新更新时间:2012-08-24 来源: 21IC 关键字:LPC2103  SPI总线技术  74HC595 手机看文章 扫描二维码
随时随地手机看文章

    SPI( Serial Peripheral Interface) 总线是Motorola公司提出的一个同步串行外设接口, 允许MCU与各种外围器件以串行方式进行通信、数据交换。SPI可以同时发出和接收串行数据, 它只需4条线就可以完成MCU与各种外围器件的通信。一般使用的4条线为:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL。这些外围器件可以是简单的TTL移位寄存器、复杂的LCD显示驱动器、Flash、RAM、A/D转换器、网络控制器及其他MCU等[1]。
    本文给出了一种基于SPI总线的LPC2103控制外围LED显示的设计方法。利用74HC595驱动静态共阳LED数码管,使用串转并的方式实现I/O口的扩展。
1 LPC2103中的SPI功能特性
    LPC2103是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,内部具有2个完全独立的SPI控制器,采用全双工的数据通信方式,最大数据位速率为外设时钟Fpclk的1/8。与SPI总线接口有关的专用寄存器有:(1)SPCR控制寄存器。该寄存器包含一些可编程位来控制SPI总线的功能,而且在数据传输之前进行设定,主要有时钟相位控制、时钟极性控制、主从模式选择、字节传输移动方向及SPI中断使能;(2)SPSR状态寄存器(为只读寄存器)。用于监视SPI功能模块的状态,包括一般性功能和异常情况。主要用途是检测数据传输是否完成,通过判断SPIF位来实现,其他位用于指示异常情况;(3)SPDR数据寄存器。为SPI提供数据的发送和接收,处于主模式时,向该寄存器写入数据,将启动SPI数据传输。串行数据的发送和接收通过内部移位寄存器来实现;(4)SPCCR时钟计数器寄存器。用于设置SPI时钟分频值,SPI处于主模式时,该寄存器用于控制时钟速率,即SPI总线速率,寄存器值为1位SCK时钟所占用的PCLK周期数,并且值为偶数,必须不小于8;(5)SPINT中断标志寄存器。包含了SPI的中断标志位,由数据传输完成及发生模式错误来引发[2]。
1.1 SPI电气连接
    利用SPI总线可在软件的控制下构成各种系统,如1个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。在大多数应用场合, 可使用1个MCU 作为主机来控制数据,并向1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。同一时刻只允许有1个主机操作总线。在数据传输过程中,总线上只能有1个主机和1个从机通信。在一次数据传输中,主机总是向从机发送1个字节数据,而从机也总是向主机发送1个字节数据[3]。图1为SPI在主模式下控制2个SPI从机的硬件连接图。

1.2 SPI数据传输
    在SPI数据传输中,SPCR控制寄存器的CPHA和CPOL位作用非常关键。CPHA为时钟相位控制,该位决定SPI传输时数据和时钟的关系,并控制从机传输的起始和结束,该位为1,时钟前沿数据输出,后沿数据采样;为0,时钟前沿数据采样,后沿数据输出。CPOL为时钟极性控制,为1时,SCK为低电平有效;为0时,SCK为高电平有效[4]。
[page]

    图2为SPI的4种不同数据传输格式时序,描述的是8位数据传输。该时序图水平方向分成3部分:(1)描述SCK和SSEL信号;(2)描述CPHA为0时的MOSI和MISO信号;(3)描述CPHA为1时的MOSI和MISO信号。SSEL信号为低电平,说明SPI工作在从模式。其中,MOSI和MISO信号中的bit1~bit8表示传输的第几位数据。


2 74HC595扩展I/O接口电路
    SPI是一个串行输入输出的接口,使用串转并的接口芯片可以实现扩展I/O口。74HC595芯片为一种常用的8位串转并移位寄存器芯片,本系统利用74HC595来驱动静态共阳LED数码管。74HC595的主要优点:具有数据存储寄存器,在移位过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。LPC2103工作在SPI主模式下。
    图3为74HC595逻辑图。图中,SI为串行数据输入引脚,用来连接LPC2103的MOSI功能引脚;SCK为移位寄存器的时钟输入,连接LPC2103串行时钟线SCK;为清移位寄存器引脚;RCK为锁寄存器锁存时钟引脚;即输出触发端与SSEL连接;为输出使能引脚;SQH为串行数据输出引脚,连接MISO;QA~QH引脚为并行输出。当为高电平、使能接低时,SCK产生一个上升沿,SI引脚当前电平值将在移位寄存器中左移1位,在下一个上升沿到来时移位寄存器中的所有位都会向左移1位,同时SQH引脚也会串行输出移位寄存器中的高位的值。当RCK产生上升沿时,移位寄存器的值将会被锁存到锁存器里,并从QA~QH引脚输出。

 

 [page]

    图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  = (0<<3)|  //CPHA=0,数据再从SCK的第一时钟沿采样
               (1<<4)|   //CPOL=1,SCK为低有效
               (1<<5)|   //MSTR=1,SPI处于主模式
               (0<<6)|   //LSBF=0,SPI数据传输MSB(位7)在先
               (0<<7);   //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_SPSR&0x80));    //等待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;i<16;i++)
         {rcv_data=MSendData(DISP_TAB[i]);   //发送显示数据
          DelayNS(50);                      //延时
        }
    }
       return(0);
 }
    基于SPI总线的数据通信技术已经广泛应用在MCU与各种外围设备的串行通信中。如存储系统、A/D转换系统、网络控制器和多MCU构成的分布式系统。本文给出了74HC595芯片驱动LED数码管显示的电路,采用SPI总线技术实现对LED显示的数据传输,方便快捷、准确性高、速度快,满足了复杂微控制系统对外围设备控制的要求。

关键字:LPC2103  SPI总线技术  74HC595 引用地址:基于LPC2103的SPI总线技术的应用

上一篇:基于LPC2214的家庭智能终端的设计与实现
下一篇:基于LPC2148的手持式热敏条码打印机研制

推荐阅读最新更新时间:2024-03-16 13:06

51单片机实现两片联级74HC595依次点亮且每次只能点亮一个
一、使用proteus绘制简单的电路图,用于后续仿真 二、编写程序 /******************************************************************************************************************** ---- @Project: LED-74HC595 ---- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200526 ---- @ModifiedTime: 20200526 ---- @Description: 第9个至
[单片机]
51单片机实现两片联级<font color='red'>74HC595</font>依次点亮且每次只能点亮一个
AVR单片机与74HC595SPI显示程序
使用SPI接口控制74HC595 LED显示 SPI接口的全称是 Serial Peripheral Interface ,意为串行外围接口。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。 SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号: (1)MOSI 主器件数据输出,从器件数据输入 (2)MISO 主器件数据输入,从器件数据输
[单片机]
ARM7 系列 LPC2103单片机简介
1简介 LPC2103是PHILIPS公司最新推出的基于ARM7TDMI-S、LQFP48封装的LPC2103,最高工作速度可达70MHz,32KB的片内FLASH程序存储器和8K的片内静态RAM。通过片内boot装载程序实现ISP/IAP编程。 LPC2103的10位A/D转换器提供8路模拟输入,低功耗实时时钟具有独立的电源和特定的32768HZ时钟输入,多达32个通用I/O口(可承受5V电压),可通过个别使能/禁止外围功能外围时钟分频来优化额外功耗。较小的封装和很低的功耗使LPC2103特别适用于访问控制和POS机等小型应用中;由于内置了宽范围的串行通信接口和8KB的片内SRAM,它也非常适合于通信网关和协议转换器。高
[单片机]
ARM7 系列 <font color='red'>LPC2103</font>单片机简介
基于LPC2103的三相电信号数据采集系统的设计方案
基于三相异步电机驱动的液压设备凭借其运行中的诸多优点在生产实践中得到广泛应用,针对液压系统安全稳定的运行而开展的研究也越来越多。各种能够反应此类设备运转状态的特征信号中,电机的三相电信号能够充分的反应其液压故障和电机故障 ,且三相电信号具有稳定、不易受干扰的特点。因此,根据应用的需要,开发具有高便携性和实用性的三相电信号数据采集系统,完成对液压设备运行中三相电信号实时准确的采集、存储等功能,对实现基于电机驱动的液压设备状态监测以及故障诊断等工作都是十分重要和有意义的。 1 系统的硬件开发 根据三相电信号数据采集系统的应用环境,本文开发的数采系统硬件部分由模拟信号获取、调理单元,数据采集与处理单元和数据存储数据通信四大模块组成。系统
[电源管理]
基于<font color='red'>LPC2103</font>的三相电信号数据采集系统的设计方案
STM32三线控制八个发光二极管(74HC595)
STM32三线控制八个发光二极管是典型的IO扩展应用,思路和学习51单片机时一致,下面直接上图和代码! 简述: 1.74HC595D这里使用的5V供电,和STM32间通过MOS管做电平转换处理; 2.74HC595D使用11、12、14脚 PIN11- SHCP shift register clock input 移位时钟 PIN12- STCP storage register clock input 锁存时钟 PIN14- SI serial data input 串行数据 代码: #include 74HC595D.h #include delay.h u8 CHx_LED;//指示灯控制字 111
[单片机]
STM32三线控制八个发光二极管(<font color='red'>74HC595</font>)
基于LPC2103的蓝牙热敏打印机的开发
1.引言 常用的微型针式打印机速度慢、噪声大, 无法满足某些场合的需要。微型热敏打印机具有打印速度快、噪音低、可靠性高、字迹清晰、机头小而轻等优点, 可满足各种场合的打印要求, 因此得到广泛应用。微型热敏打印头对打印时序和温度要求较高, 一旦控制不当极易造成打印头烧毁, 其控制系统的软硬件设计较复杂。本文选用FTP-628MCL101热敏打印头开展研发工作。此便携式微型热敏打印机为支持蓝牙无线通讯技术的便携式票据打印机,可广泛使用在移动政务、警务、烟草、邮政、运输、配送等等行业。 2.系统组成 本系统由LPC2103控制系统,蓝牙通信模块,打印头接口模块,外存芯片,电源模块组成。 组成框图如下: 3.打印原理 选
[单片机]
基于<font color='red'>LPC2103</font>的蓝牙热敏打印机的开发
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved