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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
; M& S0 O5 Z7 Z$ [: Z/*                                                                          */# U/ u( x' B9 d6 x+ d
/*              宏定义                                                      */; E, w) D" _! r
/*                                                                          */
' _$ r( M: f2 K! s* U( V3 D" j/****************************************************************************/7 [) J0 v- S% i! r6 l& \
// 软件断点
- }: @" C/ s3 Q% [  |$ }, B#define SW_BREAKPOINT     asm(" SWBP 0 ");
% y7 p; ?! v+ c
2 `/ g8 r' k, ?1 Y) _" i// 时钟分频
0 x3 y6 Q1 j' L# k; W5 f#define CLOCK_DIV_VAL     228
: N" l% O3 d$ R+ F- @- K6 f1 \
  Y7 `' @; D! y9 ^% M& L1 w/****************************************************************************/& q6 |! `. F5 b& t! t, Z* I
/*                                                                          */
7 z) n: W: [, u- {$ z( q' p* I7 v2 N/*              全局变量                                                    */
9 Q1 L) ~* ~1 h$ }6 i/*                                                                          */1 D% e4 w9 e. z* P7 a
/****************************************************************************/
1 x+ \7 D, X8 X1 i# FECAPCONTEXT ECAPResult;7 {, F3 n/ e  W, |4 o' S' y
5 m$ R5 e7 }; e
/****************************************************************************/$ F0 r! X" v- A- g7 V: r' L
/*                                                                          */3 u* j& L* O$ R; r; e5 y
/*              函数声明                                                    */
/ o- z2 V2 ^5 B3 l. }/*                                                                          */
: I# ^' S! b6 s, p/****************************************************************************/
- U  E0 S, y3 e# f, s# W' d/ W// 外设使能配置
2 ]5 W: a) d& ^) V* I2 @4 v; Uvoid PSCInit(void);
& P8 Y, W, P9 p& Q) V/ y7 r* B( b2 i  j9 ?5 V
// GPIO 管脚复用配置( Q1 d% t3 M6 a8 j% u! e$ M
void GPIOBankPinMuxSet();. V& s: b. O7 X9 J  X6 S7 ^/ o
$ |; R: I' e5 u3 T9 }
// 产生波形" V# N  `9 R; n4 ]& ^5 ~" S
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
9 t) l7 k9 I. L2 W% ]# Xvoid ChopperWaveform(void);2 O1 S8 f% X) q, w( ]* W, S

0 T/ Y, e, ?! A- Y) a3 z; u! e// ECAP初始化和读函数
% a, F. P& H0 H- u1 u" y3 t' fvoid ECAPInit(void);9 T7 j3 [/ D+ N5 z8 a9 ]' U
unsigned int ECAPRead(void);
) L  [# d7 x  v9 w  {2 }, u) p9 Q% [
) U9 Y$ r9 l0 I3 V//ARM 中断初始化
9 C; J* L1 U- N: ]5 avoid InterruptInit(void);
; q' s  Y, }3 x/ @% L0 y3 {- J6 U6 r+ P5 t- K# }
// PWM 中断初始化
' Y% C& _3 x, @' ]void PWMInterruptInit(void);; g$ d$ m( Z9 B7 ]8 Y  x6 P. a
// 中断服务函数$ k" g3 ]  t" Y9 f4 A
// PWM 事件" S( M- d  ~4 i% C' R9 R
void PWMEventIsr(void);
4 ~3 w' z, N+ l# }+ [' `// PWM 错误控制事件) M3 i; E7 t) l
void PWMTZIsr(void);
7 J9 }+ y* t7 w+ k! y% V& Z
# m4 |; D8 e1 p/****************************************************************************/& a0 N4 X* N6 O2 A
/*                                                                          */
# w0 d" a" S" E/*              主函数                                                      */$ y" h, t3 U  a7 p
/*                                                                          */  O6 R1 }$ W4 D7 r9 d
/****************************************************************************/3 H* M6 E4 u1 ~' ]3 {# J
int main(void)  U( a# G& A/ m; a$ X
{
5 Y# ]  H- j! D6 T; V        // 外设使能配置/ O" Y  R1 N2 {  ?1 C* L
        PSCInit();
) K) H, I4 R6 a) g' R, w6 f6 n& [" q/ {: H
        // 初始化串口终端 使用串口2" O8 x0 |$ S& r7 O3 o8 O
        UARTStdioInit();
' Z8 O& l: `  u% J+ F! [$ n       
+ T, D) ^, K3 v1 h; \        // GPIO 管脚复用配置; {/ n' [" }3 h/ R% z' m5 R
        GPIOBankPinMuxSet();: b6 Q, e/ e! I( E) {

9 {: A: l9 K; m% n- C0 z- j% r8 k. F& J        // ARM 中断初始化. t& c+ h" E9 P6 M9 |; \, |; Z8 V/ _0 |; J
        InterruptInit();% @: A$ i: S) u; b* b

& `$ F& W& Y8 x7 \: C        // PWM 中断初始化6 f* g$ ]1 B% o+ O! c
        PWMInterruptInit();
7 c1 u$ Y" I' s3 q9 s. P" b( J/ L1 C2 G: h4 ~/ R( c
        unsigned char i;
# Z6 Y/ G8 n3 L& d5 y: |6 l0 D        unsigned int j;" ]) U% @6 @9 N; \7 E: @0 B
  ^7 c% c: |" k& G! d; z. h
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);1 B  ?" W1 t) r  w: S
        UARTPuts("------------------------------------------------------------\r\n", -1);. _+ v5 P/ F; u( F: {! B
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
& m- @" u0 Q; b& y        // 产生波形9 }2 i$ z& _/ R! E9 V
        PWM1ABasic(25000,50);5 ~5 ]3 t' F: a8 U( y9 N# o! J0 @4 k

# w- @- n6 I! i2 O+ y; r8 X# p        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
; S# N& S+ P6 i7 P7 a7 W        UARTPuts("------------------------------------------------------------\r\n", -1);% e6 n) x* v) k5 q! z' J) g
+ s5 N9 m% F( n1 N! L& @
1 Y3 B% u" o  W; ]
/ \- k$ E9 V$ M% }( r
        UARTPuts("------------------------------------------------------------\r\n", -1);( u. K) k! m2 e3 H7 f0 k5 {
        UARTPuts("                    C6748 ECAP Test\r\n", -1);% @2 o" x5 v; Z  ~
        // ECAP 捕获初始化
2 i: m) i3 k6 A; a. C        ECAPInit();  B  ]% v* P7 l6 J
        UARTPuts("Initialize ECAP.......\r\n",-1);* S7 S1 X6 Z% E- [
        for(i=0;i<5;i++)+ i0 P3 a+ P5 a1 w1 U" ]
        {" u$ r+ u5 c: J+ I7 Q( [3 N
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
2 H3 h5 v, \. k% f0 |* M, y                    ECAPRead();
4 ~2 M7 U# G  {# ^: J: ~& X        }
- k+ \- U) E7 G, D        UARTPuts("\r\n",-1);
& I* V* K# u  @' c/ g+ V        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& S9 r+ C& E& j* {1 ?5 ~
        UARTPuts("------------------------------------------------------------\r\n", -1);
& t* N1 l0 T( `4 Y. N- u/ P; y2 C4 k* E3 v2 r4 u
        // 主循环
' U- F9 }: ^7 w! |4 I        for(;;)6 \# Q- w. Z( @% j
        {
4 E: n# ~* _9 m% }  o- g3 R1 k8 d- N
        }4 \* a1 f  N2 b, p' ]; K# c& J3 S
}: I; I& U1 r: F- y: p$ H% q/ B9 i$ E

/ h* m% N: X. c6 s3 ]" S/****************************************************************************/& b6 W  m) J; \4 C
/*                                                                          */
, Z% L1 M. B2 K# `4 y/*              PSC 初始化                                                  */
) U6 c% I2 S. g) O& ]4 e8 r7 P/*                                                                          */
' _2 C( U! i1 x8 u1 [) c. C/ I/ m/****************************************************************************/
$ H0 g4 p# ?4 Z7 j2 M; Wvoid PSCInit(void)
% b$ ?5 ^0 q: U{8 d) U* ?' s. P8 M
        // 使能  EHRPWM 和 ECAP 模块
7 a2 R. S: r  H! S        // 对相应外设模块的使能也可以在 BootLoader 中完成/ f& C, n% q' Y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
0 D: K/ H, d" X    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 D$ @0 ]( }! g4 ]$ ~) V7 ~
}
8 ]: c' z6 B& T) f$ }) N4 m2 E! J  h+ y, Q
/****************************************************************************/
2 e+ Y  K' [. R4 K' H% ^/*                                                                          */
8 b- p% e* {; D6 ]% F8 y: ?) Q$ ?/*              GPIO 管脚复用配置                                           */
( `% g" c! W. b# y% w3 F0 ^) g/ [/*                                                                          */5 y! k. y5 M/ q2 c* z" v# S
/****************************************************************************/6 c$ J, C9 z  a. i, l* x
void GPIOBankPinMuxSet(void)
0 V6 j8 F# C# i- ~: i0 X. H2 E# d{
- }. ~9 K! E- z+ j( i. z, J: g        EHRPWM1PinMuxSetup();
- I, v, c/ u0 O. V# r$ P5 q( Q/ Y" t, m: P9 B  I
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)  |" W9 m5 Z9 _) ^
        // 作为捕获功能时管脚方向为输入( H  @  V* n% b
        // 作为辅助脉宽调制时管脚方向为输出: b- M2 u9 g/ J7 o
    // ECAP2 / APWM2
+ e  P4 b. v0 z$ }3 W7 S- z: Z- Z( Q        ECAPPinMuxSetup(2);
( _6 I# {  F4 I* I$ z) D8 X6 B2 D5 ^9 v* o5 Y3 p" J
        // ECAP2 / APWM2方向设置为输入5 I6 W' Q/ J) `$ g" T
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]1 h' Z- V& u+ d; @$ @! T$ D& m( ?
}" a( I& q3 n+ ~1 e

$ e7 s5 _6 s; v9 i/****************************************************************************/) _: Y' J4 H8 d# X$ h0 Z+ _
/*                                                                          */
8 T2 |1 J) e! B- E9 U. E9 ~1 q/*              PWM 输出波形                                                */1 K0 O2 r- r, J' K
/*                                                                          */* b' ?0 |  X# u7 _# P+ |5 ?
/****************************************************************************/- @' p. _# l$ _0 U0 K
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
) q1 G. r; ^0 C" O+ g! o% y( U5 ^* o{
8 n* ~! @" h% q- F    // 时间基准配置& X  {& \. V& E% a
    // 时钟配置
" a6 n! M4 ~8 i    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);% T" n* m/ o" k
$ I3 J0 O; f; [
    // 配置周期: ]9 S1 _9 s( n+ _& N
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
. z& L3 |% \! Q+ B8 a                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
7 t' |  F7 N& w9 {8 c
/ ]% k; C3 E# u0 ?8 ?7 r* k. C    // 禁用输入同步信号
2 `2 H9 I# ]. e9 L' V/ R    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);6 G0 v" Q# m/ M* i. `% I

6 M: l' c  e' R0 U7 I    // 禁用输出同步信号
8 P5 O, r+ ]- j2 g  r1 h4 a    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
4 r% b! ?/ C/ u- D, T4 f" [9 t0 @8 T
    // 仿真(DEBUG)模式行为配置# k* S- t( }& s, b6 J1 \  u
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);! D+ i4 _! \' n- ^. L9 E/ b

( q3 a4 [3 F% y0 m: s% z) M    // 配置计数比较器子模块
2 l- }7 d' k$ T2 [7 a    // 加载比较器 A 值" T2 u6 {% c' A6 W% X& V
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,( E/ t3 V- f: `' n1 d) z$ s
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
* G8 Z' I( ^& F3 I( z" P: R; p
' }- _5 n7 r" z    // 加载比较器 B 值
+ t) a+ M7 O/ T  F* a( D    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,5 j. `0 K& N7 Q+ o/ ]- s( \3 @8 q
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);6 h7 Z0 _: T4 o9 L2 d

/ d# C2 K2 Q! F( k    // 功能限定配置(输出引脚触发方式设定)
4 u0 t% U4 D1 P! P! C) ~    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出  s8 Y( L. U8 p7 H' T# k
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
: Z# C) D; V" }3 e1 q. D                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,6 Q3 W6 g( o8 E- `+ c# P  l
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
& z+ U* d' H) A2 q5 s, ~4 f. v/ z9 P2 p, x2 x# Q; C2 ?
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
1 F4 m, S# t' h3 U* r8 |    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);+ q$ C+ c2 j! l/ Z' Q/ o* j. }# g
* C" W! O1 V$ G0 V
    // 禁用斩波子模块8 H/ v- U* u' K4 n4 e# H
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);2 E% {. K' v; f9 O1 r8 h, c% R
( r0 i1 J+ x  R3 F  {  Y1 @& X
    // 禁用错误控制事件
$ t4 v  y8 s0 O$ K. ?! Z( A7 Q7 U    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 p) t! a, N2 E
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
. ]7 f1 i8 j& Q- G% ?  }* g
8 c8 M# `" m7 P5 A6 R7 h7 i% |    // 事件触发配置
9 P/ [) b% a. |9 F! f, s    // 每三次事件发生产生中断
1 p7 s$ O6 u2 i! c1 a# T9 j8 m    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);& g8 ^8 [  y6 X. I7 O" e/ f9 K5 Y
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
( W: ?/ U) H7 x$ ~7 ]    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
* n/ x. G: F2 W    // 使能中断. z% m) ^  M% o% z7 G; V; _
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
# h- q2 q5 f" G, R* n& ]% V5 _0 g5 R$ n7 n1 N% s/ |/ M& {+ ?/ E( j
    // 禁用高精度子模块
/ U0 S! C* L  c% f    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
. d! [! H) c' j7 O% T! r; ~, H5 U4 \  q
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 c2 i/ h3 s  \$ c- w$ g+ P}$ _& H( z+ X' a! E  ]7 z  e0 e' i
( T2 A. o7 @/ E+ ?) _5 t' T
void ChopperWaveform(void)$ `# q2 \. }! ^7 H& l
{. O6 _$ B. b( |( t& A4 B- a* S& P
    // 50% 占空比1 v  i2 p( E6 j  m
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
+ }2 I) {3 i1 R4 x! _' d    // 4 分频" B8 t6 |5 \+ }1 _# ~2 I. p
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
# `  X% \  M3 D3 m7 e    // 单个脉冲宽度! p9 Z6 R, Q# R3 W2 d- J
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
: l7 Z/ H/ A1 D4 a4 ^    // 使能斩波子模块) |9 E0 a& C2 d, N- j8 Z3 C
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);/ j& u7 n& D! X" s. k
}1 A. |( R# q, r6 h

5 ?9 k) o4 ~$ d% y; c1 @/****************************************************************************/1 d: V1 Z4 D1 g% r
/*                                                                          */7 T4 q1 q0 K4 ]' M% k, m2 d
/*              PWM 中断初始化                                              */
# h* e+ V& }& P/*                                                                          */: |6 [2 _: ~9 n2 j) H' ?% u
/****************************************************************************/* o+ {! G' \3 P
void PWMInterruptInit(void)
. h% f  q* A" w+ P" I4 v{
! N) g+ l) ~6 x' e) x0 m9 n        // 注册中断服务函数2 g7 W" s; k6 z  |/ E9 H  v
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
1 |1 m0 c1 J2 e1 T* E        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);1 i8 V; ]7 C! C" k
  x) p: l3 ?$ b
        // 映射中断
: ~" O5 }; z  y        IntChannelSet(SYS_INT_EHRPWM1, 2);' r5 V0 E9 b% t" O
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
- ]! I" r% v6 B4 G
& I! |' R# F, a4 @3 ~6 A" e8 x        // 使能中断* @+ Q, A( j9 N+ F8 G5 c
        IntSystemEnable(SYS_INT_EHRPWM1);
% o& X  p" T' Q# T  J        IntSystemEnable(SYS_INT_EHRPWM1TZ);  g3 V* G& f3 g5 M& k
}  I& L9 ~1 C, ^' O3 b
3 u5 A! z- ?' B# Z
/****************************************************************************/
0 d! ~. k/ h3 K5 n. A/*                                                                          */7 C6 c1 F' m. Y, c$ I  L2 P
/*              ARM 中断初始化                                              */
1 [& J( \" c1 J1 g. h! C/*                                                                          */
* V- @) P+ B5 _/****************************************************************************/0 b) \; q& c. y' M# P2 n! r* Z9 }
void InterruptInit(void)
- a0 o# _& L" A: j9 o4 _7 m{
! a- G" x- d9 w' M4 X, \# l        // 初始化 ARM 中断控制器
, W) g" ^3 z6 p) Q* \1 D6 e        IntAINTCInit();- \, j; W7 K5 [% }; @
* b& n& g& a6 k' C. Y+ x
        // 使能 IRQ(CPSR)6 [& T2 _. u0 r( Q  v" b
        IntMasterIRQEnable();
9 H6 k& F3 O  e! h' d
0 y& b9 K$ ?3 A7 l        // 使能中断(AINTC GER)
8 W1 _' c: R% m6 f        IntGlobalEnable();1 W: i$ S. d2 I; J5 Q- x' `
1 E6 F' R2 S0 D% X  O2 C
        // 使能中断(AINTC HIER)
2 l2 S1 K8 o- K4 H9 {# J        IntIRQEnable();# o& [9 e* H! E
}
8 C- w9 A" x6 Z, u( }7 E8 q! Q
2 }/ X3 B& E5 v* {6 @/ N# s
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
+ [) Z, j& Y8 U6 E8 r  W/ ^: l/*                                                                          */
6 O2 T7 Y+ s! i: N2 E3 S/*              中断服务函数                                                */
% t/ I; P, D! ~/*                                                                          */
5 ~. M, Q/ D/ Y8 T3 b/****************************************************************************/# p! X5 d# q7 q5 _/ J% J
void PWMEventIsr(void)
, y2 R$ N" A) C  ~3 r7 ]0 N7 s{
: N" e, h$ ]/ c* E7 y. f& S        IntSystemStatusClear(SYS_INT_EHRPWM1);
! P3 L! l, l7 a& ]; }6 Q1 b, e, }& }( Z2 b$ C! @
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);. {: b6 e2 }  x2 _7 X0 `
}9 s; B/ |! e9 z7 @% r' {
0 w5 K; ~. z. G% x9 \& T
void PWMTZIsr(void)
7 l9 m  [+ i% B: M{
' y9 P& u( a7 h$ T5 \6 v        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
; m: C+ B; s5 \+ H! F" @+ o, f  j/ ]
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
! [. U" b, H* e! t, u5 ~* \}
3 ?, |( F4 X$ M0 I# a
3 O" H2 q' m  i9 W) q+ [9 y: R. ^/****************************************************************************/
3 [1 s' P$ l5 J, m/*                                                                          */9 V7 R! e, l% X) O  {0 _$ B; K
/*              初始化捕获模块                                              */: F$ l# V% g, g6 i0 h
/*                                                                          */
. c8 y% B" X5 ]" Z( p  ~$ c. w/****************************************************************************/% y. U' @2 r% Z  N8 C
void ECAPInit(void)4 l4 e2 z( {8 j, ?* |1 f
{
5 j: \# h5 ]! P        /*-----设置 ECCTL1-----*/5 N( ~/ ?+ i$ J3 s2 |1 s
        // 使能CAP寄存器装载
& Y5 o" _$ p' I% h1 ]        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);8 W9 G6 ?$ W, j2 a& M) {! m
        // 设置预分频值.
/ ~  R4 G! }0 l- M4 l        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
" j- r) \1 z: @6 n) N        // 上升沿触发捕获事件
, _5 ^; r2 n. b1 n, d- u% w4 T        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);" Z$ z' ~) ]. D& ]$ q
        // 输入捕获后重新装载计数器值.: v; E+ P8 Z# L# {3 E# j9 Y8 _0 o
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);2 d1 h$ K6 H3 o/ h0 Z/ T

* p2 T# P$ C- ?5 R# c7 z/ _& @7 k        /*-----设置 ECCTL2-----*/
; S* C" y% g+ u/ k5 K4 T        // 连续模式/ k1 v% N0 ?4 w
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
' Y( i( n9 u3 A8 \6 o$ [6 m        // ECAP计数器TSCTR持续计数
0 U1 `2 N# f: F/ V3 Z, y  D2 }# R        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
; q, _+ w$ [  E% M        // 禁用同步输出和同步输入
5 Q( j+ W* b( n& C* c, _        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);! _' J. n, d$ q6 I
        // 配置 ECAP 2 为 CAPTURE 模式
2 r6 E* ?3 G5 F8 j# w1 d' i        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
1 Y4 Z4 o0 k7 `3 k& `$ [* J" Z, ~( d6 X, r1 J, `
        // 使能中断: }! b7 E! [: `+ \/ z2 e+ K
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);, s3 `4 g1 I* E" q+ Z
}
5 q8 G$ i+ Q# J- h: T  u
/ K4 |* [. D* M0 x/****************************************************************************/  W6 }$ W- w/ w4 B$ o- d
/*                                                                          */
4 y- k+ Q" q& \/ [* L/*              取得捕获结果                                                */
( Q: T8 \9 D+ s/*                                                                          */! i* T1 \1 `4 i: A1 S
/****************************************************************************/
( B+ t+ {6 J( Junsigned int ECAPRead(void)
; T/ Z& T# s. f( o{
9 z% h  I8 K* {# k" R& L5 |        unsigned int capvalue;8 A* Y  c2 y2 o" p0 |. g
        unsigned long frequency;
5 W8 s  h1 r8 M0 K
& t) I' y+ k8 q" ~( A* v0 m        // Event1 中断标志
( ]) k. ^$ D5 a' r0 E+ h; B3 A% ?        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
) p: r! g$ N0 `2 Q" n) F6 U        {2 H8 ~: j# ]) k( w6 x8 z
                // 取得捕获计数
! u1 d2 |. j; \; `7 P, t                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
# U7 ~3 W( n9 L, l. j9 u% ~8 q                capvalue = ECAPResult.cap1;
/ [3 i" D. r) q+ U/ |9 H$ g1 f* q0 T9 a, D" X
                // CAPTRUE 模块 228M 时钟主频
- e) z3 Q, [; y2 G& l                frequency  =  228000000/capvalue;5 n/ _8 }: z/ c
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
! K  `# u- u: v4 R: N* b& }: p0 ]) ]3 F
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
. K0 I  a% `4 B2 Y5 U$ X0 x//                IntEventClear(SYS_INT_ECAP2);6 u. N& s9 @2 Q( x2 o
        }" }9 h6 z4 o' r/ O
        return frequency;
& k! K/ V" V9 m& C4 \/ v3 d8 a/ R, N}3 A: c4 l. |' K  q1 Y
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
  L. y* A  k# V

本帖子中包含更多资源

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

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-13 06:02 , Processed in 0.045158 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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