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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
) L; W" t; j  t1 @/*                                                                          */- h0 x; Z; h. [5 Y7 I7 a- t
/*              宏定义                                                      */6 ?/ P, R* ?" h, D. ~
/*                                                                          */
0 b; E* b: h( u) p* Q7 B  q/****************************************************************************/! T$ h; Q" ]7 N4 |1 g1 A
// 软件断点! q/ O) E! |7 R) [' ~+ b  E- D
#define SW_BREAKPOINT     asm(" SWBP 0 ");, Y8 I$ z# }% o) r. E

! [" d, E) e/ ]2 K# h  @// 时钟分频
( y/ v9 j( J6 h9 c" w* ~' U* X* W#define CLOCK_DIV_VAL     228
1 q, ^  S8 Z2 q. m" y/ E. h7 f3 U2 u. m# z- H
/****************************************************************************/
4 s% k( ~) S, k( P, l; a+ t$ r  F/*                                                                          */
3 d2 u$ L3 K  N) {& l5 q9 }/*              全局变量                                                    */5 w- h/ p( v! O4 }
/*                                                                          */
& P/ Y) F5 d8 g- Q# E/****************************************************************************/
5 y7 b) f& f& ~0 ?" c, L3 ~ECAPCONTEXT ECAPResult;
1 H: \& L1 G, U) f8 p- _
0 H( y3 Y& R, r: D4 z8 Z/****************************************************************************/( V- `+ H9 q0 j" A' W
/*                                                                          */! \3 A9 D# l* r5 Y; _1 M
/*              函数声明                                                    */3 M$ N2 w& t6 T1 W1 a( }  u% d
/*                                                                          */% d# m4 D' |+ Y9 O) W1 t8 V- Q8 ^
/****************************************************************************// B/ u% x! ~% `
// 外设使能配置' y6 z1 K# ~; Q" h. H
void PSCInit(void);
7 a) C8 I6 ~5 @" h
8 \" n: w, ~. o& R8 T/ b9 Y2 `// GPIO 管脚复用配置- R. |; Q+ g$ J/ w% Q$ L
void GPIOBankPinMuxSet();/ T) S3 F, r0 a- J

2 ~5 B0 s8 _0 f' `% U9 A9 q// 产生波形6 S  m1 N( A0 j* r7 D. E
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);' `, ~1 J  }$ J5 ~! y. k
void ChopperWaveform(void);; G8 L$ N0 \7 r# \2 x8 b
' q5 E2 @, C1 z3 i; e- g$ [
// ECAP初始化和读函数
& z' q4 G+ g. Z5 H, x" S7 kvoid ECAPInit(void);7 N% ^, o3 `/ O3 n* ^
unsigned int ECAPRead(void);) s$ @! u$ D0 h+ Y& S# M
) a2 ?" m1 Y3 l+ V/ _3 c: m
//ARM 中断初始化
2 A7 X8 [9 K* ivoid InterruptInit(void);
4 o% U' F" Z, ~& s  G7 b& Q0 y  o* w. u9 m/ A/ u
// PWM 中断初始化9 n+ ?% \; y; b+ H
void PWMInterruptInit(void);
2 O6 _7 u9 ]+ S// 中断服务函数
$ N2 X" u: A- q- W) _& J// PWM 事件
) ~& a: y) b1 T) F+ @void PWMEventIsr(void);
$ ^% l) c/ I4 `: a+ a// PWM 错误控制事件" I4 ?) O) L- t8 Y3 @  r; \" Z
void PWMTZIsr(void);/ L0 V" ?& N# C1 X) C  `
* O& U9 X- |7 Q0 b: N3 G
/****************************************************************************// o0 `9 t0 B9 I9 c. y
/*                                                                          */4 m6 A5 w" D" E# d6 N
/*              主函数                                                      */
# u$ {$ p+ {" V8 @/*                                                                          */2 m; x( R+ Q$ E0 k' ~7 }
/****************************************************************************/
5 g# l* i: Y0 D% B, Qint main(void)
. ~# M( }4 o- _) z2 A{
2 Y' Y* K8 ~, P8 P" D2 O. F3 p. z% N; m        // 外设使能配置
& i7 ]0 Y, }5 F' D, N7 t        PSCInit();$ |: u: L( Z8 i# t* \' l
5 }$ T9 y) H4 X1 N2 U
        // 初始化串口终端 使用串口25 D1 r4 |% _, z0 M+ L" E3 j
        UARTStdioInit();
  t+ L% g) y" I# ~6 U       
- C' {4 q2 a! \6 C3 k        // GPIO 管脚复用配置
0 H4 {4 f) ~! B8 i        GPIOBankPinMuxSet();
4 A9 G) Q/ f9 S3 j1 N4 b
. t2 d% N0 M" l. e9 N* O* B4 w        // ARM 中断初始化
. |- N$ p9 }1 X6 |( b$ X; B        InterruptInit();
6 ]9 P0 }9 q; G6 l7 s7 n- l. D0 x/ F; a% a6 Z$ r( G% V
        // PWM 中断初始化- p$ L8 S& T2 o, [0 K; E1 z
        PWMInterruptInit();) R8 @) M# d7 H4 ]
* {# a9 g5 Z' j& m
        unsigned char i;
; `' F1 Q1 D" u1 n; N0 ]9 U/ k! M        unsigned int j;
, g3 r& @! l$ N+ E
9 D/ J: B% s3 G- h        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
9 m+ ~: h7 Q' l* B$ i' J4 ^9 r        UARTPuts("------------------------------------------------------------\r\n", -1);
8 n( A; G$ P$ h$ N, m( k* m        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
; V% p5 L/ D% M4 v' e3 w% j        // 产生波形8 a$ r! A. P' P$ L. \7 Y
        PWM1ABasic(25000,50);
) _* x) _: y2 _  M' L
0 c" O9 j9 R; h8 V        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);" v0 d6 i& ]) F6 G- z4 L
        UARTPuts("------------------------------------------------------------\r\n", -1);) h+ h& t1 R' m

( q; d" U- V0 e2 h) d
+ H6 V) p8 ~0 W8 [, w
2 a& m9 G8 J5 B5 ?4 Y        UARTPuts("------------------------------------------------------------\r\n", -1);
! A! g% [' ?/ f. A5 N8 x        UARTPuts("                    C6748 ECAP Test\r\n", -1);2 _' T2 J9 A7 n3 b. l4 R
        // ECAP 捕获初始化5 {* |3 p2 n' C, a$ {( z
        ECAPInit();
$ _4 W" Z5 V' L$ \2 {  f% ]        UARTPuts("Initialize ECAP.......\r\n",-1);
# a* n3 B% B/ Y8 K# k0 y        for(i=0;i<5;i++)
( `2 Q7 q# l7 f/ q, l" e) s* C        {
7 p5 ^: J! H, H; D8 r9 i3 H                    for(j=0x00FFFFFF;j>0;j--);            // 延时
6 L  L, ^! C" ]# t' d                    ECAPRead();
( M$ P' W" J+ d; `7 e) H. y        }% G& y8 |% A. d- Q
        UARTPuts("\r\n",-1);
8 r8 v# J1 R) V! `8 E( O: X        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);3 m; T6 ]9 B0 C2 q
        UARTPuts("------------------------------------------------------------\r\n", -1);
! P3 o! a* u! b- c, k3 m. x5 i
        // 主循环
. m5 ?1 v1 w1 p5 m3 ^& h        for(;;)2 \! v4 @( Q9 R% \8 [" [
        {
; N, |6 E, J- g$ g# u% J5 h
$ Q* e$ U% N/ ^: `. ?        }
# T: R! @5 [) K, y}2 p4 H! |4 |2 C
" s# }6 c( [9 `9 R6 }8 A+ b
/****************************************************************************/
, w6 w+ _& l3 j5 J& i7 _5 W& x2 V/*                                                                          */
% j* H# ]8 g  p$ a' \, [. l/*              PSC 初始化                                                  */
# x6 T0 I( P( Z) Z( P5 ^/*                                                                          */
4 H7 ~* N7 d" L& }  k! }/****************************************************************************/
8 e# q1 F4 m. K7 Hvoid PSCInit(void). r5 k, e5 ]& t* W; P1 `5 A5 ~1 g
{
% W1 R7 {8 X$ C/ e5 _+ }9 A/ W        // 使能  EHRPWM 和 ECAP 模块  I& S" P7 J$ p
        // 对相应外设模块的使能也可以在 BootLoader 中完成. t6 }* X- E( U+ p1 g6 \
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 v& S8 V0 O& I; _) h# U) i
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 x( d  g, ?, i
}
6 Q' ~0 }5 w5 v* S4 q% C- t, Q/ m& S2 _1 C% L
/****************************************************************************/
" O/ @! w. v4 q0 {8 C( |  o/*                                                                          */" G1 v5 \+ V$ u1 {2 `
/*              GPIO 管脚复用配置                                           */2 x, S* _0 W5 b) J8 f
/*                                                                          */: ^6 S  r9 [: p9 p
/****************************************************************************/4 D( f9 R7 L5 R3 s: I" L8 r
void GPIOBankPinMuxSet(void)
5 i/ W, O& ^, N{
+ c$ v" k$ h1 X- c        EHRPWM1PinMuxSetup();% h' m3 ]/ a# @/ W& O- ~

; v/ p1 R" Z8 J4 r        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)+ ?- f/ w7 f+ O0 X0 i: h# z
        // 作为捕获功能时管脚方向为输入
, k0 U. o' a1 h/ |" x6 ?        // 作为辅助脉宽调制时管脚方向为输出
8 ]8 U% c+ N6 B3 t1 N    // ECAP2 / APWM2* {% o  c* i" w  H$ w
        ECAPPinMuxSetup(2);& [# ^2 N! z. {8 ~
7 i& M2 z# u# x$ O
        // ECAP2 / APWM2方向设置为输入
. y7 N# x5 J$ U* h* `, G$ @        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]& @! a. b4 K" k9 C4 H
}
9 D# o- X- X% k8 O$ q
4 n; \+ C- s$ V" U3 {& }7 |0 P/****************************************************************************/" U' U- s  X+ I. E/ _' {8 L# N7 Q7 S5 m
/*                                                                          */( f3 i: i8 W5 c( i6 j* I8 Z7 u
/*              PWM 输出波形                                                */
5 I: o9 c$ r( o' D+ u, |6 F  m/*                                                                          */4 v8 d8 P2 u6 @+ \4 t
/****************************************************************************/
3 i0 z  O: a' N% S4 c, D$ xvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)! H3 F( `' {" M( }$ e& J2 @
{( K+ f/ n. N$ \8 X4 p7 ?: H
    // 时间基准配置' X1 a( n4 i- Q0 |
    // 时钟配置
0 i( F+ V% _* w% K* ?8 e4 y+ G    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
, O- O! E0 Q7 c; O( _  C# b1 |2 `2 }3 o/ E. {! ~8 \' j2 f0 ?
    // 配置周期
/ f" g3 U0 \$ ^6 e    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,5 B. U6 I! A- I  s
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);0 r0 k4 c* W! q5 X

9 l' `: S7 }$ N6 P0 v    // 禁用输入同步信号5 G) l1 C' I! q$ D7 ?$ ^% r
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
  z  B8 I. [& B# \( }
! V* L* |0 c4 j9 L    // 禁用输出同步信号
8 R4 w: y0 z) Q( I/ a3 O    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
) q4 @$ t. T' q9 k9 Z) E/ j' [4 `
    // 仿真(DEBUG)模式行为配置
5 F# b1 b5 g5 s) a& k" J    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
# x# X4 e' b7 Z6 L0 q9 I" o3 P+ \- q& {' V
    // 配置计数比较器子模块+ C# r- j: N4 R7 K, y4 f. B' o7 M$ u
    // 加载比较器 A 值
% I6 \+ o9 ?% C* X1 Y- |    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,: h9 t# i$ e* C
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);. z% `! c2 @: S$ T

: M, r# f6 {; W. f& ^! F# l- v( E    // 加载比较器 B 值9 i' w( I  ?& j9 t5 _
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
+ B' X+ r8 a$ Y+ e9 f                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);( z) e( B) t0 R7 F" _. E
! o9 q% d1 a6 {( U; U/ Q
    // 功能限定配置(输出引脚触发方式设定)" B% |/ O6 J# G+ d: N* F
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
5 v% p% l  t9 V* v    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
+ r9 m) q4 s2 k7 w                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,& U: J: @- S; ~9 T$ c" Q2 r% g
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);- X4 s9 l+ \" n. V0 e6 }& E6 r' ]
8 x! Y4 R1 H0 S+ q, h1 j
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
/ m% _! E# E+ y    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);$ b! j9 s7 P3 J* z

1 j! Q: ^! D/ I    // 禁用斩波子模块/ _1 e: N. }3 t5 k' L
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);$ f+ q+ h' v3 O! g8 H( p% u7 r( o7 k

" {; f1 t! ?0 C. _* Q    // 禁用错误控制事件
! N$ |5 Y6 @0 }6 v    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);  u) y( r! G* ~" K! k
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);. M; H% M- o2 c$ S
. y8 c* G# q0 I0 U. J
    // 事件触发配置& a/ O: l# @: B/ P
    // 每三次事件发生产生中断
- q3 @6 n, T; z+ O, ~    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);/ A4 a  e: A1 X/ @
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# @& E/ }% c- |6 O/ m* j    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);$ b/ J/ s/ i3 O2 F4 x  J
    // 使能中断
+ c, G& n9 \1 k/ H# C    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);1 N) @3 v- a4 N4 q) s8 B

9 Y, r- S8 o5 c7 _; U    // 禁用高精度子模块  R6 J6 Z* w3 w. K8 J$ W
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
8 P. @! a" h: }& V0 x& e
& x  t: g' S, R; L3 C# f3 e    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
( U/ Q2 ^/ M" W7 G}. m1 ?1 d1 [) e1 D

6 u3 y/ }; ]* |5 b6 `void ChopperWaveform(void)  g6 q- `' l& R
{- C+ M, G0 x) N+ o3 V- L6 k2 K" i
    // 50% 占空比9 @1 a* V1 m# S$ ^% m* M- ^
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);9 A9 f# |1 ~; \. s( \
    // 4 分频7 M( ^( N2 w, u
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
* V) a; F6 a9 p* n    // 单个脉冲宽度
5 P6 e0 e8 V" q( `: O; r6 f9 ^, y    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);7 o( h& Y7 Z* Q- e2 k+ f8 N2 L
    // 使能斩波子模块& P0 b  G* W2 i3 Z3 k( ?9 Y* B
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);! V+ O' E3 s% n5 s  t4 r& T" B; P
}7 t( e; @, B2 P/ [9 d

: t  G) K7 H6 G- x/****************************************************************************/* |! t6 i) T1 @3 b) Y' L
/*                                                                          */
3 W* G1 |7 V, r! Y( E7 [/*              PWM 中断初始化                                              */! E2 c7 Y4 Q/ z9 X' f* s# v( E
/*                                                                          */5 ]' G3 L6 E2 P; V' n9 w: e8 v( u8 x
/****************************************************************************/7 {6 m& P% B, R4 H% b" j
void PWMInterruptInit(void): F; Y9 S1 U: s; r+ r! ~3 W( b& Z
{0 l# D: n8 C9 k: ]2 h8 B0 h
        // 注册中断服务函数
1 P7 ~5 D1 I$ v6 z* P' `8 F, L$ @: y        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
( _" }. h3 [. j8 l& y: k        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);4 X5 u# U9 [( U! m

5 g# g8 [. X) S: i0 ^* `        // 映射中断0 l% g: o  I0 n4 Y  e4 K
        IntChannelSet(SYS_INT_EHRPWM1, 2);7 z9 P& Q0 i4 l& n" y
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);: v' {. P% \7 {) z( x+ B9 w% ?, `! H

/ i1 H7 z5 R. _6 _; k4 v, J  Z. h8 l        // 使能中断! V! T* m& `  [$ U
        IntSystemEnable(SYS_INT_EHRPWM1);% Q6 Q  _# i; p, D
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
0 L' o- A; U/ K# r0 G6 O* ~}1 Q5 v5 L% ^2 I. y* w+ A

- T& H$ C0 X2 \! d: ~1 U% c/****************************************************************************/
9 W/ o8 b0 m" r. }/*                                                                          */
0 M9 Z) {9 h) `- j* {/*              ARM 中断初始化                                              */
7 P( G; D/ c4 ]% a9 x: }/*                                                                          */
7 |7 z* e$ v" ^/****************************************************************************/6 \8 v/ j+ l. r' r& j
void InterruptInit(void); k8 W4 v) v# A/ T# W
{
2 L. A9 S  q( a5 [0 O  v  ~        // 初始化 ARM 中断控制器# ~3 f- y# I# L3 O8 w( W" ^
        IntAINTCInit();
: r' h; h3 o% m9 o1 I: O# M. _1 a- i6 `
        // 使能 IRQ(CPSR)+ w% u7 L5 o; d3 ~2 n' H9 O6 C7 ^
        IntMasterIRQEnable();
* s2 G! T5 b  r( |$ f. e3 _8 Y5 R. t' k$ r- U; h; v
        // 使能中断(AINTC GER)
( S' G4 ?5 {$ f; b3 a        IntGlobalEnable();) ?& ?7 j! B: E
4 d  L) V9 G, c' Y9 Z: K3 E6 ~
        // 使能中断(AINTC HIER)
1 v# V7 o( T+ L2 ~, L        IntIRQEnable();
! }  W- z# p& g! c/ z}- |3 x6 g7 Q5 ?' a  i4 i3 X: W
& g  O; s# i0 j& m; S& V. _
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/) J. r( i1 y5 {+ t% _, D
/*                                                                          */
# ^7 l' K9 m6 r7 a) _/*              中断服务函数                                                */
8 s! Y  G) {- X' X0 b/*                                                                          */
; N' m8 K- v$ q3 p6 c* \/****************************************************************************/
3 `! \! x, W5 e" K3 k% z% uvoid PWMEventIsr(void); M/ C4 U: |7 V/ ?5 B
{
, U! _3 T% y: y+ F6 g& C( V$ p        IntSystemStatusClear(SYS_INT_EHRPWM1);
+ U1 r' V) M+ f# x! \( T, y  F
% |6 }( Z& I% k& _( u& ?- U    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
4 v/ T4 J* ?1 r6 N. ~$ b}
) N% [1 w6 k$ A" N7 T9 F- J; q. [; `) j- y+ @6 w+ q& B
void PWMTZIsr(void). X5 B' _6 I3 {( X
{. ]+ V$ B/ q1 }" e. F
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);& [+ u" P; r% a% C* b
' Z! K: C$ M& [4 @* H! d% p
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);  S7 d0 z) t7 X- [) q5 D3 y( N
}
) X7 p* j- _& i0 N, a+ ]/ z6 B1 m' J' w
/****************************************************************************/( r# N4 A" |0 U$ z5 l& Z, x
/*                                                                          */
, X% Y6 F1 D" k% w% x- p/*              初始化捕获模块                                              */3 P4 h- d; g9 S% ^
/*                                                                          */
3 ^" t; z4 E( k1 |/****************************************************************************/
1 @' M5 {  ?7 w' W% Jvoid ECAPInit(void)
) V* \  d2 J- D+ A& Z{+ s% j  }) a, G
        /*-----设置 ECCTL1-----*/
( a/ f! r+ d7 Q$ i        // 使能CAP寄存器装载8 I8 ^8 u+ L: `3 e+ m
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
  d6 Z; f/ T" ^0 I( \) H        // 设置预分频值.
3 K& A% r4 M- \9 {. }        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
$ y% t  R$ `# Y7 q7 A0 t        // 上升沿触发捕获事件- R0 Q* S0 Z  s6 O
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
; `8 P- Y! b; N0 `        // 输入捕获后重新装载计数器值.
6 @6 n! Y- \- k        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);, o$ ]- p, \, h3 x8 j6 V" M) q
: ^/ [& `+ D& k4 b! L! q0 h
        /*-----设置 ECCTL2-----*/5 N# i  B6 y- ~( N- Z+ A
        // 连续模式
8 p6 k; I8 A: D" _$ O        ECAPContinousModeConfig(SOC_ECAP_2_REGS);5 g2 O# ~) I$ M8 T2 [
        // ECAP计数器TSCTR持续计数) ?* f. w/ x  x: h' r/ z# Q
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
: e- k2 b0 P4 }7 G( L: b        // 禁用同步输出和同步输入+ Q" t8 c$ `( H/ C: C" b1 `! u
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
% P  T# z; E4 e$ ~. ?  t        // 配置 ECAP 2 为 CAPTURE 模式* ~3 ?# j" |  g+ C
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
1 l3 U% l) D3 ^
& S" h) k; Q! x4 w( }' b: [        // 使能中断
. n8 Q2 }" s2 a. l: w7 v//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);2 {+ k, b1 M/ P
}: \. I3 a: \* ?( ]5 N
) p8 j' L7 m9 N9 U$ `& S
/****************************************************************************/
9 w/ g( k) [* @. D& }. A) ]/*                                                                          */
; c& ~* c, X7 D- Q' o  M/*              取得捕获结果                                                */
7 p$ p" ]$ K& g# V' P/*                                                                          */* |5 K: ?( i9 S( T
/****************************************************************************/5 H2 m) @' D' V2 M/ {6 T8 n) ?8 K. f
unsigned int ECAPRead(void)5 n; ?0 V& q' H
{
) R( [- k$ h9 [7 x" E        unsigned int capvalue;
( n* S' T% [) \- o" t9 c' C5 y8 _        unsigned long frequency;" m  R( ]* E8 w+ O: ~* X9 B' v

9 Z  A( B2 A, m8 }        // Event1 中断标志
" w2 k7 X  y1 s/ Q# N        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
5 o% F+ ^6 i# _, X( i  @5 C& S6 o        {0 C+ ~% X4 K7 ]3 X- B# p
                // 取得捕获计数+ g% B* k3 h9 q! E! t0 {
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
* n2 F" s  b( P( O+ [; K                capvalue = ECAPResult.cap1;0 \+ G6 {7 l# f0 ^  K) J# Q! R5 `
! }  D/ b: ]0 N% A5 Q
                // CAPTRUE 模块 228M 时钟主频
& g/ |: A# W# M                frequency  =  228000000/capvalue;
$ k- W; N& J$ L% B! f$ J( g                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: r0 W$ d6 r+ y  U" f

/ A; {2 Q- j' t9 E                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
+ y2 @% N/ P" ?) w1 ]: ?//                IntEventClear(SYS_INT_ECAP2);" f' z; l* C( K8 L
        }/ m; W; z) s8 E* _& E. P
        return frequency;
% }  P: \; ?& C9 d% N8 K* [6 }}1 ^& ?* \/ S, Q  R3 o8 E
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。4 ^8 m$ B/ H) _! Z6 B" `' {0 m

本帖子中包含更多资源

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

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-5 15:03 , Processed in 0.046869 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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