欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于ARM的I2C接口设计.doc

    • 资源ID:865126       资源大小:413.53KB        全文页数:17页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于ARM的I2C接口设计.doc

    1、摘要: 近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。 I2C是一种较为常用的串行接口标准,具有协议完善、支持芯片较多和占用I/O线少等优点,主要在服务器管理中使用,可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,便于管理。目前比较流行的串行扩展总线中,I2C总线以其严格的规范和众多支持I2C接口的外围器件而获得了广泛的应用。 因此,我们对I2C接口进行了必要的探究,通过UART(异步串行接口)发送字节数据,然后利用I2C串行接口对外部存储器24C01进行读写,最后通过显示器LCD1602显示,正

    2、确验证了I2C的通讯功能。关键字: I2C串行接口 UART 外部存储器 显示器LCD1602正文:1. 设计原理与总体方案:本设计包含三个部分:UART发送数据部分、I2C读写存储器部分、LCD1602显示部分,下面分别介绍各部分原理。1.1. 异步串行接口UART是异步串行接口,LPC2000系列ARM7包含2个UART:UART0和UART1,UART0只有TXD(串行输出)和RXD(串行输入)两个引脚,只需设置相应的寄存器即可实现基本的数据收发功能。1.2I2C总线基本原理 I2C总线系统是由SCL(串行时钟)和SDA(串行数据)两根总线构成的,该总线有严格的时序要求。总线工作时, 由

    3、串行时钟线SCL传送时钟脉冲, 由串行数据线SDA 传送数据。总线协议规定, 各主节点进行通信时都要有起始、结束、发送数据和应答信号,这些信号都是通信过程中的基本单元。总线传送是以帧为单位进行的, 每当发送完1 个字节后, 接收节点就相应给一应答信号。1.2.1. I2C总线数据传输中的接受/发送器I2C总线系统中发送器与接收器来表明数据传输的发送方与接收方。发送器:总线上发送数据的器件。接收器:总线上接收数据的器件。1.2.2. I2C总线上数据的有效性I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平的状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允

    4、许数据线上的电平状态变化,如图1所示。图1 I2C总线数据位传送1.2.3. I2C总线数据传送的起始、停止与应答 I2C总线可以构成多主数据传送系统,但只有带CPU的器件可以成为主器件。 主器件发送时钟、启动位、数据工作方式,从器件则接收时钟及数据工作方式,接收或发送则根据数据的传送方向决定。I2C总线上数据传送时的启动、结束和有效状态都由SDA、SCL的电平状态决定,在I2C总线规程中启动和停止条件规定如下:启动条件:在SCL为高电平时,SDA出现一个下降沿则启动I2C总线。 停止条件:在SCL为高电平时,SDA出现一个上升沿则停止使用I2C总线。 启动条件后总线为“忙”,在结束信号过后的

    5、一定时间总线被认为是“空闲”的。在启动和停止条件之间可转送的数据不受限制,但每个字节必须为8位。首先传送最高位,采用串行传送方式,但在每个字节之后必须跟一个响应位。主器件收发每个字节后产生一个时钟应答脉冲,在这期间,发送器必须保证 SDA为高,由接收器将SDA拉低,称为应答信号(ACK)。主器件为接收器时,在接收了最后一个字节之后不发应答信号,也称为非应答信号(NOT ACK)。 当从器件不能再接收另外的字节时也会出现在种情况。I2C总线的数据传送如图2所示。 图2 I2C总线上的信号 1.2.4. I2C总线数据传送I2C总线上连接的每个器件都有自己唯一确定的地址,启动条件后主机发送的第一个

    6、字节就是被读写的从器件地址,其中第8位为方向位,“0”(W)表示主器件发送,“1”(R)表示主器件接收。总线上每个器件在启动条件后都把自己的地址与前7位相比较,如相同则器件被选中, 产生应答,并根据读写位决定在数据传送中是接收还是发送。如图所示为主器件发送和接收数据的过程,无论是主发、主收还是从发、从收都是由主器件控制。图3主器件发送和接收数据的过程在主发送方式下,由主器件先发出启动信号(S),接着发从器件的7 位地址(SLA)和主器件发送的方向位“0”(W),即这个字节为SLA+W。被寻址的从器件在收到这个字节后,返回一个应答信号(A),在确定主从应答正常后,主器件向从器件发送字节数据,从器

    7、件每收到一个字节数据后都要返回一个应答信号,直到全部数据都发送完为止。在主接收方式下,主器件先发出启动信号(S),接着发从器件的7位地址(SLA)和表明主器件接收的方向位“1”(R),即这个字节为SLA+R。在发送完这个字节后,SCL继续输出时钟,通过SDA接收从器件发来的串行数据。主器件每接收到一个字节后都要发送一个应答信号(A),当全部数据都发送或接收完毕后,主器件应发出停止信号(P)。1.3LCD1602液晶显示驱动原理1.3.1. LCD1602的引脚功能LCD1602液晶显示器的引脚如图4所示,其引脚功能如下:(1)RS:数据和指令选择控制端,RS=0命令状态;RS=1数据(2)R/

    8、W:读写控制线,R/W=0写操作;R/W=1读操作(3)A:背光控制正电源 (4) K:背光控制地(5)E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机间将进行一次数据交换(6)DB0DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源。(7)VDD:电源端 VEE:亮度控制端(1-5V) VSS:接地端VSS VDD VO RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A KLCD 模 块1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16图4 LCD1602液晶显示器引脚图1.3.2.LCD

    9、1602控制命令表1 LCD控制命令序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6功能设置00001DLNF*7置字符发生器存储器地址0001字符发生存储器地址8置数据储存器地址001显示数据存储器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容指令3:光标和显示模式设置。I/D:光标移动方向,高电平右移,低电平左移。S:屏幕上所有文字是否左移或者右移,高电平表示有效,低电平则无

    10、效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标。B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令 6:功能设置命令。DL:高电平时为4位总线,低电平时为8位总线。N:低电平时为单行显示,高电平时为双行显示。F:低电平时显示57的点阵字符,高电平时显示510的点阵字符。指令9:读忙信号和光标地址。BF:为忙标志,高电平表示忙,此时模块不能接受命令或者数据,如果为低电平表示不忙。2. 软件设计2.1流程图及部分初始化说明开始引脚功能初始化引脚方向确定LCD1602初始化UART初始化I2C初始化U

    11、ART接受data?NI2C写24C01延时I2C读24C01显示数据图5 主程序流程图显示器忙?开始RS=0,RW=0E=1E=0,开始写命令写完了?结束YN显示器忙?开始RS=1,RW=0E=1E=0,开始写数据写完了?结束YN图6 lcd初始化及显示函数流程图开始设置通信波特率设置数据格式读取数据接受标志=0?结束Y图7 UART接受数据流程图发送停止信号发送起始信号发送起始信号开始设置主模式并使能I2C写24C01地址+W写子地址接收数据全部接完?结束N发送停止信号写24C01地址+R开始设置主模式并使能I2C发送起始信号写24C01地址+W写子地址SI清零,发送数据全部发完?发送停止

    12、信号结束N图8 I2C读写24C01流程图3. 仿真设计3.1. 仿真电路图图93.2. 仿真结果图图103.3. 调试问题1:在进行仿真调试时,出现了发送乱码的现象(如图11)。原因: ADS调试时钟频率与proteus仿真设置频率不一致。 问题2:在进行仿真调试时,I2C读数据时,出现非应答位导致数据不能正常读取(如图12)。原因: ADS程序写完24C01后没有等待总线恢复,添加延时即可。图11 调试出现乱码情况图12 读取数据时出现非应答位情况4. 结束语本次课程设计是ARM嵌入式系统课程设计,是在我们学习了ARM嵌入式系统的基础上的进一步实践与拓展,该课程设计对各方面的知识进行了融合

    13、,具有一定的挑战性。我们查阅了很多资料,并且借鉴了很多不同的想法,在老师的帮助下,我们顺利完成了课程设计,对嵌入式系统的硬件、软件有了更为深入的了解,为以后进行软硬件设计打下了良好的基础。参考文献1周立功主编.ARM嵌入式系统基础教程M.北京航空航天大学出版社,2008。2吴明辉,等.基于ARM的嵌入式系统开发与应用M.北京:人民邮电出版社,2004。附录:主程序#include config.h#include LCD1602.h#include UART.h#include I2C.h#define Num 1uint8 i=0,j=0,k=0, Addr=0;uint8 rcv_data

    14、Num,read_dataNum,display_data16;int main()PINSEL0 = 0x55; /设置p0.0-p0.1为UART0,p0.2-p0.3为I2CPINSEL1 = 0; /设置p0.16-p0.24为GPIOIODIR = 0x7ff16; /p0.16-p0.24为输出lcd_init();UART0_init();I2C_init(100000);while(1) UART0_RcvStr(rcv_data,Num);WriteC01(Addr,Num,rcv_data);DelayMs(100);/ReadC01(Addr,Num,read_data)

    15、;if(i15)display_datai+=read_data0;display_datai=0;elsefor(j=0;j14;j+)display_dataj=display_dataj+1; display_data14=read_data0;display_data15=0; DisText(0x80,display_data); Addr+; return(0);/* File: lcd1602.h* 功能:向LCD输出字符(一行只能显示16个字符)*/#include config.h#define rs (124)#define rw (125)#define en (126)

    16、#define busy (123)/检查总线是否忙void ChkBusy() IODIR=0x70016; while(1)IOCLR=rs;IOSET=rw;IOSET=en;if(!(IOPIN & busy)break;IOCLR=en; IODIR=0x7ff16; /写函数void WrOp(uint8 dat)ChkBusy();IOCLR=rs; / RS=0,RW=0IOCLR=rw; IOCLR=(0xff16); IOSET=(dat16);/送数IOSET=en;IOCLR=en;/写数据函数void WrDat(uint8 dat)ChkBusy();IOSET=r

    17、s; / RS=1,RW=0IOCLR=rw;IOCLR=(0xff16); IOSET=(dat0; n-) *s+ = UART0_RcvByte(); /* File: I2C.h* 功能:读写外部存储器24C01。*/#include config.h#define Write_C01 0xA0 #define Read_C01 0xA1 #define AA (12) #define SI (13) #define STO (14) #define STA (15) #define I2CEN (1400000) fi2c = 400000; PINSEL0 = (PINSEL0 &

    18、 0xffffff0f) | 0x50; I2SCLH = (Fpclk / fi2c+1) / 2; I2SCLL = (Fpclk / fi2c) / 2; I2CONCLR = STA | SI | AA; I2CONSET = I2CEN; /发送起始信号void I2C_Start(void) I2CONSET = STA; while(I2STAT!=0x08); I2CONCLR = STA; /发送停止信号 void I2C_Stop(void) I2CONSET = STO; I2CONCLR = SI; /写一字节数据void WriteByte(uint8 data) I

    19、2DAT = data; I2CONCLR = SI; /写地址void WriteAddr(uint8 Mode) WriteByte(Mode); if(Mode=Read_C01) while(I2STAT!=0x40); else while(I2STAT!=0x18); /写数据 void WriteData(uint8 data) WriteByte(data); while(I2STAT!=0x28); /读字节数据uint8 ReadByte(uint8 last) if(last) I2CONCLR=AA; I2CONCLR=SI; while(I2STAT!=0x58);

    20、else I2CONSET=AA; I2CONCLR=SI; while(I2STAT!=0x50); return(I2DAT);/写24C01void WriteC01(uint8 StartAddr,uint8 CountByte,uint8 *i2c_buf) uint8 i=0; I2C_Start(); WriteAddr(Write_C01); WriteData(StartAddr); for(i=0;iCountByte;i+) WriteData(i2c_bufi); I2C_Stop();/读24C01void ReadC01(uint8 StartAddr,uint8 CountByte,uint8 *i2c_buf) uint8 i=0; /设置读指针 I2C_Start(); WriteAddr(Write_C01); WriteData(StartAddr); I2C_Stop(); /开始读数据 I2C_Start(); WriteAddr(Read_C01); for(i=0;i0; dly-) for(i=0; i1000; i+);17


    注意事项

    本文(基于ARM的I2C接口设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922