请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5152|回复: 6
打印 上一主题 下一主题

[已解决] 请问一下怎么产生PWM波

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
! V5 [+ D; u: H1 S. j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/1 i6 R3 q! d: \4 R
/*                                                                          */5 I3 e# H1 b( L: q
/*              宏定义                                                      */
! u  l+ L4 y9 l, t1 R/*                                                                          *// i% c+ P3 U3 Y
/****************************************************************************/; |; l# T. R& J  j" l* U
// 软件断点
' y' Q, A" S& Z0 r) U7 {8 ?% q5 ?6 w. s#define SW_BREAKPOINT     asm(" SWBP 0 ");3 w# o3 n- j: d6 p3 v1 S- `
- @& k* J& o1 L# ?# P. ~
// 时钟分频
" N- \; ]) U' i4 c: b' W#define CLOCK_DIV_VAL     228
( n/ E, l$ f- {$ e  ^% i% a4 n. _- Z
$ N. m2 t9 E; M3 P/****************************************************************************/
  c" ^( D1 P! w- z2 U2 ]; `/*                                                                          */9 }2 `/ q7 ]/ U" V. Y
/*              全局变量                                                    */
0 |) F) M7 i6 x! F( U/*                                                                          */& q3 o0 @' \( a0 H! X
/****************************************************************************/! `1 N6 `( G4 ?8 ]5 x  a
ECAPCONTEXT ECAPResult;
; [  o0 C* b/ P$ B3 I. t* K+ j0 Y- N0 P( M) Z8 {- _- V7 v# ~
/****************************************************************************/
- _$ [! i' M2 C" ^. I. j/*                                                                          */4 \" _+ D$ H. f1 R# B7 T* t2 ^
/*              函数声明                                                    */
( a7 Q8 a8 b+ o9 S8 M5 N3 ]/*                                                                          */
, S, t+ S' D" `& b/****************************************************************************/
. W) ?& _2 K* Z. \' A// 外设使能配置; z. ^" |& ^2 Y2 `5 Z4 S
void PSCInit(void);" C6 W  \0 O+ x" N9 g2 b; M
" _6 d) x/ m5 I& R- y
// GPIO 管脚复用配置
9 p4 s: f7 f) c6 hvoid GPIOBankPinMuxSet();
/ h- K/ Y1 i/ M' G5 C8 V& E  ^1 [- y9 C
// 产生波形1 a3 M* ?) ^4 ^
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
0 {! r  H- D; x' ?/ c% W! D3 e2 w, fvoid ChopperWaveform(void);
5 D0 _3 F9 ?3 ?" R
4 a1 p# u- [3 a# |% x/ r// ECAP初始化和读函数2 R: J! u! X7 R' D# z, m
void ECAPInit(void);
* w4 p$ a0 ~- }: Y% {unsigned int ECAPRead(void);7 D: N7 y; z% [. c8 [" q
) n" [6 o; B% h* R* |5 {1 i8 R3 c; ^
//ARM 中断初始化+ h* U# ]% U5 c' W9 e2 w
void InterruptInit(void);
* }' A2 [/ I: W4 u1 L: U1 l0 Q" Y4 t2 g* b- S6 E" |4 w  u( V
// PWM 中断初始化
, f8 g0 E& S5 |/ H; R* uvoid PWMInterruptInit(void);3 Y# ~, P* K4 x( ^
// 中断服务函数1 q$ k9 q! \9 _/ C5 ]$ f. s6 [
// PWM 事件
6 L/ l0 q7 e$ @, O/ J7 Mvoid PWMEventIsr(void);0 j% E9 }" Q9 |- a2 N' P
// PWM 错误控制事件
, w9 i3 a* R3 V6 P% U/ dvoid PWMTZIsr(void);3 U/ l) S0 v. a# U3 r" Q/ g4 s

. ?4 J7 L/ A+ G( n3 Y- m4 P. |4 d/****************************************************************************/
( B- R4 O8 F+ U. ^) H/*                                                                          */
) C/ d7 I$ V+ Y6 r8 a& `7 E% z/*              主函数                                                      */
' F) X0 D- e4 E/*                                                                          */
; z+ _- k* c% {* s/****************************************************************************/
- j4 t) y6 k7 f; R7 H, g  xint main(void)
3 m* D  C# ?6 n9 P  ?$ ^' a{
3 @8 J8 P5 y3 P/ i- R4 V! D0 P        // 外设使能配置
0 z0 K( X/ A9 q4 t& B2 m9 d; f- `        PSCInit();
$ d0 P9 N( f# r
& S/ g4 L3 z8 L$ \' m        // 初始化串口终端 使用串口2
: j, O. P# R( f3 h/ N" Q2 T        UARTStdioInit();
; x0 s$ w4 o: ~- q' N9 M       
2 K( |8 N: [' e$ O+ j7 a* d, b5 k        // GPIO 管脚复用配置* T/ S2 r, I0 J5 t
        GPIOBankPinMuxSet();" \( e& c( l9 ]# I% d4 J
5 N& \# P3 ?% V  L! f4 o+ y+ m
        // ARM 中断初始化
% F1 o& J7 k! v; t0 i0 a  v- }        InterruptInit();
( V; `- u# T( J' \5 q
$ w9 Z! M6 B- t4 d& J# q5 X        // PWM 中断初始化. u3 U2 }) V2 B$ V1 D* `
        PWMInterruptInit();
# D4 |) b7 s% w, q& U( M% A" R( e# @6 K% v2 ^9 O9 P
        unsigned char i;& m9 \+ G$ q( f, ~3 i4 p- z
        unsigned int j;
# y' p4 \$ o# H
5 n* u7 r  Z, F        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);  k, `8 B$ q( M8 w9 R# u
        UARTPuts("------------------------------------------------------------\r\n", -1);. L* p' R  @- M. Y  `8 v7 a+ }* f
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
2 j' J; A  Z- X" W        // 产生波形
. [. C. f$ }3 A& N        PWM1ABasic(25000,50);- Z. K) [0 T) G$ c0 n' w3 F9 ~
; h: y- m1 R9 z, @' h# X) e
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);. {9 E  I; R* C: S+ N3 @
        UARTPuts("------------------------------------------------------------\r\n", -1);1 N4 {/ R5 x' |1 s( t
0 k( X' r# a7 \
9 [- `3 c% V4 i2 ^1 {' }( h: t
4 b* @2 A) ~% u9 d
        UARTPuts("------------------------------------------------------------\r\n", -1);3 E, v+ }1 g( g  ^# n
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
) f- M: A1 ?) k6 Q& F        // ECAP 捕获初始化
1 b( |" o2 r. }0 ]$ |        ECAPInit();$ t2 d: a  D3 F+ D( w+ S2 `
        UARTPuts("Initialize ECAP.......\r\n",-1);
; ?& A# K* u8 C1 y, M. s        for(i=0;i<5;i++)
9 t! X9 M" b' s: ^) t& Z        {
6 J4 ^* R: T  ~% k/ u                    for(j=0x00FFFFFF;j>0;j--);            // 延时- m/ g6 X' q  ?) N
                    ECAPRead();
! G+ G/ Q5 b! ]: `6 s8 q# i6 F9 d) ]        }3 f2 r9 Z( P5 A& ?' j" K! @. v
        UARTPuts("\r\n",-1);- q% d/ _* q3 n) J: h0 E% `
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
4 ^7 Q& ?" M% S        UARTPuts("------------------------------------------------------------\r\n", -1);
, C& I" U3 y& S  n& G6 k: A: [" @7 s1 `2 d2 A, j
        // 主循环3 Q9 ]. c: Y; j
        for(;;)
% v" l6 v# i3 F+ O        {2 g: u, }' ?+ K5 T- Z% x6 |9 O% N

2 y( G8 q# p* _        }
6 V  m) f' M/ c, O# }/ i* e. C}
5 E# N# k7 `5 Q! |* b3 Q* o: D: V6 b( n( I( r7 Q. c7 r9 W) x5 c; q
/****************************************************************************/: Z2 a' ^2 i& A
/*                                                                          */- X7 F5 J! m! x3 l6 @" l$ {6 v4 M
/*              PSC 初始化                                                  */
+ {0 e2 M) J! z/*                                                                          */; j- R: @7 y% q( z" ]
/****************************************************************************/
0 l/ h( ]. i' X" A' d' d/ X7 ]( Nvoid PSCInit(void)
$ N9 W1 ]* p* h" d{7 j5 i5 C% l6 l' g) [! U  F( m+ h
        // 使能  EHRPWM 和 ECAP 模块- K: H, Z, q+ x+ P( g
        // 对相应外设模块的使能也可以在 BootLoader 中完成! T7 G# y$ e9 _# [  {& z* E0 I- H  y1 m
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);$ [' M* M* L9 C, c
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);: _" n* [# N0 ]) _) L
}; d% z7 z! R: N
9 r3 W5 U- c1 e/ q7 D* q& `
/****************************************************************************/+ D! P% q$ o9 r2 k2 b
/*                                                                          */* E/ G. A- A5 l' w- T) U/ {
/*              GPIO 管脚复用配置                                           */- |$ _6 Q% x+ J! v  E( `) X
/*                                                                          */
6 E6 P1 A- l+ f" [/ B/****************************************************************************/( I+ X8 v$ R& I6 A. Z3 `% A/ `" ~+ `
void GPIOBankPinMuxSet(void)
% v3 {5 M5 ?' J( v7 [/ a{" a2 ^  C: C' S6 i+ k) q8 f' m" t
        EHRPWM1PinMuxSetup();: l0 A( M7 T7 Y6 R0 Y/ l7 u
$ b& y3 C6 J+ [
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)% K; C3 h) ]) Y& Y6 X8 X0 x0 i
        // 作为捕获功能时管脚方向为输入0 @2 w* W( ~8 ?; s: ~, E
        // 作为辅助脉宽调制时管脚方向为输出
2 s! @# S  y- R) w7 Q( q& i3 m    // ECAP2 / APWM22 b# }. F/ e& r) K1 ]
        ECAPPinMuxSetup(2);
  \- @/ d9 J8 b! C0 K" X6 i# p% `. }7 d. `
        // ECAP2 / APWM2方向设置为输入# d% \% s, h6 Q! |& O% F# y# X
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
  K  @  _0 K2 v1 q}6 R! H" i$ m+ H( P- D

" B0 S  m' o  Z* p6 u- H% a/****************************************************************************/3 i1 S) \$ h8 G+ ~5 g; L
/*                                                                          */
" M/ S0 |- j% w$ k2 ~+ h2 Y/*              PWM 输出波形                                                */2 t* b, T* a! R% O- A
/*                                                                          */
9 z9 N, i7 ~: ^$ F2 w/****************************************************************************/
' L0 q% S" o& I( {1 y- b" [void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)2 r5 l4 r$ V8 C) Q0 M! a7 \& L2 `
{  r/ j! x$ c, _* N  g
    // 时间基准配置
4 `  ?, q) }' c7 T" B2 |    // 时钟配置5 F) t: m1 ], @! p% o
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
& T. u6 @' t# Z9 Y, z. m. g) @
5 x4 ~5 v2 [0 ^( Y) w2 r; Z    // 配置周期
6 S1 l5 n; ]& X9 t. W( M: {) Y    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,+ h8 Q; _3 `0 i, ~4 `& }1 [
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);5 V3 O7 B! \8 c' S9 U. g

9 R5 L- J( T1 m1 P    // 禁用输入同步信号! u# R+ s( j1 |
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
% D& T; f1 x1 {, m8 N8 A; H& c+ k2 J: a2 D, Q) M) b+ u( _1 M( y% ^
    // 禁用输出同步信号
3 m, F) j4 E8 K) F  V    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
4 c6 i" g+ H- K6 z7 }' }0 j! ~# }5 T* t3 e6 B/ h. p8 R
    // 仿真(DEBUG)模式行为配置
+ x, B& ^! F( y7 {+ ^! R    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);0 g, Y- k; |$ E0 e& C

& ~- N) M% ~9 }; A, l) ?- V4 l    // 配置计数比较器子模块; x2 I( {8 ^% i; ~6 A
    // 加载比较器 A 值
' O& H* U/ T$ s1 g; ]    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,* r  C$ `  G" a4 l) s, s
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
( n3 H! j  t9 ^. L7 T- a/ g, x$ c% h) g- `+ j) [1 I
    // 加载比较器 B 值( E3 q# x( g- q4 h
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
) Z9 K9 `* H% F( @+ K                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);% k0 Q3 Y3 S. Y3 ~1 z" Y9 i
" m% f  r* b+ C, Y- w
    // 功能限定配置(输出引脚触发方式设定)
- Y7 _3 F2 [/ W* E6 u  L    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
4 y0 }0 Q  O* E8 \# t    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
' s+ v& K% [3 e8 O                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,0 G# e# [3 m  M) v; }2 N
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);# f8 I2 P6 E+ X8 Y

6 I% A/ t  ~% H/ x2 f" P    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
( m3 n# g, I1 D5 k3 B    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);+ y5 i% G1 A- u3 `" P1 r9 Z

3 Z5 z* p3 W7 u3 [6 _: o9 O    // 禁用斩波子模块
1 r. \: X  B4 A! h$ S    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
, @0 j4 F+ }! C
. K! @! Y) h; v7 N9 r3 Q" x    // 禁用错误控制事件
: u  w! q8 d- n; {% D    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
  p' d5 h" }( P; |& V9 D$ |8 x" z    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
! \6 [5 r7 z$ G1 r: q0 L: @' [  G& e$ a
    // 事件触发配置
1 J5 Y/ n- |$ V. M6 _    // 每三次事件发生产生中断
: F0 z" ^5 D3 c( E, B! B    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);7 |  e- o9 I3 }$ y8 L
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
1 f& f) U/ i0 l; }. l    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);( h6 x# f$ I8 @) ?
    // 使能中断
% Q% Q; h" A: F9 ]+ L6 N" |; |    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);% j  D) m0 t+ {) |9 r3 z
+ |* _9 F: x: ~4 L4 g
    // 禁用高精度子模块
4 v& c+ x+ K  V" `5 d    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);; v5 _5 t& K3 r2 d3 Y7 g9 S
& G+ Y  ~; v0 _$ l1 i0 Y: f
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 T) J0 o. g. Q}1 l( ~; J$ m$ c
3 K; E5 d- L! v* u$ N
void ChopperWaveform(void)
/ ?5 T; h& |1 O  S0 f) P* e{$ Q' H; l+ ^1 i- V; s% u
    // 50% 占空比( I1 I, }9 @/ {( z% R1 Z
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
. o( h* ^# B+ u# j    // 4 分频( j6 f2 L2 u; H7 K/ X
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);' ~& R3 t- f$ h: d! ]
    // 单个脉冲宽度
, W  [! F+ h2 ~: U9 _# g    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);: j' B. M$ T! M% c9 R4 z
    // 使能斩波子模块
# L2 S% `/ R! C. |+ N    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);& O3 K, z1 n. E. v* n
}
- B7 h& q' C( l! P4 f) R5 f
  F& O- v0 k0 a- W* f' b/****************************************************************************/
; y6 `' I% a1 Z5 W) T/ J3 i5 ]/*                                                                          */; U3 K( S' v/ D* l* G7 H! n
/*              PWM 中断初始化                                              */" N1 _/ @7 g! p( K; G7 K8 N
/*                                                                          */
, }( t% j4 i% r+ f0 u7 x/****************************************************************************/
3 }4 X/ Q" v  @# q9 _void PWMInterruptInit(void)
1 r  e' f, v2 F{! \+ s. O& }7 K
        // 注册中断服务函数# @' v$ O& e. v" X: {3 }
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
' ?) S# H, r5 Z4 k+ W% z8 d7 }1 h        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);+ v# q7 S+ v) t( [+ z
+ p2 q9 N+ }+ u5 @
        // 映射中断
" |5 K% o4 Y$ ]: S0 t' B        IntChannelSet(SYS_INT_EHRPWM1, 2);0 B( p, V9 r; C. X( W. p
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);1 N: y; X% r- @" C, ^
& r) \: w8 K4 M: M% ?# i1 S7 I
        // 使能中断6 n* g* M1 i" J+ z0 V
        IntSystemEnable(SYS_INT_EHRPWM1);. c- n7 l* E  O! V% P
        IntSystemEnable(SYS_INT_EHRPWM1TZ);6 o6 M8 {0 T0 ?5 h) Z
}
! M- T1 w7 z, L  d/ f9 g( B3 C9 s8 f9 T1 k1 `4 F; Q
/****************************************************************************/- }' D6 e# a/ R: b# {! F: r3 }
/*                                                                          */9 v! I2 C& q! \* d3 s0 |
/*              ARM 中断初始化                                              */
: a& R& L' c' \6 E1 U2 C/*                                                                          */
# K0 `3 W$ c# p5 [" w, V/ ?/****************************************************************************/
$ V  o$ w) u% q) hvoid InterruptInit(void)7 e( E4 m2 G- _, {  k( A7 U- [
{. C! T. u# V2 b; S* B2 O
        // 初始化 ARM 中断控制器* \! E7 H) l$ r9 r) h  E3 x" p
        IntAINTCInit();; b& p) v, D( e5 Z6 p1 v5 \

% ^" G! u7 i7 ~+ h        // 使能 IRQ(CPSR)
! q, Y4 K6 V# p3 Y7 T        IntMasterIRQEnable();
4 }7 l+ [" y3 m9 ?) }# @4 `! g, o9 m7 [# c, w% b2 ]9 w7 ]- u
        // 使能中断(AINTC GER)  `+ t4 E/ j/ h) {, B* E8 ?
        IntGlobalEnable();; r/ g8 c# {9 S3 t' O" x2 ~1 ]

8 W) `! Q- O& U* O. u* _8 d        // 使能中断(AINTC HIER), @- R& w$ w2 q/ o% o. T7 K
        IntIRQEnable();
( E. v+ b; C6 B}# _0 A" o( ~3 ^2 V- R

) P! \+ I  \7 g( u
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/2 j6 W: A& H4 I* _# Q0 b" D, h
/*                                                                          */9 i* O. Z2 n; z! X" v
/*              中断服务函数                                                */, L4 h4 a: K0 [
/*                                                                          */
1 K- O& c3 Y4 E+ N% t/****************************************************************************/
: o, @9 g8 ^3 avoid PWMEventIsr(void)3 O, ]% P, Q# D
{, m7 s, p" ~0 {, R( a7 b8 B
        IntSystemStatusClear(SYS_INT_EHRPWM1);. P4 T) k( g& q+ i( {
3 T6 s0 h9 q6 ]- Z7 n
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);: g$ u( K, R8 [! _2 Z5 i! ^" I
}& J6 w" A! J, q- ]; g# k! I/ i  h

+ u* o6 @" A. z( d+ ?, Svoid PWMTZIsr(void)5 h9 W1 S( `+ l- z: g+ O
{5 E4 x% S1 L. t) j% Z
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
' u; P$ t* Y; E  a9 D
' h+ i& a  ?- V) B* R    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);  }$ N, a+ D6 t, S: ^3 U9 Y2 W
}5 ~! j# P- _" }7 Z/ J
- i- _) D; w2 H- u
/****************************************************************************/
2 z1 g7 C; u. }* o% O0 w$ @/*                                                                          */4 j' l! N) v3 d% j6 u+ |+ W6 W
/*              初始化捕获模块                                              */
  Y- j( J8 ?* g* y) J5 _/ Z/*                                                                          */; Y' D' H1 Z! {; g) p; j# J( E
/****************************************************************************/
$ \" l5 |. J$ k2 v+ dvoid ECAPInit(void)1 |( Z% L1 A! O8 I5 e$ m
{0 S# I4 r0 w% k$ l" J2 m3 q
        /*-----设置 ECCTL1-----*/) d- |0 ?/ m0 ^
        // 使能CAP寄存器装载* s% L3 H: y8 d, ?9 }, S7 L0 ]. f
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);. S3 F+ @9 P$ V$ C* J4 i  P
        // 设置预分频值.% l+ I) b+ P2 ~0 r5 b" K
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
* O/ O& |, @1 ~* q+ l+ K* |: Z2 \        // 上升沿触发捕获事件4 b. Q) c4 z. l  _
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
: @8 L$ j6 Y; E% a% ?4 q# Z        // 输入捕获后重新装载计数器值.1 I/ T: Z6 |. O# P4 Q, d) x# b
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
$ O  l5 y$ m: a" C; \& S  K. L1 E: D& _3 ^, m# \7 c/ m/ p
        /*-----设置 ECCTL2-----*/2 b! y3 p) n+ \4 T- z
        // 连续模式2 ~! u5 f0 b+ Y0 W* V1 W
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
- N' i+ R6 s; m/ s: w        // ECAP计数器TSCTR持续计数' ^) _5 q5 J$ _! o- z) f+ f# @
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);! |+ i" b, ^3 w( G3 D
        // 禁用同步输出和同步输入0 n- o7 D2 u9 H
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);/ x1 Z9 Z' E9 @" G4 I
        // 配置 ECAP 2 为 CAPTURE 模式# K+ v  k3 F7 a; G5 r7 ~5 i
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);* X# d# I1 E/ m3 V

0 G- Q$ M  d1 Z+ r7 T/ p- e) B' m        // 使能中断
/ f; u8 m. e& u, n, q//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
6 C; |& u9 k3 M* L5 q+ J4 ~$ {. S}
4 K6 c+ O& m7 C% C/ N7 v4 Q3 w/ u( \
( N! ^6 B4 o$ j% m% @/****************************************************************************/
5 Y: V  {" F% M3 z3 E% f/*                                                                          */3 s8 m% S$ j  c+ h+ B5 j% \+ X
/*              取得捕获结果                                                */# d5 z1 J8 n8 A5 S2 ^
/*                                                                          */: k- x8 K+ N; ~$ k( W+ I0 ]
/****************************************************************************/) ?) u* g5 K& ?
unsigned int ECAPRead(void)
- a. o+ I  s% @/ n+ S{
( q5 @/ i' a8 }' i4 z& v        unsigned int capvalue;
! @' B% K: p, L( H0 S. x2 s        unsigned long frequency;
2 q9 a  g8 f9 t6 A+ m8 i
- z( D5 b1 q" k9 X8 O4 T        // Event1 中断标志
0 I. E, u$ k$ K" _2 x" q        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
1 s- Z# M1 e" j0 K- B- x        {& J3 S" U0 H& w- O' h* u8 ^
                // 取得捕获计数
# V+ R6 n4 B$ \  q. B                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);$ j  G5 Y1 J% O0 b! e1 X
                capvalue = ECAPResult.cap1;
7 I! A9 }8 G3 t8 G& p
% k0 t- ~' U0 l6 f7 d0 Y                // CAPTRUE 模块 228M 时钟主频6 a  k, ~3 x+ }7 k- W$ x' [
                frequency  =  228000000/capvalue;
, ?9 F5 e9 s6 h) x; K                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);/ R8 E2 z# v* x7 x$ i1 F

2 |4 M, z, _3 {; w: ?+ h7 o                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
% D% s3 U. j; v0 e" `//                IntEventClear(SYS_INT_ECAP2);9 D* j9 I$ {0 J; ]5 x9 a& w* n. y" u
        }$ q/ K: l  Y, N/ P/ N! D' E6 G) S) [. B
        return frequency;. f* ?' X1 D; P! e% ?
}
/ m# i0 e8 E- T3 h+ R$ r/ |
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 只看该作者
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。; c0 w" t  D8 S" r/ I" v1 \" A

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
6#
 楼主| 发表于 2018-11-1 21:27:34 | 只看该作者
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
7#
发表于 2018-11-2 08:51:16 | 只看该作者
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-16 10:09 , Processed in 0.046669 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表