AN205072 F²MC-8FX Family MB95350L Series I2C Slave Module API (Chinese).pdf

Spansion® 模拟和微控制器产品
本文档包含有关 Spansion 模拟和微控制器产品的信息。尽管本文档内有原来开发该产品规格的公司名称
“富士通”或 “Fujitsu”, 该产品将由 Spansion 提供给现有客户和新客户。
规格的延续
本文档内容并不因产品供应商的改变而有任何修改。文档内容的其他更新,均为改善文档而进行,并已记录在文档
更改摘要。日后如有需要更改文档,其更改内容也将记录在文档更改摘要。
型号的延续
Spansion 将继续提供型号以“MB”开始的现有产品。如欲订购该类产品,敬请使用本文档内列出的产品型号。
查询更多信息
如欲查询更多关于 Spansion 存储器、模拟产品和微控制器产品及其解决方案的信息,请联系您当地的销售办事
处。
书末出版说明
本文档介绍的产品,其设计、开发和制造均基于一般用途,包括但不限于普通工业使用、普通办公使用、个人使用及家庭使用,不应用于:(1)
存在严重风险或危险,除非能够保证极高的安全性,否则可能对公众造成严重影响,甚至可能直接造成死亡、人员伤害、物品损坏或其他损失
的用途(如核设施的核反应控制、飞机飞行控制、空中交通控制、公共交通控制、医学生命支持系统、武器系统的导弹发射控制),或者(2) 不
允许出现故障的用途(如潜艇中继器和人造卫星)。请注意,对于您和 / 或任何第三方由于将产品用于上述用途而造成的任何索赔和损失,
Spansion 不承担任何责任。任何半导体设备都可能发生故障。您必须在自己的设施和装置中加入安全设计措施,如冗余、防火、防止电流过
载及其他异常运行情形等,以防由于此类故障而造成伤害、损坏或损失。如果根据日本 Foreign Exchange and Foreign Trade Law、美国US Export
Administration Regulations 或其他国家(地区)的适用法律的规定,本文档中介绍的任何产品是在出口方面受到特别限制的商品或技术,则这
些产品的出口必须预先得到相关政府的许可。
商标和声明
本文档的内容如有变更,恕不另行通知。本文档可能包含Spansion 正在开发的 Spansion 产品的相关信息。 Spansion 保留变更任何产品或停
止其相关工作的权利,恕不另行通知。本文档中的信息 “ 按原样 ” 提供,对于其精确性、完整性、可操作性、对特定用途的适用性、适销性、
不侵犯第三方权利等不提供任何担保或保证,也不提供任何明确的、隐含的或法定的其他担保。对于因使用本文档中的信息而造成的任何形式
的任何损失,Spansion 不承担任何责任。
版权所有© 2013 Spansion Inc. 保留所有权利。Spansion®、Spansion 标识、MirrorBit®、MirrorBit® Eclipse™、ORNAND™ 以及它们的组合,
是Spansion LLC 在美国和其他国家(地区)的商标和注册商标。使用的其他名称只是一般性参考信息,可能是其各自所有者的商标。
富士通半导体(上海)有限公司
应用笔记
MCU-AN-500095-Z-10
F²MC-8FX 家族
8 位微型控制器
MB95350L 系列
I2C 从模块 API
应用笔记
I2C 从模块 API V1.0
修改记录
修改记录
版本
日期
作者
修改记录
1.0
2009-04-27
Jane Li
初稿
本手册包含 22 页。
1. 本文档记载的产品信息及规格说明如有变动,恕不预先通知。如需最新产品信息和/或规格说明,联系富士
通销售代表或富士通授权经销商。
2. 基于本文档记载信息或示意图的使用引起的对著作权、工业产权或第三方的其他权利的侵害,富士通不承
担任何责任。
3. 未经富士通明文批准,不得对本文档的记载内容进行转让、拷贝。
4. 本文档所介绍的产品并不旨在以下用途: 需要极高可靠性的设备,诸如航空航天装置、海底中继器、核控制
系统或维系生命的医用设施。
5. 本文档介绍的部分产品可能是“外汇及外贸管理法”规定的战略物资(或专门技术),出口该产品或其中部分
元件前,应根据该法获得正式批准。
版权©2010 富士通半导体(上海)有限公司
MCU-AN-500095-Z-10- 第 2 页
I2C 从模块 API V1.0
目录
目录
修改记录 ....................................................................................................................................... 2 目录............................................................................................................................................... 3 1 概要 .......................................................................................................................................... 4 2 I2C 从模块协议 ........................................................................................................................ 5 2.1 I2C 从模块启动 ....................................................................................................................... 6 2.2 I2C 从模块地址 ....................................................................................................................... 6 2.3 I2C从模块应答 ........................................................................................................................ 7 2.4 I2C 从模块数据 ....................................................................................................................... 7 2.5 I2C 从模块停止 ....................................................................................................................... 7 3 MB95350L I2C从模块寄存器 .................................................................................................. 8 4 I2C 从模块库的函数 ................................................................................................................ 10 5 I2C 从模块函数 ....................................................................................................................... 11 5.1 SlaveI2C_PrepareForInter 函数 ....................................................................................... 11 5.2 INTER_I2CSlaveModeWakeUp 函数 .............................................................................. 11 5.3 Write_StandBy 函数 ........................................................................................................... 12 6 用法演示 ................................................................................................................................. 13 6.1 硬件设计 ............................................................................................................................... 13 6.2 添加I2C 从模块库的步骤 ..................................................................................................... 14 6.3 I2C 从模块反馈 ..................................................................................................................... 16 7 调试 ......................................................................................................................................... 17 8 I2C 从模块代码示例 ................................................................................................................ 18 9 更多信息 ................................................................................................................................. 21 10 附录 ....................................................................................................................................... 22 MCU-AN-500095-Z-10 - 第 3 页
I2C 从模块 API V1.0
第 1 章 概要
1 概要
本文档介绍了 I2C 从模块的 API。
MB95350L MCU 有一个可以同步把数据转送到其他 I2C 主设备或从其他 I2C 主设备接收数据
的 I2C 从模块。以下章节将介绍如何使用该模块以及它的库。
MCU-AN-500095-Z-10- 第 4 页
I2C 从模块 API V1.0
第 2 章 I2C 从模块协议
2 I2C 从模块协议
本章介绍了 I2C 从模块的协议。
I2C 从模块主要用于从 I2C 主设备模块接收数据,并反馈数据到 I2C 主设备模块。I2C 从模块
有 SDA 和 SCL 二条线路。
I2C 从模块与 I2C 主设备使用同一个总线。当 I2C 从模块接收到 I2C 主设备调用标记时(从属
地址与主设备发送地址匹配时),从 SCL 产生信号。在地址匹配或接收数据后,从数据寄存
器从 SDA 上读取数据并给出应答。
下图描述了 I2C 协议。
图 2-1:I2C 协议
MCU-AN-500095-Z-10 - 第 5 页
I2C 从模块 API V1.0
第 2 章 I2C 从模块协议
2.1
I2C 从模块启动
I2C 从模块检测到启动信号后,开始从主设备接受地址。 下图描述了启动条件。
图 2-2: I2C 启动条件
2.2
I2C 从模块地址
MB95350 L 有一个寄存器 IAAR0(IAAR1)用于保存 MCU 地址。 用户可以通过烧写数据到
这个寄存器定义该地址。下图为地址的形式。
Un‐use 图 2-3:I2C 从模块地址
注:
烧写地址到地址寄存器 IAAR0(IAAR1)仅需烧写 7 位地址,bit7 将被忽略。
MCU-AN-500095-Z-10- 第 6 页
I2C 从模块 API V1.0
第 2 章 I2C 从模块协议
2.3
I2C从模块应答
I2C 从模块会在以下两种情况下产生应答:一是从模块接收了与 MCU 地址匹配的地址后,另
一个是在接收 8 位数据后。下图描述了应答的形式。
图 2-4:I2C 从模块应答
2.4
I2C 从模块数据
MB95350L MCU 的寄存器 IDDR0(IDDR1)用于保存数据。该数据由 SDA 传送。当主设备
首先传送 bit7 时,从模块接收的第一个数据是 bit7。
2.5
I2C 从模块停止
当检测到由主设备发送的 STOP 标记时,I2C 从模块将停止总线。因此从设备不需要产生
STOP,它仅需检测主设备的 STOP 标记。
MCU-AN-500095-Z-10 - 第 7 页
I2C 从模块 API V1.0
第 3 章 MB95350L I2C 从模块寄存器
3 MB95350L I2C 从模块寄存器
本章描述了 MB95350 I2C 的从模块寄存器。
MB95350L 有两个可以单独操作的 I2C 通道。 每个通道有六个寄存器。 下表描述了这些寄存
器。
表 3-1:I2C 寄存器
寄存器
描述
IBCR00
总线控制寄存器 0
IBCR10
总线控制寄存器 1
IBSR0
总线状态寄存器
IDDR0
I2C 数据寄存器
IAAR0
I2C 地址寄存器
ICCR0
时钟控制寄存器
IBCR01
总线控制寄存器 0
IBCR11
总线控制寄存器 1
IBSR1
总线状态寄存器
IDDR1
I2C 数据寄存器
IAAR1
I2C 地址寄存器
ICCR1
时钟控制寄存器
I2C 通道 0
I2C 通道 1
注: channel0 的寄存器操作方法与 channel1 相同。
MCU-AN-500095-Z-10- 第 8 页
I2C 从模块 API V1.0
第 3 章 MB95350L I2C 从模块寄存器
下图描述了 I2C 从模块的工作条件。
图 3-1:I2C 从模块的工作条件
MCU-AN-500095-Z-10 - 第 9 页
I2C 从模块 API V1.0
第 4 章 I2C 从模块库的函数
4 I2C 从模块库的函数
本章介绍了 MB95350L 工程 I2C Slave.prj 的 I2C 从模块库中的所有函数。
表 4-1 列出了 I2C 从模块的函数。
表 4-1:I2C 从模块函数
函数名称
描述
void SlaveI2C_PrepareForInter(void)
2
初始化 I C 从模块和设置 MCU 地址
__interrupt void INTER_I2CSlaveModeWakeUp(void)
唤醒中断读取 I2C SDA 数据
void Write_StandBy(void)
设置系统进入待机模式
下面的流程图简要描述了 FW 设计。
图 4-1:FW 流程图
MCU-AN-500095-Z-10- 第 10 页
I2C 从模块 API V1.0
第 5 章 I2C 从模块函数
5 I2C 从模块函数
本章介绍了 I2C 从模块的函数。
5.1
SlaveI2C_PrepareForInter 函数
表 5-1 描述了 SlaveI2C_PrepareForInter 函数。
表 5-1:SlaveI2C_PrepareForInter 函数
函数名称
SlaveI2C_PrepareForInter
函数原型
Void SlaveI2C_PrepareForInter(void)
行为描述
初始化 I2C 从模块和启动从模式
输入参数
无
返回值
无
例子
库函数设置 I2C 从时钟为 115K,设置 MCU 地址为 0x60 ,启用 I2C 从引
脚,启用传送完成中断,并启用应答
SlaveI2C_PrepareForInter ();
5.2
INTER_I2CSlaveModeWakeUp 函数
表 5-2 描述了 INTER_I2CSlaveModeWakeUp 函数。
表 5-2:INTER_I2CSlaveModeWakeUp 函数
函数名称
INTER_I2CSlaveModeWakeUp
函数原型
__interrupt void INTER_I2CSlaveModeWakeUp(void)
行为描述
启动信号或 8 位数据传送完成后产生中断
输入参数
无
返回值
无
中断级别
IRQ10: 8/16-bit PPG ch1 (upper) | I2C ch1 or
IRQ16: I2C ch0
例子
在向量文件中使用:
__interrupt void INTER_I2CSlaveModeWakeUp(void);
MCU-AN-500095-Z-10 - 第 11 页
I2C 从模块 API V1.0
第 5 章 I2C 从模块函数
5.3
Write_StandBy 函数
表 5-3 描述了 Write_StandBy 函数。
表 5-3:Write_StandBy 函数
函数名称
Write_StandBy
函数原型
void Write_StandBy(void)
行为描述
使系统进入停止模式
输入参数
无
返回值
无
例子
在主要函数中使用:
Write_StandBy ();
MCU-AN-500095-Z-10- 第 12 页
I2C 从模块 API V1.0
第 6 章 用法演示
6 用法演示
本章说明了使用过程中的注意事项。
6.1
硬件设计
硬件设计可参考下图。
图 6-1:I2C 硬件设计
下图描述了 RS 和 RP 的电阻定义。
图 6-2:RS 和 RP 的定义
MCU-AN-500095-Z-10 - 第 13 页
I2C 从模块 API V1.0
第 6 章 用法演示
6.2
添加I2C 从模块库的步骤
使用该工程时,参考以下步骤。
¾
第一步:添加文件到文件夹。图 6-3 描述了该步骤。
图 6-3:使用库的第一步
¾
第二步:在工程中添加函数。图 6-4 描述了该步骤。
图 6-4:使用库的第二步
MCU-AN-500095-Z-10- 第 14 页
I2C 从模块 API V1.0
第 6 章 用法演示
¾
第三步:在 main.c 中添加初始函数。图 6-5 描述了该步骤。
图 6-5:使用库的第三步
¾
第四步: 在 vector.c 中添加中断函数。图 6-6 描述了该步骤。
图 6-6:使用库的第四步
¾
第五步:在 main.c 中添加 Write_StandBy 函数。图 6-7 描述了该步骤。
图 6-7:使用库的第五步
MCU-AN-500095-Z-10 - 第 15 页
I2C 从模块 API V1.0
第 6 章 用法演示
¾
第六步:调试。调试前需设置调试环境。图 6-8 描述了该步骤。
图 6-8:使用库的第六步
仿真器为 MB2146-08。参见第 7 章了解更多条件。
6.3
I2C 从模块反馈
主设备读取 I2C 从模块时,MCU 将反馈 0x01 到主设备指明从模块反馈工作正常。
MCU-AN-500095-Z-10- 第 16 页
I2C 从模块 API V1.0
第 7 章 调试
7 调试
本章描述了如何在 EV 板上调试代码以及代码运行时会发生什么。
以工程 I2C Slave.prj 为例。该工程基于 EV 板 MB2146-460-E,目标 MCU 是 MB95350L。
调试时,硬件连接参考图 7-1,测试板连接可参考下图。
Main board Up board 图 7-1:测试板连接
UP 板电位计部分与主板相同。按 UP 板上的“SEND”键,主板的 LED7 发光,表明 I2C 从
模块函数工作正常。在工程中,参数 DatSlavI2CRead 将记录 I2C 从模块收到的数据。
图 7-2: 调试描述
MCU-AN-500095-Z-10 - 第 17 页
I2C 从模块 API V1.0
第 8 章 I2C 从模块代码示例
8 I2C 从模块代码示例
本章描述了 MB95350L I2C 从模块的 C 代码。
SlaveI2C_PrepareForInter 函数
SYSC = 0x05;
//启用 SDA1 和 SCL1
ICCR1_EN = 0;
ILSR_P16 = 1;
//CMOS 级别
ILSR_P17 = 1;
DDR1_P16 = 0;
DDR1_P17 = 0;
ICCR1_EN = 0;
ICCR1_CS4 = 0;
// 清除 I2C 接口
// 设置时钟分频器 'm' => 6
ICCR1_CS3 = 1;
ICCR1_CS2 = 0;
//设置时钟分频器'n' => 4
ICCR1_CS1 = 0;
ICCR1_CS0 = 0;
// FSCK = MCLK / (m * n +2) => 3MHz/(6*4 +2)
//= 3MHz/26 = 115 kHz
ICCR1_EN = 1;
// 启用 I2C 接口
IDDR1 = 0x00;
// 清除数据寄存器
IBCR01 = 0x05;
// 启用地址应答位
//在第 9 个周期完成转换中断
// 启用停止检测中断
IBCR11 = 0x4e;
//设置为从设备模式,启用数据应答位
// 启用总线错误和完成转换中断
IAAR1 = 0x30;
// 从设备地址 0X60
MCU-AN-500095-Z-10- 第 18 页
I2C 从模块 API V1.0
第 8 章 I2C 从模块代码示例
INTER_I2CSlaveModeWakeUp 函数
//禁用 i2c 唤醒中断
IBCR01_WUE = 0;
if (IBCR01_SPF == 0x01)
//检测到停止条件
IBCR01_SPF = 0x00;
//清除停止条件
if (IBCR11_INT == 0x01)
//转换完成
{
ReaDat = IDDR1;
Tim ++;
if(Tim == 1)
{
ReaDat &= 0x01;
if(ReaDat == 0x01)
IDDR1 = 0X01;
//IDDR1 =
PraGlo.DatSlavI2CRead;
}
else if(Tim == 2)
{
Tim = 0;
DatSlavI2CRead = ReaDat;
//读取 I2C SDA 数据
DDR0_P05 = 1;
PDR0_P05 = 0;
}
// 清除位
IBCR11_INT = 0x00;
}
if(IBCR11_BER == 0x01)
IBCR11_BER = 0x00;
//检测到总线错误
// 位已清除
MCU-AN-500095-Z-10 - 第 19 页
I2C 从模块 API V1.0
第 8 章 I2C 从模块代码示例
Write_StandBy 函数
SlaveI2C_PrepareForInter();
//启用 i2c 唤醒
IBCR01_WUE = 1;
while(IBSR1_BB);
//进入 stop 模式
STBC = 0x80;
主函数
InitIrqLevels();
// 初始化中断级别寄存器和 IRQ 向量表
__EI();
SlaveI2C_PrepareForInter();
while(1)
{
Write_StandBy();
}
MCU-AN-500095-Z-10- 第 20 页
I2C 从模块 API V1.0
第 9 章 更多信息
9 更多信息
关于富士通半导体更多的产品信息,请访问以下网站:
英文版本地址:
http://www.fujitsu.com/cn/fsp/services/mcu/mb95/application_notes.html
中文版本地址:
http://www.fujitsu.com/cn/fss/services/mcu/mb95/application_notes.html
MCU-AN-500095-Z-10 - 第 21 页
I2C 从模块 API V1.0
第 10 章 附录
10 附录
表 3-1:I2C寄存器 ................................................................................................................... 8
表 4-1:I2C从模块函数 ........................................................................................................... 10
表 5-1:SlaveI2C_PrepareForInter 函数 ............................................................................... 11
表 5-2:INTER_I2CSlaveModeWakeUp 函数 ....................................................................... 11
表 5-3:Write_StandBy 函数 ................................................................................................. 12
图 2-1:I2C协议........................................................................................................................ 5
图 2-2: I2C 启动条件 .............................................................................................................. 6
图 2-3:I2C从模块地址 ............................................................................................................. 6
图 2-4:I2C 从模块应答 ............................................................................................................ 7
图 3-1:I2C 从模块的工作条件 ................................................................................................. 9
图 4-1:FW 流程图 ................................................................................................................ 10
图 6-1:I2C 硬件设计 ............................................................................................................. 13
图 6-2:RS 和 RP 的定义 ........................................................................................................ 13
图 6-3:使用库的第一步 ........................................................................................................ 14
图 6-4:使用库的第二步 ........................................................................................................ 14
图 6-5:使用库的第三步 ........................................................................................................ 15
图 6-6:使用库的第四步 ........................................................................................................ 15
图 6-7:使用库的第五步 ........................................................................................................ 15
图 6-8:使用库的第六步 ........................................................................................................ 16
图 7-1:测试板连接 ................................................................................................................ 17
图 7-2: 调试描述 .................................................................................................................. 17
MCU-AN-500095-Z-10- 第 22 页