智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 19587|回复: 27
打印 上一主题 下一主题

[其他] 飞思卡尔HCS12系列单片机模块应用及程序下载调试

  [复制链接]

489

主题

1691

帖子

1

精华

管理员

网站创始人&站长

Rank: 11Rank: 11Rank: 11Rank: 11

积分
85713

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
56837
贡献
17306
兑换币
13090
注册时间
2007-6-8
在线时间
5785 小时
跳转到指定楼层
1#
发表于 2008-2-10 09:31:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
< align=center><FONT size=3><STRONG></STRONG></FONT>&nbsp;</P><P align=center><STRONG><FONT size=5>飞思卡尔HCS12系列单片机模块应用及程序下载调试</FONT></STRONG></P><P align=center><STRONG>清华大学Freescale单片机/DSP应用开发研究中心&nbsp;&nbsp; 安鹏 马伟</STRONG></P><P><FONT size=3><STRONG>摘 要:</STRONG>本文对邀请赛选用的主控芯片MC9S12DG128单片机的一些外围接口模块作了介绍,包括功能上的描述和例程及初始化的过程,对一些参赛队伍中遇到的Flash锁死问题也提供了解决的方案。</FONT></P><P><FONT size=3><STRONG>关键字:</STRONG> MC9S12DG128;CodeWarrior;TBDML;Flash解密 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 本次智能车邀请赛采用的MC9S12DG128(以下简称DG128)是Freescale公司推出的S12系列单片机中的一款增强型16位单片机,片内资源丰富,接口模块包括SPI、SCI、IIC、A/D、PWM等,在汽车电子应用领域具有广泛的用途。DG128在Flash存储控制及加密方面也有很强的功能,加解密可配合第三方软件使用。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; DG128单片机采用增强型16位HCS12 CPU,片内总线时钟最高可达25MHz;片内资源包括8K RAM、128K Flash、2K EEPROM; SCI、SPI、PWM串行接口模块;脉宽调制模块(PWM)可设置成4路8位或者2路16位,逻辑时钟选择频率宽。它包括两个8路10位精度A/D转换器,控制器局域网模块(CAN),增强型捕捉定时器并支持背景调试模式。DG128有112-pin和80-pin两种封装形式,80-pin封装的单片机没有引出用于扩展的端口,只引出了一个8路A/D接口。 </FONT></P><P><FONT size=3>常用接口模块及外部应用 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; PWM(Pulse Width Modulate)模块:PWM脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电机驱动、D/A变换等场合有着广泛的应用。本次大奖赛使用的电机驱动芯片为MC33886,其输入信号即为一路PWM信号。MC33886根据PWM信号的周期和占空比来控制电机的转向和速度。大奖赛中使用的舵机也是用PWM来控制的。PWM信号的周期大于某一域值后可驱动舵机工作,保持周期、调节PWM的占空比即可调节舵机的转动方向。在没有电机、舵机的具体参数的情况下,可写一个可调周期、占空比的PWM输出程序进行测试。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; A/D(Analog/Digital)模块:A/D模数转换模块内部可分为三个部分:IP总线接口、转换模式控制/寄存器列表、自定义模拟量。IP总线接口负责该模块与总线的连接,实现A/D模块和通用I/O的目的。转换模式控制寄存器列表中有控制该模块的所有的寄存器。自定义模拟量负责实现模拟量到数字量的转换。为了与外部信号同步进行A/D转换,A/D有一个外部触发转换通道,用户可以选择触发方式(沿触发、电平触发)。</FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; A/D模块设有时钟分频机制。需要用户注意的是,A/D模块的最大转换时钟为2MHz,最小转换时钟为500KHz,用户需要查看自己芯片的内部总线时钟,必须使得分频以后的转换时钟处于两者之间,否则可能得不到正确的转换结果。用户可以设定转换结果为有符号或是无符号数。比如,对于Vrh为5.12v,Vrl为0v时,输入5.12V,8位有符号的结果是-$7F,无符号的结果是$FF。A/D模块允许设置顺序转换,最大的顺序转换序列长度是8。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 大奖赛中车模对跑道的识别有可能会用到A/D模块,识别电路的前端数据采集系统有很多种实现方案,如红外发光二极管或是CMOS摄像头来进行数据采集。 </FONT></P><P><FONT size=3>Codewarrior软件使用</FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 大赛中采用Codewarrior 3.1 for HCS12作为推荐的程序编译软件。CodeWarrior for S12” 是面向以HC12或S12为CPU的单片机嵌入式应用开发的软件包。包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器。在Codewarrior软件中可以使用汇编语言或C语言,以及两种语言的混合编程。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 工程建立以后,需要定义装载地址。default.prm文件用于定义目标代码的装载地址,用户应当根据使用单片机的内存分配情况修改这个文件。CodeWarrior 自动生成的 .prm 文件默认MC9S12DG128 的RAM 在: </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; RAM = READ_WRITE 0x0400 TO 0x1FFF; </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个默认区间必须修改,因为在这一空间有 1K 的I/O 寄存器空间 和2K EEPROM 空间。使用默认定义会丢失1K RAM 和 2K EEPROM。 </FONT></P><P><FONT size=3>  我们在监控程序中修改RAM空间: </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; RAM = READ_WRITE 0x2000 TO 0x3FFF; </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然也可以修改到: </FONT></P><P><FONT size=3>  RAM = READ_WRITE 0x1000 TO 0x2FFF。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 建议用户采用我们的定义。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外,我们使用: </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STACKTOP 替代 STACKSIZE&nbsp; </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为STACKSIZE 0x100 在RAM低端留 0x100 空间,而使用 STACKTOP 0x3F00 可以将SP定义到RAM 高端。但是如果采用这种定义的方法,需要在前面定义RAM的时候,定义修改为:RAM=READ_WRITE 0x2000 TO 0x3EFF。 这样,工程连接的时候才不会出现错误。 </FONT></P><P><FONT size=3>  另外还需要对于工程文件中 Start12.c中函数 : <BR>void __interrupt 0 _Startup(void) 中 <BR>#ifdef _HCS12_SERIALMON <BR>....... <BR>....... <BR>#endif </FONT></P><P><FONT size=3>  两句宏命令注释掉,使得其中的对于EEPROM,RAM起始位置控制寄存器初始化语句有效。这样,下载后程序可以运行正常。 </FONT></P><P><FONT size=3>  上述修改在大奖赛的官方网站上已有详细说明。 </FONT></P><P><FONT size=3>  利用监控程序下载用户程序:</FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 监控程序(Monitor)的主要功能是对应用系统硬件及底层软件进行调试,也称为Debug程序,是最基本的调试工具。MC9S12DG128的Flash有128K,RAM有8K,而监控程序源代码占用不到3K FLASH,占用23字节RAM。这对用户程序的空间影响并不大。异步串行口是要用来做与PC通讯服务的,监控程序可以用,应用程序当然也可以使用。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 下载用户程序至片内资源是监控程序的基本功能。清华大学Freescale MCU &amp; DSP应用研发中心开发的基于MC9S12DG128的监控程序代码小于4KB,起始地址为$F000处,它把$FF80的中断向量表移到EF80处,顺序不变。用户可以使用$EF80处的中断向量表,此中断向量表和MC9S12DG128手册上的中断向量表顺序相同,只是从$FF80移到了$EF80。监控程序起来时,如果串口在4秒内没有收到数据,就会检查$EFFE-$EFFF(用户复位向量表)是否为FFFF,如果不是,说明FLASH中有用户程序。程序自动调转到$EFFE-$EFFF所指向的用户程序。如果程序起来4秒内串口接到数据或者$EFFE-$EFFF为$FFFF,则进入DEBUG监控程序。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 该监控程序中F命令下载程序到FLASH中,可识别S1或S2格式的S19文件。按“F”键后,开发板上的单片机等待接收来自串行口的数据文件。然后选择“发送” -→“发送文本文件”,找到要下载的*.S19文件,按“打开(O)”,这样,就把文件下载到FLASH中去了。注意,文件类型应选“所有文件”。待再次出现提示符说明程序已下载完成。</FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 从PC寄存器的地址处,开始运行程序。可以用Ctrl P 命令修改PC指针到拟运行程序的起始地址。如果是汇编的代码从下载地址开始执行即可;但如果是C语言编译生成的代码,需要加29后的地址再执行。这是因为工程是从START12.C开始执行,然后再执行用户的main.c。这是codewarrior内部规定的。用户只需要知道就可以了。用户程序的入口地址是用户在default.prm文件中定义的代码地址加上29。</FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 然后键入“G”命令。这时便可以执行用户程序了。如果用户程序中无法从主循环中跳出,需要停止用户程序的时候按一下复位键即可。 </FONT></P><P><FONT size=3>5&nbsp;&nbsp; 利用“BDM for S12(TBDML)”调试程序 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 当用户在监控程序的帮助下,熟悉了S12单片机的性能和结构,并能初步开始软硬件的设计后,就可以脱离监控程序了,尤其是对于一个完整的项目,就更要直接对硬件进行调试而脱离监控程序。S12系列单片机采用BDM(Background Debug Mode,背景调试模式)调试方式。在BDM模式下主要可以实现3方面的功能: </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 应用程序的下载与在线更新 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp; 单片机内部资源的配置与修复 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 应用程序的动态调试 </FONT></P><P><FONT size=3>  本中心提供面向S12系列单片机的BDM工具,即“BDM for S12(TBDML)”。该工具的硬件由本中心设计,软件采用Daniel Malik设计的TBDML(forums.freescale.com)。本文仅从用户的角度,讲述“BDM for S12(TBDML)”的使用方法以及常见问题的解决办法。详情请登陆本中心网站,并下载最新版本的“BDM for S12(TBDML)”用户手册。 </FONT></P><P><FONT size=3>5.1&nbsp;&nbsp; BDM for S12(TBDML)硬件设置说明: </FONT></P><P><FONT size=3>  BDM for S12(TBDML)设计了跳线开关,允许用户对BDM for S12(TBDML)进行一些特定的设置,以此满足用户的特定要求。打开BDM for S12(TBDML)硬件包装盒,可以看到有3个跳线可以进行设置,分别是J4、J5和J6。 </FONT></P><P><FONT size=3>  BDM引脚定义(跳线J4)</FONT></P><P><FONT size=3>  跳线J4用于选择BDM电缆的信号定义。 </FONT></P><P><FONT size=3>  默认状态为J4闭合。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 当J4闭合(有跳线)时,BDM电缆的信号定义如图1所示; </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 当J4断开(无跳线)时,BDM电缆的信号定义如图2所示。 </FONT></P><P><FONT size=3>  注意:图3是Motorola(Freescale)对HC/S12 BDM的定义,即引脚1为BKGD信号,在这种定义方式,一旦BDM插头被接反,则目标CPU的BKGD引脚会被短接到VDD上,由此将会造成芯片烧毁。因此,BDM for S12(TBDML)建议用户在设计目标S12系统时,采用J4断开,即图2所示的BDM电缆信号定义方式。为兼容过去的BDM定义,BDM for S12(TBDML)设计了图1所示的BDM兼容模式。 </FONT></P><P><FONT size=3>  目标板供电方式选择 ( 跳线J5和J6) </FONT></P><P><FONT size=3>  默认状态是目标板由+5V外部电源供电。跳线J5、J6用于选择目标板的工作电压,以及供电方式。J5、J6跳线具体设置如表1所示。 </FONT></P><P><FONT size=3>表1&nbsp;&nbsp; 跳线J5、J6设置目标板工作电压</FONT><FONT size=3><BR>&nbsp;<TABLE cellSpacing=0 cellPadding=0 border=1><TBODY><TR><TD vAlign=top width=82><P align=center>设置类型</P></TD><TD vAlign=top width=96><P align=center>跳线J5</P></TD><TD vAlign=top width=96><P align=center>跳线J6</P></TD><TD vAlign=top width=140><P align=center>目标板工作电压</P></TD><TD vAlign=top width=168><P align=center>目标板供电方式</P></TD></TR><TR><TD width=82><P align=center>1(默认)</P></TD><TD width=96><P align=center>闭合</P><P align=center>(有跳线)</P></TD><TD width=96><P align=center>断开</P><P align=center>(无跳线)</P></TD><TD width=140><P align=center>+5V</P></TD><TD width=168><P align=center>自供电</P></TD></TR><TR><TD width=82><P align=center>2</P></TD><TD width=96><P align=center>闭合</P><P align=center>(有跳线)</P></TD><TD width=96><P align=center>闭合</P><P align=center>(有跳线)</P></TD><TD width=140><P align=center>+5V</P></TD><TD width=168><P align=center>由BDM供电(不推荐,因为USB供电不足)</P></TD></TR><TR><TD width=82><P align=center>3</P></TD><TD width=96><P align=center>断开</P><P align=center>(无跳线)</P></TD><TD width=96><P align=center>闭合</P><P align=center>(有跳线)</P></TD><TD width=140><P align=center>+3.3V</P></TD><TD width=168><P align=center>自供电</P></TD></TR><TR><TD width=82><P align=center>4</P></TD><TD width=96><P align=center>断开</P><P align=center>(无跳线)</P></TD><TD width=96><P align=center>断开</P><P align=center>(无跳线)</P></TD><TD width=308 colSpan=2><P align=center>无效</P></TD></TR></TBODY></TABLE></FONT></P><P><BR><FONT size=3>5.2 安装和使用BDM for S12(TBDML): </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; BDM for S12(TBDML)在PC上的配套软件是Freescale的CodeWarrio for S12的V4.1以上的版本。用户可调用该软件自带的Hiwave.exe程序,并通过BDM for S12(TBDML)来调试MC9S12各种型号单片机。当然,初次使用BDM for S12(TBDML)时,用户还需要在PC上安装相应的驱动程序和动态链接库。具体的使用方法,请参阅用户手册。 </FONT></P><P><BR><FONT size=3>5.3&nbsp;&nbsp; 使用BDM for S12(TBDML)的常见问题及解决办法。 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 车模大赛启动之处,中心在为广大参赛选手提供培训的同时,按照Freescale的安排,为各参赛队提供了S12开发系统、BDM调试功能、车模等等一系列完整的参赛资源。时隔数月,从反馈信息来看,各参赛队基本上都能熟练地使用BDM for S12(TBDML)。但也有个别队伍遇到了一些问题,中心也及时进行了解答和总结,这里简单汇总了各种问题,以期对参赛队伍有所帮助。 </FONT></P><P><FONT size=3>【常见问题之一】正确安装了BDM for S12(TBDML)的驱动程序和动态链接库后,并用BDM连接了目标单片机后,在Hiwave.exe的【TBDML HCS12】菜单中,没有出现“Flash...”项,无法对目标单片机进行调试。 </FONT></P><P><FONT size=3>解决办法:首先,用户应该确保目标板供电正常,BDM for S12(TBDML)默认的电源工作方式是目标板自供电;如果,还有问题,用户应该打开BDM的包装小盒,查看跳线J4是否已经短接,原因见上文。 </FONT></P><P><FONT size=3>【常见问题之二】驱动程序安装正常,跳线也没有问题,目标板也供电了,但BDM还是不工作。 </FONT></P><P><FONT size=3>解决办法:出现这一问题,最大的可能是,用户的CodeWarrio版本不对,没有利用CodeWarrio V4.1以上的版本进行调试。安装高版本的CodeWarrio即可解决问题。 </FONT></P><P><FONT size=3>【常见问题之三】BDM调试目标板基本正常,能够下载程序、擦除FLASH、设断点调试,但是,在某次使用中FLASH突然被“锁死”,之后目标板无法继续使用。 </FONT></P><P><FONT size=3>解决办法:Freescale 公司的HCS12 系列单片机具有片内FLASH 的加密功能,对于加密或保护后的FLASH,用户是无法通过BDM 调试工具对其FLASH 进行诸如程序擦除、读取等操作。同时,如果用户在利用BDM 调试单片机时操作不当,同样会使单片机出现FLASH 无法读取、擦除和下载等问题。我们的监控程序在$F000 到$$FFFF,这一段加了保护,但并没有加密。即使对加了密的S12,也可以使用我们生产地串行接口地BDM 工具方便的解锁和擦除。在2005 年第4 期《电子产品世界》杂志中,我中心曾经撰文讲述了HCS12 单片机Flash 保护和加解密的原理和注意事项。在决定擦除保护了的程序时,请想好在出现单片机被锁定的情况下有没有能力解锁。对于FLASH没有进入“保护模式”的单片机,如果利用BDM for S12 (TBDML)调试单片机,当用户点击【TBDML HCS12】菜单下的【Flash…】命令时,会出现如图12所示的正常情况。从图中可以看出,当前目标板的单片机的FLASH_C000存储区域已下载有程序,状态为“Programmed”;其余模块为空,状态为“Blank”。因此,可以继续对该单片机的FLASH进行读取、擦除Erase和下载Load等操作。但是,在出现上述FLASH加密问题后,HCS12系列单片机就进入了“FLASH保护模式”,即Secure Mode。这时,如果利用BDM for S12(TBDML)调试单片机,当用户点击【TBDML HCS12】菜单下的【Flash…】命令时,图12中部分FLASH区域的状态就会显示为“Skipped”。此时,用户便无法再对FLASH进行正常操作。因此,需要解除FLASH的“保护模式”(Secure Mode),执行Unsecure的操作。BDM for S12(TBDML)提供了Unsecure的功能,具体的操作过程较为复杂,请参阅用户手册。 </FONT></P><P><FONT size=3>6&nbsp;&nbsp;&nbsp;&nbsp; 结语 </FONT></P><P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 上面提到的问题是在应用过程中发现的比较普遍的问题。在设计之前最好能完整地阅读帮助文档以及芯片的数据手册,了解各个工作状态,很多可能出现的问题其实在数据手册里已有明确的说明。这样做在程序设计的前期可能会影响一些进度,但到后期调试阶段会带来极大的方便。至于工具使用上的问题Freescale单片机/DSP应用开发研究中心会及时在大赛的官方网站上做出相应的说明,请大家留意。 </FONT></P><P><FONT size=3><STRONG>参考文献</STRONG> <BR>1、&nbsp;&nbsp;&nbsp;&nbsp; 邵贝贝,单片机嵌入式应用的在线开发方法,北京:清华大学出版社,2004 <BR>2、&nbsp;&nbsp;&nbsp;&nbsp; MC9S12DT128,Device User Guide,Freescale semiconductor,2005.10 </FONT></P><P><FONT size=3>&nbsp;<BR></FONT></P>

1

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
威望
377
贡献
66
兑换币
0
注册时间
2010-3-22
在线时间
13 小时
2#
发表于 2010-3-22 13:17:21 | 只看该作者
可以
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
130
威望
172
贡献
28
兑换币
0
注册时间
2010-4-9
在线时间
0 小时
3#
发表于 2010-4-9 11:01:05 | 只看该作者
很好
回复 支持 反对

使用道具 举报

6

主题

713

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1498
威望
991
贡献
467
兑换币
30
注册时间
2010-4-13
在线时间
20 小时
4#
发表于 2010-5-4 13:19:09 | 只看该作者
很有用
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
威望
239
贡献
20
兑换币
0
注册时间
2010-3-6
在线时间
6 小时
5#
发表于 2010-5-4 19:39:25 | 只看该作者
很好
回复 支持 反对

使用道具 举报

6

主题

118

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1735
威望
357
贡献
1292
兑换币
9
注册时间
2010-12-9
在线时间
43 小时
6#
发表于 2011-1-17 11:06:02 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
威望
187
贡献
48
兑换币
0
注册时间
2011-3-9
在线时间
4 小时
7#
发表于 2011-3-15 19:28:57 | 只看该作者
不错
回复 支持 反对

使用道具 举报

8

主题

187

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3683

论坛元老奖章优秀会员奖章资源大师奖章活跃会员奖章

威望
619
贡献
2776
兑换币
18
注册时间
2010-11-20
在线时间
144 小时
8#
发表于 2011-3-15 20:00:37 | 只看该作者
不错~~
回复 支持 反对

使用道具 举报

8

主题

187

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3683

论坛元老奖章优秀会员奖章资源大师奖章活跃会员奖章

威望
619
贡献
2776
兑换币
18
注册时间
2010-11-20
在线时间
144 小时
9#
发表于 2011-3-15 20:00:44 | 只看该作者
不错~~
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
威望
206
贡献
33
兑换币
6
注册时间
2011-7-18
在线时间
2 小时
10#
发表于 2011-7-18 11:26:55 | 只看该作者
不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-28 08:40 , Processed in 0.066606 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表