標(biāo)題: 如何測(cè)量72MHz以下的外部信號(hào),STC32的144MHz的高速PWM [打印本頁]

作者: 大漠孤煙001    時(shí)間: 2023-3-15 14:33
標(biāo)題: 如何測(cè)量72MHz以下的外部信號(hào),STC32的144MHz的高速PWM

如何測(cè)量72MHz以下的外部信號(hào),STC32的144MHz的高速PWM

STC32G12K128-35MHz-LQFP64/48/32,TSSOP20
STC32G8K64-42MHz-LQFP48/32
STC8H1K08T-33I-TSSOP20/QFN20
的高速 144MHz ~ 196MHz 的PWM, 可以捕獲外部脈沖信號(hào),可以工作在 144MHz 以上
理論上 STC32G系列可以測(cè)量 144MHz/2以下頻率的信號(hào)
已驗(yàn)證了:
1, 內(nèi)部 HIRC-12MHz
2, HIRC-12MHz / 10 = 1.2MHz低頻 給 STC32G12K128的CPU使用
3, HIRC-12MHz通過 PLL產(chǎn)生144MHz做PWM的時(shí)鐘源, PWMB組產(chǎn)生 28.8MHz信號(hào)源
4, PWMA組側(cè)量 28.8MHz的信號(hào)源正確 !
5, 等72MHz信號(hào)發(fā)生器來測(cè)試72MHz









STC32G系列單片機(jī)的高速PWM可以和CPU工作在不同頻率

STC32G12K128系列CPU最高工作頻率可達(dá)35MHz
STC32G8K64系列CPU最高工作頻率可達(dá)42MHz
上面兩個(gè)系列的高級(jí)PWM均可工作在144MHz


范例說明:
1、時(shí)鐘說明:由內(nèi)部IRC產(chǎn)生12MHz的時(shí)鐘提供給PLL當(dāng)作PLL輸入時(shí)鐘,PLL鎖頻到144MHz輸出作為高速PWM的時(shí)鐘源,
     同時(shí)144MHz的PLL輸出時(shí)鐘通過CLKDIV進(jìn)行4或者5分頻,產(chǎn)生36MHz或者28.8MHz的時(shí)鐘提供給CPU當(dāng)作系統(tǒng)工作頻率
2、PWM高速輸出說明:PWMA的CC1通道配置為輸出模式,并從P2.0口輸出頻率為28.8MHz,占空比為40%的PWM型號(hào)
3、PWM高速捕獲說明:PWMB的CC5和CC6通道配置為捕獲輸入模式,CC5口P2.0口捕獲信號(hào)的周期值,CC6從P2.0口捕獲信號(hào)的占空比
4、測(cè)試說明:最后通過查詢方式得到周期值和占空比并從串口送到PC顯示
#include "stc32g.h"
#include "stdio.h"
#include "intrins.h"

#define FOSC            12000000UL
#define PLLCLK          144000000UL

#define MCLKDIV         4               //144M/4=36M
//#define MCLKDIV       5               //144M/5=28.8M

#define MCLK            PLLCLK
#define SYSCLK          MCLK/MCLKDIV

#define BAUD            (65536 - SYSCLK/4/115200)

#define MCLK_HIRC       0
#define MCLK_IRC32K     1
#define MCLK_IRC48M     2
#define MCLK_XOSC       3
#define MCLK_X32K       4
#define MCLK_PLL        5
#define MCLK_PLLD2      6
#define MCLK_SEL        MCLK_PLL

#define HSCK_MCLK       0
#define HSCK_PLL        1
#define HSCK_SEL        HSCK_PLL

#define PLL_96M         0
#define PLL_144M        1
#define PLL_SEL         PLL_144M

#define CKMS            0x80
#define HSIOCK          0x40
#define MCK2SEL_MSK     0x0c
#define MCK2SEL_SEL1    0x00
#define MCK2SEL_PLL     0x04
#define MCK2SEL_PLLD2   0x08
#define MCK2SEL_IRC48   0x0c
#define MCKSEL_MSK      0x03
#define MCKSEL_HIRC     0x00
#define MCKSEL_XOSC     0x01
#define MCKSEL_X32K     0x02
#define MCKSEL_IRC32K   0x03

#define ENCKM           0x80
#define PCKI_MSK        0x60
#define PCKI_D1         0x00
#define PCKI_D2         0x20
#define PCKI_D4         0x40
#define PCKI_D8         0x60

void delay()
{
    int i;

    for (i=0; i<100; i++);
}

char ReadPWMA(char addr)
{
    char dat;

    while (HSPWMA_ADR & 0x80);              //等待前一個(gè)異步讀寫完成
    HSPWMA_ADR = addr | 0x80;               //設(shè)置間接訪問地址,只需要設(shè)置原XFR地址的低7位
                                            //HSPWMA_ADDR寄存器的最高位寫1,表示讀數(shù)據(jù)
    while (HSPWMA_ADR & 0x80);              //等待當(dāng)前異步讀取完成
    dat = HSPWMA_DAT;                       //讀取異步數(shù)據(jù)

    return dat;
}

void WritePWMA(char addr, char dat)
{
    while (HSPWMA_ADR & 0x80);              //等待前一個(gè)異步讀寫完成
    HSPWMA_DAT = dat;                       //準(zhǔn)備需要寫入的數(shù)據(jù)
    HSPWMA_ADR = addr & 0x7f;               //設(shè)置間接訪問地址,只需要設(shè)置原XFR地址的低7位
                                            //HSPWMA_ADDR寄存器的最高位寫0,表示寫數(shù)據(jù)
}

char ReadPWMB(char addr)
{
    char dat;

    while (HSPWMB_ADR & 0x80);              //等待前一個(gè)異步讀寫完成
    HSPWMB_ADR = addr | 0x80;               //設(shè)置間接訪問地址,只需要設(shè)置原XFR地址的低7位
                                            //HSPWMB_ADDR寄存器的最高位寫1,表示讀數(shù)據(jù)
    while (HSPWMB_ADR & 0x80);              //等待當(dāng)前異步讀取完成
    dat = HSPWMB_DAT;                       //讀取異步數(shù)據(jù)

    return dat;
}

void WritePWMB(char addr, char dat)
{
    while (HSPWMB_ADR & 0x80);              //等待前一個(gè)異步讀寫完成
    HSPWMB_DAT = dat;                       //準(zhǔn)備需要寫入的數(shù)據(jù)
    HSPWMB_ADR = addr & 0x7f;               //設(shè)置間接訪問地址,只需要設(shè)置原XFR地址的低7位
                                            //HSPWMB_ADDR寄存器的最高位寫0,表示寫數(shù)據(jù)
}

void main()
{
    WTST = 0x00;
    P_SW2 = 0x80;

    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P5M0 = 0x10; P5M1 = 0x00;

    SCON = 0x52;
    AUXR = 0x40;
    TMOD = 0x00;
    TL1 = BAUD;
    TH1 = BAUD >> 8;
    TR1 = 1;

    //選擇PLL輸出時(shí)鐘
#if (PLL_SEL == PLL_96M)
    CLKSEL &= ~CKMS;                        //選擇PLL的96M作為PLL的輸出時(shí)鐘
#elif (PLL_SEL == PLL_144M)
    CLKSEL |= CKMS;                         //選擇PLL的144M作為PLL的輸出時(shí)鐘
#else
    CLKSEL &= ~CKMS;                        //默認(rèn)選擇PLL的96M作為PLL的輸出時(shí)鐘
#endif

    //選擇PLL輸入時(shí)鐘分頻,保證輸入時(shí)鐘為12M
    USBCLK &= ~PCKI_MSK;
#if (FOSC == 12000000UL)
    USBCLK |= PCKI_D1;                      //PLL輸入時(shí)鐘1分頻
#elif (FOSC == 24000000UL)
    USBCLK |= PCKI_D2;                      //PLL輸入時(shí)鐘2分頻
#elif (FOSC == 48000000UL)
    USBCLK |= PCKI_D4;                      //PLL輸入時(shí)鐘4分頻
#elif (FOSC == 96000000UL)
    USBCLK |= PCKI_D8;                      //PLL輸入時(shí)鐘8分頻
#else
    USBCLK |= PCKI_D1;                      //默認(rèn)PLL輸入時(shí)鐘1分頻
#endif

    //啟動(dòng)PLL
    USBCLK |= ENCKM;                        //使能PLL倍頻

    delay();                                //等待PLL鎖頻

    //選擇主時(shí)鐘源
    CLKDIV = MCLKDIV;                       //主時(shí)鐘選擇高速頻率前,必須先設(shè)置分頻系數(shù),否則程序會(huì)當(dāng)?shù)?br />
    CLKSEL &= ~MCKSEL_MSK;
    CLKSEL &= ~MCK2SEL_MSK;
#if (MCLK_SEL == MCLK_HIRC)
    CLKSEL |= MCKSEL_HIRC;                  //選擇內(nèi)部高速IRC作為主時(shí)鐘
    CLKSEL |= MCK2SEL_SEL1;                 //選擇MCKSEL選擇的時(shí)鐘作為主時(shí)鐘
#elif (MCLK_SEL == MCLK_IRC32K)
    CLKSEL |= MCKSEL_X32K;                  //選擇外部32K作為主時(shí)鐘
    CLKSEL |= MCK2SEL_SEL1;                 //選擇MCKSEL選擇的時(shí)鐘作為主時(shí)鐘
#elif (MCLK_SEL == MCLK_IRC48M)
    CLKSEL |= MCKSEL_HIRC;                  //選擇內(nèi)部高速IRC作為主時(shí)鐘
    CLKSEL |= MCK2SEL_IRC48;                //選擇內(nèi)部48M的IRC作為主時(shí)鐘
#elif (MCLK_SEL == MCLK_XOSC)
    CLKSEL |= MCKSEL_XOSC;                  //選擇外部高速晶振作為主時(shí)鐘
    CLKSEL |= MCK2SEL_SEL1;                 //選擇MCKSEL選擇的時(shí)鐘作為主時(shí)鐘
#elif (MCLK_SEL == MCLK_X32K)
    CLKSEL |= MCKSEL_IRC32K;                //選擇內(nèi)部低速IRC作為主時(shí)鐘
    CLKSEL |= MCK2SEL_SEL1;                 //選擇MCKSEL選擇的時(shí)鐘作為主時(shí)鐘
#elif (MCLK_SEL == MCLK_PLL)
    CLKSEL |= MCKSEL_HIRC;                  //選擇內(nèi)部高速IRC作為主時(shí)鐘
    CLKSEL |= MCK2SEL_PLL;                  //選擇PLL輸出時(shí)鐘作為主時(shí)鐘
#elif (MCLK_SEL == MCLK_PLLD2)
    CLKSEL |= MCKSEL_HIRC;                  //選擇內(nèi)部高速IRC作為主時(shí)鐘
    CLKSEL |= MCK2SEL_PLLD2;                //選擇PLL輸出時(shí)鐘2分頻后的時(shí)鐘作為主時(shí)鐘
#else
    CLKSEL |= MCKSEL_HIRC;                  //默認(rèn)選擇內(nèi)部高速IRC作為主時(shí)鐘
    CLKSEL |= MCK2SEL_SEL1;                 //默認(rèn)選擇MCKSEL選擇的時(shí)鐘作為主時(shí)鐘
#endif

    MCLKOCR = 0x04;                         //系統(tǒng)時(shí)鐘4分頻后輸出到P5.4口

    //選擇HSPWM/HSSPI時(shí)鐘
#if (HSCK_SEL == HSCK_MCLK)
    CLKSEL &= ~HSIOCK;                      //HSPWM/HSSPI選擇主時(shí)鐘為時(shí)鐘源
#elif (HSCK_SEL == HSCK_PLL)
    CLKSEL |= HSIOCK;                       //HSPWM/HSSPI選擇PLL輸出時(shí)鐘為時(shí)鐘源
#else
    CLKSEL &= ~HSIOCK;                      //默認(rèn)HSPWM/HSSPI選擇主時(shí)鐘為時(shí)鐘源
#endif

    HSCLKDIV = 0;                           //HSPWM/HSSPI時(shí)鐘源不分頻

    HSPWMA_CFG = 0x03;                      //使能PWMA相關(guān)寄存器異步訪問功能
    HSPWMB_CFG = 0x03;                      //使能PWMB相關(guān)寄存器異步訪問功能

    PWMA_PS = 0x01;                         //PWMA_CC1高速PWM輸出到P2.0口
                                            //PWMB_CC5從P2.0口進(jìn)行捕獲

    //通過異步方式設(shè)置PWMA/PWMB的相關(guān)寄存器
    WritePWMA((char)&PWMA_CCER1, 0x00);
    WritePWMA((char)&PWMA_CCMR1, 0x00);     //CC1為輸出模式
    WritePWMA((char)&PWMA_CCMR1, 0x60);     //OC1REF輸出PWM1(CNT<CCR時(shí)輸出有效電平1)
    WritePWMA((char)&PWMA_CCER1, 0x05);     //使能CC1/CC1N上的輸出功能
    WritePWMA((char)&PWMA_ENO, 0x03);       //使能PWM信號(hào)輸出到端口
    WritePWMA((char)&PWMA_BKR, 0x80);       //使能主輸出
    WritePWMA((char)&PWMA_CCR1H, 0x00);     //設(shè)置輸出PWM的占空比
    WritePWMA((char)&PWMA_CCR1L, 0x02);
    WritePWMA((char)&PWMA_ARRH, 0x00);      //設(shè)置輸出PWM的周期
    WritePWMA((char)&PWMA_ARRL, 0x04);
    WritePWMA((char)&PWMA_CR1, 0x01);       //開始PWM計(jì)數(shù)

    WritePWMB((char)&PWMB_CCER1, 0x00);
    WritePWMB((char)&PWMB_CCMR1, 0x01);     //CC5為輸入模式,且映射到TI5FP5上
    WritePWMB((char)&PWMB_CCMR2, 0x02);     //CC6為輸入模式,且映射到TI6FP5上
    WritePWMB((char)&PWMB_CCER1, 0x31);     //使能CC5上的捕獲功能(上升沿捕獲)
    WritePWMB((char)&PWMB_SMCR, 0x54);      //上升沿復(fù)位模式
    WritePWMB((char)&PWMB_CR1, 0x01);       //開始PWM計(jì)數(shù)

    while (1)
    {
        if (ReadPWMB((char)&PWMB_SR1) & 0x02)   //等待捕獲完成
        {
            WritePWMB((char)&PWMB_SR1, 0x00);   //清除完成標(biāo)志

            //讀取捕獲到的周期值
            printf("%02x", (unsigned int)ReadPWMB((char)&PWMB_CCR5H) & 0xff);
            printf("%02x", (unsigned int)ReadPWMB((char)&PWMB_CCR5L) & 0xff);
            printf(" ");

            //讀取捕獲到的占空比值
            printf("%02x", (unsigned int)ReadPWMB((char)&PWMB_CCR6H) & 0xff);
            printf("%02x", (unsigned int)ReadPWMB((char)&PWMB_CCR6L) & 0xff);
            printf("\n");
        }
    }
}




作者: weijoyer    時(shí)間: 2023-3-21 18:35
144M的速度不足以捕獲72M的波形吧
作者: lmn2005    時(shí)間: 2024-2-6 08:46
我用官方范例改的,怎么不行?請(qǐng)教一下



  1. //芯片用STC8H2K17U,外部晶振為24MHz

  2. sfr PLLCR = 0xdc;
  3. //測(cè)試工作頻率為24MHz
  4. #include "stc8h.h"
  5. #include "intrins.h"
  6. #define       FOSC                           24000000UL
  7. #define       HSCK_MCLK             0
  8. #define       HSCK_PLL                 1
  9. #define       HSCK_SEL                 HSCK_PLL
  10. #define       PLL_96M                     0
  11. #define       PLL_144M                  1
  12. #define       PLL_SEL                     PLL_96M
  13. #define       CKMS                          0x80
  14. #define       HSIOCK                      0x40
  15. #define       MCK2SEL_MSK        0x0c
  16. #define       MCK2SEL_SEL1        0x00
  17. #define       MCK2SEL_PLLD2     0x04
  18. #define       MCK2SEL_PLLD4     0x08
  19. #define       MCKSEL_MSK          0x03
  20. #define       MCKSEL_HIRC         0x00
  21. #define       MCKSEL_XOSC        0x01
  22. #define       MCKSEL_X32K          0x02
  23. #define       MCKSEL_IRC32K     0x03
  24. #define       ENCKM                      0x80
  25. #define       PCKI_MSK                 0x60
  26. #define       PCKI_D1                     0x00
  27. #define       PCKI_D2                     0x20
  28. #define       PCKI_D3                     0x40
  29. #define       PCKI_D4                     0x60

  30. void delay()
  31. {
  32.          int     i;
  33.          
  34.          for    (i=0; i<100; i++);
  35. }
  36. char ReadPWMA(char addr)
  37. {
  38.          char dat;
  39.          
  40.          while(HSPWMA_ADR & 0x80);                                                //等待前一個(gè)異步讀寫完成
  41.          HSPWMA_ADR= addr | 0x80;                                                   //設(shè)置間接訪問地址,只需要設(shè)置原XFR地址的低7位
  42.                                                                                                                 //HSPWMA_ADR寄存器的最高位寫1,表示讀數(shù)據(jù)
  43.          while(HSPWMA_ADR & 0x80);                                                //等待當(dāng)前異步讀取完成
  44.          dat    = HSPWMA_DAT;                                                              //讀取異步數(shù)據(jù)
  45.          
  46.          return dat;
  47. }
  48. void WritePWMA(char addr, char dat)
  49. {
  50.          while(HSPWMA_ADR & 0x80);                                                //等待前一個(gè)異步讀寫完成
  51.          HSPWMA_DAT= dat;                                                                 //準(zhǔn)備需要寫入的數(shù)據(jù)
  52.          HSPWMA_ADR= addr & 0x7f;                                                 //設(shè)置間接訪問地址,只需要設(shè)置原XFR地址的低7位
  53.                                                                                                                 //HSPWMA_ADR寄存器的最高位寫0,表示寫數(shù)據(jù)
  54. }
  55. void main()
  56. {
  57.          P_SW2|= 0x80;                                                                            //使能訪問XFR
  58.          XOSCCR = 0xc0; // 啟動(dòng)外部晶振
  59.         while (!(XOSCCR & 1));                   // 等待時(shí)鐘穩(wěn)定               
  60.         CLKDIV = 0x00; // 時(shí)鐘不分頻
  61.         CKSEL = 0x01;  // 選擇外部晶振
  62.         
  63.          //選擇PLL輸出時(shí)鐘
  64. #if     (PLL_SEL == PLL_96M)
  65.          CLKSEL&= ~CKMS;                                                                  //選擇PLL的96M作為PLL的輸出時(shí)鐘
  66. #elif (PLL_SEL == PLL_144M)
  67.          CLKSEL|= CKMS;                                                                      //選擇PLL的144M作為PLL的輸出時(shí)鐘
  68. #else
  69.          CLKSEL&= ~CKMS;                                                                  //默認(rèn)選擇PLL的96M作為PLL的輸出時(shí)鐘
  70. #endif
  71.          
  72.          //選擇PLL輸入時(shí)鐘分頻,保證輸入時(shí)鐘為12M
  73.          PLLCR&= ~PCKI_MSK;
  74. #if     (FOSC == 12000000UL)
  75.          PLLCR|= PCKI_D1;                                                                   //PLL輸入時(shí)鐘1分頻
  76. #elif (FOSC == 24000000UL)
  77.          PLLCR|= PCKI_D2;                                                                   //PLL輸入時(shí)鐘2分頻
  78. #elif (FOSC == 36000000UL)
  79.          PLLCR|= PCKI_D3;                                                                   //PLL輸入時(shí)鐘3分頻
  80. #elif (FOSC == 48000000UL)
  81.          PLLCR|= PCKI_D4;                                                                   //PLL輸入時(shí)鐘4分頻
  82. #else
  83.          PLLCR|= PCKI_D1;                                                                   //默認(rèn)PLL輸入時(shí)鐘1分頻
  84. #endif
  85.          //啟動(dòng)PLL
  86.          PLLCR|= ENCKM;                                                                    //使能PLL倍頻
  87.          
  88.          delay();                                                                                          //等待PLL鎖頻
  89.          //選擇HSPWM/HSSPI時(shí)鐘
  90. #if     (HSCK_SEL == HSCK_MCLK)
  91.          CLKSEL&= ~HSIOCK;                                                             //HSPWM/HSSPI選擇主時(shí)鐘為時(shí)鐘源
  92. #elif (HSCK_SEL == HSCK_PLL)
  93.          CLKSEL|= HSIOCK;                                                                  //HSPWM/HSSPI選擇PLL輸出時(shí)鐘為時(shí)鐘源
  94. #else
  95.          CLKSEL&= ~HSIOCK;                                                             //默認(rèn)HSPWM/HSSPI選擇主時(shí)鐘為時(shí)鐘源
  96. #endif
  97.          HSCLKDIV= 0;                                                                            //HSPWM/HSSPI時(shí)鐘源不分頻
  98.          
  99.          HSPWMA_CFG= 0x03;                                                             //使能PWMA相關(guān)寄存器異步訪問功能
  100.          
  101.          //通過異步方式設(shè)置PWMA的相關(guān)寄存器
  102.          WritePWMA((char)&PWMA_PSCR,48000 - 1);                  //分頻(注:自己加的)
  103.          WritePWMA((char)&PWMA_CCER1,0x00);
  104.          WritePWMA((char)&PWMA_CCMR1,0x00);                           //CC1為輸出模式
  105.          WritePWMA((char)&PWMA_CCMR1,0x60);                           //OC1REF輸出PWM1(CNT<CCR時(shí)輸出有效電平1)
  106.          WritePWMA((char)&PWMA_CCER1,0x05);                           //使能CC1/CC1N上的輸出功能
  107.          WritePWMA((char)&PWMA_ENO,0x03);                                //使能PWM信號(hào)輸出到端口
  108.          WritePWMA((char)&PWMA_BKR,0x80);                                //使能主輸出
  109.          WritePWMA((char)&PWMA_CCR1H,200 >> 8);                    //設(shè)置輸出PWM的占空比
  110.          WritePWMA((char)&PWMA_CCR1L,200);
  111.          WritePWMA((char)&PWMA_ARRH,2000 >> 8);                    //設(shè)置輸出PWM的周期(注:原來1000,現(xiàn)改為2000)
  112.          WritePWMA((char)&PWMA_ARRL,2000);
  113.          WritePWMA((char)&PWMA_DTR,10);                                    //設(shè)置互補(bǔ)對(duì)稱輸出PWM的死區(qū)
  114.          WritePWMA((char)&PWMA_CR1,0x01);                                 //開始PWM計(jì)數(shù)
  115.          WritePWMA((char)&PWMB_IER,0x01);             // 使能PWMB中斷
  116.                                  
  117.                                  
  118.          P2M0= 0;
  119.          P2M1= 0;
  120.          P3M0= 0;
  121.          P3M1= 0;
  122.          
  123. //         P2= ReadPWMA((char)&PWMA_ARRH);                               //異步方式讀取寄存器
  124. //         P3= ReadPWMA((char)&PWMA_ARRL);
  125.          
  126.          while(1);


  127. }

  128. void PWMA_Isr() interrupt 26 // PWMA中斷處理程序,1秒中斷(注:自己加的)
  129. {
  130.         
  131.     if (ReadPWMA(((char)&PWMA_SR1) & 0x01))  
  132.     {
  133.         WritePWMA((char)&PWMA_IER,0x00);         // 清除PWM中斷
  134.         P37=!P37;
  135.     }
  136. }
復(fù)制代碼




作者: lmn2005    時(shí)間: 2024-2-6 08:48
weijoyer 發(fā)表于 2023-3-21 18:35
144M的速度不足以捕獲72M的波形吧

我也覺得無法捕捉高達(dá)72MHz的脈沖信號(hào),理論上可以,但實(shí)際上的IO口面對(duì)這么高的頻率,應(yīng)付不了。
作者: yzw846562238    時(shí)間: 2024-2-6 13:04
lmn2005 發(fā)表于 2024-2-6 08:48
我也覺得無法捕捉高達(dá)72MHz的脈沖信號(hào),理論上可以,但實(shí)際上的IO口面對(duì)這么高的頻率,應(yīng)付不了。

144MHz怎么讀72MHz的信號(hào)。。mcu采樣一次都要好幾個(gè)時(shí)鐘了,而且mcu內(nèi)部adc好像不支持144MHz吧

作者: 濤qq623942603    時(shí)間: 2024-2-6 16:48
可以做到100K的PWM輸出,并且有10bit的分辨率,也就是有1024份的占空比調(diào)節(jié)嗎?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1