嵌入式开发者社区

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

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
/ o- Q5 k4 [- i
作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/
5 K, S7 n" @; Y, @. d6 n/*                                                                          */
/ X1 z( ]# \( O( q# e4 {8 O/*              宏定义                                                      */' t- I' q8 o' a9 _! @& z( n
/*                                                                          */% T' e0 j; r1 e
/****************************************************************************/
5 t8 K. G' Q- Q4 C% r" I5 u) E) Q// 软件断点& f3 L! @. P" t) s) \  I) n4 d
#define SW_BREAKPOINT     asm(" SWBP 0 ");; E( e2 p% O$ Y" j' O: G; b

( J& n$ n; F' R/ C; @// 时钟分频* d# e+ b* E5 F8 R! C- m5 v
#define CLOCK_DIV_VAL     228
: X) H6 H$ O; Z5 s) R$ O3 E6 y
, v6 w( \+ r  P4 l$ `& k/****************************************************************************/4 `8 c8 G& n9 c/ R
/*                                                                          */
7 w4 J8 L" Z, S& L0 V/*              全局变量                                                    */- c( l+ J4 k, \% j* \& }
/*                                                                          */: L$ `# A0 z* l+ v  ^4 o! ]% O
/****************************************************************************/( B7 a6 A. A) A
ECAPCONTEXT ECAPResult;
6 }' V8 _  ~7 p" t7 W2 J- I  H' z. p4 q
/****************************************************************************/
0 q4 k6 y3 S( M" R6 g8 u/*                                                                          */
( A5 F. y. t+ G% @7 i0 z0 T7 P. f% K/*              函数声明                                                    */) H9 J' Z' D! A) a; h/ Q
/*                                                                          */
  W" t% r( l7 T5 I2 N6 W: e; ~- c/****************************************************************************/+ W: v- D8 p$ @* }
// 外设使能配置
0 @( |) e) H$ w% l* rvoid PSCInit(void);4 K8 @4 ?; v* X' R

0 I$ }* ]. ?- H  T5 ?; C- T" r// GPIO 管脚复用配置
, i# \3 }  c* ^  v. P4 u2 Jvoid GPIOBankPinMuxSet();% L' F7 T4 F' _$ e, T3 S
) [" j0 N; M% J' K& |7 P' ?: m
// 产生波形7 w6 ~1 r/ f% u$ i* Z- g. R
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
+ H/ w8 E4 C, ovoid ChopperWaveform(void);
2 S0 f/ A* a2 Q& W& C* e/ I
/ x2 p, ?( Q6 V! y0 g// ECAP初始化和读函数
8 F; G* _7 u: A4 t1 X3 d* Yvoid ECAPInit(void);
, q1 u& z/ |, y! M! Uunsigned int ECAPRead(void);( E8 C3 w0 G. @! z, h( R. r& i
) w8 D# |" [1 D2 M+ x" }
//ARM 中断初始化
& M  o2 k* k% @: w; u, P0 Wvoid InterruptInit(void);
* f5 t. z9 f# U! A' {! C9 I& [/ _( f2 ]  G
// PWM 中断初始化
5 A' b+ N" j* h! h: C' e" x& Tvoid PWMInterruptInit(void);
# a, i4 ~2 T( T& d& m6 [// 中断服务函数/ Q# O7 A6 x% g
// PWM 事件0 {! x4 |& j4 R4 p8 i# j0 ^
void PWMEventIsr(void);, j5 h+ {( [" `& P
// PWM 错误控制事件
' B5 j' G! h* jvoid PWMTZIsr(void);" D8 b: G& Q, W9 d  v

: n7 z# u: E3 c4 R+ D/****************************************************************************/
2 N8 Y; x5 P( m2 [, j- m/*                                                                          */% u  i+ r3 J3 e
/*              主函数                                                      */
5 r& H2 ~3 f, h% ~: y% v/ e" E/*                                                                          */
4 K. t! V  u# }# k+ T4 j$ V' O/****************************************************************************/
5 t9 E% |$ H: Z$ Bint main(void)& Q4 S! B1 t8 K) r
{  f! d* a2 s! x2 F) @
        // 外设使能配置
6 ^5 Y  b: S7 `5 }) p9 N2 f        PSCInit();3 v7 Z& M- {- T# B4 P: l
, k3 z9 B" a7 x$ r7 D
        // 初始化串口终端 使用串口25 P7 ]  l7 [/ g
        UARTStdioInit();
3 N5 p8 _2 r5 Z. u: L; v, ~       
, W: U' Z& @4 h  z. I8 Y, k        // GPIO 管脚复用配置3 t! j( W9 k6 X8 q8 I
        GPIOBankPinMuxSet();
3 K( \: A* \0 N% ^- a$ ^- _
$ n* q# r( |( K2 |        // ARM 中断初始化
5 {! X+ Q3 i; \1 }6 S2 g        InterruptInit();  n9 H) x7 j# M' y" N, Q
0 Q5 l8 g% e: Y
        // PWM 中断初始化( T. K3 c( ?# L5 }- u" z! o
        PWMInterruptInit();
% t6 b2 R: |3 F  q* u3 E, U
! O8 J: d  p+ j% T        unsigned char i;
- P$ j% @+ p3 U        unsigned int j;% S' C. q2 Y, Z* z2 m; o5 E, R

% O2 S  P5 M, e# m7 G+ P2 b        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 w# {0 g. [6 g; M2 N        UARTPuts("------------------------------------------------------------\r\n", -1);
1 O& a% y; w2 Z        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);8 c- ?8 k5 K- m
        // 产生波形
6 z6 V: a4 |: d( G! T5 b, l' }        PWM1ABasic(25000,50);
7 ?: k. X' O  a3 ~1 _& @  ~8 K: O4 ^* t
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
. a; @( y1 U( Q- C8 e9 U        UARTPuts("------------------------------------------------------------\r\n", -1);
) ^0 A7 I1 Y, c8 b" A/ p
) _. s" |4 l) [  I' b- }
  M0 E; s0 q2 }  \+ b5 @( u" _3 P0 R7 ^, m) }
        UARTPuts("------------------------------------------------------------\r\n", -1);' W8 N& m* l( n1 O8 e  g
        UARTPuts("                    C6748 ECAP Test\r\n", -1);% r* R) A# `3 \- h
        // ECAP 捕获初始化
. U, r, a+ f' b& {2 f* f) J4 W        ECAPInit();
9 |' c: a9 T: p4 A3 q# x4 R        UARTPuts("Initialize ECAP.......\r\n",-1);
4 K5 h' X& h, F        for(i=0;i<5;i++)9 @7 I$ `: j3 `
        {: d$ _& W. n0 S- J4 K! M; \8 ?; A* ^8 p
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
+ w1 K; G, v4 [9 x. b; N! U                    ECAPRead();5 q. v; h  x4 H" \- V: Q
        }3 y" Z; B. [" d& X; r8 T+ [
        UARTPuts("\r\n",-1);7 h: O( o  }7 H4 ^
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);) S' d/ n! M' |
        UARTPuts("------------------------------------------------------------\r\n", -1);" q  p' ^# E5 f5 J* u7 q
5 F9 n* S' n" I; T9 _2 h6 i% v
        // 主循环9 }1 ~0 {. Q/ P
        for(;;)$ i: ~! F0 t/ n
        {; m- \2 Z# E  W8 R  T
: r! i/ p! Y0 Z7 }- X7 N
        }
8 N1 ]( H; m3 d0 L0 Y& d3 \}
- B) x, A* m( K1 H  G, b  N; W: D  N  n" B& E* H5 u( s1 p
/****************************************************************************/
- b  c. e8 s4 W/*                                                                          */; ^" d1 l8 J  l; D5 J
/*              PSC 初始化                                                  */
1 U; m! z/ k. h& }5 d8 G- B0 C/*                                                                          */
+ t* ~7 e, W2 B* m/****************************************************************************/; S' E' o0 a; i! B
void PSCInit(void)
, {/ {1 L; w/ V{
; c- ^. x6 }8 d9 Z9 l        // 使能  EHRPWM 和 ECAP 模块
, k+ t% n+ p# @        // 对相应外设模块的使能也可以在 BootLoader 中完成
! w8 o: T7 a4 I( P    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);3 j+ j" T6 t6 L
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);+ L$ r2 O/ X! E. v! L
}
$ b# t* W4 a' L
6 U/ `3 T% [4 c3 y# e: E/****************************************************************************/# v+ ?0 \3 H7 X
/*                                                                          */
* S/ d7 q0 \3 \* \# {2 j4 e/*              GPIO 管脚复用配置                                           */
! m/ V7 D! N7 N" W( p" j/*                                                                          */6 K8 @: b+ D. n
/****************************************************************************/
+ i  b. B6 [1 v' T, K2 v( p6 X/ [void GPIOBankPinMuxSet(void)
' ?7 b" X/ ~% f{' d7 [0 w7 W! t" ?( ^
        EHRPWM1PinMuxSetup();
6 ]7 m- E; u# t4 X
3 f0 e2 p2 M) {1 w% Y        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
- W0 q" G# b7 m3 A$ x        // 作为捕获功能时管脚方向为输入
6 X0 a) p3 X! n$ D: n/ d$ |) N) e: F        // 作为辅助脉宽调制时管脚方向为输出
* `% r1 Y: E* W5 B. m! G, p" T4 X    // ECAP2 / APWM2
$ F0 }$ e" r9 G4 g0 r        ECAPPinMuxSetup(2);
; F9 p0 N& ~* T. O8 m# o% b
7 i. ^" ^* y. _/ E        // ECAP2 / APWM2方向设置为输入0 P7 N/ C& m, L7 w" {
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]. W  o$ [9 g1 U
}
2 Y+ |, @' T: y; Z3 x6 E! y) S/ H% T, _( H3 t; M6 S+ y
/****************************************************************************/
- `* X* @! _* `/*                                                                          */2 r' _* l& y2 O" J
/*              PWM 输出波形                                                */% l1 U9 c0 Z: O) o3 _7 G! n
/*                                                                          */
; B9 U* Z7 K) v0 _! J9 R$ l/****************************************************************************/
* T( J' p6 v) S' R7 Q4 E, |6 f$ Svoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)# {+ D/ M+ n0 i% N) [9 @
{9 \# y+ C( J3 }; u2 o/ \' m+ r
    // 时间基准配置
7 y. G0 {/ E( T+ l    // 时钟配置, y" L7 g  a0 C  g2 }& }) ?# Y5 A
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
1 m. I, `* [3 C* P  [9 ~% V$ E: j$ s; B
2 j8 q8 s+ D6 k6 R$ Y    // 配置周期
5 h9 F; @; X7 Y; l: E6 g! Q    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
7 o* x- G9 x8 ]) x8 p                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
. A) |! ]: U! P6 r3 O4 F' u! H  H7 i; T( G5 m9 R4 m+ K4 C5 F6 }
    // 禁用输入同步信号% w4 E% A; J5 B
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
& f" p3 B3 n/ E0 P0 U0 A) }% U. g
" \3 z- i% U" p: b% y    // 禁用输出同步信号1 F8 s& Y5 m4 p7 s4 r
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);# O- z* Q3 K& A' Q# }
7 H& x1 w% U$ H
    // 仿真(DEBUG)模式行为配置' P$ j- {, M4 W1 z
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
8 v# @0 r* y! Y7 t# d- j( f+ E+ @; c7 l) D
    // 配置计数比较器子模块1 g  J2 L) D1 }- f1 W
    // 加载比较器 A 值
0 x8 S% w5 ], K( Z8 V, A* c    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
& X) P' B1 x  b$ P8 U$ ^$ z                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
, q2 d7 C! i- a5 O' }) @3 V* F+ X( s4 [1 n
    // 加载比较器 B 值
7 r+ V7 F- @2 r$ S$ j* e& C8 e    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
; I  \$ G5 I& {# ^+ Z6 Q+ t$ @0 `                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
0 W, c* V/ |& \( N  R
! w/ I# q  D3 O2 C    // 功能限定配置(输出引脚触发方式设定)/ d9 r2 F% V0 [2 [0 z
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出# N! W3 r  g6 d. |
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,0 ?, o5 ~2 ]1 A) f$ |6 O+ Q
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,5 N2 k! q4 L2 X; @
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);8 h3 |" \2 E" @1 s# X& z6 @

; J4 o( f# U1 P5 E  l5 N: _- ]    // 禁用(旁路,信号直接输出到斩波子模块)死区模块6 [! f6 x* R% j8 A
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);. Q* S8 |. d; V" Z8 s! ?( d
- g- P- ]( j' [0 ~9 O! K1 o
    // 禁用斩波子模块
1 z5 V: G7 [) P1 e) m    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);8 M6 g# c* g- g' H5 `5 o$ z
# U! t# x4 P8 n
    // 禁用错误控制事件8 ?' k7 v2 G( S3 c# M
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);3 D. R, t4 x' j' y0 j2 T6 ^
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);2 M9 r; |. V  Y8 h7 o2 b
) [* ~* c% b  {8 U2 g
    // 事件触发配置
6 i" e& o$ Y4 {    // 每三次事件发生产生中断
' J* S# R# u  L) W* ~  K    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);: p# p- s8 y+ S7 t2 V6 y6 g
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件+ K) u' c8 Z# _' r: u. c
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
) U" N( w% l  V+ g% W$ C    // 使能中断, @0 E/ ^( l( J) b  d) L3 [; j7 a1 w
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
  b: h, \# `# l3 t6 E  k. }5 c8 ~$ a( ^; k; i" k
    // 禁用高精度子模块
; r( l6 s. T  U3 v; L    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
4 g% @/ I* b* Z; H, c& C9 E
% u* f4 k  G! q: K9 O- I    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 Y, F* J. f2 `}/ J' X2 w& h7 V- V7 L+ i4 \' n

- U8 w! I$ N1 M' ^& O' Cvoid ChopperWaveform(void)$ E9 R& l* D9 N( D6 Q
{, T( c/ {: v; f! ?
    // 50% 占空比
% K9 l9 N! l, h# y: d! N    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
) p- e& _6 ~  C    // 4 分频
: D4 d/ x) m$ C% G3 V, d. h  @    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
& e! `% |6 E7 Y4 R" ?  F    // 单个脉冲宽度
/ z0 A2 o8 o' i3 t2 s+ k    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
5 `* y6 [8 M/ @9 ~- w    // 使能斩波子模块+ _2 [+ E' b/ S/ L2 j5 X
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
* ~1 F* U: _3 M" S$ F) G: m}
1 p6 G5 i+ ?5 ?6 @: s8 D4 e# G4 d8 B& Q/ f0 n
/****************************************************************************/' X1 r6 k- q5 C5 @5 i
/*                                                                          */' S9 t; W" a# q# ~! g% z
/*              PWM 中断初始化                                              */
3 U# R. J$ j- S' B8 ^/ |) Z$ M* D! d/*                                                                          */& @6 O  u! g% D( k) e5 [
/****************************************************************************/4 V. [4 S6 O$ X* g
void PWMInterruptInit(void)
; ?/ X8 g. \, I) Y3 ?{
2 w* S1 x9 j8 P8 ~& h& I+ I: D        // 注册中断服务函数- l& s) W8 ~* O3 L4 m! F$ {3 t
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);+ w( W2 y7 z) U' b# V5 k% N
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);: [( h6 c  U; s( ?" F

* i  }7 Z) Y8 k$ \4 ~9 _        // 映射中断# p* h0 X. y6 B( L
        IntChannelSet(SYS_INT_EHRPWM1, 2);* F$ S  v% m$ D3 s: r8 [4 W5 W& u; }
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
1 A  z/ n) y& \, H0 ]' b+ T. J9 m7 @) n6 O2 _+ j$ Q! p/ j
        // 使能中断
/ q# A# n$ B1 Y8 ]1 k" }& L; T        IntSystemEnable(SYS_INT_EHRPWM1);
0 B6 h9 O9 t. |! A- C& A. _2 C        IntSystemEnable(SYS_INT_EHRPWM1TZ);
1 Y9 u+ Q5 a1 C: `5 p, N}
' D) B7 {% u& [1 P3 T. @2 b3 j: o% T& H" W: D7 k3 P1 K
/****************************************************************************/" e3 g$ |. \' p2 I
/*                                                                          */. B8 ?% f2 _9 p' f" Y% R; {- f5 V
/*              ARM 中断初始化                                              */
% h) R" U1 J4 n' |3 I. z7 `/*                                                                          */8 r0 s( S' S/ p9 y* \& l
/****************************************************************************/
3 O# V( S' X7 t8 [6 B& uvoid InterruptInit(void)
/ K0 S3 W% q' X{
$ V: x" V" ^% b! i, b& y        // 初始化 ARM 中断控制器
: K  e  m' s7 m' f# l        IntAINTCInit();
- a5 j8 U7 n. t' }9 G; }2 v! I1 g! [7 R! |
        // 使能 IRQ(CPSR)
7 w0 c, r% f% T8 n. Q/ j6 O% R0 |        IntMasterIRQEnable();" I, x7 L: ~8 O& b9 s

3 \+ F  @1 l* {( l. ~        // 使能中断(AINTC GER)+ ]* S4 ?" h/ L+ ]3 S2 R. {# V9 G
        IntGlobalEnable();) ~2 ]1 R0 o9 |' X- ]4 d
  p9 C* {1 X& Q
        // 使能中断(AINTC HIER)
" Q: e0 ~6 f5 Z) `" d# L4 g3 t5 Z        IntIRQEnable();0 ], Q, Y& u8 p8 e
}
' I9 b+ E" n- Z) C" _7 s" w3 \1 f
; `6 |2 f* a; s& O5 a
作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/
/ _& y5 ?% s$ v9 F/*                                                                          */
( r6 b5 i0 U4 M" D% }/*              中断服务函数                                                */
& q: n* i# J  ]' ^/*                                                                          */) i9 }# r# T9 h6 ^7 X6 l; m
/****************************************************************************/
9 m* s. y' P5 ]9 Q+ Y+ X# Mvoid PWMEventIsr(void)
. N5 [9 E- I" L' V: W{2 M0 t. ?* a% _! k
        IntSystemStatusClear(SYS_INT_EHRPWM1);
& z. j* u5 p( a: S7 u, |
" X& R% Q+ x/ g' ~5 q0 v4 ]    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
. e/ D/ z0 d* G}3 d* h) B  l6 E- i; q. Q* [
8 w% X8 o6 U. g$ R
void PWMTZIsr(void)' n$ r7 k% N) x, t7 h: ~6 E' j
{
% Y. {1 F5 U" s. |/ q( O; j" _& @& a0 y        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);& Z  l9 P) W) S$ y2 v) s; V: |

8 f- p6 l* S; b! D& E3 f    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);2 k; `3 `$ C$ j- \0 C$ v% L
}0 Q* m2 }0 S6 {# @- a( H1 ]
0 [* {4 g' i+ A8 a8 g" J; m
/****************************************************************************/5 m' d% C& X! h$ G
/*                                                                          */8 @  s+ m2 }! V" g
/*              初始化捕获模块                                              */
0 X$ i7 Z! z5 ~* c9 e/*                                                                          */% p( z1 E$ c$ w8 J4 n( t
/****************************************************************************/
9 Y! q; Z/ b0 a, ?void ECAPInit(void)
5 B/ S5 Q0 L5 ]) P* G{) I7 |( i' I- X2 V; ?% X2 n
        /*-----设置 ECCTL1-----*/0 f6 h  b% @+ I7 X+ c& M
        // 使能CAP寄存器装载
; i" T) l7 Z" T        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
( ?1 L5 d( T+ H2 X1 I( t        // 设置预分频值.# a0 I  `1 S% N2 m6 q1 s7 T
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
9 s% x! a' r1 R5 c        // 上升沿触发捕获事件
- |8 E  x7 z" p% S        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);5 r5 b& A7 o6 R; ?$ I3 o7 q
        // 输入捕获后重新装载计数器值.
2 g: ~' x1 F/ L2 S  \        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);" p4 V, U, D8 d6 N3 F) c% X
; H# H: G4 q! \% ?* K2 I
        /*-----设置 ECCTL2-----*/5 H6 c) u. s  h. y+ x
        // 连续模式
6 n) w, q5 G% p- a: V! }        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
$ T9 Z* S$ {$ s+ L, }, ?        // ECAP计数器TSCTR持续计数
7 e9 A0 ?7 M( D% _        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);8 |9 S$ j2 h$ P) E
        // 禁用同步输出和同步输入
2 A( P% Y8 A8 [* G  B3 J        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);% p6 m1 c) B: g4 r( ^& t0 U  [& s
        // 配置 ECAP 2 为 CAPTURE 模式. D, M7 ~0 G5 U' l- ]2 \& ?$ E
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
1 y8 x% [+ y/ O6 R4 W( o+ A  _+ P! F7 y
        // 使能中断
, B* [; l" f! [( L5 L//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
) G4 |6 D, N# k' b, ~% A! b}
7 {  L" u& }% I1 }. s: b% }
3 r3 V9 X0 I* t" y, D/****************************************************************************/0 [9 C. t; z& g9 x* o
/*                                                                          */3 }% T! E3 L$ T* f& S' ?6 s! C
/*              取得捕获结果                                                */' d8 G1 ?- l" `: h9 x8 x
/*                                                                          */
. k% L9 G8 [3 o" u: u/****************************************************************************/
# a. Y8 |3 I9 J5 X2 p$ G5 |/ lunsigned int ECAPRead(void)- R4 I. I: s5 [
{/ Y9 k3 h4 T+ e4 e3 x8 ~6 w7 k
        unsigned int capvalue;
7 f  a! ]# W. v! h0 p) K        unsigned long frequency;
" P0 W3 `6 C/ O5 m
* q  e* f/ }5 O: E9 F* t9 w        // Event1 中断标志; r4 }7 T8 I7 [/ |$ E: D8 [! H( U
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))/ m: N' v+ F0 w# k6 X
        {
% h( j3 y- X! p: f* q' i: l2 q! f                // 取得捕获计数
' v/ o1 x" d0 _8 a# A! A& X5 R0 s8 ~                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
% F# D4 Y% R2 i+ X; ~+ D8 l0 F" v                capvalue = ECAPResult.cap1;1 f1 r+ E$ r, x) ~% f

5 u, A$ r2 ~) B7 M                // CAPTRUE 模块 228M 时钟主频
9 q1 f) W8 G  ]7 N% t$ q                frequency  =  228000000/capvalue;
) l+ f# c  F6 ]8 |$ N2 H                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
: A4 V- K; F% J0 ^' B' T
* z- R5 X* |! Q2 ]8 t                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
6 j) f$ g+ S% s1 W3 F0 n//                IntEventClear(SYS_INT_ECAP2);
* F( L+ O4 {" x4 N$ ~- O/ q        }
4 y8 m/ Z) M5 R3 |8 g        return frequency;5 N. e8 d* o" B/ n) L
}
7 p) D9 X- I7 C, P
作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。5 }% w, w. r1 Y) w
[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