嵌入式开发者社区

标题: 请问一下怎么产生PWM波 [打印本页]

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
0 V! S! l- W* I* ?0 d- l
作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/3 G$ [* L+ w3 h0 ~5 n
/*                                                                          */
/ ?# @. V" c( i5 A+ X/ S! F/*              宏定义                                                      */( T. |  ~1 u1 v9 m  \6 R
/*                                                                          *// C3 P" D3 g; {  Q6 q9 J" A
/****************************************************************************/5 @% [7 |4 D. K6 `
// 软件断点2 H/ R+ @! k# V/ J, @- e
#define SW_BREAKPOINT     asm(" SWBP 0 ");
8 x! C) u9 X  a
, E5 H/ P, X; B0 d- E6 w# R. \& ?/ \// 时钟分频2 N& W8 E. ^2 i; e: T! _/ o
#define CLOCK_DIV_VAL     228( J  V3 I0 a1 D2 B1 [

2 P7 W+ ~# M7 I/ k/****************************************************************************/
- l5 r/ G! }2 K9 Q/*                                                                          */
/ M5 Y0 Y1 \+ ?( F/*              全局变量                                                    */
4 ?8 }3 i7 L8 B* ?" u/*                                                                          */: P- U" F) Q, X7 E+ Z
/****************************************************************************/$ }; v" _1 W$ z+ `
ECAPCONTEXT ECAPResult;
3 D! i" A! K" O5 r& Y* [/ I" J$ e6 i# G
/****************************************************************************/1 p2 Q# K2 c, y$ l
/*                                                                          */7 I! n/ ^& i( _. J. O
/*              函数声明                                                    */7 {5 O+ @8 P# E' J
/*                                                                          */
" }3 ]3 _, W' B3 ^" N/****************************************************************************/
4 F' o0 Y( a  ~. G2 W// 外设使能配置
2 F% N' y! ~; w, F) f8 Avoid PSCInit(void);
+ ^# m/ z6 }2 x3 h' z+ i9 @% i3 d0 N
// GPIO 管脚复用配置
( y6 N" h( A0 U( X2 E. n, cvoid GPIOBankPinMuxSet();
3 A: S. L- J0 n$ s# C$ f5 y' K) r& H8 ?/ O% ?8 m1 K
// 产生波形
( ^  \9 M) ~9 u0 ~9 T3 Q; u5 hvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);: ?! V6 n1 T6 y# \0 t9 P  q8 s0 `+ ~
void ChopperWaveform(void);) H1 k" T7 b7 c) R" L' O4 {

" N  Q( V$ K& U// ECAP初始化和读函数
+ a- K( y2 I* G1 w$ [void ECAPInit(void);" y1 u; k+ V- k8 R
unsigned int ECAPRead(void);
: k% a: u. k- F. v* s
& B2 I; u; k# d# Y/ k* w//ARM 中断初始化, Y- r) |" J+ W1 B" q. ]% {/ y5 n' h
void InterruptInit(void);2 F( w; A1 a$ d: ?- A3 N9 y2 L

; Z! Q) b. l8 Y  [// PWM 中断初始化+ _! `! o8 K- T! L! y$ L; E* e
void PWMInterruptInit(void);$ x" X" s- _; W
// 中断服务函数8 O) ?5 z( K7 c8 _* w: ~
// PWM 事件! R" k, {: ?, g
void PWMEventIsr(void);
  }4 S% @" `& e, W( ]// PWM 错误控制事件# ]- `# k; k. V, j; M2 E
void PWMTZIsr(void);0 T! s# k' a* V

, C  @  I2 z$ s9 i/****************************************************************************/1 o( Y& O  A+ k% r0 m# [8 D& W
/*                                                                          */
! x3 C3 Y" y; `7 M/*              主函数                                                      */5 |0 s6 V$ M  ]* K$ d
/*                                                                          */+ {: s. S  G. c5 P' \! ~  T
/****************************************************************************/
! V4 r. }0 r; Cint main(void)
- `. a! o- B- d& O% S{& C/ g% t! q, q/ f& y
        // 外设使能配置
  K: z( G  M. [* t2 C1 Q' j7 s        PSCInit();% b( R9 ^' ]4 V+ Q9 |2 }4 d
$ b# H# \  h. X" _1 R7 [
        // 初始化串口终端 使用串口2/ D1 I. v+ m$ x
        UARTStdioInit();" K0 j* n% G" D
       
. q; W/ x. B1 k7 |7 o  `9 @        // GPIO 管脚复用配置
) f: h+ h- _3 ], Z        GPIOBankPinMuxSet();9 R' P8 K* E" q: e
: I, A* |4 `2 o
        // ARM 中断初始化
$ A0 f5 P; l- L, B  R2 ~        InterruptInit();
" J. V9 p" ^/ }8 z, T1 c' T3 H2 \* p
* T2 h0 n7 n& @) P, y        // PWM 中断初始化
0 o; t( q" H; w8 C# L5 ]        PWMInterruptInit();: i. n1 Y; n# s
. e8 q& k5 M) F$ B" g$ h
        unsigned char i;
( T  R- X0 X2 Q# M5 s        unsigned int j;: ^; \  y  A" U2 }
8 s. j0 X3 {1 B1 {5 B- O$ n+ e: A  r
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
' J9 B6 T; [& E$ u. g, M4 T        UARTPuts("------------------------------------------------------------\r\n", -1);
& J7 }% S) h* q6 d+ r        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
1 y4 ~. P! `6 H* [' Q        // 产生波形
* X2 c( B. }0 r4 i' t: E        PWM1ABasic(25000,50);
! V' u) H3 F/ b$ u$ O& g* |0 Q1 x% ^7 `) ]3 e; w; }  G5 A
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
( I: |/ R6 {" W1 W% k        UARTPuts("------------------------------------------------------------\r\n", -1);
3 \) i- ?( d# O/ g- C- L
8 {" n; D' C/ S1 w
3 c1 ]0 I4 o) B7 t0 T
# Q4 J* D' |$ K, Z- P0 c0 g  i        UARTPuts("------------------------------------------------------------\r\n", -1);' u$ f4 }; {" K% [1 q( c" ^; d
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
' A0 x7 x( Z5 j6 b& n        // ECAP 捕获初始化2 j0 N0 r/ C) ]0 R5 U% _
        ECAPInit();
! G  M4 d0 C. s9 J        UARTPuts("Initialize ECAP.......\r\n",-1);4 f# y' J5 i, {* K
        for(i=0;i<5;i++)- x# _0 l5 l9 O9 S
        {
6 R) R6 p2 Y) t0 q, {5 b                    for(j=0x00FFFFFF;j>0;j--);            // 延时3 I5 D# M1 Z' Z0 E% l
                    ECAPRead();
+ q& }4 f, |' }6 S8 _0 Q        }
. |7 `$ ?3 E/ R6 {7 ]; D, `) g0 c( [        UARTPuts("\r\n",-1);) t& O. A$ |" |6 ~8 q# _2 Q/ ?
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);' u5 L% B2 ^7 R- [" g' o9 j
        UARTPuts("------------------------------------------------------------\r\n", -1);
$ g6 f1 \6 C/ E' }- Z  D
: {/ j$ z( F, A% x        // 主循环% A, K8 d, D  R' d
        for(;;)
" x* g. n, G/ R% W( F! ~        {
/ w8 y* n+ D( T/ o% X# p2 O" l  m
        }
$ Z) V3 g3 A6 T; h}# A9 o5 N  Y# J9 R) m6 {

0 m$ t: F7 a1 T8 C/****************************************************************************/
# x' J% `& c4 u0 `0 p6 M/*                                                                          */
7 [* Y6 J! W5 i" M/*              PSC 初始化                                                  */1 r2 u# D/ Q1 B5 w& [3 t
/*                                                                          */, ]7 y5 K( z- X
/****************************************************************************/: o3 s+ o$ ]# F* v/ V( h) ^
void PSCInit(void)9 Z6 ^$ I8 _0 Q' L
{6 J" [) v( T, K, A
        // 使能  EHRPWM 和 ECAP 模块$ U' X9 n2 C. |" X$ y! Z" b8 ]
        // 对相应外设模块的使能也可以在 BootLoader 中完成0 @# u* M; ]# P7 [8 G, b
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);$ U7 ~! s2 ?) p
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
$ V9 C5 n1 b; J5 _$ i}
9 Y' c3 m# d  ]( K- l5 ]% D9 e# f3 V) c' f
/****************************************************************************/& _+ P/ e' B4 \. K9 v
/*                                                                          */7 v* |8 ^. ^; Y8 S2 O: V
/*              GPIO 管脚复用配置                                           */
  d& U5 t" {3 a' [/*                                                                          */
5 z1 c, g! _) P! D/****************************************************************************// F4 p8 l8 N/ Y0 f2 A. e6 q0 X4 B
void GPIOBankPinMuxSet(void)" G  \; T6 O. M5 f- X" |2 v
{( i5 r( U7 w6 a' g; k& z" ?
        EHRPWM1PinMuxSetup();
; D+ ~. w" T5 s! G9 @8 `
9 m0 O- `: Z' j3 t        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)' `8 K1 O5 Q$ e9 A
        // 作为捕获功能时管脚方向为输入
" \( p  S/ Q* Z0 h- P        // 作为辅助脉宽调制时管脚方向为输出" c1 Q0 H3 N$ V% `
    // ECAP2 / APWM24 F& Y5 [( w" [9 m  M% T
        ECAPPinMuxSetup(2);
# x- v# Z8 U  |3 V! L
# Z/ k' E4 J8 |6 X  j        // ECAP2 / APWM2方向设置为输入$ e2 W# H" X( `( p3 t* d% y
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
+ d2 ?3 k; S) d9 w& D: [9 h+ E}
7 V" m+ {3 ?6 H2 g4 R) A7 X( j, T% e# p9 @
/****************************************************************************/
, @- B8 O+ ~6 Y* ]$ ~/*                                                                          */, R  x$ O$ `; ?
/*              PWM 输出波形                                                */# N7 P5 @' @8 T& T/ n( |% f  I
/*                                                                          */. W: B% U  D" d2 K
/****************************************************************************/
! k& F1 M% N7 n, P: a1 R+ {void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
& F4 G, M- R' v! g{
, H! x  y' S. X/ ?* w( E7 @    // 时间基准配置/ a2 X+ ]2 G! l& d; s
    // 时钟配置. k! i* B3 F( s
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);: o0 A9 `, s9 e
6 M; h$ w  a3 X- ?9 K/ L8 l9 `
    // 配置周期
. d) N& V5 g' S& i    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
) l8 ]1 J& u% M1 O* {& _" ]                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- \) i0 o; F" v5 Y) u9 \* h4 r1 v# ~' f* m! i" N5 x
    // 禁用输入同步信号  L* l6 \$ F* ^* H4 \
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
* A4 x- C% _5 Z* `2 i3 r
$ N( _0 {2 W8 x    // 禁用输出同步信号/ A& _8 W7 u3 E, G( Z- o! @9 N
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);( O% c  I$ i( [3 v7 y
/ V5 z7 o/ z3 O) r2 A7 s3 U
    // 仿真(DEBUG)模式行为配置2 Y0 G" J; w" P/ s/ h) k
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);) }& o' E3 O# V

9 o4 r, Q9 `* Q* c% s7 [, C    // 配置计数比较器子模块3 {+ x2 n) m* r8 |  }- ^7 W
    // 加载比较器 A 值( a- ~5 [5 ]+ a$ q; c& {- e
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
' [% j. y2 t2 c                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);2 r& u4 \6 o, |1 _0 J. M
% d# M) r2 N: J7 s+ d
    // 加载比较器 B 值
! G' e9 T8 A2 _# y( r( ~    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
5 j2 p9 r8 ^$ W; J! G. ^                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 ~4 D% z  S3 t/ G! b/ o
8 Z. W2 b; z4 A( G    // 功能限定配置(输出引脚触发方式设定)
/ y" g& p5 X7 Y- V) d; C2 D3 z0 E    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
( r( }6 P8 k, f# j% Y9 h, ?7 n4 {    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,0 u# p' T% V0 ^8 J( p
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
0 g# x9 T+ W  z                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
7 K6 A' v! H/ ~. x( t3 O% U+ q4 }. n- G7 N
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
. l. A8 z) V/ k" ~* x1 e    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
  V4 U+ P2 D6 Z  d, B, {+ q/ _0 C
2 }8 Z* o, L5 ~0 `( D% W0 I$ d; G    // 禁用斩波子模块
+ g, N5 I8 ^, o2 I. ^    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
7 G0 @' S$ S5 d; @
. u$ B  C+ P2 r    // 禁用错误控制事件' l" |, N; w/ H; Y) h3 {! s
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);- z/ H# i# ]- ]9 Y: P! C
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
! ^1 z4 X9 @+ K* B! ?. ~9 ]& G. h' }; I/ q) F
    // 事件触发配置* g8 [) y$ W9 H9 m2 P
    // 每三次事件发生产生中断
- b: e8 n3 X' w' g) r% n6 k4 G7 `    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);: e5 L8 \( U* h5 N, L' Y8 W: H
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件2 U% [  h% t0 v. \7 h1 i
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
+ N1 [4 X( t$ H4 O    // 使能中断
; R  i! r4 A: j2 r; q4 D3 C    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);6 \7 c+ b, T5 q" e0 d& _4 G

( M; n' U7 c& g: A$ X4 Y6 u    // 禁用高精度子模块
. L# Z+ j4 F( w/ b% z    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
# B% d- l2 b4 B- o! q; O. z3 \2 T% r- u
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
* a. U. D8 R3 M}
. K" _$ y2 C# c! z; `( Y) W
5 U! h0 r0 J1 }void ChopperWaveform(void)3 Z. j* A: R8 w
{9 U8 Q" @2 C; ^/ G" Z' B* p9 T
    // 50% 占空比# L2 ~: |9 H$ r: k
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
( a/ I/ j, x; y    // 4 分频
+ m" w) h7 _5 S2 M- W    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);" H" s# K( w8 m: h
    // 单个脉冲宽度
% ?7 o  `/ S# s9 c$ H& u( q    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);8 t; g6 c. u1 E( z2 T" P
    // 使能斩波子模块3 G4 _$ v- g% V; {0 k. v* g
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
# {) m  R% c8 K% q  p- d}9 d. [$ {- s* o. C  x. a0 E
' ]" U& d* w; J
/****************************************************************************/  M! W; s8 j5 \. M, V( C5 ~8 g
/*                                                                          */' X( c3 R' V6 u9 B
/*              PWM 中断初始化                                              */4 B5 k7 H% S$ k# u8 h8 D
/*                                                                          */. C* E* i; u+ T9 m
/****************************************************************************/
# y% E# Y# z  q. W* ~# C% U8 ?void PWMInterruptInit(void)8 E) l4 x$ ?1 W. i' w" ~' `
{
" i! I) A/ T8 t' a        // 注册中断服务函数, o8 T- ?" i7 }
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);) m' A1 a' g* `
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
5 W5 K& Z# ~8 j/ R* ~
- |* H  M. W- g" v0 e1 H% i5 e        // 映射中断
( W  A5 s/ A! [8 @0 n7 k4 ^        IntChannelSet(SYS_INT_EHRPWM1, 2);  W* G/ S, Z/ I2 f6 ?! I6 T
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);  N& d( v3 b! k& e; m) _! H, e! F

& i9 Q4 U3 {! D( S! m        // 使能中断
/ L8 }. _# J: M+ s# y7 r        IntSystemEnable(SYS_INT_EHRPWM1);$ f4 q9 L- y* x4 [7 b  t
        IntSystemEnable(SYS_INT_EHRPWM1TZ);0 k0 I9 p6 l! p. D
}
- P. ]0 c+ Y# M3 y, E: T; g6 M" |3 h! g
/****************************************************************************/6 L  H  L, y6 c
/*                                                                          */9 z; N; k8 }# N5 @
/*              ARM 中断初始化                                              */
" c8 ]1 D. H/ D2 _! d/*                                                                          */
8 i2 g& D) l( R: f6 [/****************************************************************************/# i9 T/ L  o% K6 _6 z% E) {2 @
void InterruptInit(void)$ o4 s' X0 b6 l
{
. G0 ~: P; }, I        // 初始化 ARM 中断控制器6 i3 b8 H) m" z: L$ |
        IntAINTCInit();. w* z# ]8 w0 r& h: {7 i

; y' M, i, k! _$ k: }        // 使能 IRQ(CPSR)
( O- h# @; Y! o2 i- |( _5 _' ~4 a% c        IntMasterIRQEnable();' A/ A' A, ^/ P/ H1 |
' S9 y( i3 O/ k: A* t# a& c
        // 使能中断(AINTC GER)
2 U1 _+ S* F8 |% I/ M        IntGlobalEnable();
% m% G+ b# C9 a' e+ c2 }+ V# j
  x2 l3 j8 K3 E6 G2 \1 F. M        // 使能中断(AINTC HIER)
2 ~: e9 [3 |  p        IntIRQEnable();/ p1 {9 o, P/ {4 ?4 V, g! W3 v: M
}
9 K  f. D6 u0 j$ U) B7 H2 D  o$ k, z* U- b/ k2 c* H5 s' H2 ?

作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/! U1 K6 ?% r; H" z0 }
/*                                                                          */9 K2 g7 W0 d. M
/*              中断服务函数                                                */
7 Y2 S1 K1 b3 i2 r& [0 B" G0 h' H/*                                                                          */; y, X+ I& k4 b# K, Z% F; D# t
/****************************************************************************/
- x/ e, G; @7 cvoid PWMEventIsr(void)
; D' p, w2 M8 X, |{
$ l. j% {% k- u/ S  g( N9 G) p        IntSystemStatusClear(SYS_INT_EHRPWM1);+ Y0 Z- w% h9 ]# y2 G- _( }" a& C

& `4 h" o# ]' N% t% a    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);, p! H8 N9 o( c* ^
}5 O1 O& b0 w5 ?& c

8 B6 q# I' y. \& B+ L5 V, Uvoid PWMTZIsr(void)" A0 C2 V: l2 Y" c0 r: q# i) [
{
. R! p! `! C4 E8 m9 l        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
+ d. k& I$ O. }8 X1 Y* e; d
2 L$ ?/ Y8 \3 S2 {4 U    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
, ^( R0 ~: ~4 B0 N5 \7 w}
2 U3 I' d+ J$ O
# V' {2 o" M7 g9 B9 L  z% s/****************************************************************************/
- Z6 u# ?, R) |: w. U/*                                                                          */6 T% G8 V7 y& _+ L3 W
/*              初始化捕获模块                                              */$ D' T* ^/ U3 F6 {/ i$ X
/*                                                                          */. n2 @/ N: d1 t3 A$ {
/****************************************************************************/
3 o) W$ x. a' `5 l  Uvoid ECAPInit(void)# y! k* n/ q' d0 M
{: q9 }% y& G$ f/ g1 v
        /*-----设置 ECCTL1-----*/1 P1 d" A9 Q* S# y- G
        // 使能CAP寄存器装载7 ]+ u1 n  {4 N- k% c- v
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);4 y, V/ f2 b) X: E
        // 设置预分频值.5 S/ S: e! H' i+ ~. @+ l
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
  F4 [5 \5 Z* D- a        // 上升沿触发捕获事件
& b: B& M% @+ D$ P+ Y        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);! K/ [- M  ?4 b& y$ U
        // 输入捕获后重新装载计数器值.7 S# s3 ]7 N1 s: e4 L
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);+ W- F( |  R0 ?" A3 I

0 U3 d! h3 r4 M7 y( B" E  _' ?        /*-----设置 ECCTL2-----*/* X9 ^' v5 Z* l
        // 连续模式& u3 r1 j6 F. P5 a  |4 W& j
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);4 \3 q8 E" `5 o  a; @* d( \
        // ECAP计数器TSCTR持续计数
7 _( k4 j# T% H" K        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
* J( R+ v/ H4 _  u        // 禁用同步输出和同步输入: H6 V4 Q# u* H1 O5 ?1 l9 G/ p
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
& }# t6 I6 C; Y( S4 V        // 配置 ECAP 2 为 CAPTURE 模式
$ i* y8 Y7 _: `( w* u  ?. O  O/ V- ?        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);) |" [. K6 N, K7 i" _
4 L) y3 W' [( |: }  R+ n
        // 使能中断
" o, m2 e; @( Z9 Q//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& E. g8 t- B3 b6 Q- F$ _}' |# ]. i6 M% N5 p

+ Q" R/ W( B  X- S- v/****************************************************************************/
* w- O  M0 d' e: g# F/*                                                                          */
8 G' O7 p5 P! L0 ^/*              取得捕获结果                                                */, b: r& y# l2 N/ c3 W% ^
/*                                                                          */
! @0 v9 M& D  |0 R( I- C% ~/****************************************************************************/
/ U+ o; T& B. H) [: dunsigned int ECAPRead(void)
+ z* c  `% X) [% L& W1 Y# F{
. @0 f+ A! z9 h" w% `& j        unsigned int capvalue;0 b3 b9 F- M5 }% Y6 c
        unsigned long frequency;; y- ~5 f  M& v6 ~2 |
# _1 O5 H( R2 C
        // Event1 中断标志
  a# C. E% t) M8 I5 _2 A        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
4 ^0 s7 P2 ]7 L        {2 v9 K. v4 E: Z: ~
                // 取得捕获计数
  l& A! W3 I  X( e( D! `/ \                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);" @3 e* I4 V, ~3 A/ _" P8 g* Y
                capvalue = ECAPResult.cap1;& ~3 v: J; m0 x8 r6 w4 M5 k
: Q+ k  P" }$ z9 f( J, T
                // CAPTRUE 模块 228M 时钟主频
2 e$ T/ G" ?. ]- X, F                frequency  =  228000000/capvalue;0 p4 W3 O2 P. |2 k; E) }7 K6 V
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: k7 O3 G9 B) p- K( s

5 ^2 W+ X) z0 ~& ^: J% V: ?                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
% j7 W, F2 L) ?9 f, Q% d8 E//                IntEventClear(SYS_INT_ECAP2);
9 t( {* c2 W$ u        }; y4 M( C" W- K) R
        return frequency;
. b7 ~- i2 i! I5 }}5 v9 x5 C( Z1 _' i5 Z3 G

作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。1 B/ G$ @8 g  c( M
[attach]4202[/attach]
作者: 浙江第一帅    时间: 2018-11-1 21:27
可以给我发一份吗
作者: 广州创龙莫工    时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4