LPC824-I2C接口(续一)

发布者:ShiningSmile最新更新时间:2023-09-30 来源: elecfans关键字:LPC824  I2C接口  寄存器 手机看文章 扫描二维码
随时随地手机看文章

I2C接口共涉及到18个寄存器,下面就来对它们进行具体分析。

先来看I2C配置寄存器CFG,下表是它的全部位结构,其地址分别为0x40050000(I2C0),0x40054000(I2C1),0x40070000(I2C2),0x40074000(I2C3)。它包含适用于主机、从机及监视器功能的模式设置。

(1)第0位(MSTEN)为主机使能位,值为0时禁用I2C主机功能,禁用时主机功能的配置设置不会改变,但主机功能会从内部复位,值为1时使能I2C主机功能,默认为禁止。
(2)第1位(SLVEN)为从机使能位,值为0时禁用I2C从机功能,禁用时从机功能的配置设置不会改变,但从机功能会从内部复位,值为1时使能I2C从机功能,默认为禁止。
(3)第2位(MONEN)为监视器使能位,值为0时禁用I2C监视器功能,禁用时监视器功能的配置设置不会改变,但监视器功能会从内部复位,值为1时使能I2C监视器功能,默认为禁止。
(4)第3位(TIMEOUTEN)为总线超时使能位,值为0时禁用I2C总线超时功能,禁用时超时功能从内部复位,值为1时使能I2C总线超时功能,将会生成两种类型的超时标志,如果标志使能,则会引发中断,系统中通常仅使用一种超时,默认为禁止。
(5)第4位(MONCLKSTR)为监视器功能时钟拉伸使能位,值为0时禁用,此时监视器功能不会执行时钟拉伸。被覆盖之前,软件或DMA并非始终能够读取由监视器功能提供的数据,当非入侵式监控极为重要时,可使用这种模式。值为1时使能,此时监视器功能会执行时钟拉伸,以确保软件或DMA能够读取来自监视器功能的所有数据,默认为禁用。
(6)第5到31位为保留位,写入时只能写0。

接下来看I2C状态寄存器STAT,下表是它的全部位结构,其地址分别为0x40050004(I2C0)、0x40054004(I2C1)、0x40070004(I2C2)、0x40074004(I2C3)。它提供了关于I2C模块全部功能的状态标志和状态信息,寄存器中的某些信息为只读信息,某些标志位可通过写入1清除。

(1)第0位(MSTPENDING)为主机挂起标志位,该位为只读属性。值为0时表示正在进行通信,主机功能繁忙,当前无法接受命令,值为1时表示挂起,主机功能需要软件服务,或正处于闲置状态。

(2)第1到3位(MSTSTATE)为主机状态代码,这些位为只读属性。当MSTPENDING位(第0位)已经置位(即主机挂起或处于闲置状态时),主机状态代码用来反应主机的具体状态。值从0x0到0x4分别表示闲置、接收就绪、发送就绪、NACK地址、NACK数据。
(3)第4位(MSTARBLOSS)为主机仲裁丢失标志位,写1可清除该标志。值为0时表示未发生仲裁丢失,值为1时表示主机功能遭受仲裁丢失,此时主机功能停止驱动总线并进入闲置状态。
(4)第5位为保留位,写入时只能写0。
(5)第6位(MSTSTSTPERR)为主机开始/停止错误标志位,写1可清除该标志。值为0时表示未发生开始/停止错误,值为1时表示主机功能已出现开始/停止错误,主机接口已停止驱动总线并进入闲置状态,无需执行操作。
(6)第7位为保留位,写入时只能写0。
(7)第8位(SLVPENDING)为从机挂起位,该位为只读属性。值为0时表示从机功能当前无需服务,值为1时表示从机功能正等待继续在I2C总线上通信且需要软件服务,可在相邻的SLVSTATE字段(9、10两位)中找到关于所需服务的信息。
(8)第9到10位(SLVSTATE)为从机状态代码,这些位为只读属性,此字段中的每个数值都表示从机功能具体需要的服务。值从0x0到0x3分别表示从机地址、从机接收、从机发送和保留。
(9)第11位(SLVNOTSTR)为从机未执行拉伸标志位,该位为只读属性。该位表示何时从机功能正在拉伸I2C时钟,为了能够在从机操作期间自如调用深度睡眠或掉电模式,则需要如此。值为0时表示从机功能当前正在拉伸I2C总线时钟,此时无法进入深度睡眠或掉电模式,值为1时表示从机功能当前并未拉伸I2C总线时钟,此时可以进入深度睡眠或掉电模式。
(10)第12到13位(SLVIDX)为从机地址匹配索引,这些位为只读属性。当I2C从机功能通过接收到其中一个从机地址(由任意使能的从机地址寄存器确定)匹配的地址被选定,并且识别匹配地址时,此字段有效,匹配的地址可能不止一个,但此处只能报告一个匹配地址。值从0x0到0x3分别表示从机地址0、1、2、3。
(11)第14位(SLVSEL)为从机选定标志位,该位为只读属性。当软件指示从机功能确认地址时,SLVSEL在地址匹配之后置位。当另一地址周期出现一个与从机功能上的使能地址不匹配的地址,当从机软件决定NACK一个匹配地址,或者当在总线上检测到Stop时,其会被清除。如果软件NACK数据,则SLVSEL不会被清除。值为0时表示当前未选择从机功能,值为1时表示当前已选择从机功能。
(12)第15位(SLVDESEL)为从机取消选择标志位,写1可清除该标志。值为0时表示从机功能尚未被取消选择,值为1时表示从机功能已被取消选择。如果此标志通过INTENSET使能,则其在置位时会引发中断。
(13)第16位(MONRDY)为监视器就绪标志位,该位为只读属性,读取MONRXDAT寄存器时,此标志被清除。值为0时表示监视器功能当前无可用数据,值为1时表示监视器功能包含待读取的数据。
(14)第17位(MONOV)为监视器溢出标志位,写1可清除该标志。值为0时表示监视器数据尚未溢出,值为1时表示监视器数据已溢出,只有当监视器时钟拉伸并未由CFG寄存器的MONCLKSTR位使能时,才会发生这种情况。
(15)第18位(MONACTIVE)为监控器激活标志位,该位为只读属性。此标志显示何时监视器认为I2C总线已激活了。值为0时表示监视器功能认为I2C总线未激活,值为1时表示监视器功能认为I2C总线已激活。
(16)第19位(MONIDLE)为监视器空闲标志位,写1可清除该标志。当监视器功能确认I2C总线由激活状态变为非激活状态之后,此标志置位。软件可利用它来确认何时处理监视器功能储集的数据。如果此标志通过INTENSET寄存器使能,则其在置位时,会引发中断。值为0时表示I2C总线并未闲置,或者此标志已被软件清除,值为1时表示自此位上次被软件清除以来,I2C总线至少已被闲置过一次。
(17)第20到23位为保留位,写入时只能写0。
(18)第24位(EVENTTIMEOUT)为事件超时中断标志位,写1可清除该标志。该位指出了事件之间的时间长度何时长于TIMEOUT寄存器指定的时间长度。事件包含Start、Stop和时钟沿。向此位写入1可清除此标志。I2C总线闲置时,不会创建超时。值为0时表示I2C总线事件未引发超时,值为1时表示。I2C总线事件之间的时间长度长于I2C TIMEOUT寄存器指 定的时间长度。
(19)第25位(SCLTIMEOUT)为SCL超时中断标志位,写1可清除该标志。该位指出了SCL保持低电平的时间长度何时长于TIMEOUT寄存器指定的时间长度。值为0时表示SCL低电平时间未引发超时,值为1时表示SCL低电平时间已引发超时。
(20)第26到31位为保留位,写入时只能写0。


关键字:LPC824  I2C接口  寄存器 引用地址:LPC824-I2C接口(续一)

上一篇:LPC824-I2C接口(续二)
下一篇:LPC824-I2C接口

推荐阅读最新更新时间:2024-11-16 21:01

STM32 GPIO BRR和BSRR寄存器
简介:使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。 比如希望快速地对GPIOE的位7进行翻转,则可以: GPIOE- BSRR = 0x80; // 置'1' GPIOE- BRR = 0x80; // 置'0' 如果使用常规'读-改-写'的方法: GPIOE- ODR = GPIOE- ODR | 0x80; // 置'1' GPIOE- ODR = GPIOE- ODR & 0xFF7F; // 置'0' 有人问是否BSRR的高16位是多余的,请看下面这个例子: 假如你想在一个操
[单片机]
【stm32f103】DMA应用memory to memory(寄存器版)
注释:此文档是利用DMA实现memory to memory的搬运 可能有的人会说直接用memcpy会更方便,确实是这样,但是此文章仅仅是DMA应用的例子,所以不采用memcpy的方法,并且此历程中不配置DMA中断 后续在系统讲解USART章节中再讲解DMA中断 一.DMA1所在总线 所以要先ENABLE DMA所在总线时钟 RCC- AHBENR = RCC_AHBENR_DMA2EN; 二.DMA寄存器 寄存器可以参考 参考手册,在这里不做详细讨论 三.编程步骤: 1.使能DMA时钟‘ 2.配置DMA外设地址(如果是memroy to meory也需要把memory的地址设置成外设地址,但是需要额外配置DMA
[单片机]
【stm32f103】DMA应用memory to memory(<font color='red'>寄存器</font>版)
STM32串口寄存器库函数配置方法
1、参考资料 《STM32F1开发指南-库函数版本》- 5.3 usart串口文件夹介绍 -第9章 串口实验 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 2、串口通信基本原理 ·常用的串口相关寄存器 ·USART_SR状态寄存器 ·USART_DR数据寄存器 ·USART_BRR波特率寄存器 ·串口操作相关寄存器(省略入口参数): void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能 void USA
[单片机]
STM32串口<font color='red'>寄存器</font>库函数配置方法
8051单片机特殊功能寄存器SFR基础详解
8051单片机共有21个专用寄存器,现把其中部分寄存器简单介绍如下: 程序计数器(PC—Program Counter)。在实训中,我们已经知道PC是一个16位的计数器,它的作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64KB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。因地址不在SFR(专用寄存器)之内,一般不计作专用寄存器。 累加器(ACC—Accumulator)。累加器为8位寄存器,是最常用的专用寄存器,功能较多,地位重要。它既可用于存放操作数,也可用来存放运算的中间结果。MCS-
[单片机]
8051单片机特殊功能<font color='red'>寄存器</font>SFR基础详解
STM32库函数和寄存器操作的思考
从开始接触51单片机,到现在开始转型学习功能更加强大的STM32f407系列, 学习过程中引入了库函数及相应操作,当时赶着进度做点东西出来,有点不求甚解。现在返回来求索:相比于原来51单片机的寄存器,32系列的寄存器无论是个数还是实现功能时多个寄存器之间的调用配合,使用难度都高了不少,所以有了库函数和相应的固件库来减少难度。 先说一下固件库(这个我们最开始安装完MDK缺了它总是各种报错的东西)和相应库函数: 固件库这边时首先将各个设备所有寄存器的配置字进行预定义,然后封装在结构体或者枚举变量中,等到用户调用相关库函数时,会根据用户传入的参数从这些已经封装好的结构体或者枚举变量中取出与之对应的配置字,最后写入相应寄存器中完成对底层寄
[单片机]
8052定时器2的用法
学了51单片机之后,开发板上的CPU是STC89S52RC的,就是说52单片机,里面比51的多了一个定时器2看了很多书,就是没怎么理解,于是乎决定看AT89S52的数据手册,翻译一遍,可能会加深自己的理解,以后对C8051F的单片机也好好预热一下。 定时计数器2是一个16位定时/计数器,通过T2CON寄存器的C/T2位可以选择定时还是计数功能。定时器2 有3种操作模式:捕获、自动重新装载(递增或递减计数)和波特率发生器,这3种模式由T2CON 中的位进行选择,具体的选择方式见表1。定时器2有两个8为寄存器:TH2和TL2。在定时模式状态下,TL2寄存器每一个机器周期加1,。由于52单片机的每一个机器周期等于12的振荡周期,所以他的
[单片机]
8052定时器2的用法
AD9779A的寄存器配置及PLL频带优化
随着科学技术的发展,通信、测量等各个领域对信号源的要求越来越高,高速任意波形发生器成为市场的热点。高速DAC作为任意波形发生器的关键部分,其性能对高速信号有着极大的影响。AD9779A是目前国内能买到的性能较高的高速DAC芯片,内部集成PLL倍频电路、同步控制、增益控制等功能模块,通过SPI接口和外部通信,可以设置优化各种功能以达到最佳性能。   1 AD9779A简介   AD9779A是Analog Devices公司生产的双通道16位高速宽动态范围数DAC,采样率1Gsps,允许高至奈奎斯特频率的多载波生成。0.18μm CMOS工艺制作,工作电压1.8~3.3 V,采样率1 Gsps时功耗1 W,具有高速、低功耗的
[单片机]
AD9779A的<font color='red'>寄存器</font>配置及PLL频带优化

推荐帖子

请教::应用程序实现保存注册表功能------急
各位:现在遇到一个问题,我手里只有一个NK但是发现它启动时不能保存背光设置(控制面板)(即:几分钟关背光,几分钟关屏那个)请问我怎么能通过应用程序把在控制面板设置的时间读取出来,并保存,下次开机后以这个时间关背光关屏等!!!谢谢!!!请教::应用程序实现保存注册表功能------急注册表HKEY_CURRENT_USER\\ControlPanel\\BackLight,BatteryTimeout、ACTimeout。先要确定你的nk是否支持HIVENK支持HIV
kcl123 嵌入式系统
mcu工程师炼成记这句是写错了还是我理解不对
在第36页3.4.3节mcu工程师炼成记这句是写错了还是我理解不对XT2振荡器和XT2不一样吗应该是写错了。肯定错了啊,都是0:lol:lol:lol明显的笔误啊。。。@chunyang春阳老师改一下原稿吧https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=435309 恩额恩这个的确是写错了 此处非我写作,具体看前言。 貌似我只认识你。。。 晕……是的,楼主也挺仔细的呀。这本书写的是43
天天1 微控制器 MCU
可见光通信
对于可见光通信,硬件电路需要怎么搭建?Help可见光通信搜索高通Lumicast,这是其中一种求同要看具体用途,如果是遥控或短距双向通迅,红外遥控和IrDA方面的技术都可以拿来直接用,只是LED和光敏管不同,换成可见光频段的。如果是想把通迅链路跟照明系统整合的话,非LED光源就要根据光源的具体特性来考虑了,这方面没有普适的方法,只能个案考虑。电赛预测的可见光通信,不知道怎么做 看前帖,先把红外弄清楚。
测控一哥 电子竞赛
活动邀请实时动态:“集齐五友”立即获得100元京东卡
想要参与活动的网友,点击活动详情即可参与哦,截止日期为28日目前已经参与活动网友动态,实时更新活动邀请实时动态:“集齐五友”立即获得100元京东卡
nmg 单片机
STC15W408AS红外接受问题(INT0引脚接受)
我用STC89C51RD+开发板测试IR1838B红外接收模块,没有一点问题,都能正常接受红外信号。这两天用STC15W408AS画了一个红外接收的板子,也是用INT0中断来实现的,INT0引脚的信号在不接受红外信号时,引脚的状态总是发生跳变,不知道各位大侠做红外接收相关的项目时,有没有遇到类似的问题?在线等,求助???STC15W408AS红外接受问题(INT0引脚接受)都是51单片机,相差应该不大,不过不同的型号的管脚配置可能不太一样。看看STC15W408AS的INT0管脚有没有其他功
WKfirst 51单片机
怎样写testbench(xilinx的)文章共享
怎样写testbench的资料贡献给大家!怎样写testbench(xilinx的)文章共享谢谢分享~
eeleader FPGA/CPLD
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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