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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/1 \8 f% @; ?- s7 p: k; V
/*                                                                          */
0 ~9 [$ [& o/ j/ r4 T4 m9 H: j0 x3 R/*              宏定义                                                      */& f2 B# m; E/ x
/*                                                                          */
/ T" f5 z8 E+ G- l! b" }8 |( C/****************************************************************************/( D6 u2 S, U! t6 X' @
// 软件断点
% z1 Q5 [) u  |" A- A9 U#define SW_BREAKPOINT     asm(" SWBP 0 ");# L) _: ^* Y6 t8 Q

/ l" g5 e( Z" N0 e' K/ _& i// 时钟分频
) I& L- [* X9 J7 I#define CLOCK_DIV_VAL     228
8 k2 g$ M. A8 r: C$ H' [9 D+ K( \' W) j( f
/****************************************************************************/6 C) g6 G( t2 [6 B* A4 S
/*                                                                          */4 x# n) u8 s/ [2 Q  b1 ?
/*              全局变量                                                    */
, y+ @; b6 W  C5 Z) O/*                                                                          */9 _$ W6 _0 @5 f9 R
/****************************************************************************/
$ f( o' [8 W5 H$ sECAPCONTEXT ECAPResult;
" f9 A; j! G: X$ M9 ~: \, B
) q" m7 y  W) }0 W/****************************************************************************/* u1 ?* G, ?/ P& C8 z7 e1 ]" w) }
/*                                                                          *// t5 t, r0 e8 O; p
/*              函数声明                                                    */5 t4 Y/ j, O/ W2 K% E' |
/*                                                                          */
  K+ D% W& h# \. u1 ^) S/****************************************************************************/
2 |- m" |3 F" g// 外设使能配置
0 c5 V! |, C5 D# d4 ^( rvoid PSCInit(void);! Q% t4 e; X) I: T( Q  _

: J5 w' p. R6 G// GPIO 管脚复用配置
1 B5 x' G0 Y" ]; \3 V8 svoid GPIOBankPinMuxSet();
/ y+ x* o8 I9 A& I! w! j! K' U2 o1 D
// 产生波形
2 y* W+ q$ _' A7 c! Evoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);4 B# d  e  R" z1 @4 A# q
void ChopperWaveform(void);3 i0 a8 G4 l1 S1 p
( y4 W" W: Y! \, V7 [
// ECAP初始化和读函数. d! D0 B$ J, t) V- g
void ECAPInit(void);+ e2 E- x% E+ o
unsigned int ECAPRead(void);
" w: l2 t4 e; D4 ^2 `: \# z& @' {
//ARM 中断初始化
- d; M3 q. t4 G: l+ ovoid InterruptInit(void);
( o8 a2 c+ z. e/ [& S( b& S0 x6 Q# A" t6 k  O
// PWM 中断初始化
& C. O) N/ P( F2 j# ~$ Y1 j& Ivoid PWMInterruptInit(void);- z. i4 [9 i. T% [8 d
// 中断服务函数1 t6 X# r9 r& M$ [
// PWM 事件: ?& q8 V- o8 _" _( v
void PWMEventIsr(void);( j( l3 q4 {& v0 m  b
// PWM 错误控制事件
# ~, m3 B3 e( |3 Z7 q8 y+ @) E1 kvoid PWMTZIsr(void);
  u- I9 Y9 w/ r. X* Q1 F1 `! W) X
/****************************************************************************/
: i; s$ ~) K& R3 J4 _. {+ H/*                                                                          */
' y4 t: F0 H2 v, q( p1 ~/*              主函数                                                      */
$ n/ V2 b7 @9 f0 ?5 M, L/*                                                                          */3 h9 G. v7 L: m. L- R( T
/****************************************************************************/! u: j+ X' y% Z7 a4 q* C
int main(void)
# F* h5 p( X" O- t# S0 j{
" I5 q3 ]; h* W! |; t        // 外设使能配置
% W; `: P$ `" d6 \/ i+ @" o1 ?3 A        PSCInit();- c- B3 m7 Q, j2 \4 }

6 G& F) r* ^) `# W: b" z+ z        // 初始化串口终端 使用串口22 O/ N: a! ^, {' K1 e# x3 g
        UARTStdioInit();+ v4 N# B# a; [3 [9 R
       
; B8 G! y: |0 O0 ]3 ]        // GPIO 管脚复用配置7 Q" ^; A9 r* L, m
        GPIOBankPinMuxSet();
5 i$ I9 M+ F6 K" W1 `& X
8 z" c; G9 A& ]+ g9 z9 y        // ARM 中断初始化
2 i$ ?, F8 L' u& |- P" x        InterruptInit();' R) U  \/ B3 L9 h. ?# J

* z0 w8 Q9 F# R1 E" v' D2 X% }; w        // PWM 中断初始化$ q2 J! R! \* n: X; x5 Y& h" ]
        PWMInterruptInit();: ]- i! C0 C  R2 A& \( v# k0 X
' J. h0 x4 `" u7 N" Y; k
        unsigned char i;9 C- X- j# ?: U5 Z
        unsigned int j;5 h9 w! f1 n* s9 S

' r) k/ _; j0 z' z: Q7 a, [. H        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
6 R' Y, `0 M+ v$ s        UARTPuts("------------------------------------------------------------\r\n", -1);
7 ]+ {! u# v) {% y. U$ O& f        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);1 ]9 L# \0 I: L  @
        // 产生波形- h- Z" h1 i5 V& s8 L
        PWM1ABasic(25000,50);
8 i2 C' s: F8 X! U
) l4 k) `0 U$ [! g1 k9 V        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);2 P9 A2 p) O! |
        UARTPuts("------------------------------------------------------------\r\n", -1);, T# P1 U! q0 o$ u4 f5 ~: ^

+ x+ {( L8 Y( b0 x; x( T9 u3 Q  n. s3 N
" A" t; [2 {+ p' C. n  S
        UARTPuts("------------------------------------------------------------\r\n", -1);
" ]. Q" p! U. K8 P; n        UARTPuts("                    C6748 ECAP Test\r\n", -1);- D7 ]' ^. O% z& F
        // ECAP 捕获初始化
! A$ x4 ^9 s$ g# w2 F        ECAPInit();& Z1 F0 D; }7 b/ C, c. ?" s
        UARTPuts("Initialize ECAP.......\r\n",-1);. l# f8 L+ N1 G' g$ ]9 v1 N
        for(i=0;i<5;i++)) [- a3 L) j; A) r2 H% z
        {
- \& b: X) L" |& M                    for(j=0x00FFFFFF;j>0;j--);            // 延时" q  `) K+ K: O0 J. X7 V
                    ECAPRead();4 @5 w! w% a8 r$ b& r" a+ \+ t* h
        }
- e; c2 y! f: c; b' L" J        UARTPuts("\r\n",-1);' K6 Z5 [. m1 r  w* d
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);6 J. v) b  G/ {2 ?- Y3 k1 R) P
        UARTPuts("------------------------------------------------------------\r\n", -1);2 B) l0 |  \/ V6 j! M

7 k! d+ C: T# a7 S9 h+ s! H        // 主循环
9 y& x3 d( }* e: o3 B        for(;;)
4 ^9 e1 B$ J) x, e        {5 L# W) y+ r9 y# Z" @+ C
7 I9 q+ J: ?4 \( G! A. h- a* S+ m
        }
+ t. U) K* l5 F- v  j}) c$ ^! ]" B5 H) W; p& H

; \" y$ @5 V2 C* p/****************************************************************************/! T6 ?  F4 Y  d9 Z4 K# P
/*                                                                          */
; ~, B, d6 ?* I! T0 j/*              PSC 初始化                                                  */
& s/ j; t  M# d# S( L$ C; E; W" d/*                                                                          */- ?" d5 a+ d6 c+ ]
/****************************************************************************/( s: F# y- g/ y
void PSCInit(void)
6 n+ k/ A5 E$ \4 W. n# g{1 s+ e0 w. j' b# D) n
        // 使能  EHRPWM 和 ECAP 模块. ^& e6 @2 i+ v3 t2 D: U8 T9 f9 I
        // 对相应外设模块的使能也可以在 BootLoader 中完成
( p5 |, @$ G$ l; A3 M$ w    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);" @8 G, E6 C* W* T
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
4 W7 _' j0 w6 D' w' K0 |9 R) b2 B}6 ?2 @4 R& m7 r/ @

1 p9 W9 ?, O& G/ ~  A/****************************************************************************/- x$ E) p) {6 F" D  z$ c; B* ~" o
/*                                                                          */
' c7 T- I" v. R& w/ f5 q/*              GPIO 管脚复用配置                                           */
2 p, t* N# C3 E8 f: R0 p8 l/*                                                                          */5 k' M) \2 j0 Y( |/ }
/****************************************************************************/
  C4 u% Y* m* A1 Z: Z4 s# `. B/ xvoid GPIOBankPinMuxSet(void)
7 ~6 {% Q- `8 o{! l: a. Y3 F; l+ [) `
        EHRPWM1PinMuxSetup();1 L9 e' ^/ a* m$ Y5 y; F

6 D( U% w: V8 y" _) y, g6 G        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)/ z( e9 M5 S/ K2 n' z* [7 o8 W/ A( A* ]
        // 作为捕获功能时管脚方向为输入
" l/ C" j8 }5 j% {0 A. @        // 作为辅助脉宽调制时管脚方向为输出# m3 Z" C; W1 Z' Q% K
    // ECAP2 / APWM2
9 C. W9 m4 A/ G+ I, j! w; Z        ECAPPinMuxSetup(2);
! R5 U% P0 _% N3 {- Y2 P) N8 i2 s/ v& u
        // ECAP2 / APWM2方向设置为输入
' i2 l0 f: G  K8 c0 N        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
: ?' y* h% S/ e6 `! ], z" R0 W}
: Z# [/ P! j! Q5 @  W. v: s% V7 _0 R2 _, y  ?/ l  v" g
/****************************************************************************/
6 J' E0 p( J7 M, ?/*                                                                          */+ l9 p# o, a5 d, E2 B7 i. @* S
/*              PWM 输出波形                                                */
; K. o+ @$ L4 \+ W) G/*                                                                          */0 A0 c% q' f5 F' O
/****************************************************************************/$ A3 D% h4 b5 P1 p# b& F
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)% K; f& G  g/ J- V
{" d$ Q8 K3 u, P! J2 ^  m
    // 时间基准配置8 \( E5 [* {- F4 Y( M8 `0 `: X1 J* m
    // 时钟配置0 ~5 I% e1 `3 h8 ^: B' P2 O
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);# M; J8 O! w* [* |

. B% z" t4 G% M+ @. ]$ e  p    // 配置周期7 R/ l9 |, z3 Z/ N7 |
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" \8 f9 y7 ?# C; ~5 \& B  q& X                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);: U1 n7 F" g3 ^$ q/ F3 i

% q- `4 F& u- Z    // 禁用输入同步信号
0 H) P! v) X* ?* t2 R( Z    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
, a) I% t6 h0 g4 E
3 p1 S; K6 V8 R9 w* c    // 禁用输出同步信号) H' p* D) {- b) [, O
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
; r0 Z+ d2 L& B$ F; g! V. ?0 g: l6 `
    // 仿真(DEBUG)模式行为配置, i& w& E. k3 x2 e4 w1 x  H
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);! l! d# |* A2 ?5 g8 b

" f9 C# q! w7 |1 g# r% y9 I    // 配置计数比较器子模块2 G( ]1 M2 K' g7 M4 X
    // 加载比较器 A 值0 m, ?/ h  r5 ]8 r: t4 o' @
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
( `2 `4 Z+ E" F  g                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& l; D. [8 M9 @) z8 b
( ~) J6 g6 g: u. c3 V2 ?    // 加载比较器 B 值
9 j: Y  a# [  G: W" V1 m    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
+ A. A0 `0 v4 d* _. p* x                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 }9 z- }. R! a5 H( h& W1 u6 ~- E# @3 f5 G5 w
    // 功能限定配置(输出引脚触发方式设定)
" z' I% r8 h$ A  J$ r% q    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出1 C0 j( S- X, l
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
: H; Q% y! n1 x. B& h                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
5 O, \( [4 J# P                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);' \" \. j( C$ x1 ^0 e# `; J

# n* u; V" Q1 G: F4 C# O    // 禁用(旁路,信号直接输出到斩波子模块)死区模块/ X$ A; _4 [3 g: O, S& D
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);4 p$ ]: g0 Q! p: y) ]; n
( y7 @/ L- r( Y: Z$ F1 I
    // 禁用斩波子模块
2 I/ A  m7 K: K0 }9 m" ~0 `. |    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);5 Q  A3 X) w1 c2 h

+ C* N: l% R+ l& x* X* z% S3 X( F    // 禁用错误控制事件5 C7 G$ h4 ]) B. a1 g
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
$ ~. I6 g! N0 k# m7 l    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);( ?! B' L( w* U6 U% `. I7 }

: q& |; n6 U! G; I6 V! K/ p- v3 h    // 事件触发配置
" M: P$ g8 X9 T+ W7 L    // 每三次事件发生产生中断
8 r- L. _: M9 f) n. P2 w$ F- k    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
+ e/ J1 |$ d3 R. C- C    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
; V' `* b% F  T* ^, g    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);: Q) `  V- k# b# ^+ }
    // 使能中断2 I0 T& n% C( k9 ~6 _5 y+ c( Q' V+ U
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);. c5 s  j  j8 ~

# Y+ L& H- x5 i0 x) K1 i8 l$ d6 |    // 禁用高精度子模块9 [! J8 y7 X6 h' w
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);$ n! M+ J% O) K: ]9 j

( j  ~! ~9 E; j# u    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);( o! M9 V- ^: |3 l
}
4 f, x( c' k7 B- h8 E' f! N5 M' K4 g" \' Q: i
void ChopperWaveform(void)3 |3 J% K% q( a" f4 w. W( k
{- I: `4 [) d& o1 ]4 Q5 j2 M0 L
    // 50% 占空比
# }! [0 N! f! }6 z* d0 Q    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
/ h. F0 k4 G2 f# n    // 4 分频
" R# ^4 u9 a  p. H/ u. H    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
+ Q2 r1 N1 `" J: q, y0 H' [8 G    // 单个脉冲宽度
6 o) Z/ f" b# ^; W: w    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);, r+ _" z2 ~( N& {
    // 使能斩波子模块; H; ]9 @* l! y+ [4 r, g6 n" z8 n
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
  o" w) N1 Q( T4 }6 {/ f}2 u$ [) f; B2 p, z

( {$ s/ ~! y. c, g& P/****************************************************************************/- \0 d1 X  {8 S
/*                                                                          */+ u" a* ?: T' E! D# n4 I. v9 f
/*              PWM 中断初始化                                              */. _; @5 H7 p, K# f  L8 `
/*                                                                          */
% \, S5 y! f! b6 b/ D" t3 C+ ?/****************************************************************************/7 S8 q+ h9 c: G0 ?
void PWMInterruptInit(void), @) G1 Z7 H, ~1 L6 h( x; w
{- |4 ~7 ?3 t( a% _/ ]0 r0 ]
        // 注册中断服务函数/ w( B  [1 [: x* l# e
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);9 m* v) C" N* |7 b( Q4 d/ `2 m
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
3 \. c8 j- a/ v, |
  Z/ u+ g" z5 f) ], r7 b        // 映射中断
4 r5 K& V! l. ]  Z4 D' m        IntChannelSet(SYS_INT_EHRPWM1, 2);* r3 f" G1 e1 I
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
3 v1 {$ @# P5 C
) @5 y  U9 `: P1 [        // 使能中断
  k" g  q5 p6 a8 b/ W        IntSystemEnable(SYS_INT_EHRPWM1);
6 A4 M4 M9 p# @% d. F        IntSystemEnable(SYS_INT_EHRPWM1TZ);  L" d' P7 ^. i# r
}
' Z# l! i1 m4 S/ s# k* O1 W6 v9 a+ w
/****************************************************************************/
' v4 X6 g% t$ h% x4 l8 H/*                                                                          */
3 w  B7 x% n# O% p' y: S/*              ARM 中断初始化                                              */  U4 f9 H# e. r- ]; b- g6 P7 S7 `
/*                                                                          */
' P! W% E4 N2 u/****************************************************************************/
  d4 ~6 u3 z4 M4 Hvoid InterruptInit(void)  o) |% K7 z7 A5 n' u
{
) t5 z  u# i  r  I8 W: n# \6 s        // 初始化 ARM 中断控制器0 Z, o+ b$ U# N" i
        IntAINTCInit();
' V- K' ]( \; D8 t! r5 ]
& i6 c. f9 A5 ?" p        // 使能 IRQ(CPSR)
( {. R# ?+ G0 ]' d        IntMasterIRQEnable();
+ {! f. [. G( E5 ?* P* ?7 l, K& W3 `3 z% i: Q
        // 使能中断(AINTC GER)
/ z9 v$ k' r, L) ?        IntGlobalEnable();
3 Y; z, i, r5 w/ N! y
' O. _6 I7 N4 v$ A. p. f: k; R        // 使能中断(AINTC HIER)
1 e1 S6 w) P+ T) ^3 w9 F+ C- ]        IntIRQEnable();/ C( h- t" U6 {, J, _
}
1 R7 v+ D! a* B  u5 H% S& ]- N
3 U1 r& W6 F  W3 H" R
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
' K  R5 t2 q  n7 a# x  A/*                                                                          */. I" B9 X& o2 {8 t$ y3 _
/*              中断服务函数                                                */+ H- _" [8 l2 v6 V( h
/*                                                                          */" M* ?8 e9 `  x) C
/****************************************************************************/
0 T$ M+ C* ~$ H" e4 }void PWMEventIsr(void)
1 k8 e8 m7 \5 J( P5 _9 w" d{
; B6 o! M) i3 F. ~$ W        IntSystemStatusClear(SYS_INT_EHRPWM1);
' u( q  l0 ]0 f5 R% y. r/ M2 L5 W( R+ j5 k5 J: N( d  e# H* C2 t
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);5 Y2 `, O0 |" P' {, g
}
1 A9 d5 I5 N6 ?; F0 U% Z# ?: o6 z, x1 [$ m
void PWMTZIsr(void)% }6 J; O9 k3 }& A. k6 [. u
{  F: k. V# D3 G  o' V
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
+ N: ^! [/ [3 y2 g$ J! \3 x1 {9 f/ G- `. E" T# o" j
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
9 n: t3 d- W/ L3 j}+ D" e3 e) V3 u9 v: S

$ I& t; m" T+ X/ J; o. h7 l' K/ t, ?/****************************************************************************/- y" J8 i" M( i, \2 F1 b
/*                                                                          */
/ c! Z9 f' f7 a1 v/*              初始化捕获模块                                              */1 m# @# M2 L' A
/*                                                                          */
, E( l. L% ]: S; g& l/****************************************************************************/
8 x; h+ ]2 j! z) z/ p4 Cvoid ECAPInit(void)
" v" ]7 d9 q3 Z$ c5 W8 N{
6 }& w6 b" F, O6 E' m+ ]& n        /*-----设置 ECCTL1-----*/
, `1 h& d6 D$ B1 o        // 使能CAP寄存器装载
9 x% s& z9 ?" c& w5 h7 s7 Z1 _        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
- ~; J2 z( J* J        // 设置预分频值.6 q& |' H+ y/ s. X
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);, f% }. ?& D5 S  d7 c' b7 {
        // 上升沿触发捕获事件
, J- U. F9 y$ V# a2 E8 l        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
8 r0 d2 r, U- L; O% I3 R        // 输入捕获后重新装载计数器值.7 I; k- _7 a0 r  E& B  s. E
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
% q9 J( e; p8 B5 ]  W
( i+ e; c& x2 e* ?        /*-----设置 ECCTL2-----*/2 \# ?" c/ O( K/ |& T) ^1 t
        // 连续模式
" G7 ?1 S: M) Z/ S7 f+ h        ECAPContinousModeConfig(SOC_ECAP_2_REGS);1 m. P: L: D$ c: H/ \
        // ECAP计数器TSCTR持续计数
: K- v: m) T8 U" T6 P6 L$ w        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
" _% v4 r3 J0 g  ]  L# e1 K        // 禁用同步输出和同步输入
6 N2 h! {) ]  |3 W        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);# z; N8 g; j; D; {2 d1 @
        // 配置 ECAP 2 为 CAPTURE 模式
( N+ P$ c2 D4 u        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);7 V  Y% \; h6 `4 \
. l( m5 b8 s( Y
        // 使能中断
0 ^/ C1 p- L) l* n1 i//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
/ ]( w- F' F8 Q) {1 ?}( o$ C- P2 v9 m( l7 o) G
% C) Q! |5 O5 f! B
/****************************************************************************/+ F4 O4 ]; `  }
/*                                                                          */7 r) }4 [; b" i9 T8 W! W4 f. g
/*              取得捕获结果                                                */
0 }1 z! l/ j9 f- D! P; F  U/*                                                                          */
5 p1 C% e, J7 d) h/****************************************************************************/
1 T$ @, _- Z& ?. Cunsigned int ECAPRead(void)
8 R! j0 N* |4 H4 w, ?{" r4 b+ y$ k9 Z6 i: C* \, J
        unsigned int capvalue;- v* y% q' }3 [' V& c# {1 @
        unsigned long frequency;) j8 d3 L) ^& R5 [3 Q4 E2 L" s

5 j- M7 v' ]8 z        // Event1 中断标志
  Z4 C4 Q/ x% S+ W" |        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
) p7 k+ j& K4 [) W. {8 l        {1 V! o  t3 x# G
                // 取得捕获计数* X/ |& v& o0 G1 P
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);( R0 Y; A! r5 C/ A( n
                capvalue = ECAPResult.cap1;% ?% v* }* ], ^) V" Z0 \7 o* u9 \0 W

$ |' ~4 l  q# P- o) s# z                // CAPTRUE 模块 228M 时钟主频
7 `$ g% Q  ~# p1 V                frequency  =  228000000/capvalue;& T- q* v  D! P$ E! |. W
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);) g3 c/ q& c0 M# r" s+ X

/ ]5 |# F: S  n4 D$ {- r                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
! ^* L. [0 E5 o7 H7 w; x) [" }5 A//                IntEventClear(SYS_INT_ECAP2);6 A9 ]8 m+ u3 Y# W# L% i
        }$ ?' @# q- i  A$ |
        return frequency;8 e: c1 C. ?; g4 l  X( x$ R
}
4 A8 X) p! T; o2 T9 O
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
: b+ @- x) r2 R

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-2 07:14 , Processed in 0.046958 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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