MSP430G2553系统学习之系统时钟

发布者:Changsheng520最新更新时间:2014-12-17 来源: 51hei关键字:MSP430G2553  系统学习  系统时钟 手机看文章 扫描二维码
随时随地手机看文章

把MSP430G2553的系统时钟作为系统学习的一篇讲解可见他的重要性,那为什么要把时钟放到第一位呢?学过FPGA的朋友都能体会得到,如果把CPU的所有工作任务作为纵坐标(y轴),那么时钟就是他的横坐标(x轴)了,如下图1 时钟概念所示。

图 1 时钟概念
也就是说时钟就是一个微机(小到8位的51单片机大到32位的S3C2440等)在时域上的一个衡量标准。如果学过FPGA的朋友都很清楚,微机是以对输入的时钟源的脉冲计数的方式来确定时域参数的。所以,MSP430单片机也一样,拿到他之后首先从时钟入手,一定要养成这种系统学习的好方法,否则再学一百款单片机也是感觉再学新的,做不到举一反三,事半功倍的效果。如果能够把握这其中的通理,你会有所有的单片机都一样样的感觉,当然学起来也就游刃有余了。废话不多说了,进入正题。
一 、硬件
Msp420g2553的系统时钟是由VLOCK、LFXT1CLK和DCOCLK组成,如下图2 系统时钟组成所示:

图2 系统时钟组成
即2553的系统时钟源有三个分别是片内超低功耗12KHz的内部振荡器;由外部时钟源提供的LFXT1CLK时钟源,也即LanuchPad开发板上未焊接的时钟电路,在这里我们可以焊接一个32.768KHz的低频时钟晶体由2553的XIN引脚输入;片内可数字控制的振荡器DCOCLK,在软件的调节下该时钟的输出范围为0.6MHz到26MHz。在这三个时钟源的独立工作或是在三个时钟源相互协调配合(是可以通过软件配置的)下为2553系统提供了系统时钟ACLK、MCLK和SMCLK。
ACLK为辅助时钟,由软件选择来自VLOCK、LFXT1CLK之一经过1,2,4,8分频之后得到,为外围模块提供时钟源。
MCLK为主时钟,由软件选择来自VLOCK、LFXT1CLK和DCOCLK之一经过1,2,4,8分频之后得到,为CPU和系统提供时钟。
SMCLK为子系统时钟,由软件选择来自VLOCK、LFXT1CLK和DCOCLK之一经过1,2,4,8分频之后得到,为外围各个模块提供时钟。
只有灵活掌握了系统时钟的配置之后才能为之后深入学习2553打下扎实的基础,例如之后再调试通用串口通信接口USCI时就不必考虑、担心自己的时钟是否配置错误的问题了,也为调试扫清了道路。
二、软件
了解了硬件构成便可以着手动手编写代码,对msp430g2553的系统时钟进行配置了,该代码的作用就是要实现对ACLK、MCLK和SMCLK的配置以供其他模块儿方便的使用。软件代码的编写笔者采用了模块儿化编程,这也是笔者在学习ARM(S3C2440)的时候体会到的一种对单片机应用的编程方法,今天就把这种布局应用于430单片机的应用之中。
/ ***************************************************************
 * File name      :   clock.c
 * Creating time :   2012-7-11
 * Author         :  李帅
 * pen-name       :  亦然
 * Organization   :  济南大学
 * Function       :   该文件可用作模块儿化编程作为MSP430G2553的系统时钟配置文                    件,在工程的主函数中直接调用Init_Clk()函数即可对系统时钟
                     进行配置。
 * Declareing     :  如有错误的地方请各位指出,交流。交流使我们共同进步!
 * E-mail         :   ls_core@sina.cn
*************************************************************/
#include
                         / *DCOCTL 寄存器*/
    / **********************************************************
    * bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0
    * DCO.2    CCO.1    DCO.0    MOD.4    MOD.3    MOD.2    MOD.1    MOD.0
    * DCO.0——DCO.2定义8种频率之一,可分段调节DCOCLK频率,相邻两种频率相差10%。
    * 而频率由注入直流发生器的电流定义。
    * MOD.O——MOD.4定义在32个DCO周期中插入的fdco+l周期个数,而在余下的DCO周期
    * 中为fDco周期,控制切换DCO和DCO+1选择的两种频率。如果DCO常数为7,表示已
    * 经选择最高颂率,此时不能利用MOD.O-MOD.4进行频率调整。
    * *********************************************************/
 
                         / *BCSCTL1 寄存器*/
    / **********************************************************
    * bit7      bit6      bit5      bit4     bit3     bit2   bit1   bit0
    * XT2OFF   XTS       DIVA.1    DIVA.0  XT5V    Rse1.2  Rse1.1   Rse1.0
    *XT2OFF控制 XT2 振荡器的开启与关闭。
    *XT2OFF=0,XT2振荡器开启;
    *XT2OFF=1,XT2振疡器关闭(默认XT2关闭)。
    *XTS控制 LFXTl 工作模武,选择需结合实际晶体振荡器连接情况。
    *XTS=0,LFXTl工作在低频模式 (默认低频模式);
    *XTS=1,LFXTl工作在高频模式(必须连接有相应高频时钟源)。
    *DIVA.0,DIVA.l控制ACLK分频。
    *0  不分频(默认不分频);
    *1  2分频;                                                                            *2  4分频;
    *3  8分频。
    *XT5V此位设置为0。
    *Rse1.0,Rsel.l,Rse1.2三位控制某个内部电阻以决定标称频率。
    *Rse1=0,选择最低的频率;
    *Rse1=7,选择最低的标称频率;
    ***********************************************************/
  
                         / *BCSCTL2 寄存器*/
    / **********************************************************
    * bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0
    *SELM.1   SELM.0   DIVM.1   DIVM.0   SELS     DIVS.1   DIVS.0   DCOR

       SELM.1,SELM.0= 00    MCLK时钟源为DCOCLK    DIVM.1,DlVM.0=00   不分频  DIVS.1,DIVS.0=00  SMCLK对MCLK不分频
       SELM.1,SELM.0= 01    MCLK时钟源为DCOCLK    DIVM.1,DlVM.0=01    2分频  DIVS.1,DIVS.0=01   SMCLK对MCLK2分频
       SELM.1,SELM.0= 10    MCLK时钟源为LFXTICLK  DIVM.1,DlVM.0=10    4分频   DIVS.1,DIVS.0=10   SMCLK对MCLK4分频
       SELM.1,SELM.0= 11    MCLK时钟源为LFXT1CLK  DIVM.1,DlVM.0 =11   8分频  DIVS.1,DIVS.0=11  SMCLK对MCLK8分频
根据以上设定规则:
      BCSCTL2=00 00 00 00  MCLK和SMCLK都选DCOCLK不分频                                  0x00
      BCSCTL2=01 00 00 00  MCLK和SMCLK也选DCOCLK不分频                                  0x40
      BCSCTL2=10 00 00 00  MCLK和SMCLK都选LFXTICLK不分频                                 0x80
      BCSCTL2=11 00 00 00  MCLK和SMCLK都选LFXT1CLK不分频                                0xc0

      BCSCTL2=01 01 00 10  MCLK选DCOCLK  2分频      MCLK2分频                            0x52
      BCSCTL2=10 10 01 00  MCLK选LFXTICLK 4分频      MCLK4分频                           0xA4
      BCSCTL2=11 11 0110  MCLK选LFXT1CLK8分频      MCLK8分频                            0xF6
     .。。。。。。。。。
    *选择 MCLK 时钟源。
    *0  时钟源为 DCOLCK(默认时钟源);
    *1  时钟源为DCOCLK ;
    *2  时钟源为LFXTlCLK;
    *3     时钟源为 LFXT1CLK 。
    *DIVM.1,DlVM.0选择 MCLK 分频。
    *0  1分频(默认MCLK=DCOCLK);
    *1  2分频;
    *2  4分频;
    *3  8分频。
    *DIVS.1,DIVS.0选择 SMCLK 分频。
    *0  1分频(默认 SMCLK=MCLK);
    *1  2分频;
    *2  4分频;
    *3  8分频。
    *********************************************************/
  
                         / *BCSCTL3 寄存器*/
    / ********************************************************
     * bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0
     * XT2S1   XT2S0  LFXT1S1  LFXT1S0  XCAP1   XCAP0  XT2OF   LFXT1OF
     * XT2S1和XT2S0(2553不支持)
     * LFXT1S1和LFXT1S0选择LFXT1的范围。
     * XCAP1和XCAP0选择LFXT1的匹配电容
     * 00  1pf
     * 01  6pf
     * 10  10pf
     * 11  12.5pf
    

*********************************************************/
 
/ *******************************************************
* 静态函数声明
******************************************************/
static void DcoClkSet(unsigned char x,unsigned char y); //msp430g2553datasheet P30
static void MClkSet(unsigned char Div);
static void SMClkSet(unsigned char Div);
static void AClkSet(unsigned char Div);
 
/ *********************************************************
* 函数名    :  DcoClkSet
* 函数功能  :  对时钟DCOCLK进行配置
* 函数形参  :  传入的形参为x和y,其值参考2553datsheet第28页中DCO频率表
* 函数返回值 :  无
********************************************************/
                                                                     



void DcoClkSet(unsigned char x,unsigned char y)  // msp430g2553datasheet P30
{
    DCOCTL &=~( 0xFF);
    BCSCTL1 &=~( 0xFF);
    unsigned char temp=(x<<4)+y;
    switch(temp){
       case 0x00: {
           DCOCTL  &=~( DCO0 + DCO1 + DCO2);
           BCSCTL1 &=~( RSEL0 + RSEL1 + RSEL2 + RSEL3);
           break;
       }
       case 0x03: {
           DCOCTL  |= ( DCO0 + DCO1 );
           BCSCTL1 &=~( RSEL0 + RSEL1 + RSEL2 + RSEL3);
           break;
       }
       case 0x13: {
           DCOCTL  |= ( DCO0 + DCO1 );
           BCSCTL1 |= ( RSEL0 );
           break;
       }
       case 0x23: {
           DCOCTL  |= ( DCO0 + DCO1 );
           BCSCTL1 |= ( RSEL1 );
           break;
       }
       case 0x33: {
           DCOCTL  |=  ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL0 + RSEL1 );
           break;
       }
       case 0x43: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL2);
           break;
       }
       case 0x53: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL0 + RSEL2 );
           break;
       }
       case 0x63: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL1 + RSEL2 );
           break;
       }
       case 0x73: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL0 + RSEL1 + RSEL2 );
           break;
       }
       case 0x83: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL3);
           break;
       }
       case 0x93: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL0+ RSEL3);
           break;
       }
       case 0xA3: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL1 + RSEL3);
           break;
       }
       case 0xB3: {
           DCOCTL  |= ( DCO0 + DCO1 );
           BCSCTL1 |= ( RSEL0 + RSEL1 + RSEL3);
           break;
       }
       case 0xC3: {
           DCOCTL  |= ( DCO0 + DCO1 );
           BCSCTL1 |= ( RSEL2 + RSEL3);
           break;
       }
       case 0xD3: {
           DCOCTL  |= ( DCO0 + DCO1 );
           DCOCTL  |= ( MOD4 + MOD3 + MOD2 + MOD1 + MOD0 );//微调DCOCLK
           BCSCTL1 |= ( RSEL0 + RSEL2 + RSEL3);
           break;
       }
       case 0xE3: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL1 + RSEL2 + RSEL3);
           break;
       }
       case 0xF3: {
           DCOCTL  |= ( DCO0 + DCO1  );
           BCSCTL1 |= ( RSEL0 + RSEL1 + RSEL2 + RSEL3);
           break;
       }
       case 0xF7: {
           DCOCTL  |= ( DCO0 + DCO1 + DCO2 );
           BCSCTL1 |= ( RSEL0 + RSEL1 + RSEL2 + RSEL3);
           break;
       }
       default:   {
           DCOCTL  |= ( DCO0 + DCO1 + DCO2 );
           BCSCTL1 |= ( RSEL0 + RSEL1 + RSEL2 + RSEL3);
       }
    }
}
/ ******************************************************
* 函数名    :  MClkSet
* 函数功能  :  对时钟MCLK进行配置
* 函数形参  :  传入的形参为Div,对时钟源DCOCLK进行Div分频
* 函数返回值 :  无
****************************************************/
void MClkSet(unsigned char Div)
{
    BCSCTL2 &= ~(SELM1+SELM0);         //select DCOCLK for MCLK
    switch(Div){                           //1分频
       case 0x01:{
           BCSCTL2 &=~(DIVM1 + DIVM0);
           break;
       }
       case 0x02:{                        //2分频
           BCSCTL2 &=~(DIVM1 + DIVM0);
           BCSCTL2 |=DIVM0;
           break;
       }
       case 0x04:{                        //4分频
           BCSCTL2 &=~(DIVM1 + DIVM0);
           BCSCTL2 |=DIVM1;
           break;
       }
       case 0x08:{                        //8分频
           BCSCTL2 |=(DIVM1 + DIVM0);
           break;
       }
       default :{                          //默认不分频
           BCSCTL2 &=~(DIVM1 + DIVM0);
       } 
    }
}
/ ******************************************************
* 函数名    :  SMClkSet
* 函数功能  :  对时钟MCLK进行配置
* 函数形参  :  传入的形参为Div,对时钟源DCOCLK进行Div分频
* 函数返回值 :  无
*******************************************************/
void SMClkSet(unsigned char Div)
{
    BCSCTL2 &= ~(SELM1+SELM0);             //select DCOCLK for SMCLK
    switch(Div){
       case 0x01:{                        //1分频
           BCSCTL2 &=~(DIVS_3);
           break;
       }
       case 0x02:{                        //2分频
           BCSCTL2 &=~(DIVS_3);
           BCSCTL2 |=(DIVS_1);
           break;
       }
       case 0x04:{                        //4分频
           BCSCTL2 &=~(DIVS_3);
           BCSCTL2 |=(DIVS_2);
           break;
       }
       case 0x08:{                        //8分频
           BCSCTL2 |=(DIVS_3);
           break;
       }
       default :{                          //默认不分频
           BCSCTL2 &=~(DIVS_3);
       } 
    }
}
 
/ ******************************************************
* 函数名    :  AClkSet
* 函数功能  :  对时钟MCLK进行配置
* 函数形参  :  传入的形参为Div,对时钟源LFXT1CLK进行Div分频
* 函数返回值 :  无
*******************************************************/
void AClkSet(unsigned char Div)
{
    BCSCTL1 &=~(XTS);                      //low-frequency mode
    switch(Div){
       case 0x01:{                        //1分频
           BCSCTL1 &=~(DIVA_3);
           break;
       }
       case 0x02:{                        //2分频
           BCSCTL1 &=~(DIVA_3);
           BCSCTL1 |=(DIVA_1);
           break;
       }
       case 0x04:{                        //4分频
           BCSCTL1 &=~(DIVA_3);
           BCSCTL1 |=(DIVA_2);
           break;
       }
       case 0x08:{                        //8分频
           BCSCTL1 |=(DIVA_3);
           break;
       }
       default :{                          //默认不分频
           BCSCTL1 &=~(DIVA_3);
       } 
    }
    BCSCTL3 |= XT2S0 + LFXT1S0 + XCAP_3;   //配置ACLK匹配电容
}
/ **********************************************************
* 名称  :   Init_Clk()
* 功能  :   MSP430时钟系统初始化程序
* 输入  :   无
* 返回值 :   无
*************************************************************/
void Init_Clk()                //时钟系统设置
{
    DcoClkSet(13,3);             //7.84MHz     2553datasheet 第28页
    AClkSet(0x08);              //8分频LFXT1CLK
    SMClkSet(0x08);             //8分频DCOCLK
    MClkSet(0x01);              //8分频DCOCLK
}
/ ************************   end of file   *************************/
在编写好代码之后,为了验证是否正确,笔者在CCS4下面建立了一个工程,并在主函数中调用Init_Clk();
#include
#include "clock.h"
void main()
{
    WDTCTL=WDTPW+WDTHOLD;
    P1DIR |=BIT4;
    P1SEL |=BIT4;     //配置P1.4为SMCLK输出功能
    Init_Clk();
}
通过示波器看起输出波形是否正确。下图3 SMCLK波形中示波器所示波形为系统经过8分频DCOCLK后得到的SMCLK,其大小为0.98MHz正好是DcoClkSet(13,3)之后得到的DCOCLK时钟(7.84MHz)经过8分频之后的大小。



图 3 示波器观察SMCLK输出波形
 
    好啦,讲了这些希望初学者对对系统时钟有一个整体把握,希望前辈能多多指正,谢谢!我在后面还会将我的学习心得整理成文,包括FPGA和ARM等。再次声明,文中若有技术错误或是不足望各位多多指正,多多交流。共同交流使得我们共同进步!希望将我的学习心得与您分享,谢谢!下次总结再见。

关键字:MSP430G2553  系统学习  系统时钟 引用地址:MSP430G2553系统学习之系统时钟

上一篇:MSP430G2553中断P1.3测试程序
下一篇:可充电触屏遥控模块设计

推荐阅读最新更新时间:2024-03-16 13:49

单片机 MSP430G2553 FLASH 操作
//FLASH操作 写入 void write_SegC(char value , char lenChar) { char *Flash_ptr; // Flash pointer char i; Flash_ptr = (char *) 0x1040; // Initialize Flash pointer FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY; // Clear Lock bit *Flash_ptr = 0; // Dum
[单片机]
51单片机学习笔记1 -- 单片机最小系统仿真电路绘制
1.Protues新建工程 打开Protues,首页打开ISIS图标,绘制电路图 进入到以下绘制界面 像电路中的芯片、电阻电容等,都可以在器件区找到,直接点击器件区的Pick Device,会弹出来一个器件选择框 可以看到器件选择框中有很多类别的元器件,对于行业单词不熟悉的我们可以在搜索框键入我们想找的元器件,比如51芯片,在搜索框键入89C52,可以看到器件明细区出来两个AT89C52芯片待选 选中需要的芯片,右侧会出现选中的元器件对应预览图和PCB封装图,可以从预览图中看到我们选中的芯片是不是我们想要的,引脚数是否一样等,右下角有个下拉菜单可以选择不同的PCB封装,但PCB不是我们电路图所需要考虑的,所以选中芯
[单片机]
51单片机<font color='red'>学习</font>笔记1 -- 单片机最小<font color='red'>系统</font>仿真电路绘制
STM32入门-STM32时钟系统时钟初始化配置函数
  在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main。那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使用库函数编写的LED程序,在system_stm32f10x.c文件中可以找到SystemInit()函数,SystemInit()代码如下:   void SystemInit (void)   {   /* Reset the RCC clock configuration to the default reset state(for debug purpose) /   / Set HSION bit /   RCC- CR
[单片机]
【自学51单片机】8 -- 按键的学习,单片机最小系统
1、单片机最小系统 电源 单片机中常见5v和3.3v的单片机,“5v”和“3.3v”分别只是他们正常工作的典型值,5v和3.3v单片机也是以他们正常工作典型值命名的,他们正常工作电压的标准范围要根据单片机手册查询, 晶振 晶振分无源晶振和有源晶振。实物图和原理图见下图。 无源晶振: 依靠单片机内部振荡电路才能工作,接到单片机两个振荡引脚即可,晶体两个引脚无区别,电压无要求,两侧通常有电容,手册有要求根据手册选电容,手册无要求一般选20pf。 有源晶振: 无需依靠单片机内部振荡电路,只需外部供电达到电压要求,即可产生振荡频率,接到单片机晶振输入引脚即可接受到晶振频率,单片机晶振输出引脚无需连接。 两者区别:无源晶振信号质
[单片机]
【自学51单片机】8 -- 按键的<font color='red'>学习</font>,单片机最小<font color='red'>系统</font>
基于DS1307的可调实时时钟系统设计
利用实时时钟芯片 DS1307 设计一个能够调节时间的实时时钟。 介绍采用 I2C 总线接口实时时钟芯片 DS1307 进行准确定时的设计原理, 提出实时时钟芯片 DS1307 与单片机接口电路的设计方法,同时给出几个典型程序实例,通过 Proteus 软件进行仿真实现。 先来说说实时时钟DS1307的使用! DS1307 是一款十分常用的实时时钟芯片,它可以记录年、月、日、时、分、秒等信息,提供至2100年的记录。可使用电池供电,也就是说,即使Arduino 在断电状态下,时钟芯片仍然是在运行的。它使用十分常用的两线式串行总线(I2C),只要两根线即可和Arduino 通信。 电控单元的时钟基准通常可利用 CPU
[模拟电子]
STM32时钟系统中的SysTick、FCLK、SYSCLK、PCLK和HCLK
时钟信号好比是单片机的脉搏,了解STM32时钟系统是必要的,下图是STM32F1xx用户手册中的时钟系统结构图。 在STM32F1xx中,有五个时钟源,分别为HSI、HSE、LSI、LSE、PLL。 HSI是高速内部时钟,RC振荡器,频率为8MHz HSE是高速外部时钟,可接石英/陶瓷谐振器或者接外部时钟源,频率范围为4MHz~16MHz LSI是低速内部时钟,RC振荡器,频率为40kHz LSE是低速外部时钟,接频率为32.768kHz的石英晶振 PLL为锁相环倍频输出,其输出频率最大不得超过72MHz SYSCLK 系统时钟SYSCLK最大频率为72MHz,它是供STM32中绝大部分部件工作的时钟源。系统时钟可由PLL
[单片机]
STM32系统时钟硬件仿真查看
前几天回校调试基于407的程序,以前都是在别人的程序基础上面改写只要能实现想要的功能不会管其他的,结果基本就没用用过硬件JLINK的硬件仿真,那晚蔡师姐帮忙一直弄到夜里12点多,真的很感谢她 后来师姐帮我发现那块板子的系统时钟不是原以为的时钟168MHZ。后来用107程序查看了下发现那种查看系统时钟的方法是可行的,今晚我用103也查看了下系统时钟也是所想象的72MHZ. 闲话少说,下面粘上一个简单查看当前单片机系统时钟的小技巧,希望得到更多指引 1.在主程序里面的最前面假如下面俩行代码: int main(void) { RCC_ClocksTypeDef RCC_Clocks; RCC
[单片机]
STM32<font color='red'>系统</font><font color='red'>时钟</font>硬件仿真查看
基于单片机和GPS的时钟信息显示系统
GPS(global positioning system)全球定位系统是利用美国24颗GPS地球卫星所发射的信息而进行定位、导航、授时等服务的系统。自1993年GPS系统向世界免费开放以来,得到了世界各地各行业的广泛应用。GPS系统广泛地应用在导航、大地测量、精确授时、车辆定位及防盗等领域。本文介绍使用日本古野公司的 GPS-OEM接收板GN-77N及AT89C52单片机实现时钟信息接收和显示的设计方法。 1 系统的硬件接口 GN-77N是日本古野公司推出的GPS-OEM接收板,该接收板为并行8通道接收机,可同时跟踪8颗卫星,具有高精度授时、定位速度快、超低功耗、超小体积、插针式安装、超强的抗电磁干扰能力等强大功能,在各种各
[单片机]
基于单片机和GPS的<font color='red'>时钟</font>信息显示<font color='red'>系统</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved