嵌入式开发者社区

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

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家7 v! _) U( }8 t- J# v

作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/
9 h# f! z4 U! C% c( F/ a/*                                                                          */
# {7 {2 F3 W' P7 c2 Z4 A/*              宏定义                                                      */
  a" }0 S  C* L& @3 H+ g6 C, z6 R/*                                                                          */
3 h$ ]' _& \0 l4 L/****************************************************************************/
. d- q- }" c; ~+ X// 软件断点
+ |% n" F$ N, Z9 `7 P, H- |#define SW_BREAKPOINT     asm(" SWBP 0 ");' e" i- M- }/ A( Z- O
+ z+ P, K  M/ w- }
// 时钟分频
& k: R7 _4 s/ Q/ o( _: V5 b) ]#define CLOCK_DIV_VAL     228$ }. u: L3 U* L" r: Q
% {) {+ x! x! s6 W( ~0 @
/****************************************************************************/2 ~) s$ _7 x9 y
/*                                                                          */; W8 `' u4 f: f8 V
/*              全局变量                                                    */% ^% ]) ]' y7 Y4 l# v
/*                                                                          */* b" y0 |) B6 q% ^4 {
/****************************************************************************/" J6 t% Y8 B% L
ECAPCONTEXT ECAPResult;
' l+ @2 d, P& A
& i: W& ~5 L6 ?+ J( H9 C* r/****************************************************************************/
% r8 R, @# w# P/*                                                                          */
6 S0 N- o! B* d* q2 s+ V/*              函数声明                                                    */
2 e$ }. b3 o6 h/ r' a/*                                                                          */( t  N+ U5 }& C9 ]  L% ~
/****************************************************************************/
2 O9 y6 [0 w3 |* a  `// 外设使能配置1 s! F2 O  s. Y% Y
void PSCInit(void);
) S( b& D2 J0 R
+ {0 x; }* K$ R// GPIO 管脚复用配置" }/ u% W  D, l7 Y1 [1 q
void GPIOBankPinMuxSet();* \8 O7 G" k0 L0 A3 _
: d( D6 c& K2 G0 ^0 k
// 产生波形+ `( E4 J- }* m% r, [
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);: m8 g: |. x2 K9 N4 K
void ChopperWaveform(void);
8 t, P5 W& C8 o$ h1 j0 e: N1 w( L$ y. w, B0 y, h
// ECAP初始化和读函数
9 Y6 @7 t* d# m$ g2 Z$ [2 ovoid ECAPInit(void);
6 @, N7 X& U8 N9 k* }) H7 munsigned int ECAPRead(void);" S" E8 H( o3 ?! j6 A! W

0 f4 j, {# v; U" R, L# Z, c6 ?//ARM 中断初始化
) C0 v) Z2 ]2 y) {6 s4 r3 uvoid InterruptInit(void);
7 M8 D- g  F* x5 f
, s, H# A" j( F, M8 d/ Z; ?, M; Q3 X// PWM 中断初始化
+ |: C. f/ F5 l1 `. y/ Fvoid PWMInterruptInit(void);
2 R7 o4 t4 t. J7 l// 中断服务函数- S9 l) c$ j  r% x5 b- a( Q6 K) o
// PWM 事件0 ]8 ]- f7 h) z
void PWMEventIsr(void);
' g% u5 r4 J; @8 J9 U// PWM 错误控制事件
1 `" `" v  R$ G2 _- p$ N* B" I% [void PWMTZIsr(void);
1 D$ U2 T# v+ a) _) l9 B2 U$ m' K2 ]" `6 U2 {4 V
/****************************************************************************/
  O- G2 }1 |9 u& p* Q& `# T2 n' d% y/*                                                                          */0 b9 j! L1 P5 G: K
/*              主函数                                                      */- Y, c- M4 g. Q- R6 P# b
/*                                                                          */
2 T0 n7 f: x# ?; a9 o2 z# ?/****************************************************************************/
8 w% b) i6 T5 r1 x: X! C, d/ Jint main(void); d8 R0 e" i7 ]# }5 Q
{; R4 ^: e& A+ O! Y
        // 外设使能配置' h& k& q1 w7 H# R% s# d: w
        PSCInit();
7 S( y8 ?( g1 S. M9 c; b; h  ?: n+ W1 U$ G# P' c0 Q
        // 初始化串口终端 使用串口27 ?2 g7 d7 q; K. @
        UARTStdioInit();) j0 |6 h- k7 E9 j; \) R
       
" q' d/ a; d8 M0 I. A: Z/ J        // GPIO 管脚复用配置
  Q( h6 j  C2 H! X* A  T0 x        GPIOBankPinMuxSet();
, d) s* h" t# d7 u: Z* e* q. M; {
        // ARM 中断初始化
0 @. _% T$ T* u  ~$ E1 Y% b        InterruptInit();
, C3 u' u% V4 P, l9 [- T
: a. \& J% v5 [' N5 Y        // PWM 中断初始化
" Y5 g9 y5 U1 L9 }" J        PWMInterruptInit();$ O" B  o. F# s, M/ B. \
3 z% [( k5 a5 ^0 N4 H* \
        unsigned char i;) A: E4 i2 b3 S' @: Q
        unsigned int j;
1 R# @% d7 S2 |* Q+ o: k7 e& s
/ G$ Z# `' d- r        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);/ h8 ^  a6 y7 p- @
        UARTPuts("------------------------------------------------------------\r\n", -1);
4 k& Y3 J1 X$ A$ L2 P  f/ I        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);! W% h, K! }; N5 I- j
        // 产生波形! b# @4 r- G: k; ~+ y! c0 y
        PWM1ABasic(25000,50);
  Y8 h4 d2 ^" T0 s2 C/ K
) C; L# u8 C1 [1 ]/ m  B        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
$ P2 L9 P" r2 O8 G# g        UARTPuts("------------------------------------------------------------\r\n", -1);9 B$ N2 v5 p4 e# J  J$ `

0 k& r9 _0 Z' x, ~. v. C. E" z1 R) B
5 {, o; t, r7 y
( H- [/ D6 ~" s% p, ?, S        UARTPuts("------------------------------------------------------------\r\n", -1);
! t$ ?7 m8 k4 J0 d        UARTPuts("                    C6748 ECAP Test\r\n", -1);
1 v8 N7 C+ J" R- |        // ECAP 捕获初始化
  k( A( d" q" p( ]" |3 J. x        ECAPInit();/ W& E! d5 f8 P" V* Q( c
        UARTPuts("Initialize ECAP.......\r\n",-1);
! n3 ~# X2 a3 ^$ B$ _        for(i=0;i<5;i++)+ r( d3 Y: J$ M4 d
        {
3 ^* j8 a" D1 P4 d                    for(j=0x00FFFFFF;j>0;j--);            // 延时
9 S0 t. [& O! L- o6 O/ H                    ECAPRead();2 k; z$ L2 C, I' ]' U
        }
5 S" ~) ]& r  \" z, D0 G( m5 R        UARTPuts("\r\n",-1);
, K0 P) }$ `, }- S; d        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
  J% [8 U7 d  b7 ~- X, B        UARTPuts("------------------------------------------------------------\r\n", -1);
$ f+ G' o  z) \- f9 k0 U
) q- H8 x6 m6 C# Q; i! b% ?        // 主循环
/ s0 Q( Y5 A2 R, F        for(;;)" s" I) C+ Z( c3 y' A
        {
2 k  @( }+ V; M& ?/ b& {
! I1 z) u  n; ~+ a" c% i% p) d        }6 C) `- o& j5 m0 O  b4 Z
}
2 W5 o% [2 j( e0 S- A6 [: x5 I- j; Q; B' H) P' N- W7 Z* I3 y- J
/****************************************************************************/6 [& N7 i* {9 v
/*                                                                          */  Z) b4 g. q" [% ^
/*              PSC 初始化                                                  */. v. D; u3 @$ f: F  e
/*                                                                          */
0 g4 M1 y8 X" T& N+ h# K/****************************************************************************/
+ h% ~: j* _7 S& A7 {void PSCInit(void)
* N" h  n2 C9 [  \: M) Y0 x{1 P: S/ u0 {. f6 N! N1 _
        // 使能  EHRPWM 和 ECAP 模块( ?6 R* `6 T# ?4 `9 \. [
        // 对相应外设模块的使能也可以在 BootLoader 中完成
: m1 R: Z" E( J- P: q5 A    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
' I  j8 S" r) N    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
0 M+ _3 w( }0 j* R0 `}6 y; p8 D% J+ y5 C# I  ]. L

, W! ~' F( n4 A( q) B. d/****************************************************************************/
1 x. x' `/ m( g1 _! ~* r$ y3 A# ~/*                                                                          */' R( v; [/ M, C! A; N% S4 y
/*              GPIO 管脚复用配置                                           */
6 e7 Z) C' b1 v0 N9 w/*                                                                          */! c$ F0 Q' h; D) o% X9 E
/****************************************************************************/
" @+ ]/ I" I& s7 a3 d8 ~5 z5 Gvoid GPIOBankPinMuxSet(void)) e; A1 z& ?& B8 f- F
{
0 ?) Z9 ~/ W. d: T* x- n5 Y: |3 p        EHRPWM1PinMuxSetup();
; Y4 n7 p" _) X5 o* C4 E  m- }* I/ A: }+ y3 N! {) h
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
! }  P3 }- g3 d( @* {        // 作为捕获功能时管脚方向为输入/ L; U6 w: g& i$ ^
        // 作为辅助脉宽调制时管脚方向为输出
3 s) A/ F5 l/ F    // ECAP2 / APWM2* g$ n" H( K8 Z6 |0 H& v! G
        ECAPPinMuxSetup(2);' M( [. I$ I  U1 P1 G

+ }" ^: S9 ]2 c1 A5 E* B        // ECAP2 / APWM2方向设置为输入
9 J& y% U) z- x        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
4 e# T2 ~0 a3 r( _% O6 V}( w" r( c' i; P) u3 M/ [' X
) E: |" t( X* p
/****************************************************************************/
, a* j* o. A: }. E# B& M% B/*                                                                          */+ r5 Q, R9 y: k9 ?: z
/*              PWM 输出波形                                                */
1 c, S' ?4 ~& V* V# ?4 o/*                                                                          */% y& [7 W$ g  y' I$ y/ X  I) s: t
/****************************************************************************/
* b" K2 s% Y; E7 |3 Avoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
5 l6 u/ t# k9 q$ i3 r3 k{0 m4 n) l# ]& P: u
    // 时间基准配置
8 m3 n6 h% l1 Z5 R" z9 k    // 时钟配置
; B/ r2 S/ I/ j$ p) Q. {7 O7 l    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);- p0 `9 {# p- d9 |! I  Q2 b" m8 m

" ]  A% d+ @4 Y6 K7 H! _( \    // 配置周期6 G( a1 }. l& M$ w- K2 w
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
* j" B+ a3 k6 Q                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);1 }8 E0 I0 E  @9 x
+ k4 e) L+ y, l' \2 A
    // 禁用输入同步信号6 N+ f8 ]4 F$ H. V
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
) f! @/ f4 O; r) v' l( R! j% I( L# D
    // 禁用输出同步信号
9 v& D. U. W/ ~$ x    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);3 W  `6 ~/ m0 T
. f, Z) p7 w% g4 {
    // 仿真(DEBUG)模式行为配置- w  x7 J+ @4 V. j& e, X, d/ g6 \, R
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);) t$ z: k% s1 i9 }  P
; S0 J4 W# |- _1 d
    // 配置计数比较器子模块/ `- E7 D: q0 _
    // 加载比较器 A 值
: e, j# y9 |& j9 h    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,$ V2 v; x9 g# r3 q
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* s: `7 l: f. Z) K' c5 ^$ O& a, u
. [" E8 ~/ V; T! s4 b
    // 加载比较器 B 值
* R' e: ~3 R/ J* a2 T4 E    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,  Z% [7 y  ?4 F, B: n% k( C, ^9 e
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);7 u6 L. K& O" u# s0 j- x, w0 n* K

' W6 a* d( K3 H  p* F8 v. M    // 功能限定配置(输出引脚触发方式设定)4 s. n  |$ ]+ S; [
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 M0 a, i' w* S5 O    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
" Y6 g! `+ S+ L/ _7 d" B; c5 ~; N                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
; {0 u' \" u# ^1 t  J                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);: H# W, T/ t+ t

( T$ T0 d' `5 d7 x8 Z    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
0 Z1 w3 [; o( y  I+ o    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);& t5 m  O# S' E6 d& v7 k

# F7 x9 E5 }* i2 w) L# g2 @0 u    // 禁用斩波子模块) q3 V  t7 h- W1 S! B" {. s
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);, b/ z. F. x) |) O: ]8 D& f

" w8 b! S. [/ h7 V    // 禁用错误控制事件# C! S: e+ B  f/ s6 i4 u+ b8 J/ L
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
# e4 T; Q. t# _+ E6 A8 |$ |3 m: y8 ]    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);$ m, @: N7 o% G3 H9 ]: r' G7 l

5 o* N/ a, m2 C  |    // 事件触发配置
3 o' z: K! j! a4 t) Q& K1 O    // 每三次事件发生产生中断
6 c) g4 R# n0 O: w" i    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);9 u& F) h" z8 p) c
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
, j5 w' |# |$ S$ W+ h8 |4 k    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
1 m5 @% q9 I3 T. w% p! \4 d    // 使能中断0 A& a- F7 H: t7 d* a  ^
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);" l, L2 Q  r  b7 t4 O4 L, ]
, o! J0 v0 w  V) y
    // 禁用高精度子模块! N" F) X8 b) l, m. i7 _
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
5 C& L3 I- K  y! y7 X) l2 \7 ^& Z' p1 X: K  e
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
" o' X6 z7 G# b1 q}
/ s, v9 v) }, @. m% _% c% k, _
void ChopperWaveform(void)
, v) Q  \% l' O: b$ N{
# ?; j3 ^; l6 |1 |$ V    // 50% 占空比- ~0 c" Y; H, p: i
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
% L, ~4 t% i" G% I3 Y    // 4 分频
- o* V5 b4 `0 ^4 e$ d4 s% @" e    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);9 V* N# j* Q, G5 K# K
    // 单个脉冲宽度, q$ v' m8 V9 Z. h1 P' O5 l
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
  v# |6 ~/ E& W! S! ^    // 使能斩波子模块
7 j: j. [8 W: @0 @- w3 y! s    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);7 q% c) _- x6 G8 ~
}) |- {$ ]  I# ^# @( X/ y  O
' k1 i) y8 g. X# |* ?( h5 s
/****************************************************************************/4 E/ G/ X" H$ }% Q( x6 {
/*                                                                          */
; I8 Z# m* O8 ?+ a: b  b  n0 i/*              PWM 中断初始化                                              *// P2 O7 p/ h2 H0 x2 |
/*                                                                          */
* q5 j) p* J* d2 q) v. L4 X8 [/****************************************************************************/
3 v+ G; X, {  {5 u5 R, ^void PWMInterruptInit(void)
$ F9 o, [' c1 n) R& h7 L{
2 a1 |9 O2 n% |6 q        // 注册中断服务函数
: n4 v- P+ d8 \2 X$ w  D; s+ o6 U3 C+ a        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
0 a% b1 ]9 b( e: ~( {+ O        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);( a6 g" b6 _) ?& S: n

0 ?" A- H; h$ r. l        // 映射中断/ P) g2 `& g; }) x4 G3 Z
        IntChannelSet(SYS_INT_EHRPWM1, 2);
3 J# i" n/ v% n4 a; |& f: V        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);( j$ T2 ~- J# f: g

" p8 Z, ?+ _# `2 _        // 使能中断" n3 {; i8 l4 V4 w3 o
        IntSystemEnable(SYS_INT_EHRPWM1);8 M' M. ~' K& R, p2 w% y
        IntSystemEnable(SYS_INT_EHRPWM1TZ);/ R( G# l3 M4 s
}9 @6 l  U5 F: J, o4 B

8 U! }6 |- q1 z6 K4 G/****************************************************************************/
  y/ ]  M, }; L0 ]9 d) c" ?/ L/*                                                                          */6 A5 i- Q% n2 D3 t; c  I
/*              ARM 中断初始化                                              */
& A% r( e& ^" q: I( |- V+ s/*                                                                          */% r& J$ z8 `; m1 V; }, I, y
/****************************************************************************/2 x9 w' _9 O+ |6 ]5 I$ u# F8 g
void InterruptInit(void)
& a) f0 Y2 l5 `2 E2 e: ?% U9 N{' j5 E$ S) V( L( k
        // 初始化 ARM 中断控制器
2 t$ A% u' A8 G6 N        IntAINTCInit();) `$ e" t9 O. B* W7 J
1 |% s; n* C, ?: i% Z2 P# i
        // 使能 IRQ(CPSR)' Z: M; e( }+ X
        IntMasterIRQEnable();
% W* Q1 V# e% T" b; M6 R. G
+ N' t5 i  {; v5 d2 W        // 使能中断(AINTC GER)
; z( K$ r5 |# C7 E" K        IntGlobalEnable();* m6 F! V+ Y) H: P7 l2 m
3 \, ~# O6 ?+ g1 q) A
        // 使能中断(AINTC HIER)! d% f1 Y, M* [4 m' J7 G0 v
        IntIRQEnable();8 e+ _9 X1 a9 W7 z
}
) v; C9 j+ ]- j' ]' @  B& Q4 |! D+ k

作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/4 V: q% a- K( c
/*                                                                          */' e$ h2 }" I4 B" ^5 V- T
/*              中断服务函数                                                */8 v$ F6 a( D6 H- p3 N8 A3 X& `1 O
/*                                                                          */( a# W( P- Z1 g$ r* p
/****************************************************************************/# E$ m! {9 Z3 Z% I$ `7 H' ^6 c& n
void PWMEventIsr(void)6 D0 _/ V7 c2 E0 U6 s9 F. X4 q  _
{
, D6 Z5 p$ d8 y; O        IntSystemStatusClear(SYS_INT_EHRPWM1);" t+ R; o+ r2 c, {8 y5 I& B8 v
' r7 e. c3 C  E7 ^1 Y/ V
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);, p: E1 y! t. Q1 f/ F
}& Y' g5 B" b1 H
; f* a% y9 Q$ P' f, l3 x# W- X
void PWMTZIsr(void): a$ C% |8 F  b1 C# q+ U2 t& ^
{
( z0 K+ H0 ]( n; P  @( M        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
9 [) N0 B; I  m) p1 o  {) L/ b0 v0 L: j1 S
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);% ]. e3 S2 T( t  h
}. C( w: {: q( t

8 N1 o" Q8 n* P8 V: L: G& J/****************************************************************************/
# F6 z, ~8 y" t- H# H, @/*                                                                          */2 y! o7 q, Q  {( N4 e
/*              初始化捕获模块                                              */$ o5 A& d# s% Q$ G# A$ [8 h
/*                                                                          */
. M6 E# ]9 ]! u- r, M/****************************************************************************/! U# Y2 \& g; E; V/ W
void ECAPInit(void)8 |* S7 X7 \7 _
{; i* T0 j0 o" J7 l7 _2 g
        /*-----设置 ECCTL1-----*/5 z4 ?, i, n( D; o/ {, s. ^5 ]
        // 使能CAP寄存器装载
& x+ h/ ]. S' c, q( C+ B# p        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);* ^1 f7 `- ~2 d  T) f. p- b. K
        // 设置预分频值./ H* f3 R' m; q& S" s6 \
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);" C2 m$ \0 l8 n6 Z$ W( f3 K. `: c
        // 上升沿触发捕获事件
* R& w5 A1 g1 ^. x& G0 u- C' u        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);  X5 H# X/ E' ]* |
        // 输入捕获后重新装载计数器值.* \2 n/ j) L; H
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
+ u# i; n9 o) j; e* E; X1 |" k9 J* [9 L. I
        /*-----设置 ECCTL2-----*/
) A% m  Q$ r7 b# @& ^( s/ K        // 连续模式$ d( B. ~0 [* F- e/ b, p8 w
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
! ~# @+ t, E5 \3 i( r' b        // ECAP计数器TSCTR持续计数# M3 }* k/ J; ]; x
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);' H- T7 t! K" L! F1 s
        // 禁用同步输出和同步输入
& s6 d# C  B0 \* y; K        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
  C0 V6 O& H& A/ h8 D1 U        // 配置 ECAP 2 为 CAPTURE 模式
& H0 N4 E# Y+ _& M9 y- t        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
2 K6 F7 W3 J9 }8 z; M+ z2 c- V! L  ~2 |
        // 使能中断% m4 t- N+ C# x: N
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);  X# p6 S4 o; H# r. }$ R
}
. \$ j3 q6 q' K0 D" w
$ A2 M1 q# _7 _1 A: @6 S" Q2 V' N/****************************************************************************/
1 M4 P# |2 F( Q/*                                                                          */0 W3 x9 O% x( m5 M- G
/*              取得捕获结果                                                */* N) _! H, g9 k/ `( y( {
/*                                                                          */
6 k9 M0 [# O6 U/****************************************************************************/
% L, a4 Y0 O0 x  m9 nunsigned int ECAPRead(void)
( o% Z+ q2 Z% M+ L) D% Z{
1 f5 I5 _5 l7 R        unsigned int capvalue;" o# c. a  ?& Y" A
        unsigned long frequency;+ W' e3 ?3 T; n! ~
, q/ E! g- T/ R/ h, K( g5 O
        // Event1 中断标志% [0 Z" T# e0 p* x0 T4 w
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
$ X/ {. R* ]. o$ Q7 B2 I" r  y        {
, H1 R6 B* y( ^6 j1 ?2 g. {: w) S                // 取得捕获计数
+ x/ d( p1 V/ b& w                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);2 V* P: G- J2 P& k7 X8 ~
                capvalue = ECAPResult.cap1;
5 i( [/ E, `5 k, J) h3 L2 P+ J* @, a+ `* K9 _" z  r
                // CAPTRUE 模块 228M 时钟主频3 v7 l) ^/ `- w
                frequency  =  228000000/capvalue;7 q" |# X" Y: M6 i, o: a
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);& x, B7 P0 n* U+ Q( N  i

. ?# D: H& h! d4 e, I4 S                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);, D2 w, u. [0 V. q! C! M2 X
//                IntEventClear(SYS_INT_ECAP2);
% l- o9 y0 g* D        }. _, g% E1 V4 x# r) s. }
        return frequency;
; t/ i" {. C% J, `# D6 R}
; H: r* P, J! o0 l: x
作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
7 w/ C8 t: }; t1 A# e[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