* V- ^ {! g2 u* s; o- [8 z // GPIO 管脚复用配置 ( k: f. e( M) w6 i- l0 O' O5 v GPIOBankPinMuxSet(); ! k$ K# f3 E& d6 l2 a, ~% c. j7 K! I X) O6 _8 \6 c" I
// ARM 中断初始化 5 ~. l' u3 @# o InterruptInit();0 F% r1 o- j* ^& ?- b% ~
" u+ n' \; F3 Z6 b4 h. M, F
// PWM 中断初始化 & {" v8 O$ u a& a. m: C PWMInterruptInit();1 p9 Q2 Z ~0 D( z/ X
0 q& U0 F8 k# @$ D8 |' q, I unsigned char i; $ z7 H3 A( `& T, \8 X8 A2 e( o unsigned int j; ' b1 z: ]0 u) ~2 R* g0 a9 Y, b( Q9 o d
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1); , M' f. G9 h) Y0 |+ o( O3 O* H UARTPuts("------------------------------------------------------------\r\n", -1); 9 B3 E8 ~- y4 y/ o3 i8 Q UARTPuts(" C6748 PWM Test\r\n\r\n", -1);0 ?' H6 U1 _$ z/ k0 D) Z1 l4 k) A% M
// 产生波形1 W% F; e' b- p& A
PWM1ABasic(25000,50);0 l7 i5 ^+ h5 b+ E3 G$ s. r
1 L' `; c( Y o+ Z5 z' {
UARTPuts(" C6748 PWM Test Over!\r\n",-1); 4 U7 s/ u) f5 i' o! A UARTPuts("------------------------------------------------------------\r\n", -1); 1 W- w( T7 J4 s! H4 B # y3 m' V- K: [+ u. [. b0 Q ( v$ v+ |! Z$ z% |6 N0 D* [7 G ; P* @/ h7 n+ \1 w UARTPuts("------------------------------------------------------------\r\n", -1); 1 s: u3 I2 ?5 ?0 ]: z UARTPuts(" C6748 ECAP Test\r\n", -1);" I: x8 L% c6 L, q! R
// ECAP 捕获初始化; k* P- V% c/ m, { T# X
ECAPInit();9 z% ?$ C2 I1 A" P m# B( G( ?
UARTPuts("Initialize ECAP.......\r\n",-1);) [4 a& s, F( Y
for(i=0;i<5;i++)5 I G0 M* I. q+ T7 q
{6 l# M, T+ r+ h8 l/ `! `; S
for(j=0x00FFFFFF;j>0;j--); // 延时 ; K2 V* G' T8 c/ Y* `+ S8 q ECAPRead(); 3 Q$ m! s- K2 v* m }8 h( Y+ \3 f: r" C% b: L+ m, W
UARTPuts("\r\n",-1); ' F. ^" G1 q* j7 e4 Q# ^& L UARTPuts(" C6748 ECAP Test Over!\r\n",-1); 8 d; A( s4 F4 f9 T2 g4 p# n% Y UARTPuts("------------------------------------------------------------\r\n", -1);( Y# j& g5 c5 Q) z
B3 Y# n, x3 R# S4 [: ^ // 主循环' Z) R7 |/ k- N
for(;;)6 z" }$ ] [& C* t; ?6 ]& d$ P' m
{ 1 i2 {+ Y7 F! Z4 G. h9 b$ `* G3 i0 ~% S
} 2 y V. {" m( E, Z% q: [# i( l. Z( g}0 g0 i1 L( a5 e+ X5 O8 [
: D% }. P8 W. @/ Z) V6 ~! j' H4 a2 F. Z/****************************************************************************/ 3 b4 P0 k6 ~0 a/* */ s; }( T' G8 v: Z/* PSC 初始化 */9 p( J3 [# S0 ]' y4 P+ o
/* */( N( ~% T L9 k6 b$ }6 _) J
/****************************************************************************/ 1 {. N. ~* u0 Y! p( D" W" W1 Dvoid PSCInit(void)6 r! S! e8 d" I3 y( D* W) { F
{3 y) t" r0 B+ h9 ^& N/ @
// 使能 EHRPWM 和 ECAP 模块 % j8 P. h2 \$ H- s* h0 K P // 对相应外设模块的使能也可以在 BootLoader 中完成5 V% p# q, Q; u' Z4 j% q
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);1 }; T: H9 U9 i
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);, v7 q3 o) p; g
}& }& T8 L) H$ c+ G6 k* c
+ H4 S$ g/ E" U, x
/****************************************************************************/ . s# d' s3 `8 g3 K* c5 B: N( n$ K/* */ ; c1 X a z8 C) t# @" Z2 o) v/* GPIO 管脚复用配置 */ 8 k3 q2 V7 U) o& s' n) k' U, ~/* */) [. `) y! _0 c+ o8 l) Y
/****************************************************************************/ 2 I$ M8 w$ U1 r$ ~void GPIOBankPinMuxSet(void). m- b0 c# m7 v
{/ e+ t) u! A- J
EHRPWM1PinMuxSetup(); # J1 ^' \5 a7 F: v5 S 1 {2 H- z0 r5 L: q" g: x // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)& _* m E+ l2 ~ B, B' e
// 作为捕获功能时管脚方向为输入 H7 z( o/ a, a" L // 作为辅助脉宽调制时管脚方向为输出 / t+ i" h. _. i. d5 ?/ T) m // ECAP2 / APWM2! x1 V/ A+ }7 V4 i. H
ECAPPinMuxSetup(2);# N$ E. @/ Q1 T" x2 {
" j! P u- v9 f/ J1 ?$ d // ECAP2 / APWM2方向设置为输入 . m1 ?+ K5 |% H# H# D3 R0 C9 w GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7] e4 F" B3 I9 W* q+ D
} + c- C9 L8 j# ?. K' z) o4 ~+ x8 r% V! Y, b% t7 J% |
/****************************************************************************/ , y1 p6 v+ w( |) D+ X% O* t- ~/* */ 9 @+ N; O, v" u+ F% U/* PWM 输出波形 */. Q% e4 }) O, d7 @2 ^
/* */& X# z4 X( c( ]
/****************************************************************************/ , ]9 P( x% |" I8 ^5 }0 zvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)2 ~ `7 ? |% J
{/ o! D8 _( ~2 x) o% D! v
// 时间基准配置) O5 U0 @& ~2 i! F$ w
// 时钟配置 + Z U) O: ~7 B EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ); - x! _* p( K* `$ x- P9 Z# Q 5 N. [; ?, k x // 配置周期; c8 A' D8 b1 C% {- S: ~
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL, ( @7 }4 x3 Q4 L; l, M* h pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE); W* u+ M8 U9 D a$ n0 C |) N2 V& m( g3 R i" l" y // 禁用输入同步信号. s6 E5 ?* I$ B. C$ H; U
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS); 2 [9 F2 t' E, X4 f 7 p& {/ W2 E7 Y, }- w! a // 禁用输出同步信号8 _) q2 Y' V1 w% i6 v
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);# U) m! v; x: w$ ?- |
+ X/ A# |6 c% W! N- T3 J // 仿真(DEBUG)模式行为配置 % u" W7 x' `: O# P- F [ EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT); 7 S/ q4 y/ \" E0 P8 {4 {* S0 W0 a4 Y9 }) C: |& v
// 配置计数比较器子模块 3 e; g$ m4 Y' o, L // 加载比较器 A 值 6 w. n; z0 q: Q1 y" Y) H- I EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE," w6 t! c* ~4 v# R# ?
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* x( ?" B4 P9 y! \% Q$ k
2 e0 t! N. A3 d; v/ B1 S // 加载比较器 B 值 * y& X( T' {5 A) q+ Q) F# O EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,$ }/ t9 W* i: C8 K: q0 r
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ ~& `4 u/ s8 m5 i" ^( J: r3 b
' k1 x l, W7 S! f7 n9 O6 x
// 功能限定配置(输出引脚触发方式设定) 1 T. z4 q- K7 p& M# G% q // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出 % c J1 T4 D) `* U EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING, ) W) `% F1 ~. v8 U1 v$ D2 A EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,0 w6 I8 S7 E% K/ a5 c* C
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING); S5 k' I; T1 V9 L1 r. B2 b4 T2 N
// 禁用(旁路,信号直接输出到斩波子模块)死区模块) F( M* O, R3 v4 J5 T# p
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS); ' { q. A( N l/ W8 }3 ]1 C7 b2 y5 t7 @' T% a) C% [5 I0 V
// 禁用斩波子模块 0 h; y. W" X" ]* B4 T. W EHRPWMChopperDisable(SOC_EHRPWM_1_REGS); 2 x' Z; }+ H' U6 G1 x Q5 Y- s6 z* k& Z" S) q# K9 ` h3 l
// 禁用错误控制事件 1 \/ F8 @ h3 e \3 j EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);5 h6 r: {7 a- J7 k" g4 t
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);5 Y; P& `6 n3 M# z; X
% D+ ]/ W$ P7 m, i# k' o
// 事件触发配置8 n+ f. E/ ^' h
// 每三次事件发生产生中断 : F( I2 q4 q( I4 Y" E4 n, R EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT); ( x+ M& m7 R* i y# @ // 时间基准计数等于有效计数比较寄存器 B 值 产生事件1 t! i; n" l: p
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC); 8 @* y$ {; P( m // 使能中断/ J) ]# I3 t( c' s( |0 P
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);, @7 _# Y* P: i( [
8 `7 A3 y$ A% d: Y% T* S // 禁用高精度子模块 + b& w) S, |' U2 z EHRPWMHRDisable(SOC_EHRPWM_1_REGS);3 y8 H. l& I# c
1 S6 L) A4 S1 ?$ G. _
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio); 2 g( ?5 }1 a1 O0 `, s}1 [3 I! g1 B1 N; S/ V
7 k% O' H1 { R& t2 D* W `
void ChopperWaveform(void) , [9 J' G6 L9 s{ 3 r' o) i O/ [- q) l. j; F // 50% 占空比 6 [! I8 N6 X; \* |- T/ z EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);, W( C( e- w/ b- ^5 B- i$ R
// 4 分频9 H% V" V1 _" g) t8 w
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4); ; v* L% Y4 N. q5 Q n // 单个脉冲宽度 2 ~: g. g1 z. g, O3 y# x EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF); 0 t1 u: T0 l% z' {! `; x- _4 ~6 [3 O7 q // 使能斩波子模块# _" ^- G" \1 k" X
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);- w+ [% V, k. a B6 Q; v4 f8 x: J
}! i' O r' P. {' ?
1 ]: S: h7 B3 B R5 Y+ b
/****************************************************************************/ / |" ~+ x9 J$ A; N/ e/ a3 O/* */ # r9 N% B* y& v, x; I/* PWM 中断初始化 */7 \$ b- t& K$ X7 K7 m
/* */ ) E5 `% Y1 k/ r$ K7 M' C, S) W/****************************************************************************/ / r7 g9 [8 m1 b5 ]' w: }! Vvoid PWMInterruptInit(void)4 x d0 n( ~* q- u2 D! B% ~$ l- ]
{ 5 j5 e, F' ?) d% _1 \; r3 l: ], N' ^ // 注册中断服务函数( }4 ]3 Z* S7 B
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);& ~; i) F4 v1 N7 g* a8 n& ~
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);, ?) D$ f) k" l
) p! c W. B6 C+ x% ^ // 映射中断' z! A. F# s( k9 d6 F" X
IntChannelSet(SYS_INT_EHRPWM1, 2);6 Q" Z, q6 n0 Y/ H2 B7 [" T
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);/ E0 O0 c8 j* X
, y( \' h% Q) a, F& T5 O // 使能中断 ! P U# c0 R- d( g) R# y IntSystemEnable(SYS_INT_EHRPWM1); - S# ~# w* v& o3 W IntSystemEnable(SYS_INT_EHRPWM1TZ); 1 F J1 `* O( B0 @ g- N! c} / u s: I5 G0 l 2 Q" q! H5 A2 o* x! o9 ^. _$ e2 d) v/****************************************************************************/ # l* u/ F+ r+ W2 [! z; r. C/* */- ^0 x# [' |4 t& W( R. W( l
/* ARM 中断初始化 */ - Z) K# s% J+ S/* */0 _8 j% m! Z% t8 D
/****************************************************************************/ 4 r$ T9 v" W9 I5 N( p1 Fvoid InterruptInit(void)* |7 H3 H1 y9 D# r6 x
{ % O+ ~7 y7 G# K // 初始化 ARM 中断控制器1 s. ^, w- h C' [/ Z5 m* ^
IntAINTCInit();5 o* |# m5 j+ n, l/ [5 m) Z
, ~/ G b5 p. L' E# d3 @
// 使能 IRQ(CPSR) 2 S! n; Y0 P& W* v0 c, ? IntMasterIRQEnable();: O; n9 J# E+ Z7 ]& I& I/ H
5 j. k4 a3 |/ U/ b: z9 Y! E) b" O
// 使能中断(AINTC GER) 4 S6 b7 Y( |- A: D IntGlobalEnable(); / j# g7 N( c; d, Z0 c5 ^" Y6 }7 r5 R3 n9 s5 o) |5 u8 Y) h
// 使能中断(AINTC HIER), J* t; p# }1 j! D+ ^, c. f
IntIRQEnable();5 e2 O5 Z n" z5 `' m+ O
} 5 Z5 p9 W" }! Y& D8 f( ?3 M0 |/ n* r2 S# a6 | 作者: 浙江第一帅 时间: 2018-10-30 17:03
/****************************************************************************/ ) p+ }+ v2 S9 u7 k/ ^/* */5 F' z9 a9 i( Q7 _
/* 中断服务函数 */ 8 X) |( V; W# R/* */7 F2 v5 @2 q7 {2 h2 M# {0 z
/****************************************************************************/ ) N0 q, }* p% H$ R- u; p# a( M- Jvoid PWMEventIsr(void), v* Q4 h9 E; m2 H
{% R2 A: U* W. \
IntSystemStatusClear(SYS_INT_EHRPWM1); ( q6 }5 f- U1 z0 m- ]: O4 c8 v* `# z G) r/ S' H7 N( z4 R
EHRPWMETIntClear(SOC_EHRPWM_1_REGS); 0 `5 b: m3 Y# Y8 Z/ b9 o}: ^* H5 x3 A1 g, S5 }5 n7 B
I& m; O6 O6 E6 e
void PWMTZIsr(void) 4 n8 W- Y* l' X, l) r% r5 f{ - S& j, e$ C6 x% j/ d IntSystemStatusClear(SYS_INT_EHRPWM1TZ);7 W0 b+ \" ~' n1 e( H
5 @0 U% N @# D! i% T EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);( D& x }9 n# b0 c% ^9 K6 D
} 8 J f. z9 s% E9 d Z2 W3 R9 Z( Z) q% k- M
/****************************************************************************/7 ^7 c5 ~/ O) R6 N6 S' E0 \9 G
/* */* j1 N0 n# y' M7 v, C
/* 初始化捕获模块 */ . O/ X+ V, w$ W, o# K/* */ % |- M$ R3 `$ m9 b3 }' ]/****************************************************************************/ 6 e( f9 ^ O3 D, b, ^7 p9 Ivoid ECAPInit(void)) u1 X8 Z' ?" ~# x& y0 M' Z0 X2 v4 ^
{& o( S$ S, ~/ ~9 K3 [0 L5 V% f9 b
/*-----设置 ECCTL1-----*/) y) a( [2 S# B3 A9 q w" z
// 使能CAP寄存器装载5 d, t j( r4 ]5 T; V) _7 L
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);% G+ O7 _7 V* @0 u0 Y
// 设置预分频值. 1 e: V7 D5 i, e* C8 z; I6 l ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);1 G+ r& C! z; k4 j( w% R
// 上升沿触发捕获事件 5 U. a6 C7 j2 }7 M ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0); + T- L& S8 e! `& M/ c5 q3 Z // 输入捕获后重新装载计数器值. - C; X1 C' D5 c" R ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1); 2 L* N0 d5 {3 s( j$ }( Y/ ~/ R6 B2 i4 W* ]/ C8 y: y8 r+ D7 H
/*-----设置 ECCTL2-----*/, Y7 n! k! @+ v" D. \
// 连续模式 ( A- g: N' O% ~7 w/ \) c ECAPContinousModeConfig(SOC_ECAP_2_REGS);. T( I, f+ K) O
// ECAP计数器TSCTR持续计数% Z$ n$ R! Y( s: j& E8 ~& Y7 N# p7 ?
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING); # P; T: p$ R0 Q% z5 c // 禁用同步输出和同步输入 # M4 y' Y' C2 g' ^ ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);; z. p: [& V. K- |2 x* t
// 配置 ECAP 2 为 CAPTURE 模式 ) N* Y2 Y( h V* P, M* x0 S8 n* _ ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);& H) Q! q- s, y O1 k7 j) Y5 _
7 u8 n+ y. |* O, T
// 使能中断4 N* P! w$ i5 D9 o( z6 P
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT); , P) c4 K; w/ V5 X) I} 9 c' l7 ~" |, G' a. V6 k! B( v1 z+ R
/****************************************************************************/ : c5 O( [# h# _: v, `/* */ 5 L3 [; {+ x. s, x/* 取得捕获结果 */ & k9 M0 L) v0 y j4 g/* */ ; ?! U, H- R+ }3 e" m/ _( v/****************************************************************************/. u" }+ g( j5 f! C
unsigned int ECAPRead(void) 4 k+ H8 T/ F) e3 u{. d4 ?5 u0 I6 O& E8 j
unsigned int capvalue;) \. \0 u% Z& S; j6 Y
unsigned long frequency; + A* V7 ]7 h3 u% T: z* O; S( x7 M( }. y! n) w4 E9 ]
// Event1 中断标志 6 M; j& \+ q. X7 c5 n5 z7 @ if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)) " F4 f' |. {( R2 r {; T: N/ e# |$ f. m( @2 ]9 o
// 取得捕获计数 8 n0 c# l9 W6 I% k: ?) u8 R$ \4 W EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult); + D7 B. a4 R% E7 C& K. u# q, L" Z- d$ J capvalue = ECAPResult.cap1;8 D; R& C6 l N
* J/ f3 h7 s; m7 c( }6 T) X; O
// CAPTRUE 模块 228M 时钟主频 r: D' u- M1 H: N% X# s) v' D frequency = 228000000/capvalue; # p0 O1 R$ O2 d$ b- U* A, l UARTprintf("ECAPRead:frequency = %d\r\n",frequency);" a0 o) q: d' ?) f
8 r; d+ {8 Z+ r1 o5 O/ i# b
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1); " T3 M @/ F; c+ R0 `' x# a// IntEventClear(SYS_INT_ECAP2); 9 y- p; I, f C0 b } , q0 H% L/ d) g return frequency; & X! V3 K2 H! v3 V; M8 a: A}- N l5 ^( C" V# c9 d4 H0 b t 作者: 浙江第一帅 时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波作者: 广州创龙莫工 时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。5 b+ ^% k7 v4 r! f/ g7 o$ i+ m& y
[attach]4202[/attach]作者: 浙江第一帅 时间: 2018-11-1 21:27
可以给我发一份吗作者: 广州创龙莫工 时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。