半导体装置的制作方法

文档序号:11176994阅读:842来源:国知局
半导体装置的制造方法

相关申请的交叉引用

包括说明书、附图和摘要的2016年3月23日提交的日本专利申请no.2016-058614的公开的全部内容通过引用并入本文中。

本公开涉及半导体装置,以及适用于例如其中内置了计时器的类型的半导体装置。



背景技术:

微控制器被结合进了每件设备中,诸如家用电器、视听设备、蜂窝电话、汽车、工业机械等。微控制器是一种通过根据存储在存储器中的程序执行处理来控制每件设备的操作的半导体装置。要求包括要被结合进上面提到的(一件或多件)设备中的微控制器的组件依赖于其应用而具有可靠性。因此,除了通过要被控制的诊断传感器、致动器等来检测上述的传感器、致动器等中出现的故障以外,还要求微控制器检测微控制器自身中出现的故障。

例如,在美国未经审查的专利申请公开no.2013/20978中公开了上面提到的半导体装置的一个示例。



技术实现要素:

本公开的目的是提供用于有效地诊断半导体装置中内置的计时器的故障的技术。

本公开的其它主题和新颖特性将通过本说明书的描述和附图而变得清楚。

如下将对本公开的代表性示例进行简单描述。

即,根据本公开的一个实施例,提供有一种半导体装置,该半导体装置包括:第一计时器,包括第一计数器并且执行与布置在半导体装置外部的外部设备的时间的时间同步;第二计时器,包括第二计数器;以及控制器,包括cpu,以及将第一计数器的计数值与第二计数器的计数值进行比较并且基于比较结果检测第二计时器的失灵(和/或故障等)。

根据本公开的一个实施例的半导体装置,可以有效地诊断内置计时器。

附图说明

图1是例示根据本公开的第一实施例的微控制器的一个示例的框视图。

图2是例示图1中所例示的eptpc的一个示例的框图。

图3a是例示时间同步的一个示例的图。

图3b是例示eptpc计数器与mtu计数器之间的关系的一个示例的时序图。

图4是例示在诊断计时器的计数器的故障时执行的稳定处理操作的一个示例的流程图。

图5a是例示在诊断计时器的计数器的故障时执行的时间匹配事件中断处理操作的一个示例的流程图。

图5b是例示在诊断计时器的计数器的故障时执行的溢出中断处理操作的一个示例的流程图。

图6是例示根据第二实施例的面向功能安全的工业电动机控制系统的一个示例的框图。

图7是例示用于多个工业电动机的工业电动机控制系统的配置的一个示例的框图。

图8是例示面向功能安全的工业电动机控制系统中的逻辑组成的一个示例的框图。

图9是例示在诊断关于计时器生成pwm波形信号的情形的计数器的故障时执行的稳定处理操作的一个示例的流程图。

图10a是例示在诊断关于计时器生成pwm波形信号的情形的计数器的故障时执行的ptp命令接收中断处理操作的一个示例的流程图。

图10b是例示在诊断关于计时器生成pwm波形信号的情形的计数器的故障时执行的比较匹配中断处理操作的一个示例的流程图。

图11是例示在计时器生成pwm波形信号的情形下的计数器的操作的一个示例的时序图。

图12是例示根据第三实施例的工业电动机系统的一个示例的框图。

图13是例示在pwm波形比较中执行的示意性操作的一个示例的时序图。

图14是例示在pwm波形比较中执行的稳定处理操作的一个示例的流程图。

图15a是例示在pwm波形比较中执行的上升沿中断处理操作的一个示例的流程图。

图15b是例示在pwm波形比较中执行的比较匹配中断处理操作的一个示例的流程图。

图16是例示根据第四实施例的32位计数器的操作的一个示例的时序图。

具体实施方式

在下文中,将参考附图对本公开的实施例和实际示例进行描述。然而,在下列描述中,存在为相同的构成元件指定相同的附图标记并且省略其重复描述的情况。

在要被装载在面向功能安全的设备(诸如工业设备、汽车相关产品等)上的微控制器中,除了检测cpu、内置存储器等的故障以外,检测外围模块(诸如多功能计时器、中断控制器、ad转换器等)中发生的故障也至关重要。特别地,多功能计时器的计数器的电路规模是大的,因此在多功能计时器中容易发生失灵。另外,多功能计时器的设计是复杂的,以便应对溢出、跳跃时间等。在故障中存在永久不可能恢复的硬错误以及暂时出现并且可以恢复的软错误。例如,装载在微控制器上的mtu(多功能计时器脉冲单元)的软错误发生概率比其它外围模块高,以及因此对多功能计时器的有效故障诊断是亟待解决的问题。

本申请的发明人和其他人已经关于内置计时器的诊断对下列方法进行了检查。

(1)使用验证程序的诊断

通过实际应用在设计内置计时器时所使用的验证程序来确认诸如开始、递增计数、停止等的基本操作。

(2)使用另一个内置计时器的诊断

为了验证操作与要验证的内置计时器不同的另一个内置计时器并且将这些内置计时器中所包括的计数器的计数值彼此比较以便得到计数器差。

然而,在方法(1)中,只可以确认逻辑开/关操作和单个操作,而难以确认例如将计数器等的定量值的检测、pwm(脉冲宽度调制)波形信号的生成等组合在一起的组合操作。在方法(2)中,当充当要被验证的内置计时器和另一个内置计时器的计数操作的基础的振荡器在这些内置计时器之间共用时,在内置计时器两者都发生失灵时可能不会检测到故障的可能性是高的。另外,在方法(1)和(2)中,要求通过暂时停止执行用户程序以进行诊断,因此降低了用户程序的处理效率。

在一个实施例中,同步以太网控制器以特定的时间间隔来操作和停止多功能计时器的计数器,并且通过将多功能计时器的计数器的计数值与其时间已经根据同步以太网被调节的计数器的计数值进行比较来诊断多功能计时器的故障。

根据一个实施例,由于使用了外部时间,因此提高了多功能计时器的故障检测率。另外,可以与时间同步序列的执行并行地执行多功能计时器故障诊断以及消除用户应用程序的执行的暂时停止。

[第一实施例]

将参照图1对根据第一实施例的微控制器进行描述。图1是例示根据第一实施例的微控制器的配置的一个示例的框图。根据第一实施例的微控制器10包括只读存储器(rom)11、随机存取存储器(ram)12、中央处理单元(cpu)13等。另外,微控制器10还包括ieee1588控制器(以下称为eptpc)14、多功能计时器(mtu)15、icu(中断控制器单元)16、elc(事件链路控制器)17、i/o端口18等。微控制器10是由一个半导体芯片(半导体衬底)形成的半导体装置。rom11和cpu13也称作控制器。附带地,ram12和icu16也可以包括在控制器中。将基于ieee1588标准(参见ieee1588-2008ver2.0(ieee1588同步以太网标准))的时间同步协议(以下称为ptp(精确时间协议))用于mtu15的故障诊断。

rom11将用于检测mtu15的故障的程序存储在自身中。rom11由非易失性存储器(诸如,例如,闪存存储器等)构成。ram12将用于执行程序的工作数据存储在自身中。ram11由易失性存储器(诸如,例如,sram等)构成。除了根据已经从rom12读出的程序执行用于所涉及的设备的控制操作、通信处理等的用户应用的处理以外,cpu13还执行用于检测mtu15的故障的处理(故障判定)和用于恢复mtu15的处理。eptpc14通过使用以太网线路以及根据ptp来执行与外部设备(时间分发源)2的时间的时间同步。mtu15是多功能计时器,该多功能计时器包括多个通道并且其中每个通道都具有多个功能,诸如,除了通过对值进行递增计数以及对值进行递减计数所执行的计数操作以外,还有生成和输出pwm波形信号的功能、输入捕获功能、通过使用pwm波形生成和输出功能以及输入捕获功能来控制工业电动机的功能等。icu16向cpu13通知来自eptpc14和mtu15的中断请求。elc17通过耦合事件信号来减小由软件干预引起的延迟,使得每当eptpc14的计数器达到特定的时间时就开始操作mtu15。

接着,将通过使用图2对eptpc14进行描述。图2是例示图1中的eptpc14以及与eptpc14有关的硬件的配置的一个示例的框图。

eptpc14包括第0通道ptp协议处理单元(ch0)141、第一通道ptp协议处理单元(ch1)142、分组中继单元143、时钟(时间)校正单元144等。第0通道ptp协议处理单元(ch0)141和第一通道ptp协议处理单元(ch1)142执行协议处理,诸如ptp帧传输-接收处理、命令序列处理等。分组中继单元143对已经由第0通道ptp协议处理单元(ch0)141和第一通道ptp协议处理单元(ch1)142处理的以太网帧(以下称为帧)执行中继和校正处理。时钟(时间)校正单元144包括充当eptpc14的计数器的本地时钟计数器1441,并且具有校正时间以便被调节至时间分发源的时间的功能、在特定时间经由icu16向cpu13通知中断的接收的功能。

通常,eptpc14通过将第0通道etherc(以太网控制器)(ch0)21和第一通道etherc(ch1)22、第0通道edmac(用于以太网控制器的dma控制器)(ch0)23和第一通道edmac(ch1)24以及ptpedmac25组合在一起来使用它们。第0通道etherc(ch0)21和第一通道etherc(ch1)22执行与mac层相对应的处理。第0通道edmac(ch0)23和第一通道edmac(ch1)24每个都适于有效地处理和管理标准帧并且充当与cpu13的接口。ptpedmac25处理ptp的帧。eptpc14经由执行数字信号到模拟信号的转换的物理层(phy)(未例示)和以太网连接器(通常,rj-45)7相对于以太网线缆5输入/输出标准/ptp帧。另外,eptpc14经由elc17耦合至mtu15和i/o端口18并且具有在已经根据ptp与外部设备的时间同步的时间处开始对mtu15的计时器计数器的值进行计数的功能以及稍后描述的脉冲输出功能(脉冲输出计时器功能)。尽管,在图2中,例示了将第0通道ptp协议处理单元(ch0)141和第一通道ptp协议处理单元(ch1)142、第0通道etherc(ch0)21和第一通道etherc(ch1)22以及第0通道edmac(ch0)23和第一通道edmac(ch1)24装载在微控制器10上的双通道配置,但是微控制器10可以具有单通道配置。

接着,将使用图3a和图3b对用于故障诊断的mtu15的配置的一个示例进行描述。图3a是例示在面向功能安全的设备与作为时间分发源的外部设备之间的时间同步的一个示例的图形。图3b是例示eptpc计数器与mtu计数器之间的关系的一个示例的时序图。

图3a和图3b中用于故障诊断的配置涉及根据ptp执行与外部设备2的时间的时间同步并且通过mtu15对计数器的值进行计数的情况,该外部设备2是在装载了微控制器10的面向功能安全的设备1上的时间分发源。

(11)面向功能安全的设备1的微控制器10基于ptp将故障检测的时间间隔设定为时间匹配事件的间隔。

(12)微控制器10以用于根据ptp的固定时间调节发出的命令的间隔(此处,将间隔设定为一秒)开始与作为时间分发源的外部设备2的时间的时间同步。用于基于ptp的时间调节的命令为sync、follow_up、delay_req、delay_resp等。

(13)微控制器10在eptpc14的本地时钟计数器1441的时间t(1)处开始mtu的计数器的递增计数。

(14)每当在(11)中设定的基于ptp的时间匹配事件发生时(t(2)、t(4)、……t(n)),微控制器10就将已经与外部设备同步的eptpc计数器的增益程度与mtu计数器的增益程度进行比较。

(15)当计数器差的绝对值超过在上面的(14)中已经预先限定的阈值的范围时,微控制器10将其检测为计数器的故障。另外,当绝对值在阈值的范围内时,微控制器10继续在上面的(14)中的每当时间同步时对计数器的增益程度进行比较。

图3b中的虚线指示eptpc计数器与mtu计数器之间的计数值没有差(计数器差=0)的情况,以及实线指示mtu计数器领先于eptpc计数器(存在计数器差)的情况。在图3b中的示例中,尽管时间t(2)处的计数器差(d(2))、时间t(4)处的计数器差(d(4))……等在阈值范围内,但是时间t(n)处的计数器差(d(n))在阈值范围之外以及检测到故障。

接着,将使用图4、图5a和图5b对用于计时器计数器的故障诊断的软件操作流程进行描述。图4是例示在诊断计时器计数器的故障时执行的稳定处理操作的一个示例的流程图。图5a是例示在诊断计时器计数器的故障时执行的时间匹配事件中断处理操作的一个示例的流程图。图5b是例示在诊断计时器计数器的故障时执行的溢出中断处理操作的一个示例的流程图。此处,使用从eptpc14生成的时间匹配事件中断和从mtu15生成的溢出中断作为中断(即,中断信号)。当eptpc14的本地时钟计数器1441的值已经匹配了特定设定值时,从eptpc14生成时间匹配事件中断并且与中断的生成同时地开始对mtu15的计时器计数器的值的计数。当计时器计数器(例如,16位计数器)的值已经溢出时,从mtu15生成溢出中断。

<稳定处理>

步骤s11:在已经开始用户应用之后,cpu13开始执行用于计时器故障诊断的软件。随后,cpu13执行对mtu15的预定标器(提供至mtu15的时钟信号与mtu15的计时器计数器的输出的频率比)、计数操作模式(自由运行模式、比较匹配模式、pwm波形输出模式等)和mtu计数器的中断、初始化(mtu_count←0)等的设定。

步骤s12:cpu13执行eptpc14的同步模式、时间匹配事件、时间匹配事件发生时间等的设置。

步骤13:cpu13设定elc17以便将eptpc14的时间匹配事件耦合至mtu15的启动因素。

步骤s14:cpu13设定icu16以便向cpu13通知从mtu15生成的溢出中断和从eptpc14生成的时间匹配事件中断。另外,cpu13对时间匹配事件标志进行初始化(ptp_flag←假)。

步骤s15:cpu13将用于故障检测判定的mtu计数器(mtu_count)与eptpc计数器(ptp_count)之间的计数值的差的绝对值的上限值设定为阈值。通过将由于振荡器的存在将出现的mtu15的计时器计数器的误差、由中断处理引起的延迟、ptp的协议操作上的误差等考虑在内来设定阈值(thresh)。将通过稍后描述的公式(2)表明阈值的一个示例。此处,mtu计数器(mtu_count)和eptpc计数器(ptp_count)是用于故障检测中的判定的软件元件而不是硬件元件,即,不是硬件的mtu15的计时器计数器和eptpc14的本地时钟计数器1441。

步骤s16:cpu13通过使用eptpc14根据ptp开始与作为时间分发源的外部设备2的时间的时间同步。此处,根据ptp从一件设备或者多件设备中选择具有最准确的时钟信号的一件设备作为外部设备2(时间分发源)。

步骤s17:cpu13确认时间匹配事件是否发生。使用时间匹配事件标志(ptp_flag)判定时间匹配事件是否发生。在是的情况下(时间匹配事件已经发生)(ptp_flag=真),cpu13进行到步骤s18中的处理,以及在否的情况下,cpu13进行到步骤s1b中的处理。附带地,在用于稍后描述的中断处理的步骤s28中设定时间匹配事件标志(ptp_flag)。

步骤s18:cpu13确认计数器差的绝对值是否超过阈值。计数器差是通过从mtu计数器(mtu_count)减去已经以mtu15的操作频率(fmtu)与eptpc14的操作频率(fptp)的比率加权的eptpc计数器(ptp_count)得到的差。

计数器差=|mtu_count-(fmtu/fptp)ptp_count|

当计数器差超过阈值(是)时,cpu13将其检测为故障并且以错误终止处理。当计数器差没有超过阈值(否)时,cpu13进行到步骤s19中的处理。

步骤s19:cpu13清空时间匹配事件标志(ptp_flag←假)。

步骤s1a:cpu13清空mtu计数器(mtu_count←0)。

步骤s1b:cpu13判定用户应用是否终止。当用户应用终止(是)时,cpu13终止处理。当用户应用未终止(否)时,cpu13回到步骤s17以及继续执行处理。

<中断处理>

以下,将对时间匹配事件中断处理进行描述。

步骤s21:当已经从eptpc14生成时间匹配事件中断时(t(0)、t(1)、t(3)、t(4)、……t(n-1)和t(n)),cpu13通过将指示时间匹配事件中断处理发生频率的中断计数器的值增加一(n←n+1)来执行更新。

步骤s22:cpu13判定中断是否为奇数中断(t(1)、t(3)、……t(2n-1))。该判定通过参照中断计数器(n)来进行。在奇数中断(是)的情况下,cpu13进行到步骤s23中的处理。在偶数中断(否)的情况下,cpu13进行到步骤s25中的处理。

步骤s23:mtu15的计时器计数器开始递增计数操作。此处,尽管通过由elc17耦合事件信号来开始mtu15的计时器计数器的递增计数操作并且因此不要求通过cpu13执行软件处理,但是为了便于说明操作将对软件处理进行描述。附带地,当不使用elc17时,要求通过cpu13执行软件处理。

步骤s24:cpu13读出eptpc14的本地时钟计数器1441的计数值(lccv)并且将所读出的计数值设定为eptpc计数器的起始值(ptp_start←lccv)。随后,cpu13进行到步骤s29中的处理。

步骤s25:cpu13终止mtu15的计时器计数器的递增计数操作。

步骤s26:cpu13读出mtu15的计时器计数器的计数值(tcnt)并且使用所读出的计数值更新mtu计数器的值。所更新的值是通过将mtu15的计时器计数器的计数值与mtu计数器的当前值相加而得到的值(mtu_count←mtu_count+tcnt)。在某些情况下,用在步骤s31中从mtu15生成的溢出中断来更新mtu计数器的值。

步骤s27:cpu13读出eptpc14的本地时钟计数器1441的计数值并且通过使用所读出的计数值来更新eptpc计数器的值。所更新的值是通过从eptpc14的本地时钟计数器1441的计数值减去步骤s24中设定的eptpc计数器的起始值而得到的值(ptp_count←lccv-ptp_start)。

步骤s28:cpu13设定时间匹配事件标志(ptp_flag←真)。

步骤s29:cpu13将要生成下一个时间匹配事件的时间设定到eptpc14。附带地,该时间可以是在时间间隔方面与前一时间相同的时间,以及用于生成下一个时间匹配事件的时间的时间间隔可以相对于前一时间的时间间隔有所改变。

接着,以下将对溢出中断进行描述。

步骤s31:当已经从mtu15生成溢出中断时,cpu13将mtu计数器的值更新为通过将溢出值(在16位计数器的情况下,216=65,536)与mtu计数器的当前值相加而得到的值(mtu_count←mtu_count+溢出值)。

<阈值的一个示例>

将对阈值(thresh)的一个示例进行描述。当阈值被分成由因为振荡器的存在而导致的mtu15的计时器计数器的误差引起的“threshosc”、由ptp的协议操作上的误差引起的“threshptp”、由中断处理引起的“threshint”以及由将依赖于cpu13的流水线和总线的状态而出现的处理中的波动引起的“threshflu”时,确立公式(1)。

thresh=threshosc+threshptp+threshint+threshflu……(1)

此处,忽略诸如温度特性等的其它因素的贡献,因为这充分小于上面提到的值的贡献。

当mtu15的操作频率为fmtu,为mtu15提供时钟信号的振荡器的精度为xosc并且时间匹配事件间隔为tp1时,通过mtu计数器的计数数值的公式(1-1)表示由因为振荡器的存在而导致的mtu15的计时器计数器的误差引起的“threshosc”。

threshosc=fmtu*xosc*tp1……(1-1)

例如,当fcpu=120mhz,通过预定标器将mtu15的频率除以16,fmtu=fcpu/16=7.5mhz,xosc=100ppm,以及tp1=100ms时,得到threshosc=75个周期。

ptp的协议操作上的误差包括与mtu15的误差类似的向eptpc14提供时钟信号的振荡器的误差、用于时间调节的命令间隔、将取决于以太网上的总线状态而出现的命令延迟等。当已经将eptpc14并入微控制器10中时,通过由硬件元件执行协议操作并且由时钟(时间)校正单元144校正时间以便将时间调节至作为时间分发源的外部设备2的时间,将时间误差降低至1μs至100ns变为可能。在这种情况下,“threshptp”相当于mtu计数器的计数数值中的10个周期到1个周期,并且这意味着threshptp<threshosc。

当cpu13的操作频率为fcpu,中断处理出现频率为xint并且中断处理的周期数为nint时,由mtu计数器的计数数值的公式(1-2)表示由中断处理引起的“threshint”。

threshint=(fmtu/fcpu)*(xint*nint)……(1-2)

此处,使得时间匹配事件中断处理与溢出中断处理在cpu13的操作频率处的周期数近似相同。

例如,假设fcpu=120mhz并且fmtu=fcpu/16=7.5mhz。在中断处理中,通过另外加上中断响应时间与恢复时间、将中断响应时间设定为10个周期、将中断恢复时间设定为10个周期并且将中断处理设定为平均80个周期而得到nint=100个周期。16位计数器的溢出每8.7ms(=65,536/7.5*106s)发生一次。因此,当执行了11次(=100/8.7)溢出中断处理时,通过加上已经执行了两次的时间匹配事件中断处理而确立xint=13次以及得到threshint=81个周期。

“threshflu”是微控制器10的cpu13执行的处理中的波动的上限值并且小于“threshint”,以及因此threshflu<threshint。

“threshosc”是误差的上限值,而“threshint”是中断处理的平均值。尽管“threshint”的贡献大于“threshosc”的贡献,但是将其应用为故障检测中的最差值。由上述可知,公式(1)近似为公式(2)。

thresh=threshosc+threshptp+threshint+threshflu<threshosc+threshosc+threshint+threshint=(fmtu/fcpu)*(2*fcpu*xosc*tp1+2*xint*nint)……(2)

当将上面提到的数值应用于公式(2)时,得到thresh=312个周期。

在第一实施例中,根据eptpc14(第一计时器)的本地时钟计数器(第一计数器)1441的值对mtu15(第二计时器)的计时器计数器(第二计数器)的故障进行诊断,其中eptpc14的本地时钟计数器1441的时间已经被调节至作为时间分发源的外部设备2的时间。

根据第一实施例,由于可以根据ptp将多个外部时间用于诊断故障,因此不存在由故障诊断中共用的振荡器的异常所引起的失灵并且可以基于高度准确的时间诊断计时器的故障。另外,由于可以与基于ptp的时间同步操作的执行并行地执行计时器的故障诊断,因此,相较于通过停止执行用户程序而执行计时器的故障诊断的情况,可以更为抑制用户程序处理效率的降低。

[第二实施例]

将使用图6对将微控制器应用于面向功能安全的工业设备的情况进行描述。图6是例示根据第二实施例的工业电动机控制系统的配置的一个示例的框图。

微控制器10a安装在面向功能安全的设备1a上、控制面向功能安全的设备1a的操作、控制工业电动机3的操作以及与在网络上与以太网线缆5耦合的其它件工业设备4(诸如机器人、ac伺服电动机、机械工具等)进行通信。附带地,在功能安全标准(iec61508第7部分)等中,要求根据符合度水平相互监控以及存在在面向功能安全的设备1a上安装两个微控制器(微控制器10a和微控制器20a)的情况。

要求由存储器管理单元(mmu)、存储器保护单元(mpu)等通过将布置了rom11和ram12上的安全数据的区域与布置非安全数据的区域分开以应付功能安全来保护该区域。因此,除根据第一实施例的微控制器10的配置以外,还将未例示的存储器管理单元(mmu)和/或存储器保护单元(mpu)装载在微控制器10a上。微控制器10a和工业电动机3经由电动机驱动器6耦合在一起。随后,通过根据由mtu15生成并且从i/o端口18输出的pwm波形信号控制电动机驱动器6来控制工业电动机3。

将使用图7对将图6中面向功能安全的设备并入用于多个工业电动机的工业电动机控制系统中的情况进行描述。图7是例示在用于多个工业电动机的工业电动机控制系统的配置的一个示例的框图。作为多件面向功能安全的设备的从设备b1(1a1)、从设备b2(1a2)、……以及从设备bn-1(1an-1)根据ptp与作为时间分发源的主设备a(2a)时间同步以便在特定的时间处a同时开始n(n=2、3、……)个工业电动机3a、3a1、3a2、……、3an-1的操作并且同时诊断每件面向功能安全的设备上装载的mtu15。

图8是在将第二实施例应用于面向功能安全的设备时的逻辑组成的一个示例的图。尽管在第一实施例中的图2中例示了与eptpc相关的硬件具有双通道配置的情况,但是此处,将对单通道配置进行描述。

通信应用和控制应用处理安全数据和非安全数据,并且将要布置在硬件中的处理细节、总线和存储器相互分开。因此,准备并且使用安全数据所特有的一个软件和非安全数据所特有的另一个软件。另外,具有时间同步功能和计时器诊断功能的应用(以下称为同步计时器诊断应用)处理安全数据,并且处理非安全数据的时间同步应用也装载在系统上。

通信应用是用于工业以太网的通信应用,以及以太网/ip、profinet、ethercat等可用作代表性的工业以太网标准。控制应用适于控制已经被并入ac伺服电动机、机器人等中的工业电动机的操作。tcp和udp/ip各自执行逻辑通信耦合管理、基于tcp或者基于udp的分组传输-接收处理、耦合设备信息的管理等。另外,由于在ptp中仅处理基于udp的分组或者帧,因此可以使用仅安装了udp/ip的中间件和/或可以不安装中间件。以太网驱动器通过使用etherc21和edmac23执行帧传输-接收处理、以太网线缆5的耦合和检测等。erptc驱动器通过使用eptpc14执行基于ptp的时间同步。mtu驱动器通过使用mtu15基于mtu15的定时信号生成pwm波形信号,该pwm波形信号是用于工业电动机3的控制信号。随后,mtu驱动器经由i/o端口18输出pwm波形信号。由于在第一实施例中已经对etherc21和edmac23进行了描述,因此此处省略其描述。

将使用图9、图10a、图10b和图11对在根据第二实施例的时间同步计时器诊断应用中将pwm操作模式1用作mtu15的操作模式时执行的操作流程进行描述。图9是例示在诊断关于计时器生成pwm波形信号的情况的计数器的故障时执行的稳定处理操作的一个示例的流程图。图10a是例示在诊断关于计时器生成pwm波形信号的情况的计数器的故障时执行的ptp命令接收中断处理操作的一个示例的流程图。图10b是例示在诊断关于计时器生成pwm波形信号的情况的计数器的故障时执行的比较匹配中断处理操作的一个示例的流程图。图11是例示在计时器生成pwm波形信号时mtu的计时器计数器的操作的一个示例的时序图。此处,使用从eptpc14生成的ptp命令接收中断和从mtu15生成的比较匹配中断作为中断。当eptpc14已经从时间分发源接收了基于ptp的同步命令并且已经更新了计数器与时间分发源之间的时间差(offsetfrommaster)时,生成ptp命令接收中断。当在如图11所例示的pwm波形信号的周期处清空了包括在mtu15中并且生成pwm波形信号的计时器计数器时,从mtu15生成比较匹配中断。

<稳定处理>

步骤s41:在启动用户应用之后,cpu13启动时间同步计时器诊断应用。随后,cpu13执行mtu15的预定标器的设定、计数操作模式(pwm操作模式1)的设定、pwm波形信号的周期的设定、中断的设定、mtu计数器的初始化(mtu_count←0)等。

步骤s42:cpu13执行eptpc14的同步模式的设定、ptp命令接收中断的设定等。

步骤s43:cpu13设定icu6以便向cpu13通知从mtu15接收比较匹配中断以及从eptpc14接收ptp命令接收中断。另外,cpu13对ptp命令接收标志进行初始化(ptp_flag←假)。

步骤s44:cpu13将用于故障检测判定的mtu计数器(mtu_count)与eptpc计数器(ptp_count)之间的值的差的绝对值的上限值设定为阈值。通过将由振荡器的存在引起的mtu15的计时器计数器的误差、由中断处理引起的延迟、ptp的协议操作上的误差等考虑在内来设定阈值(thresh)。将通过稍后描述的公式(4)指示阈值的一个示例。

步骤s45:cpu13通过使用eptpc14以及根据ptp开始与作为时间分发源的外部设备2的时间的时间同步。此处,根据ptp从一件或多件设备中选择具有最准确的时钟信号的一件设备作为时间分发源。

步骤s46:cpu13读出eptpc14的本地时钟计数器1441的计数值并且将所读出的计数值设定为eptpc计数器的起始值(ptp_start←lccv)。

步骤s47:cpu13指示开始mtu15的pwm波形信号的输出。另外,如在第一实施例中的步骤s23中描述的,还可以通过由elc17耦合事件信号来开始mtu15的pwm波形信号的输出。此处,将使用图11对mtu15的操作进行描述。mtu15的计时器计数器对值进行递增计数并且在当计数值(tcnt)达到tgrd时,将来自i/o端口18的输出从低反相至高。计时器计数器继续对值进行递增计数,并且在当计数值达到tgrc时,将来自i/o端口18的输出从高反相至低并且向cpu13通知比较匹配中断的生成。计时器计数器通过重复地执行上面提到的操作输出来自i/o端口18的pwm波形信号。在图11中,例示了周期400μs、脉冲宽度200μs以及占空比50%的pwm波形信号的一个示例。

步骤s48:cpu13确认ptp命令接收是否发生。用ptp命令接收标志(ptp_flag)来判定ptp命令接收是否发生。在ptp命令接收发生(是)的情况下,cpu13进行到步骤s49中的处理。在ptp命令接收没有发生(否)的情况下,cpu13进行到步骤s4c中的处理。

步骤s49:cpu13确认计数器差的绝对值是否超过阈值。计数器差是通过从mtu计数器(mtu_count)减去已经以mtu15的操作频率(fmtu)与eptpc14的操作频率(fptp)的比率加权的eptpc计数器(ptp_count)得到的差。

计数器差=|mtu_count-(fmtu/fptp)ptp_count|

当计数器差超过阈值(是)时,cpu13将其检测为故障并且以错误终止处理。当计数器差没有超过阈值(否)时,cpu13进行到步骤s4a中的处理。

步骤s4a:cpu13清空ptp命令接收标志(ptp_flag←假)。

步骤s4b:cpu13清空mtu计数器(mtu_count←0)。

步骤s4c:cpu13判定用户应用是否终止。当用户应用终止(是)时,cpu13终止处理。当用户应用未终止(否)时,cpu13回到步骤s48以及继续执行处理。

<中断处理>

以下,将对ptp命令接收中断进行描述。

步骤s51:当已经从eptpc14生成了ptp命令接收中断时,cpu13读出eptpc14的本地时钟计数器1441的计数值并且使用所读出的计数值更新eptpc计数器的值。所更新的值是通过从eptpc14的本地时钟计数器1441的计数值(lccv)减去已经在先前的ptp命令接收中断处理或者稳定处理中设定的ptp计数器的起始值而得到的值(ptp_count←lccv-ptp_start)。

步骤s52:cpu13读出mtu15的计时器计数器的计数值(tcnt)并且使用所读出的计数值更新mtu计数器的值。所更新的值是通过将mtu15的计时器计数器的计数值(tcnt)与mtu计数器的当前值相加得到的值(mtu_count←mtu_count+tcnt)。

步骤s53:cpu13读出eptpc14的本地时钟计数器1441的计数值并且将所读出的计数值设定为eptpc计数器的起始值(ptp_start←lccv)。

步骤s54:cpu13设定ptp命令接收标志(ptp_flag←真)。

接着,以下将对比较匹配中断进行描述。

步骤s61:当已经从mtu15生成了比较匹配中断时,cpu13将mtu计数器的值更新至通过将与pwm波形信号的周期相对应的计数值(pwmp)与mtu计数器的当前值相加得到的值(mtu_count←mtu_count+pwmp)。

<阈值的一个示例>

将对阈值(thresh)的一个示例进行描述。与第一实施例类似,当阈值被分成由因为振荡器的存在而导致的mtu15的计时器计数器的误差引起的“threshosc”、由ptp的协议操作上的误差引起的“threshptp”、由中断处理引起的“threshint”以及由将依赖于cpu13的流水线和总线的状态而出现的处理中的波动引起的“threshflu”时,得到公式(3)。

thresh=threshosc+threshptp+threshint+threshflu……(3)

当cpu13的操作频率为fcpu,mtu15的操作频率为fmtu=fcpu/16,向mtu15提供时钟信号的振荡器的精度为xosc并且ptp命令接收间隔为tp2时,由mtu计数器的计数数值的公式(3-1)表示由因为振荡器的存在而导致的mtu15的计时器计数器的误差引起的“threshosc”。

threshosc=fmtu*xosc*tp2……(3-1)

例如,当fcpu=120mhz,fmtu=fcpu/16=7.5mhz,xosc=100ppm,并且tp2=1s时,得到threshosc=750个周期。

与第一实施例类似,ptp的协议操作上的误差近似为threshptp<threshosc。

当cpu13的操作频率为fcpu,中断处理出现频率为yint并且中断处理的周期数为nint时,由mtu计数器的计数数值的公式(3-2)表示由中断处理引起的“threshint”。

threshint=(fmtu/fcpu)*(yint*nint)……(3-2)

此处,使得ptp命令接收中断处理与比较匹配中断处理在cpu13的操作频率处周期数近似相同。

例如,假设fcpu=120mhz以及fmtu=fcpu/16=7.5mhz。在中断处理中,通过另外加上中断响应时间和恢复时间、将中断响应时间设定为10个周期、将中断恢复时间设定为10个周期并且将中断处理设定为平均80个周期以得到nint=100个周期。当因为每400μs从16位计数器生成一次比较匹配中断所以yint=2500次时,得到threshint=15625个周期。

由上述可知,确立threshint>>threshosc>threshptp。“threshflu”是微控制器10a的cpu13的处理中的波动的上限值,以及与第一实施例类似地,“threshflu”小于“threshint”并且公式(3)近似为公式(4)。

thresh=threshint+threshflu<threshint+threshint=2*(fmtu/fcpu)*(yint*nint)…(4)。

当将上面提到的数值应用于公式(4)时,得到thresh=31250个周期。

在第二实施例中,通过由使用mtu15的计时器计数器输出pwm波形信号来控制工业电动机,以及通过使用eptpc14的本地时钟计数器1441与上面提到的操作的执行并行地诊断mtu15的计时器计数器。

根据第二实施例,可以对计时器生成pwm波形信号时将出现的计数器的失灵进行诊断。另外,可以将根据第二实施例的系统应用于工业电动机控制设备以及面向功能安全的设备(符合诸如iec61508等的标准)。

[第三实施例]

图12是例示根据第三实施例的工业电动机控制系统的配置的一个示例的框图。图13是例示在pwm波形比较中eptpc14的脉冲输出计时器和mtu15的计时器计数器的操作的一个示例的时序图。

已经基于两种类型的计时器(eptpc14和mtu15)生成的第一脉冲和第二脉冲从第一端口(port1)18_1和第二端口(port2)18_2分别地输出并且分别地经由电动机驱动器6b1和6b2分别地耦合至第一工业电动机3b1和第二工业电动机3b2。另外,经由布置在微控制器10b外部的耦合电路8使第一脉冲和第二脉冲分支并且将第一脉冲和第二脉冲分别地输入到作为其它通用端口的第三端口(port3)18_3和第四端口(port4)18_4中。随后,通过对第一脉冲和第二脉冲的脉冲宽度进行测量并且相互比较来检测计时器的故障。可替换地,可以布置可从外部操作的物理开关,由此在控制电动机时可以将pwm波形信号输出到第一工业电动机3b1和第二工业电动机3b2以及在进行诊断时可以将pwm波形信号输入到第三端口18_3和第四端口18_4中,代替脉冲分支。此处,第一端口18_1、第二端口18_2、第三端口18_3以及第四端口18_4是构成i/o端口18的部分的i/o端口。

第一脉冲通过使得eptpc14的脉冲输出计时器的上升沿经由开关输出以生成pwm波形信号。第二脉冲使用mtu15的通道0(mtu0)的pwm波形生成功能(pwm操作模式1)生成pwm波形并且与eptpc14的时间匹配事件的第一脉冲的生成同步地输出pwm波形信号。

附带地,当要装载两个微控制器用于互相监控时,可以由彼此独立的单独的微控制器执行pwm波形信号的输出和pwm波形信号的输入(以及其比较),以及可以双重地执行pwm波形信号的输出和pwm波形信号的输入(以及其比较)。

将使用图14、图15a和图15b对第三实施例的操作流程进行描述。图14是例示在pwm波形比较中执行的稳定处理操作的一个示例的流程图。图15a是例示在pwm波形比较中执行的上升沿中断处理操作的一个示例的流程图。图15b是例示在pwm波形比较中执行的比较匹配中断处理操作的一个示例的流程图。使用从eptpc14生成的脉冲输出上升沿中断和从通道0(mtu0)生成的比较匹配中断作为中断。在如图13所例示的,在从eptpc14的脉冲输出计时器输出的波形信号从低至高变化的上升时间处从eptpc14生成脉冲输出上升沿中断。当如图13所例示的,当在pwm波形信号的周期中清空生成mtu0的pwm波形信号的计时器计数器时,从通道0(mtu0)生成比较匹配中断。

<稳定处理>

步骤s71:cpu在特定时间(限定为ts)处开始彼此同步的eptpc14的脉冲输出计时器以及mtu0的计数器的操作。通过由elc17进行事件信号耦合来执行计时器和计数器的操作的同步开始。

步骤s72:cpu13通过elc17将从eptpc14输出的脉冲耦合至i/o端口18(第一端口18_1)的输出。随后,通过在切换的输出模式中从eptpc14生成脉冲来执行端口输出。

步骤s73:cpu13将eptpc14的脉冲输出计时器的计时器起始时间设定为同步起始时间(tmsttr←ts),将周期设定为200μs(tmcycr←200000)并且将脉冲宽度设定为100μs(tmplsr←100000)。

步骤s74:cpu13将mtu0的操作模式设定为pwm操作模式1。随后,cpu13将提供至mtu0的时钟信号的频率设定为120mhz(pclka←120mhz),将预定标器设定为pclka/16,将用于低至高反相的计数器比较值设定为200μs(tgrd←ox5dc)以及将用于高至低反相的计数器比较值设定为400μs(tgrc←oxbb8)。另外,cpu13将起始时间处的计数值设定为比用于从低至高反相的计数器比较值小一个计数的值以使得在启动计时器和计数器之后将计数值直接从低至高反相(tcnt←ox5db(=tgrd-1))。

步骤s75:cpu13设定icu16以便向cpu13通知来自eptpc14的脉冲输出上升沿中断的生成以及来自mtu0的计数值从高至低反相的计数器的比较匹配中断的生成。另外,cpu13对eptpc14的脉冲输出上升沿中断标志和mtu0的比较匹配中断标志进行初始化(ptp_flag←假,mtu0_flag←假)。

步骤s76:cpu13使用与用于pwm输出的通道不同的通道用于输入脉冲的脉冲宽度测量,以及为第一脉冲的脉冲宽度测量分配通道1(mtu1)并且为第二脉冲的脉冲宽度测量分配通道2(mtu2)。随后,cpu13将提供至mtu1的时钟信号的频率设定为120mhz(pclka←120mhz)、将预定标器设定为pclka/1并且将操作模式设定为外部脉冲宽度测量功能模式以便测量高脉冲宽度。cpu13还以相同的方式对mtu2执行设定。

步骤s77:cpu13将用于判定故障检测的脉冲宽度差的绝对值的上限值设定为阈值。通过将由振荡器的存在引起的mtu15的计数器的误差、ptp的协议操作上的误差等考虑在内来设定阈值(thresh)。由通过稍后描述的公式(6)表示阈值的一个示例。

步骤s78:cpu13通过使用eptpc14根据ptp开始与另一件外部设备的时间的时间同步。此处,根据ptp从一件设备或者多件设备中选择具有最准确的时钟信号的设备作为时间分发源。

步骤s79:当eptpc14的本地时钟计数器1441的计数值达到步骤s73中设置的ts时,eptpc14已经生成的第一脉冲和mtu15已经生成的第二脉冲从第一端口18_1和第二端口18_2分别地输出。附带地,硬件元件执行如下的这个步骤。

首先,将使用图13对通过使用eptpc14的输出计时器执行的pwm波形信号输出操作进行描述。脉冲输出计时器与eptpc14的脉冲输出计时器的计时器起始时间(ts)同步地从低至高上升并且输出了周期为200μs并且脉冲宽度为100μs的脉冲。第一脉冲通过脉冲输出计时器的上升而从低至高上升并且来自第一端口18_1的输出开始。第一脉冲通过脉冲输出计时器的下一个上升从高至低反相以及脉冲输出上升沿中断被生成。通过重复地执行该操作从第一端口18_1输出第一脉冲的pwm波形信号。该pwm波形信号的周期为400μs,脉冲宽度为200μs并且占空比为50%。

接着,将通过使用图13对使用mtu0的计时器计数器的pwm波形信号输出操作进行描述。mtu0的计时器计数器对值进行递增计数并且在计数值(tcnt0)达到tgrd时将来自第二端口18_2的输出从低至高反相。该操作的计时与计时器起始时间ts同步。计时器计数器继续对值进行递增计数并且在计数值达到tgrc时将来自第二端口18_2的输出从高至低反相以及从而生成比较匹配中断。计时器计数器通过重复地执行上面提到的操作从第二端口18_2输出第二脉冲的pwm波形信号。该pwm波形信号的周期为400μs,脉冲宽度为200μs并且占空比为50%。

步骤s7a:将已经从第一端口18_1输出的第一脉冲输入到第三端口18_3中以及将已经从第二端口18_2输出的第二脉冲输入到第四端口18_4中。附带地,硬件元件也执行如下这个步骤。

首先,将通过使用图13对通过使用mtu1的计时器计数器进行的第一脉冲的脉冲宽度的测量进行描述。在输入进第三端口18_3中的第一脉冲的上升处开始mtu1的计时器计数器的计数数值的计数以及在第一脉冲的下降处终止该计数。基于在那时获取的计时器计数器的计数值(tcnt1)测量高脉冲宽度。

其次,将通过使用图13对通过使用mtu2的计时器计数器进行的第二脉冲的脉冲宽度的测量进行描述。在输入进第四端口18_4中的第二脉冲的上升处开始mtu2的计时器计数器的计数数值的计数以及在第二脉冲的下降处终止该计数。基于在那时获取的计时器计数器的计数值(tcnt2)测量高脉冲宽度。

步骤s7b:cpu13判定脉冲宽度的获取是否已经完成。通过设定eptpc14的脉冲输出计时器上升沿中断标志(ptp_flag)以及mtu15的比较匹配中断标志(mtu_flag)进行判断。当已经完成脉冲宽度的获取(是)时,cpu13进行到步骤s7c中的处理以及当没有完成脉冲宽度的获取(否)时,cpu进行到步骤s7b中的处理。

步骤s7c:cpu13确认脉冲宽度之间的差的绝对值是否超过阈值。

脉冲宽度差=|mtu1_count-mtu2_count|

当脉冲宽度差的绝对值超过阈值时,cpu将其检测为故障并且以错误而终止处理。

步骤s7d:当在步骤s7c中脉冲宽度差的绝对值未超过阈值时,cpu13清空eptpc14的脉冲输出计时器上升沿中断标志和mtu15的比较匹配中断标志(ptp_flag←假,mtu_flag←假)。

步骤s7e:cpu13判定用户应用是否终止。当用户应用终止时,cpu13终止处理。当用户应用并未终止时,cpu13回到步骤s7b以及继续执行处理。

<中断处理>

如上所述,mtu1的计时器计数器在已经从第三端口18_3输入的第一脉冲的高周期中执行递增计数操作并且在第一脉冲的低周期中停止递增计数操作。另外,mtu2的计时器计数器在已经从第四端口18_4输入的第二脉冲的高周期中执行递增计数操作并且在第二脉冲的低周期中停止递增计数操作。

以下,将对脉冲输出计时器上升沿中断进行描述。

步骤s81:当已经从eptpc14生成脉冲输出计时器上升沿中断时,cpu13读出mtu1的计时器计数器的计数值(tcnt1)以及获取所读出的计数值作为第一脉冲的脉冲宽度(mtu1_count←tcnt1)。

步骤s82:cpu13清空mtu1的计时器计数器(tcnt1←0)。

步骤s83:cpu13设定eptpc14的脉冲输出计时器上升沿中断标志(ptp_flag←真)。

以下,将对比较匹配中断进行描述。

步骤s91:当在mtu0的其值从高至低反相的计数器中已经生成了比较匹配中断时,cpu13读出mtu2的计时器计数器的计数值(tcnt2)以及获取所读出的计数值作为第二脉冲的脉冲宽度(mtu2_count←tcnt2)。

步骤s92:cpu13清空mtu2的计时器计数器(tcnt2←0)。

步骤s93:cpu13在mtu0的其值从高至低反相的计数器中设定比较匹配中断标志(mtu0_flag←真)。

<阈值的一个示例>

将对阈值(thresh)的一个示例进行描述。当阈值除了分成由因为振荡器的存在所导致的mtu计数器的误差引起的“threshosc”和由ptp的协议操作上的误差引起的“threshptp”以外,阈值还被分成用于经由布置在微控制器外部的耦合电路传播的脉冲的传播延迟的“thresholdppg”时,得到公式(5)。……

thresh=threshosc+threshptp+threshppg……(5)

附带地,在第三实施例中,由于用于获取脉冲宽度的计时器计数器用硬件启动和停止,因此对中断处理中的延迟没有影响。

当上升沿中断间隔为tp3时,将“threshosc”表示为类似于第二实施例的公式的公式(5-1)。例如,当fcpu=120mhz、fmtu=fcpu=120mhz、xosc=100ppm并且tp3=400μs时,得到threshosc=5个周期。

threshosc=fmtu*xosc*tp3……(5-1)

可以与第一实施例类似地将ptp的协议操作上的误差在时间上减小至1μs至100ns以及在mtu计数器的计数数值上减小至threshptp=8个至80个周期。

例如,当将高速度设定为3.0x108m/s、将传播脉冲的导体的相对介电常数设定为10并且将布线距离设定为10cm时,脉冲的传播延迟变得不多于10ns并且近似为threshppg<threshosc。

由上述可知,公式(5)近似为公式(6)。

thresh=threshosc+threshptp+threshppg<2*threshosc+threshptp……(6)

当将上面提到的数值应用于公式(6)时,“thresh”总计为100个周期。

在第三实施例中,由具有本地时钟计数器(第一计数器)的预定值的eptpc14的脉冲输出计时器(第一计时器)生成的pwm波形信号从第一i/o端口输出以及从第三i/o端口输入,并且其脉冲宽度由mtu15(第二计时器)的计时器计数器(第三计数器)来测量。由具有本地时钟计数器(第一计数器)的预定值的mtu15(第二计时器)的计时器计数器(第二计数器)生成的pwm波形信号从第二i/o端口输出以及从第四i/o端口输入,并且其脉冲宽度由mtu15(第二计时器)的计时器计数器(第四计数器)来测量。从而,可以在不停止执行用户程序的情况下通过计时器诊断pwm波形信号的生成和输出功能。

[第四实施例]

由于根据第一实施例的mtu15包括多个通道,因此可以将两个通道的16位计数器级联地耦合在一起以用作一个32位计数器。在32位计数器中,在实际操作中不发生溢出。

图16是例示根据第四实施例的32位计数器的操作的一个示例的时序图。根据第四实施例的32位计数器被配置为使得16个高阶位被分配至mtu15的通道1(mtu1)的计数器并且16个低阶位被分配至mtu15的通道2(mtu2)的计数器。对mtu1的计数器的计数值进行递增计数以及每当mtu2的计数器溢出时就清空mtu2的计数器并且再次从零开始递增计数,以及由此两个计数器作为一个32位计数器工作。

因为除了使用mtu15的通道1(mtu1)的计数器和通道2(mtu2)的计数器、通过将计数器级联地偶合在一起来执行对32位的操作设定以及基本上消除了溢出中断的生成以外,根据第四实施例的32位计数器的配置和操作与根据第一实施例的计数器的配置和操作相同,因此省略其描述。要被级联地耦合在一起的计数器不限于通道1和通道2的计数器。

<阈值>

与第一实施例类似,阈值(thresh)的一个示例近似为公式(7)。

thresh=(fmtu/fcpu)*(2*fcpu*xosc*tp1+2*xint*nint)……(7)

此处,cpu13的操作频率为fcpu,mtu15的操作频率为fmtu=fcpu/16,为mtu15提供时钟信号的振荡器的精度为xosc,时间匹配事件间隔为tp1,中断处理出现频率为xint以及中断处理的周期数量为nint。

由于消除了来自mtu15的溢出中断的生成,因此与第一实施例中的出现频率相比,中断处理出现频率xint从13次时间匹配事件中断处理降低至两次时间匹配事件中断处理。例如,当fcpu=120mhz,fmtu=(fcpu/16)=7.5mhz,xosc=100ppm,tp1=100ms,xint=2以及nint=100时,得到thresh=175个周期。

在第四实施例中,通过将两个16位计数器级联地耦合在一起来配置32位计数器。由此,可以通过降低中断处理出现频率以进行比第一实施例中的诊断更准确的诊断。另外,可以在将计时器用作32位计数器时对计时器进行诊断。

尽管,如上面提到的,已经基于优选实施例和实际示例对已经由本申请的发明人和其他人提出的本公开进行了具体地描述,但是,不用说的是,本公开不限于前述实施例和实际示例并且可以在不偏离本公开的主旨的范围内以各种方式进行更改和修改本公开。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1