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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
# |" I  N0 m' r" G% B4 l2 K0 D; j% |/*                                                                          */4 H* H/ @( {) i$ ]+ f+ r
/*              宏定义                                                      */2 a) [" S" t, L9 f
/*                                                                          */
( c! ~  h" p7 ?5 C/ G" d0 r/****************************************************************************/
- G0 Q+ z1 d: b4 f0 Y- q4 K// 软件断点8 _' p4 L; C9 h. Z& R+ k! R
#define SW_BREAKPOINT     asm(" SWBP 0 ");
( H: D: c4 k! g7 E2 E, z5 r  K: }2 o) ~; v' z' k3 M; a' _5 S
// 时钟分频" S+ x& T! {. N5 |
#define CLOCK_DIV_VAL     228: c% C" n' }6 n4 C5 B" n
+ c/ v* e+ }# [6 t# k
/****************************************************************************/
7 A. W) e' X7 e6 X, J/*                                                                          */. s1 ~8 d. j) [; X* ?: A
/*              全局变量                                                    */- v' G) E- b* \1 S7 D4 r
/*                                                                          */
9 v( t4 j% |. {8 w8 m( p/****************************************************************************/3 |- O* m; c* x5 l
ECAPCONTEXT ECAPResult;
0 r% z0 r- |3 y& B1 Q8 e* `) P0 n5 m( }0 w. J/ a" ~
/****************************************************************************/8 `* o" X3 K8 h: x& f& H- ~
/*                                                                          */" D1 Z4 u' f* n& V% K/ P% |& E
/*              函数声明                                                    */* \4 Y! L1 `' P5 E' w
/*                                                                          */
3 k% B! M7 S1 b5 k  P" C/****************************************************************************/* B6 F0 H- Y" t
// 外设使能配置
+ S* I: ]  C2 avoid PSCInit(void);) D7 I7 }6 u* @" e

* V2 q0 Y% c; h0 P6 c1 v. b: v// GPIO 管脚复用配置
: u( _6 E. F  A' N" nvoid GPIOBankPinMuxSet();
) ?1 _- @) I6 `% N: r
$ T) p' J9 M9 i1 D8 j( D* A// 产生波形2 x- r+ p  ]- e! D4 q8 J6 ^+ @- }
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# {4 M; S+ S+ n! d0 lvoid ChopperWaveform(void);
% Y: W/ Y  Z; y1 I- [
6 ^4 Z1 I6 Y: V$ T% L9 i5 I  N" k! C// ECAP初始化和读函数7 [( Z' `0 N1 I/ x
void ECAPInit(void);
5 ], d/ q2 `  K# F! `unsigned int ECAPRead(void);, b9 B/ H- {& T) c8 g* s

3 s8 B+ O0 `, l1 x- d//ARM 中断初始化
( ~# n6 r- x  {5 z! g1 ~void InterruptInit(void);
# v4 {7 ^( k) s, L( T
0 E5 I9 p- z$ I// PWM 中断初始化
: `' y8 r5 o% N! s6 \9 avoid PWMInterruptInit(void);
# J1 T& b$ M% n* Q# R// 中断服务函数
$ v- K: f3 b! a// PWM 事件
! Z- n8 C# w- X3 jvoid PWMEventIsr(void);
. T, E5 A/ {9 C' b2 r) Z// PWM 错误控制事件
4 x( V% ]/ O8 X# l/ yvoid PWMTZIsr(void);
- l% O) p& g5 T% q( v7 k# \( g) d3 w- z0 e4 ^( V
/****************************************************************************/% Y0 a7 ~$ P8 e( s! }2 V/ G1 I* ~
/*                                                                          */
# K8 w, y# b3 `* ]/*              主函数                                                      */
- _' ?9 n8 L) g0 C6 Q/*                                                                          */
! k% e' q3 N+ M; L' ]/****************************************************************************/
2 `5 F; i+ N0 d( eint main(void)
0 T6 X& F+ P5 s$ H0 V% d8 k" f7 g{  w4 F  F) t8 S6 C( d
        // 外设使能配置
5 n  V# m9 h" _9 K( d$ d7 o7 ]) H        PSCInit();
/ M/ K) `8 S' q4 d, J+ M8 w1 v. U6 c- z
        // 初始化串口终端 使用串口2
! H  [3 W% H6 @& f( w/ y7 `        UARTStdioInit();
$ w1 P3 B1 n% v( f' @) K/ g       
0 ?6 y$ ~+ d1 x) Q6 O        // GPIO 管脚复用配置
) x' W7 @, b" J: j5 w1 @, x        GPIOBankPinMuxSet();; Y; \/ B3 J' s* r$ \0 w1 m7 d# `7 L+ O

% v9 C! Z5 f6 Q8 V! t5 T        // ARM 中断初始化
4 U- L; ?9 H; V1 t        InterruptInit();
% C9 U' @9 k) e1 [& _0 U8 \+ }- B
        // PWM 中断初始化
- K& I* Y( M  U+ N( H, M        PWMInterruptInit();
* }+ E6 ^8 f6 r; s
' V/ d& s3 G# J( ~, |7 I3 F; L; u3 Y        unsigned char i;7 W. c5 P) t* u+ @! U
        unsigned int j;
; ^( A% m8 @2 J  Y6 z. c, H6 B
! B0 H6 S; \. w+ Q: M5 V        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
) \) o; Y) R) [* t3 V        UARTPuts("------------------------------------------------------------\r\n", -1);+ Q" A% m5 r' F. J
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
6 H# X+ T8 B  g$ `+ a& j        // 产生波形1 T# [7 D9 B6 ^/ O
        PWM1ABasic(25000,50);6 Y; X' N- g% ]' Z
: `- _9 e  T+ p( z
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);: e0 v9 p' M4 Y$ b2 L! y! L
        UARTPuts("------------------------------------------------------------\r\n", -1);( \8 h8 W; Z& I6 Q
% d6 O, i, |' p" O

2 C7 X. B4 `3 v7 b* n0 i+ S, j( f+ G, S( v2 n' H
        UARTPuts("------------------------------------------------------------\r\n", -1);' V1 q4 H2 |" z0 w1 \& I3 X
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
4 n) }% N* A, ], l; s$ C0 X% Z2 n, Q        // ECAP 捕获初始化
, X+ A5 T) f/ Y: y        ECAPInit();
- Y" z7 O5 L; j- J; }) I2 y; N        UARTPuts("Initialize ECAP.......\r\n",-1);
  X- C% @& Y( ?: k        for(i=0;i<5;i++)
* ^3 o# Y% @/ V0 k        {/ X* m- ]0 U3 C- ]5 L
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
3 B) r" q- e8 S6 z$ g# z0 h                    ECAPRead();
% e" a/ _% f( h% T        }
+ S1 x" D; q+ ]6 p! u* ], U        UARTPuts("\r\n",-1);) L2 i+ b2 t& x( U2 g
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
( _9 t. \% h$ V' C        UARTPuts("------------------------------------------------------------\r\n", -1);
6 {( ^4 v5 b/ g7 b4 v' i1 [
! V# Y% N5 V" I2 ?8 q* s        // 主循环
* c4 i% J9 B* o/ G1 [        for(;;)# K; b" I/ V1 s. d
        {" R% O& i7 e: t& P) ^

6 o. Q4 Q7 m3 }) X# `! S7 G# Y6 w        }
, J; b% [, T1 ^" m& a' I}- W  f0 q: f) K8 u* H( ?/ C% C
* v: u: Z. t7 l- g8 D% i
/****************************************************************************/
8 M0 P. I4 @3 `/*                                                                          */" p; a/ Z# D$ p2 @3 |! T# ^
/*              PSC 初始化                                                  */
& U% e9 k9 `; M4 ?! s0 v  ]0 p; o/*                                                                          */
5 T& j) h) r0 H/****************************************************************************/- _4 B4 A/ ?6 |1 t' `' _
void PSCInit(void)5 R  e, l# |# `5 c7 N* \* Q$ A
{! [7 [! _: g8 A+ u% }% [
        // 使能  EHRPWM 和 ECAP 模块+ W7 V- I* e* B! A
        // 对相应外设模块的使能也可以在 BootLoader 中完成
0 O# e" ]7 j% N- m+ j" @    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
6 ?! N- Q5 }# `8 w    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);' y3 G7 @0 ^8 I  e: d9 S
}, Y/ N9 q  I0 ?; p! g

- F  s+ T8 d: h+ {; H9 l- S3 d/****************************************************************************/" g4 F, }" E# {& J7 S- c
/*                                                                          */
3 k- F" r) l7 U7 |. }/*              GPIO 管脚复用配置                                           */+ W4 y6 s' U9 {* p! Y# v
/*                                                                          */
: d% p! Z* W) g7 i. v) G. V3 i/****************************************************************************/4 b" c- d4 o# T) T
void GPIOBankPinMuxSet(void)
7 ?5 h( i  S3 y* D8 m: S% w' a{
' @+ n/ s% E% d2 z' V. U        EHRPWM1PinMuxSetup();# C- F+ ^' _( E1 M8 g

5 a/ B4 L5 ]! n/ d4 {+ M: j5 N' e        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)% |! H3 ^) a# y( E% l
        // 作为捕获功能时管脚方向为输入
' @' P) ~  y, o! E/ S        // 作为辅助脉宽调制时管脚方向为输出: y& v3 W* A4 m* Y8 d
    // ECAP2 / APWM2
$ b( y& f# w3 t) ?1 L5 G        ECAPPinMuxSetup(2);, S1 _2 O: [2 d& w" O. i+ i, y2 O

# n: |" z, \6 R% c        // ECAP2 / APWM2方向设置为输入
3 M: Y  F. t. K% |& t        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
+ l$ u. L& `  n/ Q}
; j# o) A0 V8 N: H* u$ c% c- X
% m2 N& V+ O( O; W4 x/****************************************************************************/
4 J$ C3 I  t0 C$ J- p( d3 y/*                                                                          */
/ A- z& h4 a3 e: `! l/*              PWM 输出波形                                                */9 ^+ r) L1 `; I+ E
/*                                                                          */
5 ~# J3 D7 {4 q7 Y7 D7 {5 |/****************************************************************************/9 e; R2 L3 v$ \3 q$ ]+ G4 h5 p0 b
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
( d. z) {( y4 j$ u$ p{
$ F- i% z- o$ V3 ?6 {    // 时间基准配置
. y# x. G% A1 a7 h7 I9 U8 ]: Z1 @: c    // 时钟配置: o- r3 @& y6 i9 V
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);/ N* n. l- e" r9 [! s) g3 T
1 o: w0 P8 V9 V' w6 g
    // 配置周期; P- N& k3 K" R# ]% {: \) |
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
7 ?0 W5 y* E0 t& v                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
: N% @0 o( k0 d6 p9 l' O. {* h( U- A: z( b: Z0 y' G+ o  i' Q2 P' g
    // 禁用输入同步信号7 ]* d- A* M2 R6 h
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);  g# w' B8 x7 w/ L% O& @* Z- q  Y

" `# F. B8 i. [  J6 H    // 禁用输出同步信号' C' C) ^: `7 L% \+ K. |
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
* D# ^5 X+ g! j* |( J- K
  s/ j8 h0 s) X3 c3 V) Y    // 仿真(DEBUG)模式行为配置
& ?; {0 M- {: I  {" ?4 e" ~  C0 U1 `    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);$ n- G/ D  o$ V8 Q& E3 v& o
4 n+ V' H5 p! m7 J0 c+ Q  b1 N& e
    // 配置计数比较器子模块
4 y- k2 k( Y/ ^/ i' p& D    // 加载比较器 A 值
2 o8 e# B# O# k2 @2 l! d# b    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,4 R2 F. W$ B0 }* h  e
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- M8 H) P! t# \
( M; b+ f; T4 G7 J7 c1 g( K" t3 A    // 加载比较器 B 值
/ S$ ^2 T3 m' ^; J( H    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,: B; Q2 R" ]2 ]0 {7 Z1 o$ n
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 \6 }" x+ P3 J
" [4 J' k, r% q( }5 A' W8 m
    // 功能限定配置(输出引脚触发方式设定)
# t, A" q6 g' a+ T    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出! j) m! k& z! P+ n# o* d# V
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
  ]4 n: W8 K9 r- Y* l                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,2 q; W# t3 \- F* @% C% z- J
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
2 o: t4 U( C- N5 @. D' R& b
6 Y& e9 v. F2 n& ]    // 禁用(旁路,信号直接输出到斩波子模块)死区模块3 G; V+ ^: Q9 X6 B  t0 W6 _6 O' s; e7 P
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);. L! ]1 C$ f( V1 x8 Q; C7 }
- w5 G. l/ H4 d1 F5 d* \8 k( [! ~
    // 禁用斩波子模块8 J& o4 p' d( ]) Z% g3 g
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
7 Y. q$ z, [7 b! C+ r6 O
$ g  R' c# J; F4 t. I/ g    // 禁用错误控制事件4 j$ X2 B6 H& y$ Y( ]% p( \
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
9 @& ?, U; C! f0 ~1 G1 W    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);) V: u5 d1 B. C* t+ W3 @# B, g; y0 w

& N- ^, q* s. N$ b  f8 q6 ^3 Q    // 事件触发配置
5 i; E# f1 |8 f* f  Z) z. d+ @    // 每三次事件发生产生中断+ S+ q, e& r( b  }$ B
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);- s, L- |" U- W8 m4 n
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件' V6 G4 i6 ^% N' E; n) U7 j1 W
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
& i" k0 O; @' _: n. G8 @  K    // 使能中断8 F3 E5 i. l; h4 _2 j
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);. m' Z  H, I8 D. J# P2 B" n

6 T, J$ K9 X: j0 |    // 禁用高精度子模块' c; }$ w, U' B! P8 C& x
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);% U8 o* a/ a% z4 R
' X( K* D8 X8 M* V
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);& |/ d- ]/ q+ N2 m
}
- q9 ?) K# K5 D. B8 @' Q0 W. F* x) }: u* J+ _9 Y
void ChopperWaveform(void)  n. n! b  R9 J5 a) \# ?
{
3 ^9 ?0 f! m3 W" q# C    // 50% 占空比
* o4 n" P! Q% v. W! {; ~& q& i    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
* J: c( R9 q* `' Q8 b: N$ K6 w    // 4 分频
6 B" W$ K; y) I# D  u    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);$ H; f/ \6 n/ t4 i
    // 单个脉冲宽度- J0 ^! m' j) F! r: t' x! D
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
0 L& V* f2 E* @6 {) O; ~    // 使能斩波子模块" Q1 z7 L; Z: Z/ X
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);6 _; C2 I7 \! Q+ [, f
}
$ T9 n; j$ n5 i  r+ |! O- U
( G% }$ q8 t3 K5 Z: _$ M$ U9 p/****************************************************************************/
5 W  N, d0 M  `  j. B7 h/*                                                                          */
* n0 `( |$ P$ R3 b5 N/*              PWM 中断初始化                                              */
* J( R9 i8 q) s: \5 Z5 I2 Y/*                                                                          */
6 B, p. B7 g- w! T/****************************************************************************/  m. G' N+ K9 ^) T
void PWMInterruptInit(void)+ g: |8 Z: S- Q2 v% M5 z  }* i
{
. ~( g2 _: \' R7 y) |2 e, ^3 t; A        // 注册中断服务函数$ Z0 f& C% e: F4 ?
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);6 m, r) Z+ `9 l/ c$ w+ _- q
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
7 v- K' Q' e  n# S2 ?' M8 @5 Q/ ~+ D( p( Q( n) J& j
        // 映射中断( N8 j+ c5 J8 {
        IntChannelSet(SYS_INT_EHRPWM1, 2);
" B! B* L/ u1 ?' `1 Y# s& R        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 g, h" a4 |2 A1 N. Q: T  }' v" N& ^
        // 使能中断" w* K. ?' v% v
        IntSystemEnable(SYS_INT_EHRPWM1);8 _' D8 U) L7 ?/ _( L
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
# b3 a9 k4 m  I) ~+ f4 \7 A1 y}
! F4 s2 |% c- i6 {$ V0 ]) y2 a& G" S# y& {2 v" m1 g2 N, n; t
/****************************************************************************/3 H" [8 y; ^4 D
/*                                                                          */
6 E8 c" @& x& p: j/*              ARM 中断初始化                                              */
$ ]* H: B( a! p/*                                                                          */
$ s6 [9 x& B) S$ T1 _/****************************************************************************/
' W3 {: b5 q! [6 U8 r6 A4 w3 |% Ovoid InterruptInit(void)
& C0 w1 a0 e, l{
# y- b& P3 I8 }4 S8 E& X; W        // 初始化 ARM 中断控制器
; p& O+ J4 q5 E6 d8 P        IntAINTCInit();( j/ r* ~) G, A. ~, S: ?% P4 N

. c& ]3 y; a9 ~  m$ b' w* v        // 使能 IRQ(CPSR)
8 t' G0 Q5 \2 V        IntMasterIRQEnable();
; Z, \# U9 b7 t: K7 _! R
$ q: \! p/ d1 y' U- `        // 使能中断(AINTC GER)' D% p& D& l3 w* s- J
        IntGlobalEnable();
" C2 s) E. C  f5 l$ V, K# |3 l3 r: R& M( _2 f5 b( w
        // 使能中断(AINTC HIER)
  m; j0 t( z" L8 J        IntIRQEnable();& D% ]( L. }8 B) ]7 ?
}
+ B. s3 b( P% g7 I; B2 p4 b$ `2 _- m4 j) ?/ {5 B( x- W
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/% B0 a  u8 ]2 f0 R4 Z9 G
/*                                                                          */) T, Y% ~% O  l) L
/*              中断服务函数                                                */
2 w$ I7 R7 U. m( D/*                                                                          */
+ v" d" k, g6 F, F' X/****************************************************************************/
2 e3 S( S0 N$ t0 |1 lvoid PWMEventIsr(void)! A. l- z$ L# [2 S6 a+ a
{! P+ Y2 k3 a# h5 ^. e3 K
        IntSystemStatusClear(SYS_INT_EHRPWM1);
) O+ v+ f4 r! o
$ }: s2 u" `. N6 `- b9 ?5 S) Y    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);# c" W! F& T/ d8 w; c
}
& _& ^2 M6 ~1 t  N% m0 A" M+ Q2 q4 e4 F
void PWMTZIsr(void)
: A# X& g( E* I! g+ N3 R{
- N3 }5 V) R4 ?: i: _- D/ P        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);, M* {  Q) ]5 G1 s( X/ s

8 r9 `1 f, O" p" W    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);' o1 w0 \; S* F$ f$ ?8 ^% N
}
7 W/ v8 I& X% [+ d) Z
' D5 V$ r& z7 R% x' N1 J+ l& O# n/****************************************************************************/: b5 r- I* s4 {2 v" I2 O! \
/*                                                                          */  e3 W$ }( j, |7 b3 Y4 A$ _
/*              初始化捕获模块                                              */
, L" Y8 w' c1 \" R$ U: F6 |/ r2 ^/*                                                                          */! G0 [4 x- l0 d; [
/****************************************************************************/
' t# m  H% N# N! p3 q) h* L& ]void ECAPInit(void)
4 b' X0 n/ d! S: b7 H- ]3 ]; Q% k{) X4 W3 i9 i  |3 T- w/ O
        /*-----设置 ECCTL1-----*/
& L8 Y0 n! k! V3 z        // 使能CAP寄存器装载
7 D5 g/ @( E% x# S        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);: c+ l& j4 E1 h
        // 设置预分频值.
% c/ l. W8 j) I2 C4 c8 ?( X        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
. v" {3 e4 Z4 z0 c        // 上升沿触发捕获事件
8 q# H% X' A' S& X% A; N9 T* u        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
  Y& ~% C$ a, {        // 输入捕获后重新装载计数器值.; @4 W- f, z" G) D
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);  D. P9 l! l6 k" F8 f/ t

' ?6 }- A4 ?, M( O        /*-----设置 ECCTL2-----*/( p7 h; R7 m- w. ]8 ?  \, o! p
        // 连续模式& j9 F1 W' v0 V2 n( q
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
* q" s+ i/ i. X* n* e8 u4 H' ^        // ECAP计数器TSCTR持续计数
; ^4 i- A6 d( I/ y  D4 D, m        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
# E# P& |* L% u        // 禁用同步输出和同步输入$ e* K! \2 q' S7 {( }# Z
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);. f# ]7 Y% K8 i, n4 s5 j( j* q
        // 配置 ECAP 2 为 CAPTURE 模式
1 s3 W( \( V8 z; G        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);) }" x& z! n  d5 @5 t# U

" E. b; M, Q! A; D7 [) y        // 使能中断. Q' {0 K, e0 C
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
; |9 }' U4 r$ i9 `}( T9 W7 d8 l2 U5 `, A* p3 g8 A
4 d) H0 z3 K3 \+ `/ v
/****************************************************************************/' [" U* o/ C+ a% O
/*                                                                          */) ^+ _* w% s4 y1 o2 a
/*              取得捕获结果                                                */! d- O% S, ]8 ~. M5 |3 L
/*                                                                          */% \5 P" S( g- F/ a4 `3 t2 E
/****************************************************************************// v7 A7 a, L0 s' ?6 |8 B
unsigned int ECAPRead(void)1 E' S5 s) n1 I! Z! H5 w: M7 A
{5 n/ K' i  |. I
        unsigned int capvalue;
7 _; ?2 Z( I4 G0 B: m, N        unsigned long frequency;
* A5 L! M- \" d! A
! J, U2 f6 q7 L$ M  Z( K2 J; W. l9 q        // Event1 中断标志
: a9 O% P% Z5 Q        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))* w5 M! H6 F" f1 i' h
        {
5 V4 L7 o# W, @. y                // 取得捕获计数
# L* n3 b8 G& V                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);- U  O5 g& o* `  J
                capvalue = ECAPResult.cap1;( ~- T9 o8 c" ^$ {

  a5 W$ V1 t- m% @; u                // CAPTRUE 模块 228M 时钟主频
/ x' d7 R( E8 T8 f                frequency  =  228000000/capvalue;2 W- ^( _" \; h1 F5 R& e* s
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);0 V7 o# M5 U& s& W& k+ j
* f8 Z5 f% o5 l2 }, G$ \+ a3 Z' B/ [
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);5 I, h# a2 V8 A; x9 e5 v) y
//                IntEventClear(SYS_INT_ECAP2);0 K2 V. U) l/ L6 M- u; C/ F
        }  M  `4 x& p' B' P: Y8 w3 `
        return frequency;
+ T* I! A* }; B1 L! a& ~* e}
9 A3 K( r% h# l' ]# y6 G# S6 O
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
  R9 q2 D8 G# _; v% h# @' X/ p

本帖子中包含更多资源

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

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-8 07:56 , Processed in 0.046660 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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