基于ARM的I2C模块开发.docx
- 文档编号:3331207
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:33
- 大小:706.59KB
基于ARM的I2C模块开发.docx
《基于ARM的I2C模块开发.docx》由会员分享,可在线阅读,更多相关《基于ARM的I2C模块开发.docx(33页珍藏版)》请在冰豆网上搜索。
基于ARM的I2C模块开发
第一章绪论
1、技术背景:
(一)嵌入式系统
1、嵌入式系统定义:
嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
它主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分组成。
用于实现对其它设备的控制、监视和管理等功能,它通常嵌入在主要设备中运行。
2、嵌入式系统的技术特点:
(1)嵌入式系统是集软件、硬件于一体的高可靠性系统嵌入式系统,麻雀虽小,五脏俱全,软件除操作系统外,还需有完成嵌入式系统功能的应用软件,硬件除了CPU外,还需有外围电路支持,微处理器、微控制器、DSP已构成嵌入式系统硬件的基础。
(2)嵌入式系统是资源开销小的高性能价格比系统嵌入式系统的发展离不开应用,应用的共同要求是系统资源开销小,由于嵌入式系统技术日益完善,各种高性能嵌入式应用系统层出不穷,它已是资源开销小的高性能价格比的一类应用系统。
为了满足系统资源开销小、高性能、高可靠性的要求,大多使用FlashMemory。
(3)嵌入式系统是功能强大、使用灵活方便的系统嵌入式系统应用的广泛性,要求该系统通常是无键盘、无需编程的应用系统,使用它应如同使用家用电器一样方便。
(二)ARM7TDMI-S简介
ARM7TDMI-S是一个通用的32位微处理器,它可提供高性能和低功耗。
ARM结构是基于精简指令集计算机(RISC)原理而设计的。
指令集和相关的译码机制比复杂指令集计算机要简单得多。
这样使用一个小的、廉价的处理器核就可实现很高的指令吞吐量和实时的中断响应。
由于使用了流水线技术,处理和存储系统的所有部分都可连续工作。
通常在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出。
二、选题的意义:
(一)I2C的简介
I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。
例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。
可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
(二)I2C总线特点
I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
当然,在任何时间点上只能有一个主控。
(三)整体设计思路
整体框图
先借助ADS集成开发环境完成对模块程序语言的编译、调试,再使用JTAG将LPC2290用户板与PC机的ADS集成开发环境连通,把程序的下载到用户板,最后通过LED显示出来。
第二章主要功能模块的介绍
一、主控芯片(LPC2290)
(一)概括:
LPC2290是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STMCPU。
对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
由于LPC2290的144脚封装、极低的功耗、多个32位定时器、8路10位ADC、2路CAN、PWM通道以及多达9个外部中断使它们特别适用于汽车、工业控制应用以及医疗系统和容错维护总线。
通过配置总线,LPC2290最多可提供76个GPIO。
由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器以及其它各种类型的应用。
(二)技术特性:
★16/32位ARM7TDMI-S核,LQFP144封装。
★16kB片内静态RAM。
★串行boot装载程序通过UART0来实现在系统下载和编程。
★EmbeddedICE-RT和嵌入式跟踪接口使用片内RealMonitorTM软件对任务进行实时调试并支持对执行代码进行无干扰的高速实时跟踪。
★2个互连的CAN接口,带有先进的验收滤波器。
多个串行接口,包括2个16C550工业标准UART、高速I2C接口(400kbit/s)和2个SPI接口。
★8路10位A/D转换器,转换时间低至2.44μs。
★2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出)、实时时钟和看门狗。
★向量中断控制器,可配置优先级和向量地址。
★通过外部存储器接口可将存储器配置成4组,每组的容量高达16Mb,数据宽度为8/16/32位。
★多达76个通用I/O口(可承受5V电压),9个边沿或电平触发的外部中断引脚。
★通过片内锁相环(PLL)可实现最大为60MHz的CPU操作频率,设置时间为100us。
★片内晶振频率范围:
1~30MHz。
★2个低功耗模式:
空闲和掉电。
★通过外部中断将处理器从掉电模式中唤醒。
★可通过个别使能/禁止外部功能来优化功耗。
★双电源
-CPU操作电压范围:
1.65~1.95V(1.8V±0.15V)
-I/O操作电压范围:
3.0~3.6V(3.3V±10%),可承受5V电压。
(三)功能框图:
(四)常用寄存器
1、管功能选择寄存器
通过对相应的控制位进行设置,实现相关功能,LPC2290包含3个管脚功能选择寄存器:
管脚功能选择寄存器0(PINSEL0–0xE002C000);
管脚功能选择寄存器1(PINSEL1–0xE002C004);
管脚功能选择寄存器2(PINSEL2–0xE002C014)。
2、外部存储器控制器
外部静态存储器控制器是一个为系统总线和外部(片外)存储器器件提供接口的功能模块。
它可同时支持4个可单独配置的存储器组的工作(每个存储器组的容量为16M字节,带有字节定位使能控制)。
并且每个存储器组都支持SRAM、ROM、FlashEPROM、BurstROM存储器或一些外部I/O器件。
每个存储器组的总线宽度为8、16或32位。
(五)系统控制
1、晶振
振荡器支持晶振范围为1MHz~30MHz。
晶振输出频率称为FOSC,而ARM处理器时钟频率称为cclk。
2.、PLL
PLL可以接受范围为10MHz~25MHz的输入时钟频率。
输入频率通过一个电流控制振荡器(CCO)可以倍增为10MHz~60MHz。
倍增器可以是从1到32的整数(实际上在该系列微控制器当中,由于CPU频率的限制,倍增器的值不可能高于6)。
CCO操作的范围为156MHz~320MHz,因此在环当中增加了一个分频器,这样PLL在提供所需要的输出频率时,使CCO保持在其频率范围内。
输出分频器可设置为2、4、8或者16以产生输出时钟。
由于最小输出分频值为2,这样就确保了PLL输出具有50%的占空比。
PLL在芯片复位后关闭并且被旁路,可通过软件使能。
程序必须配置并且激活PLL,等待PLL锁定之后再将PLL作为时钟源。
PLL的设置时间为100us。
3、复位和唤醒定时器
LPC2290有2个复位源:
RESET管脚和看门狗复位。
RESET管脚是一个施密特触发输入管脚,带有附加的干扰滤波器。
任何复位源所导致的芯片复位都会启动唤醒定时器(见下面的唤醒定时器),复位状态将一直保持到外部复位撤除,振荡器开始运行。
振荡器运行经过固定数目的时钟后片内电路完成其初始化。
当内部复位撤除后,处理器从复位向量地址0开始执行。
此时所有的处理器和外设寄存器都被初始化为预设的值。
唤醒定时器的用途是确保振荡器和其它芯片操作所需要的模拟功能在处理器能够执行指令之前完全正常工作。
这在上电、各种类型的复位以及任何原因所导致上述功能被关闭的情况下非常重要。
由于振荡器和其它功能在掉电模式下关闭,因此将处理器从掉电模式中唤醒就要利用唤醒定时器。
唤醒定时器监视晶体振荡器是否可以安全地开始执行代码。
当芯片上电时,或某些事件导致芯片退出掉电模式时,振荡器需要一定的时间以产生足够振幅的信号驱动时钟逻辑。
时间的长度取决于许多因素,包括VDD上升速度(上电时)、晶振的类型及电气特性(如果使用石英晶体)以及其它外部电路(例如:
电
容)和外部环境下振荡器自身的特性。
4、外部中断输入
根据可选管脚功能的设定,LPC2290最多可包含9个边沿或电平触发的外部中断输入。
外部事件可作为4个独立的中断信号来处理。
外部中断输入可用于将处理器从掉电状态唤醒。
5、存储器映射控制
存储器映射控制改变了从地址0x00000000开始的中断向量的映射。
向量可以映射到外部存储器BANK0的底部或片内静态RAM。
这使得在不同存储器空间中运行的代码都能够对中断进行控制。
6、功率控制
LPC2290支持两种低功耗模式:
空闲模式和掉电模式。
在空闲模式中,指令的执行被暂停,直到产生复位或中断为止。
外围功能在空闲模式下继续工作并可产生中断唤醒处理器。
空闲模式使处理器自身、存储器系统和相关的控制器以及内部总线不再消耗功率。
在掉电模式中,振荡器被关闭,芯片没有任何的内部时钟。
处理器状态和寄存器、外设寄存器和内部SRAM的值在掉电模式下保持不变。
芯片管脚的逻辑电平保持静态。
通过复位或特定的不需要时钟还可工作的中断可终止掉电模式并恢复正常操作。
由于芯片所有动态的操作都被暂停,掉电模式使芯片消耗的功
率降低到几乎为零。
外设的功率控制特性允许关闭单独的不需要使用的外设,这样可进一步降低功耗。
7、VPB总线
VPB分频器决定处理器时钟(cclk)和外设时钟(pclk)之间的关系。
VPB分频器有两个用途。
第一,通过VPB总线为外设提供需要的PCLK时钟,以便外设能在选择的ARM处理器速度下操作。
为了实现该特性,VPB总线频率可以降低为处理器时钟频率的一半或1/4。
由于上电后VPB总线必须正常工作(如果它由于VPB总线的VPB分频器控制寄存器的原因而不能工作,则VPB总线的时序不能改变),因此,VPB总线在复位后的默认状态是以1/4速率运行。
VPB分频器的第二个用途是当所有外设都不必在全速率下运行时降频以降低功耗。
由于VPB分频器连接到PLL的输出,PLL(如果正在运行)在空闲模式时保持有效。
(六)工作时序图
2、I2C功能模块
(一)作用:
I2C是一个双向总线,它使用两条线:
串行时钟线(SCL)和串行数据线(SDA)实现互连芯片的控制,可以极方便地构成多机系统和外围器件的扩展系统。
I2C总线采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。
(二)技术特性
★标准的I2C总线接口;
★可配置为主机、从机或主/从机;
★可编程时钟可实现通用速率控制;
★主机从机之间双向数据传输;
★多主机总线(无中央主机);
★同时发送的主机之间进行仲裁,避免了总线数据的冲突;
★串行时钟同步使器件在一条串行总线上实现不同位速率的通信;
★串行时钟同步可作为握手机制使串行传输挂起和恢复;
★I2C总线可用于测试和诊断。
(三)功能结构框图
(四)总线规范
当I2C总线上有2个控制器件同时发动传输时,只能有一个控制器件能真正控制总线成为主机,并使报文不被破坏,与此同时,能同步多个控制器件所产生的时钟信号。
I2C总线应用系统典型结构
SDA和SCL都是双向线路。
连接到总线的器件的输出级必须是漏极开路或集成电极开路,都通过一个电流源或一个上拉电阻连接到正的电源电压,这样才能实现“线与”功能。
当总线空闲时,这两条线路都是高电平。
在标准模式下,总线数据传输的速度为0~100kbit/s,在高速模式下,可达到0~400kbit/s。
总线速率与总线上拉电阻的关系:
总线速率越高,总线上拉电阻要越小。
100kbit/s总线速率,通常使用5.1kΩ的上拉电阻。
(五)操作模式
1、主发送器模式:
在该模式中,数据从主机发送到从机。
在进入主发送器模式之前,I2CONSET必须按照下图进行初始化:
主模式配置
必须置位I2EN来使能I2C功能。
如果AA位为0,而另一个器件成为总线的主控器时,I2C将不会对
任何地址产生应答。
也就是说它无法进入从模式。
STA,STO和SI必须设置为0。
向I2CONCLR寄存器中的SIC位写入1可清零SI。
第一个发送的数据包含接收器件的从地址(7位)和数据方向位。
在此模式下,数据方向位(R/W)应当为0表示执行写操作。
因此第一个发送的字节为SLA+W。
数据的发送每次为8位。
每发送完一个字节,都接收到一个应答位。
起始和停止条件用于指示串行传输的起始和结束。
通过软件置位STA进入I2C主发送器模式。
I2C逻辑在总线空闲后立即发送一个起始条件。
当发送完起始条件后,SI置位。
此时状态寄存器(I2STAT)中的状态代码应当为08H。
该状态代码用于指向一个中断服务程序。
该中断程序将从地址和数据方向位(SLA+W)装入I2DAT,然后清零SI位。
向I2CONCLR寄存器中的SIC位写入1可清零SI。
2、主接收器模式
在主接收器模式中,数据字节接收自从发器。
传输的初始化与主发送器模式相同。
发送完起始条件后,中断服务程序必须将从地址和数据方向位(SLA+R)装入I2C数据寄存器(I2DAT),然后清零RI位。
当从地址和方向位已发送且接收到应答位之后,SI置位而状态寄存器将显示状态代码。
对于主模式,可能的状态代码为40H,48H或38H,对于从模式,可能的状态代码为68H,78H或B0H。
在一个重复的起始条件之后,I2C可以切换到主发送器模式。
(六)I2C总线寄存器描述
I2C寄存器映射
1、I2C控制置位寄存器(I2CONSET)
I2CONSET寄存器用于置位I2C通信的相关标志位,该寄存器只能对某位置位,而不能清零,清零通过I2CONCLR寄存器完成。
2、I2C控制清零寄存器(I2CONCLR)
I2CONCLR寄存器与I2CONSET寄存器的功能相反,它用于清零I2C通信的相关标志位,该寄存器只能对某位清零,而不能置位。
3、I2C状态寄存器(I2STAT)
2STAT寄存器包含了I2C接口的状态代码,它是一个只读寄存器。
一共有26种可能存在的状态代码。
当代码为0xF8时,无可用的相关信息,SI位不会置位。
所有其它25种状态代码都对应一个已定义的I2C状态。
当进入其中一种状态时,SI位将置位。
I2C处理程序就是根据该寄存器反映的状态来进行相应的处理。
4、I2C数据寄存器(I2DAT)
I2DAT寄存器包含要发送或刚接收的数据。
当它没有处理字节的移位时,CPU可对其进行读写。
该寄存器只能在SI置位时访问。
在SI置位期间,I2DAT中的数据保持稳定。
I2DAT中的数据移位总是从右至左进行:
第一个发送的位是MSB(位7),在接收字节时,第一个接收到的位存放在I2DAT的MSB。
5、I2C从地址寄存器(I2ADR)
I2ADR寄存器只能在I2C设置为从模式时才能使用。
在主模式中,该寄存器无效。
I2ADR的LSB为通用调用位。
当该位置位时,通用调用位(0x00)被识别(即可以对广播地址0x00作出响应)。
6、I2C占空比寄存器(I2SCLH、I2SCLL)
I2SCLH、I2SCLL寄存器用于控制I2C通信的波特率。
其中I2SCLH定义SCL高电平所保持的PCLK周期数,而I2SCLL定义SCL低电平所保持的PCLK周期数。
那么位频率(即总线速率)由下面的公式得出:
位频率=Fpclk/(I2SCLH+I2SCLL)
7、I2C总线应用—主模式
使用主模式I2C时,先设置I/O口功能选择,然后设置总线的速率,再使用主模式I2C,接口下来便可以开始发送/接收数据。
主模式I2C初始化示例程序如下:
3、显示驱动ZLG7290
(一)功能
1、键盘部分
ZLG7290可采样64个按键或传感器可检测每个按键的连击次数其基本功能如下
(1)键盘去抖动处理
当键被按下和放开时可能会出现电平状态反复变化称作键盘抖动若不作处理会引起按键盘命令错误所以要进行去抖动处理以读取稳定的键盘状态为准。
(2)双键互锁处理
当有两个以上按键被同时按下时ZLG7290只采样优先级高的按键优先顺序为S1>S2>…>S64如同时按下S2和S18时采样到S2。
(3)连击键处理
当某个按键按下时输出一次键值后如果该按键还未释放该键值连续有效就像连续压按该键一样这种功能称为连击连击次数计数器(RepeatCnt)可区别出单击某些功能不允许连击如开关或连击判断连击次数可以检测被按时间以防止某些功能误操作如连续按5秒经入参数设置状态。
(4)功能键处理
功能键能实现2个以上按键同时按下来扩展按键数目或实现特殊功能如PC机上的“Shift”,“Ctrl”,“Alt”键典型应用图中的S57~S64为功能键。
2、显示部分
在每个显示刷新周期ZLG7290按照扫描位数寄存器(ScanNum)指定的显示位数N把显示缓存DpRam0DpRamN的内容按先后循序送入LED驱动器实现动态显示减少N值可提高每位显示扫描时间的占空比以提高LED亮度显示缓存中的内容不受影响修改闪烁控制寄存器(FlashOnOff)可改变闪烁频率和占空比(亮和灭的时间)。
ZLG7290提供两种控制方式寄存器映象控制和命令解释控制如上述对显示部分的控制寄存器映象控制是指直接访问底层寄存器实现基本控制功能这些寄存器须字节操作。
命令解释控制是指通过解释命令缓冲区(CmdBuf0~CmdBuf1)中的指令间接访问底层寄存器实现扩展控制功能如实现寄存器的位操作对显示缓存循环移位对操作数译码等操作请参考指令详解部分。
(2)技术特性
★I2C串行接口提供键盘中断信号方便与处理器接口;
★可驱动8位共阴数码管或64只独立LED和64个按键;
★可控扫描位数,可控任一数码管闪烁;
★提供数据译码和循环移位段寻址等控制;
★8个功能键可检测任一键的连击次数;
★无需外接元件即直接驱LED可扩展驱动电流和驱动电压;
★提供工业级器件多种封装形式PDIP24SO24。
(三)功能框图
(四)寄存器详解
1、系统状态部分
系统寄存器(SystemReg):
地址00H复位值11110000B系统寄存器保存ZLG7290系统状态并可对系统运行状态进行配置其功能分位描述如下:
KeyAvi(SystemReg.0):
置1时表示有效的按键动作普通键的单击连击和功能键状态变化/IN引脚信号有效变为低电平清0表示无按键动作/INT引脚信号无效变为高阻态有效的按键动作消失后或读Key后KeyAvi位自动清0。
2、键盘部分
(1)键值寄存器(Key):
地址01H复位值00H。
Key表示被压按键的键值当Key=0时表示没有键被压按。
(2)连击次数计数器(RepeatCnt):
地址02H复位值00HRepeatCnt=0时表示单击键RepeatCnt大于0时表示键的连击次数用于区别出单击键或连击键判断连击次数可以检测被按时间。
(3)功能键寄存器(FunctionKey):
地址03H复位值0FFHFunctionKey对应位的值=0表示对应功能键被压按(FunctionKey.7~FunctionKey.0对应S64~S57)。
3、命令接口部分
命令缓冲区(CmdBuf0~CmdBuf1):
地址07H~08H复位值00H~00H用于传输指令。
4、显示部分
(1)闪烁控制寄存器(FlashOnOff):
地址0CH复位值0111B/0111B高4位表示闪烁时亮的时间低4位表示闪烁时灭的时间改变其值同时也改变了闪烁频率也能改变亮和灭的占空比FlashOnOff的1个单位相当于150250ms亮和灭的时间范围为1~16,0000B相当1个时间单位所有象素的闪烁频率和占空比相同。
(2)扫描位数寄存器(ScanNum):
地址0DH复位值7用于控制最大的扫描显示位数(有效范围为0~7对应的显示位数为1~8),减少扫描位数可提高每位显示扫描时间的占空比以提高LED亮度不扫描显示的显示缓存寄存器则保持不变如ScanNum=3时只显示DpRam0~DpRam3的内容。
(3)显示缓存寄存器(DpRam0~DpRam7):
地址10H~17H复位值00H~00H缓存中一位置1表示该像素亮DpRam7~DpRam0的显示内容对应Dig7~Dig0引脚。
(五)通信接口
ZLG7290的I2C接口传输速率可达32kbit/s,容易与处理器接口并提供键盘中断信号提高主处理器时间效率。
ZLG7290的从地址(slaveaddress)为70H(01110000B)有效的按键动作(普通键的单击连击和功能键状态变化),都会令系统寄存器(SystemReg)的KeyAvi位置1,/INT引脚信号有效(变为低电平)。
用户的键盘处理程序可由/INT引脚低电平中断触发以提高程序效率;也可以不采样/INT引脚信号节省系统的I/O数,而轮询系统寄存器的KeyAvi。
位要注读键值寄存器会令KeyAvi位清0,并会令/INT引脚信号无效。
为确保某个有效的按键动作所有参数寄存器的同步性,建议利用I2C通信的自动增址功能连续读RepeatCntFunctionKey和Key寄存器,但用户无需太担心寄存器的同步性问题,应为键参数寄存器变化速度较缓慢(典型250ms最快9ms)。
ZLG7290内可通过I2C总线访问的寄存器地址范围为:
00H~17H,任一寄存器都可按字节直接读写也可以通过命令接口间接读写或按位读写,请参考指令详解部分。
支持自动增址功能(访问一寄存器后,寄存器子地址(subaddress)自动加一)和地址翻转功能(访问最后一寄存器(子地址=17H)后寄存器子地址翻转为00H)。
ZLG7290的控制和状态查询全部都是通过读/写寄存器实现的,用户只需象读写24C02内的单元一样,即可实现对ZLG7290的控制,关于I2C总线访问的细节请参考I2C总线规范。
(6)应用
ZLG管脚图
初始化程序如下:
#include"config.h"
#defineZLG72900x70
#defineSubKey0x01
#defineSubCmdBuf0x07
#defi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM I2C 模块 开发