I2C开发实例说明.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
I2C开发实例说明

RM-CPLD的I2C控制器框架 首先看下三态电路 三态电路代码 always @(posedge clk or negedge reset_n) if (!reset_n) sda_inner = 1b0 ; else if (sda_output_enable) sda_inner = sda_output; else sda_inner = 1bz ; assign I2C_SDA = sda_inner; assign sda_input = I2C_SDA ; 三态电路注意事项总结 在写数据时方向为主—从,则enable位高无效,此时SDA位输入方向 当从器件响应时,则enable为低电平此时输出响应位SDA为输出方向 默认SDA位输入 I2C控制器的实现步骤说明(写为例) 首先主器件发起始bit,从器件检测起始bit 再进行从器件地址检测(与从器件地址比较,如果正确则响应,如果不正确则不作响应) 解析写bit CPLD发响应 解析寄存器地址 CPLD发响应 主器件发高8位 CPLD发响应 主器件发低8位 CPLD发响应 主器件发停止位结束 检测起始bit(首先检测SDA下降沿) 再检测SDA下降沿是否在SCL高电平下 代码实现 //detect sda start always @(posedge clk or negedge reset_n) if (!reset_n) sda_start = 1b0 ; else if (scl_in_d2) if (sda_in_reg) sda_start = 1b1 ; else sda_start = 1b0 ; ……… 检测停止bit(检测SDA上降沿) 再检测SDA上升沿是否在SCL高电平下 代码实现 //detect sda stop always @(posedge clk or negedge reset_n) if (!reset_n) sda_stop = 1b0 ; else if (scl_in_d2) if (sda_in_pos) sda_stop = 1b1 ; else sda_stop = 1b0 ; ………………….. 移位寄存器(串并转换过程) ////****sda series shift to parallel**********//// //sda shift to register always @(posedge clk or negedge reset_n) if (!reset_n) sda_in_shift = 8b0 ; else if (sda_valid) if (scl_en) sda_in_shift = {sda_in_shift[6:0],sda_input}; 串转并后与本地从器件地址比较 ////*judge slave cpld address and read or write**********************//// always @(posedge clk or negedge reset_n) if (!reset_n) cpld_device_address_right = 1b0 ; else if (sda_valid) if (bit_cnt_d1 == 4b0111 byte_cnt == 8b0 scl_in_reg) if (cpld_device_address == sda_in_shift[7:1]) cpld_device_address_right = 1b1; else cpld_device_address_right = 1b0; else

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档