(带有源代码)基于FPGA的模拟I2C接口设计与实现_第1页
(带有源代码)基于FPGA的模拟I2C接口设计与实现_第2页
(带有源代码)基于FPGA的模拟I2C接口设计与实现_第3页
(带有源代码)基于FPGA的模拟I2C接口设计与实现_第4页
(带有源代码)基于FPGA的模拟I2C接口设计与实现_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.2IIC总线工作原理1.2.1图1具有多主机的IIC总线的系统结构IIC总线的系统结构如图1所示。IICIIC[2]IIC

SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

目前有很多半导体集成电路上都集成了IIC接口。带有IIC接口的单片机有:CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供IIC接口。1.2.2总线根本操作

IIC规程运用主/从双向通讯。器件发送数据到总线上,那么定义为发送器,器件接收数据那么定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件〔通常为微控制器〕控制,主器件产生串行时钟〔SCL〕控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。参见图2。图2串行总线上的数据传送顺序1.3控制字节

在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符〔不同的芯片类型有不同的定义,EEPROM一般应为1010〕,接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。如图3所示。图3控制字节配置1.4写操作4。

图4页面写1.5读操作

读操作有三种根本操作:当前地址读、随机读和顺序读。图5给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心〞。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。图5顺序读IIC总线系统由两根总线即SCL(串行时钟)线和SDA(串行数据)线构成。这种总线可以设计成很多种通讯配置,但本文只讨论主从系统的应用。主器件控制总线通讯,开始/结束传送、发送信息并产生IIC系统时钟.在写操作过程中,从器件一旦被主控器件寻址,就执行特定的相应功能。在读操作过程中,主控器件从从器件那里获得数据。在整个主从传送过程中,所有的事件都通过主控器件的SCL时钟线到达同步。连到总线上的器件的接口形式必须是漏极开路或集电极开路输出状态。通过上拉电阻,使得两根总线在空闲的状态下都为高电平状态。因此IIC总线上具有线与功能,即总线上的所有器件都到达高电子状态时,IIC总线才能到达高电平状态,从而使总线上的高速器件和慢速器件工作同步。1.67位的地址格式介绍数据的传输遵循图7所示的格式在起始条件S后,发送了一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位R/W,0表示发送写,1表示请求数据读。数据传输一般由主机产生的停止〔P〕终止。但是,如果主机仍希望在总线上通讯。它可以产生重复起始条件(Sr)和寻址另一个从机。而不是首先产生一个停止条件,在这种传输中可能有不同的读写格式结合。图6完整的数据传输在IIC协议中,从器件地址是一个唯一的7位地址。接下来是一个读写方向标志位,读状态是高电平、写状态是低电子。然后是[2] 图7主机-发送器用7位地址寻址从机接收器〔传输的方向不变〕图8在第一个字节后主机立即读从机2IIC模块的硬、软件设计IIC模块总体硬件设计流程:先在QuartusII9.0里建立VerilogHDLVerilogHDL,就建立了本次系统所需的整体原理图,然后进行编译、调试生成.,实物测试图见附录局部。2.1IIC模块硬件设计2.1.1按键消抖模块设计(KeyFilter_Check)在总体硬件设计中,按键消抖模块建立的VerilogHDLKeyFilter_Check,1.按键消抖:分为硬件和软件;软件消抖延时时间一般为10ms,按键触发的时间一般为几百毫秒〔采样时钟一般为几个毫秒〕。此模块的VerilogHDL使用的是非阻塞赋值语句。图9按键消抖模块2.1.2分频模块设计(Division_1_500HZ)在总体硬件设计中,分频模块建立的VerilogHDLDivision_1_500HZ,其实现的功能是将输入的初始时钟clk进行分频,通过分频获取串行总线器件所需要〔即到达输出1HZ,50HZ,500HZ频率的目的〕。偶分频具体过程为:计数到n/2-1的时候时钟进行翻转,然后计数复位2.1.3IIC总线接口模块设计(IIC_Interface_Bus)在总体硬件设计中,IIC总线接口模块建立的VerilogHDLIIC_Interface_BusIIC_Interface_Bus的VerilogHDLIIC_Interface_Bus。图10IIC总线接口模块50MHz的时钟clk,rst_n,低电平有效的Syn_Sign,控制字节写操作的按键的响应Byte_Write,Byte_Read,Page_Write,Page_Read;按键1按下执行写字节入操作,按键2按下执行读操作,按键3按下执行连写操作,按键4按下执行连读操作。AT24C08的时钟端口scl;AT24C08的数据端口sda;后面显示接收到数据的标志ackflagIIC;数码管所显示的数据输出端口outdata。2.1.4显示模块设计(Led_Seg_Display)在总体硬件设计中,显示模块建立的VerilogHDLLed_Seg_DisplayLed_Seg_Display的VerilogHDLLed_Seg_Display。50MHz的时钟输入端口clk;复位端口reset_n;端口ackflag;8位数据输入端口datain;数码管段码输出seg_data;数码管位选输出端口seg_com。图11显示模块2.1.5硬件模块总体设计思想及总体电路原理图介绍下硬件模块总体设计思想:本IIC模块实现的主要功能是完成并行数据与串行数据的转换,在转换过程中串行数据的输入与输出必须满足IIC总线标准。图12为IIC总线接口框图,主要包括以下几个单元。分频器:由FP,由于频率很高所以必须经过分频模块输出满足IIC总线要求的数据传输速率。IIC总线接口控制时序逻辑块:IIC总线数据传输的所有时序控制逻辑都由它产生,是这个IIC模块的核心。数据锁存器:(r/w)存储IIC己接收的或待发送的数据。移位存放器:(r/w)对数据进行正确地处理。就本次IIC模块设计而言,其硬件电路图如图13。图12为IIC总线接口框图图13硬件模块总体电路图2.2IIC模块的verilogHDL代码设计本IIC模块的软件设计是基于QuartusII9.0建立Division_1_500HZ,IIC_Interface_Bus,KeyFilter_Check,Led_Seg_Display等VerilogHDL。由于IIC总线传输协议可知,IIC在传输过程中存在着几个固定的状态,因此我们采用同步状态机来设计IIC模块。主状态机从的大的方面共有5个状态:空闲(Idle),开始(Start),发送数据(Tx),接收数据(Rx),停止(Stop)。但是具体细分后的状态有17个,它们的具体功能及地址分别如下。IDLE:17'b0_0000_0000_0000_0001;//IIC总线处在空闲状态START1:17'b0_0000_0000_0000_0010;//当scl,sdl由高电平到低电平变化时开始运作IIC模块,且根据(r/w)判断进入下一状态ADD1:17'b0_0000_0000_0000_0100;//写入器件地址ACK1:17'b0_0000_0000_0000_1000;//写入器件地址后的应答ADD2:17'b0_0000_0000_0001_0000;//写入字节地址ACK2:17'b0_0000_0000_0010_0000;//写入字节地址后的应答START2:ADD3:17'b0_0000_0000_1000_0000;//写入器件地址ACK3:17'b0_0000_0001_0000_0000;//应答状态ACKR:17'b1_0000_0000_0000_0000;//fpga给应答状态DATA:17'b0_0000_0010_0000_0000;//字节读写状态PAGER:17'b0_0000_0100_0000_0000;//页读状态状态PAGEW:17'b0_0000_1000_0000_0000;//页写状态ACK4:17'b0_0001_0000_0000_0000;//应答状态HIGH:17'b0_0010_0000_0000_0000;//高电平状态STOP1:17'b0_0100_0000_0000_0000;//停止位状态〔当数据传输完毕,跳入STOP1状态。〕STOP2:17'b0_1000_0000_0000_0000;//延时同步由上面的17个状态组成的状态转移图如图14所示。IDLEIDLESTART1ADD1ACK1ADD2ACK2START21DLEADD3ACK3ACKRDATAHIGHPAGEWPAGERSTOP2STOP1ACK4 图14IIC模块主状态机状态转移图3IIC接口模块的功能实物测试〔基于EP2C20Q240C8〕根据IIC协议中传输过程的特点,IIC模块可以划分为字节发送模块、字节接收模块、开始条件模块、停止条件模块。其中,字节发送模块、字节接收模块和停止条件模块为根本模块。在开始条件模块中,因为需要发送从器件地址,所以要调用字节发送模块。下面给出用VerilogHDL语言实现字节发送模块的关键程序。相关变量的声明在此略去。程序在QuartusII9.0环境下编译、调试、仿真。EP2C20Q240C8目标板上进行实物测试,得到如下的测试图。图15写一个字节为十进制78的字节操作图16连续写2个字节〔十进制26、32〕的页操作4IIC接口模块设计的改进由于24C01/02/04/08/16器件可以不考虑应答位,所以本次设计中没有设定应答接口,因此没有进行仿真测试,所编写的IIC接口模块的VerilogHDL代码是可综合的,仅仅是将此代码直接下载到altera公司EP2C20Q240C8器件中后,进行了为此我们将IIC模块设计进行改进,可以到达直观地利用时序图来观察IIC总线接口协议的目的,可以观察本设计是否满足IIC总线接口功能。具体的操作是:可以实例化了两个模块master〔主机〕和slave〔从机〕,并设计了顶层模块调用master和slave,使用了QuartusII9.0进行了仿真。从图17和图18明显可知,当master的drive线置高电平且r/w线为低电平时,IICIIC模块运作,r/w线为’1’时接收数据功能启动。当mcf为’1’17和图18准确反映了master发送3字节数据和slave准确接收3字节数据的功能。图17master时序仿真图图18slave时序仿真图参考文献[1]夏宇闻.Verilog数字系统设计教程[M].,2005.[2]何立民.IIC总线应用系统设计[M].,2004.[3]吴继华,王诚.AlteraFPGA/CPLD设计(高级篇)[M].,2005.[4]路永坤.用VerilogHDL实现IIC总线功能[J].:电子技术应用,2005.[5]IIC总线标准[E].:电子技术论坛,2000.附录局部源代码/************************************************************************************///IIC接口时序模拟局部moduleIIC_Interface_Bus(clk,rst_n,Syn_Sign,Byte_Write,Byte_Read,Page_Write,Page_Read,scl,sda,ackflag,outdata);/************************************************************************************///AT24C08的地址和数据,根据硬件进行更改.`define DEVICE_READ 8'b1010_0001//被寻址器件地址〔读操作〕`defineDEVICE_WRITE 8'b1010_0000//被寻址器件地址〔写操作〕/************************************************************************************///写入EEPROM的数据`defineWRITE_DATA08'd78//8'b0110_0010 0x62`define WRITE_DATA1 8'd32//8'b0010_00010x21`define WRITE_DATA2 8'd26//8'b0100_00110x43`define WRITE_DATA3 8'd79//8'b0110_0101 0x45`define WRITE_DATA4 8'd43//8'b1000_01110x87/************************************************************************************/`defineBYTE_ADDR 8'b0000_0100 //要写入/读出EEPROM的地址存放器/************************************************************************************//************************************************************************************/input clk; //50MHzinput Byte_Write,Byte_Read,Page_Write,Page_Read;//按键1按下执行写入操作,2按下执行读操作,3按下执行连写操作,4按下执行连读操作output scl; //AT24C08的时钟端口inout sda; //AT24C08的数据端口output [2:0]ackflag;//后面显示接收到数据的标志output[7:0]outdata;//数码管显示的数据/************************************************************************************///分频局部,reg[2:0] cnt; //cnt=0:scl上升沿,cnt=1:scl高电平中间,cnt=2:scl下降沿,cnt=3:scl低电平中间reg[8:0] cnt_delay;//500循环计数,产生iic所需要的时钟100khz-Max:400KHZreg scl_r; //时钟脉冲存放器parameterpre_cnt=500;///************************************************************************************/always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_delay<=9'd0;elseif(cnt_delay==9'd499)cnt_delay<=9'd0; //计数到10us为scl的周期,即100KHzelsecnt_delay<=cnt_delay+1'b1;//时钟计数/************************************************************************************/always@(posedgeclkornegedgerst_n)if(!rst_n)scl_r<=1'b0;assignscl=scl_r; //产生iic所需要的时钟100KHZ/************************************************************************************/always@(posedgeclkornegedgerst_n)beginif(!rst_n)cnt<=3'd5;elsebegincase(cnt_delay)9'd124: cnt<=3'd1;//cnt=1:scl高电平中间,用于数据采样9'd255: cnt<=3'd2;//cnt=2:scl下降沿后面点9'd374: cnt<=3'd3;//cnt=3:scl低电平中间,用于数据变化9'd495: cnt<=3'd0;//cnt=0:scl上升沿前面点default: cnt<=3'd5;endcaseendend/************************************************************************************/`defineSCL_POS (cnt==3'd0) //cnt=0:scl上升沿前面点`defineSCL_HIG (cnt==3'd1) //cnt=1:scl高电平中间,用于数据采样`defineSCL_NEG (cnt==3'd2) //cnt=2:scl下降沿后面点`defineSCL_LOW (cnt==3'd3) //cnt=3:scl低电平中间,用于数据变化/************************************************************************************/reg[7:0] db_r; //在IIC上传送的数据存放器reg[7:0] read_data; //读出EEPROM的数据存放器reg[7:0] outdata_r;//输出数据贮存器parameter PAGEDATA_NUM=3'd4;//页写数据个数/************************************************************************************///IIC读、写时序parameter IDLE =17'b0_0000_0000_0000_0001;//初始态parameter ADD1 =17'b0_0000_0000_0000_0100;//写入器件地址parameter ACK1 =17'b0_0000_0000_0000_1000;//应答parameter ADD2 =17'b0_0000_0000_0001_0000;//写入字节地址parameter ACK2 =17'b0_0000_0000_0010_0000;//应答parameter ADD3 =17'b0_0000_0000_1000_0000;//写入器件地址parameter ACK3 =17'b0_0000_0001_0000_0000;//应答parameter ACKR =17'b1_0000_0000_0000_0000;//fpga给应答parameter DATA =17'b0_0000_0010_0000_0000;//字节读写parameterPAGER=17'b0_0000_0100_0000_0000;//页读parameterPAGEW=17'b0_0000_1000_0000_0000;//页写parameter ACK4 =17'b0_0001_0000_0000_0000;//应答parameter HIGH =17'b0_0010_0000_0000_0000;//高电平parameter STOP1 =17'b0_0100_0000_0000_0000;//停止位parameter STOP2 =17'b0_1000_0000_0000_0000;//延时同步/************************************************************************************/reg[16:0] cstate; //状态存放器reg sda_r; //输出数据存放器reg [3:0]num; //读写的字节计数reg [2:0]ackflag; //连读时的数据标志reg [2:0]pagecnt; //连读连写时的数据计数器reg [7:0]pagedata_r;//连读储存器/************************************************************************************/always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginpagedata_r<=8'd0;endelsebegincase(pagecnt)3'd0: pagedata_r<=`WRITE_DATA1;3'd1: pagedata_r<=`WRITE_DATA2;3'd2: pagedata_r<=`WRITE_DATA3;3'd3: pagedata_r<=`WRITE_DATA4;default:;endcaseendend/************************************************************************************///FSM状态机always@(posedgeclkornegedgerst_n)beginif(!rst_n)begincstate <=IDLE;//sda_r <=1'b1;//sda_link <=1'b0; //0:数据线sda为input,1:数据线sda为outputnum <=4'd0; //ackflag <=3'd0; //pagecnt <=3'd0; //read_data <=8'b0000_0000;//outdata_r <=8'b0000_0000;//endelsecase(cstate)beginsda_link <=1'b1;//数据线sda为inputsda_r <=1'b1;read_data <=8'b0000_0000;//ackflag <=3'd0;if((!Byte_Write)||(!Byte_Read)||(!Page_Write)||(!Page_Read))begin//Byte_Write,Byte_Read,Page_Write,Page_Read键有一个被按下db_r <=`DEVICE_WRITE;//送器件地址〔写操作〕cstate <=START1;//endelsecstate<=IDLE;//没有任何键被按下endbeginif(`SCL_HIG)begin //scl为高电平期间,sda_link<=1'b1;//数据线sda为outputcstate <=ADD1;ackflag<=1'b0;num <=4'd0;//num计数清零endelsecstate<=START1;//等待scl高电平中间位置到来endADD1://写入器件地址beginif(`SCL_LOW)beginif(num==4'd8)beginnum <=4'd0;//num计数清零sda_r <=1'b1;//shifangshijuxiansda_link<=1'b0;//sda置为高阻态(input)cstate <=ACK1;endelsebegincstate <=ADD1;num <=num+1'b1;case(num)4'd0:sda_r<=db_r[7];//gaodaodi4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcaseendendelsecstate<=ADD1;end..begin//注:24C01/02/04if(`SCL_NEG)begindb_r <=`BYTE_ADDR;//1地址endelsecstate<=ACK1; //等待从机响应endADD2://写入需要读或写的存储地址\字节地址beginif(`SCL_LOW)beginif(num==4'd8)beginnum <=4'd0;//num计数清零sda_r <=1'b1;sda_link<=1'b0;//sda置为高阻态(input)cstate<=ACK2;endelsebeginsda_link<=1'b1; //sda作为outputnum <=num+1'b1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcasecstate<=ADD2;endendelsecstate<=ADD2;endACK2://beginif(`SCL_NEG)if(!Byte_Write)//字节写按键begincstate <=DATA;//写操作db_r <=`WRITE_DATA0;//写入的数据1endelseif((!Byte_Read)||(!Page_Read))//字节读或者页读按键begin//读或着是连读db_r <=`DEVICE_READ;//送器件地址〔读操作〕,特定地址读需要执行该步骤以下操作cstate <=START2; //读操作endelseif(!Page_Write)//页写按键begin//连写//db_r <=pagedata_r;//ackflag <=ackflag+1'd1;cstate<=PAGEW;endelsecstate<=ACK2;//等待从机响应endendSTART2:begin//读操作起始位if(`SCL_LOW)beginsda_link<=1'b1;//sda作为outputsda_r<=1'b1; //拉高数据线sdacstate<=START2;endelseif(`SCL_HIG)begin //scl为高电平中间cstate<=ADD3;endelsecstate<=START2;endADD3:begin //送读操作地址if(`SCL_LOW)beginif(num==4'd8)beginnum <=4'd0; //num计数清零sda_r <=1'b1;sda_link<=1'b0;//sda置为高阻态(input)cstate <=ACK3;endelsebeginnum<=num+1'b1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcasecstate<=ADD3;endendelsecstate<=ADD3;endACK3:beginif(`SCL_NEG&&!Byte_Read)beginsda_link<=1'b0;endelseif(`SCL_NEG&&!Page_Read)beginackflag<=ackflag+1'd1;sda_link<=1'b0;endelsecstate<=ACK3; //等待从机响应endACKR:beginsda_r<=0; //主控制器应答if(`SCL_NEG&&!Page_Read)begincstate <=PAGER;ackflag<=ackflag+1'd1;sda_link<=1'b0;endelsecstate<=ACKR;endDATA:beginif(!Byte_Read)begin //读操作if(num<=4'd7)begincstate<=DATA;if(`SCL_HIG)beginnum<=num+1'b1;case(num)4'd0:read_data[7]<=sda;4'd1:read_data[6]<=sda;4'd2:read_data[5]<=sda;4'd3:read_data[4]<=sda;4'd4:read_data[3]<=sda;4'd5:read_data[2]<=sda;4'd6:read_data[1]<=sda;4'd7:read_data[0]<=sda;default:;endcaseendendelseif((`SCL_LOW)&&(num==4'd8))beginnum <=4'd0; //num计数清零//cstate<=ACK4;sda_link<=1'b1; //无应答outdata_r<=read_data;ackflag<=3'd1; //1个数cstate<=HIGH;endelsecstate<=DATA;endelseif(!Byte_Write)begin //写操作sda_link<=1'b1;if(num<=4'd7)begincstate<=DATA;if(`SCL_LOW)beginsda_link<=1'b1; //数据线sda作为outputnum <=num+1'b1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcaseendendelseif((`SCL_LOW)&&(num==4'd8))beginnum <=4'd0;sda_r <=1'b1;sda_link<=1'b0;//sda置为高阻态cstate <=ACK4;endelsecstate<=DATA;endendPAGEW:beginsda_link<=1'b1; //sda为输出//if(pagecnt<PAGEDATA_NUM)beginif(num<=4'd7)begincstate<=PAGEW;if(`SCL_LOW)beginsda_link<=1'b1; //数据线sda作为outputnum <=num+1'b1;case(num)4'd0:sda_r<=pagedata_r[7];4'd1:sda_r<=pagedata_r[6];4'd2:sda_r<=pagedata_r[5];4'd3:sda_r<=pagedata_r[4];4'd4:sda_r<=pagedata_r[3];4'd5:sda_r<=pagedata_r[2];4'd6:sda_r<=pagedata_r[1];4'd7:sda_r<=pagedata_r[0];default:;endcaseendendelseif((`SCL_LOW)&&(num==4'd8)&&(pagecnt<PAGEDATA_NUM-1'b1))beginnum <=4'd0;pagecnt<=pagecnt+1'd1;sda_r <=1'b1;sda_link<=1'b0;//sda置为高阻态cstate<=ACK2;endelseif((`SCL_LOW)&&(num==4'd8)&&(pagecnt==PAGEDATA_NUM-1'b1))beginnum<=4'd0;//pagecnt<=pagecnt+1'd1;pagecnt<=1'd0;sda_r<=1'b1;sda_link<=1'b0;cstate<=ACK4;endelsecstate<=PAGEW;end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论