首页 理论教育 I2C模块应用:示例代码分享

I2C模块应用:示例代码分享

时间:2023-06-24 理论教育 版权反馈
【摘要】:在外部短路时,由于系统电压下降,励磁电流也将减小。半个周波后磁通达到最大值,接近3Φm,导致铁芯严重饱和,产生很大励磁电流,这种暂态过程中出现的变压器励磁电流通常称为励磁涌流。磁通中的非周期分量随着时间逐渐衰减,最终励磁涌流也衰减为正常的励磁电流。励磁涌流的数值可达变压器额定电流的6~8倍,其励磁涌流的大小与变压器内部故障时的短路电流接近。

I2C模块应用:示例代码分享

1.与EEPROM通信

工程中常常需外扩非易失存储器,用来保存系统运行或断电时的参数。本例基于eZdsp板,使用DSP的I2C模块实现与支持I2C协议的EEPROM的通信。

本程序功能描述:使用GPIO32作为I2C的SDA功能引脚,使用GPIO33作为I2C的SCL功能引脚。eZdsp板上连接的EEPROM器件为24WC256,存储空间为256KB,即32K字节,其支持按页写入,每页为64字节空间。eZdsp板上的电路图如图7-53所示。

978-7-111-49650-2-Chapter07-237.jpg

图7-53 eZdsp板上电路图

其中,数据线SDA、时钟线SCL通过电阻上拉至3.3V,写保护WP控制信号I2C_ROM_WP及地址A1控制信号分别由eZdsp板上拨码开关SW2中的5、6控制。在此,将SW2中的5、6开关拨向ON状态,允许DSP向24WC256写入数据,并且其地址A1为0。根据手册描述,24WC256芯片的从器件地址格式如图7-54所示,所以这样配置下24WC256的从器件地址为0x50再加上一位读写位978-7-111-49650-2-Chapter07-238.jpg

978-7-111-49650-2-Chapter07-239.jpg

图7-54 24WC256从器件地址格式

978-7-111-49650-2-Chapter07-240.jpg

图7-55 24WC256按页写时序

对24WC256按页写的时序图如图7-55所示,主机先发送24WC256的从机地址(读写位为0,表示随后要向从机写入),之后发送16位字节地址(表示从哪个存储空间开始写,因为空间为32K,2^15,所以最高位无效),然后主机即向从机发送需要写入的数据。这里需要注意的是,只有同处于一页的存储空间,才能一次性按页写入,页空间大小为64,所以一次最多可连续写入64个存储空间。对于不处于同一页的空间,则需要重新向从机发送写时序(从机地址、需要写入数据的存储空间的字节地址)。

24WC256读指定地址空间内容的时序如图7-56所示。主机先发送24WC256的从机地址(读写位为0,表示随后要向从机写入字节地址),之后发送16位字节地址(表示从哪个存储空间开始读取,因为空间为32K,215,所以最高位无效),然后主机重新向24WC256发送从机地址(读写位为1,表示随后要向从机读取内容),最后从机将数据输出给主机,当从机输出完一个8位数据后,若主机予以应答,则表示主机将继续读取下一空间的内容,从机也将予以准备;若主机不予以应答,且主机产生停止信号,则读取过程结束。

978-7-111-49650-2-Chapter07-241.jpg

图7-56 24WC256读取指定地址处内容时序

在配置程序中,需要注意以下几点:

1)从器件地址寄存器(I2CSAR)赋值为0x50,即不包含读写位978-7-111-49650-2-Chapter07-242.jpg。I2C模块将根据发送/接收操作模式(TRX位决定)自动补上978-7-111-49650-2-Chapter07-243.jpg的信息。

2)从图7-56可看出,当主机发送完字节地址后,其后并没有停止信号,因为读操作还未完成。整个读操作需要向从机写入两次从机地址,一次978-7-111-49650-2-Chapter07-244.jpg为0,表示随后写入字节地址;一次978-7-111-49650-2-Chapter07-245.jpg为1,表示读取从机内容。

本程序来源于TI官网V131中i2c_eeprom例程,编者对程序进行了简化改编,以方便读者阅读,程序流程图如图7-57所示。

978-7-111-49650-2-Chapter07-246.jpg

图7-57 I2C例程(与EEPROM通信)主程序流程图

源程序如下:

978-7-111-49650-2-Chapter07-247.jpg

978-7-111-49650-2-Chapter07-248.jpg

978-7-111-49650-2-Chapter07-249.jpg

978-7-111-49650-2-Chapter07-250.jpg

978-7-111-49650-2-Chapter07-251.jpg(www.xing528.com)

978-7-111-49650-2-Chapter07-252.jpg

运行程序,测试通过后会在消息窗口打印出“I2Ca test passed…”,且程序暂停。在该程序中,如果编译时出现警告“creating output section.cio without SECTIONS specification”是因为使用了stdio.h库文件中的printf函数,可在cmd的SECTIONS中添加“.cio:>RAML0,PAGE=0”来消除该警告。

2.与ADC模块通信

有些外部ADC模块也支持I2C接口协议,在此,以ADS1112型号ADC模块为例,介绍DSP通过I2C接口与外部ADC模块通信。

ADS1112为16位ADC模块,其与DSP的硬件连接原理图如图7-58所示。DSP的I2C总线分别经电阻上拉后,接至ADS1112相应的端口。

978-7-111-49650-2-Chapter07-253.jpg

图7-58 I2C例程(与ADC模块通信)硬件原理图

ADS1112的写、读操作时序图分别如图7-59、图7-60所示。图中,从机地址的A2为0,A1和A0由硬件电路决定。本例中,A1、A2均接地,因此ADS1112的从机地址为0x48再加上读/写位978-7-111-49650-2-Chapter07-254.jpg

978-7-111-49650-2-Chapter07-255.jpg

图7-59 ADS112写时序图

978-7-111-49650-2-Chapter07-256.jpg

图7-60 ADS1112读时序图

写操作时,DSP先向ADS1112发送从机地址(R/W为0,表示写),待ADS1112应答后,DSP再发送8位控制命令字。其中,若向978-7-111-49650-2-Chapter07-257.jpg位写1,则表示启动A-D转换。

对于读操作,DSP先发送从机地址(978-7-111-49650-2-Chapter07-258.jpg为1,表示读),待ADS1112应答后,ADS1112将开始输出数据,先输出A-D转换结果的高8位,待DSP应答后,ADS1112继续输出A-D转换结果的低8位;若DSP继续应答,则表示DSP将继续读取寄存器内容,ADS1112随后将输出控制寄存器的内容。其中,若读取978-7-111-49650-2-Chapter07-259.jpg为0,则表示此次读取的A-D转换结果为新的值,还未被读取过;若读取978-7-111-49650-2-Chapter07-260.jpg为1,则表示读取的A-D转换结果为旧的值,即新的A-D转换还未完成。

与上例相同,无论读/写操作,写入到I2CSAR中的值均为0x48,I2C模块将根据发送/接收操作模式(TRX位决定)自动补上R/W的信息。

本程序由编者编写,程序流程图如图7-61所示。

978-7-111-49650-2-Chapter07-261.jpg

图7-61 I2C例程(与ADC模块通信)主程序流程图

源程序如下:

978-7-111-49650-2-Chapter07-262.jpg

978-7-111-49650-2-Chapter07-263.jpg

978-7-111-49650-2-Chapter07-264.jpg

978-7-111-49650-2-Chapter07-265.jpg

这里,需要注意的是,在发送数据时,当将数据写入到I2CDXR时,并不意味着数据已经发送出去,写缓冲中的数据是随着时钟一位一位从数据引脚移出,可以通过查看I2CMD中的STP位来检查通信是否结束。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈