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 页