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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/1 v/ A' k7 t  \6 A. s5 T* ?& c
/*                                                                          */
; z" J% ?9 J8 i- ^/*              宏定义                                                      */% [9 F$ `; \* }5 i, A
/*                                                                          */
% x- T4 `) @$ \* ~: I/****************************************************************************/
6 ?, B# ?0 w  E: }// 软件断点# Y; k+ T8 T& u
#define SW_BREAKPOINT     asm(" SWBP 0 ");5 c  \+ ~# s' p# L
+ Q! x1 s( `2 }9 n3 j. ^
// 时钟分频
) t# E2 g1 u! T  I, G$ ~#define CLOCK_DIV_VAL     2283 Y& O8 m# Z0 R/ p) H4 w

( T8 W; y) V- C; ~/****************************************************************************/7 M4 F% G2 O* U$ Y5 t
/*                                                                          */
/ s. e- g4 A- {3 R/*              全局变量                                                    */8 b- D  y  f0 b0 t
/*                                                                          */  d% V, M" m8 L& \' ~, D
/****************************************************************************/
, m1 k1 |2 Y* h2 u9 cECAPCONTEXT ECAPResult;
) N# s: C9 `7 P9 p  _7 D" h6 \
/****************************************************************************/
1 {: P* n5 ?0 H0 I7 J/*                                                                          */7 G* o  c7 T) O0 v$ ]* i
/*              函数声明                                                    */
* w& W8 n- {" @6 G  d+ J/*                                                                          */
2 d3 J/ B- c* D0 b7 ]0 }/ z/****************************************************************************/
! d: h- |7 [* X( C+ F7 ~// 外设使能配置$ k( G! I; i/ O' S) e- `
void PSCInit(void);
2 B0 c& q7 b0 m, W+ _! n$ X2 g- F3 @4 `# e) S3 {
// GPIO 管脚复用配置9 d: s. r4 q' S8 B3 S
void GPIOBankPinMuxSet();: v9 X( I  C; s" v/ X$ Q6 u

2 d+ E! h. v( r) _4 k' F0 r// 产生波形0 {$ ?% B+ ^/ v% C3 R6 X
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
. Z# S# y( C# `void ChopperWaveform(void);
+ g$ t  o# E9 R; D0 V( s8 h5 l- ?) d' m  i% O6 `% x/ M
// ECAP初始化和读函数
5 N2 i3 |  [+ {' E$ ~5 Z" K) p- pvoid ECAPInit(void);
' i5 }5 ?' a9 `0 d: e! [* G: zunsigned int ECAPRead(void);
' g  ]; G* Z$ Z& V4 j/ |( k
9 ?- R1 Q5 ^9 |1 J: u7 J2 R: T//ARM 中断初始化
1 f" Z2 `; [0 u+ zvoid InterruptInit(void);
. J+ @" m6 b# \* b
5 i( C/ N8 x2 ~. U3 `$ a// PWM 中断初始化5 _( \" E0 Z5 g3 _/ y, L# D4 [) W- R& x
void PWMInterruptInit(void);$ t. \; f4 C! ?* o$ W
// 中断服务函数
. z, z7 M, c" D8 A: e: D  t// PWM 事件
/ c  b# x* m( d! z0 O4 ^void PWMEventIsr(void);
) X/ D- c# Z; ~6 @3 Q// PWM 错误控制事件
' W5 Y- m7 P& r- w# E6 Qvoid PWMTZIsr(void);
6 q8 q1 o: j( s7 S: k) {! J1 [9 v& G1 B
/****************************************************************************/+ P$ i4 U1 X: }
/*                                                                          */9 }0 e1 x9 g# U! x$ e& H( \
/*              主函数                                                      */& W6 E7 F. ~( F9 {
/*                                                                          */( Z5 o3 N% F5 ~3 r
/****************************************************************************/6 R7 v& W) ?7 R2 t2 O" p+ I9 C$ C
int main(void)
; r0 ^! X0 k+ F! k7 u9 @{
- i5 I: P0 C+ e, x4 ?2 T, _        // 外设使能配置4 T8 I. B# s3 f
        PSCInit();1 {+ A0 B$ W3 D' d* A! ]2 _4 [+ Y

5 y& {2 B$ u8 T' t$ b& y        // 初始化串口终端 使用串口25 d3 j! H8 \& k
        UARTStdioInit();4 G5 O, _% P$ z3 K4 }
       
$ h1 B$ q% U8 o' l: r8 t        // GPIO 管脚复用配置. H1 v; L' X  }0 ~
        GPIOBankPinMuxSet();
& p& H* i2 `& @- x- U2 _1 q- l, |9 d, h% J+ c' |) T# f. g
        // ARM 中断初始化7 ?3 D4 f/ q4 m2 W
        InterruptInit();
" z9 u# L0 }4 W4 F/ `
) \3 S, [# N, p% l        // PWM 中断初始化6 J+ ~8 a8 b$ U  z) S7 r7 N
        PWMInterruptInit();/ ~  O5 w! I) ?! `
2 }2 b( e2 m! v+ c) p
        unsigned char i;
8 ~* t9 t! S2 t+ T1 P" r        unsigned int j;) l0 I9 ~# K' T# }* ]6 @/ y
4 `' I# T" k) F' n! M* v" Y
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);0 X% C: S( v  Y- I' }$ I: K
        UARTPuts("------------------------------------------------------------\r\n", -1);
& P6 m9 K- Z8 B: S  K        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
1 w3 T: m3 X+ b; |: h        // 产生波形
! N+ g" a5 {4 I2 g2 h- p" R- o        PWM1ABasic(25000,50);
" ]3 u- i2 P; A" n0 l/ {1 t
" `3 h6 W* N5 ^5 Z& `7 Q        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);& x9 t  z; \& e1 T$ ?
        UARTPuts("------------------------------------------------------------\r\n", -1);
. o1 A5 E" [+ I9 L' f
7 A0 P* k4 u+ Y$ g! e
" j/ h. @+ ~# \  H0 F# {, k0 X- ~, Z% s$ c2 V9 G+ o2 W2 C- {
        UARTPuts("------------------------------------------------------------\r\n", -1);$ l% W  ^4 p# r- {+ z) B. e
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
, c# q/ v9 J  u" ^* B' i/ b        // ECAP 捕获初始化' [& I8 N2 u5 M* w  H" R$ {$ L! N
        ECAPInit();
3 ]+ U0 }: y" d        UARTPuts("Initialize ECAP.......\r\n",-1);
# P, V; @8 Q" q( a/ K        for(i=0;i<5;i++)1 C3 U: P* r: {$ E
        {) r1 `" G- L+ ^9 U: N
                    for(j=0x00FFFFFF;j>0;j--);            // 延时( C' ]9 u# `5 o7 g+ N
                    ECAPRead();( t9 n( E8 @# {0 m/ l
        }
: ?5 i/ j' F2 @' W. ^, {8 f1 e        UARTPuts("\r\n",-1);
" N5 s# k3 L) A        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);9 e" v, K' d$ s1 r: ^* Y; z
        UARTPuts("------------------------------------------------------------\r\n", -1);1 e$ f2 ?$ P) k" B# N( o% V

5 e# x( C! b, ~$ H% v9 L        // 主循环
% y+ B- L. D- L/ y2 f- S3 T        for(;;)
" t  B  p' e  R$ {        {2 {# O/ t7 f; u2 Y+ m) x
; w* f! \$ q. e! I: K/ s
        }# I! b! w8 C2 }3 R. X7 w1 f
}
$ z4 O" c6 S8 I9 N5 s. G  T  |) I4 V' i: R$ n- N% F) A; W( ?2 ~
/****************************************************************************/
8 g0 A. z4 G. y4 h9 O  x- r) }/*                                                                          */
. \" k4 M  _& A5 E/*              PSC 初始化                                                  */
3 n0 S! G8 D: J$ }/*                                                                          */2 ]4 s- c8 |$ N2 {$ {/ l
/****************************************************************************/
7 f- I* k' f) t; I, W4 N; K3 Xvoid PSCInit(void). i3 b( Z3 {8 W7 N& N
{3 W4 {4 P- y3 N- E* D4 G+ f4 `
        // 使能  EHRPWM 和 ECAP 模块
8 S+ A; {1 ?1 c        // 对相应外设模块的使能也可以在 BootLoader 中完成- {2 Z1 p9 G* b, {) S! \2 N9 R
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ a: O2 W: e7 Z$ G; p    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. ~" f! f4 w% y}' T. O8 N) F7 P* d, d. F7 k
( q' E+ q- v, u6 v) c+ ^
/****************************************************************************/
) Y" w5 G: Z) s; c) V  x/*                                                                          */
% a% c( G# B! q' B/*              GPIO 管脚复用配置                                           */7 Z4 _- {6 K% C7 Z3 A
/*                                                                          */: J$ p3 ?+ b, d& Z! R6 p  h
/****************************************************************************/
7 ~! N2 N6 B, \: j0 mvoid GPIOBankPinMuxSet(void)
% U7 n7 V; v8 `4 P0 q9 [+ F) {- T{: u8 Q9 S8 E. U$ x. Q) D$ i
        EHRPWM1PinMuxSetup();
( B- w3 T+ A4 ~8 z) {, M; o2 y1 B8 y2 G" C" \& Q6 J+ {$ j
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
; i) G( b& W; O) A1 b        // 作为捕获功能时管脚方向为输入
4 p$ t+ p  k8 a( r        // 作为辅助脉宽调制时管脚方向为输出( e8 l: Q" a2 u0 w
    // ECAP2 / APWM2: P: ?$ A; `- \! q, t
        ECAPPinMuxSetup(2);+ f- n8 v. v& ^! c, {. Y

4 W8 ~4 f& T& `3 y2 v% K% i3 F        // ECAP2 / APWM2方向设置为输入
& l3 U' H9 U0 l/ A( c        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]3 J: @  i- d1 O; W+ ?% A6 a
}+ X, f+ e& E, f( I
* m4 f4 i$ l% |, |& s, H
/****************************************************************************/1 z/ \, R' O  W: C, _$ `
/*                                                                          */
: n1 q" V' o2 X4 f/*              PWM 输出波形                                                */
5 W4 w; \7 L' {/*                                                                          */
* X$ N  \+ n" e& v+ v6 T, I/****************************************************************************/( F- Z$ U( P. F$ x
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)0 ?& M. j2 E9 a' l
{; B! m6 c* M2 K7 e/ b3 }
    // 时间基准配置3 B$ T+ f% \+ |: d
    // 时钟配置
3 V/ H  i" d4 }6 a4 x/ ]    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
* j9 {+ Z7 S9 W" L2 s; p! P
) F$ Q4 L6 F' _6 V    // 配置周期
3 t2 Y( ]/ D; p$ m- {    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,# j+ {0 X  S8 u+ J% X5 Y
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);/ i6 K8 q( k8 I9 P: t* ^

* W- v7 ]; c- M6 n' g    // 禁用输入同步信号
0 ]4 \7 O4 P7 c- E( q( I    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
: F# t+ X& h' g: U; N
" d2 q/ C; ]; b    // 禁用输出同步信号6 b7 W' d- A1 s* S0 Y, s( m1 k
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
2 C0 G: i6 e1 w/ C& i5 C" j7 b) N: v" C
    // 仿真(DEBUG)模式行为配置
( u; E& v0 M0 x( u6 E& q* P    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);. L1 Y2 h; X" _' b$ u
" |7 C1 L% h; ^
    // 配置计数比较器子模块
6 n+ [. a6 H: D    // 加载比较器 A 值
& l: ]+ e! ]0 k- U    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
; u7 T* Y! X2 E                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
9 P' B( {  q* L3 p; T+ h# z4 S5 L- d- Z; |6 s6 u+ x  Y8 h: m
    // 加载比较器 B 值, t1 j& `4 U4 n8 N1 F4 @! A
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
/ f: W! Q+ G% h2 _, s. U0 ]2 m2 e' l                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
+ z0 e1 N3 j3 E( O& L* i5 C6 ~# R9 {& {3 }- ~2 |
    // 功能限定配置(输出引脚触发方式设定)
2 e: d3 }( ?$ y, \: P  z$ E    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
' _7 ^6 g: h" e% p- r; o  k2 Q# k    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,/ @/ i8 c. }2 h9 ~
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
( E& M" [0 P1 V9 U: e                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
6 u; p: j# z! ~
( ]) }& ?7 r$ \  }3 k) F; Z3 n    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
8 s: A; n5 k' T3 g$ S$ Z    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
, d& y, I3 a7 `2 S1 G3 \* C& h' g. K2 }. F+ u+ F  w/ [
    // 禁用斩波子模块! P' ~) A$ n3 R5 G4 S& l" C" d
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
$ O  F) V9 _2 v, t. [
0 T9 |' y3 l  i. U, B! e/ A* o: i& ^    // 禁用错误控制事件" ]) {# `  N: L7 F6 n2 Y0 o0 M
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);1 G) t, @* r; {1 r# v( m( i
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);( t* v: O  G, g, Z2 w+ s& p5 @
) A% C' n) s2 _- N( R4 |
    // 事件触发配置
. s3 v2 j# E  {! [    // 每三次事件发生产生中断
% e7 M6 B6 u* S. n    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);0 k7 z1 S* N9 g# i, ^* d5 t
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件# |4 Y7 R) q7 I4 u/ B4 y
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
. {7 F' u0 h6 T' @7 }    // 使能中断
* ?: w8 B! f: H; i/ [3 b: q    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
1 S5 D+ h7 f  q. |0 a9 b, `; G0 X
    // 禁用高精度子模块
% C. S! w' B* E5 k1 @/ Y    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);$ K7 j/ B7 m& P5 f

! X+ v2 s# r: m& x- n9 b' d1 J; K    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
5 C9 q3 I) Z- ~+ U}/ \7 r) s0 V. k8 y
$ V' `5 P& P' d" w! z5 `: }# T
void ChopperWaveform(void)9 A. l8 d  t, u+ m: w
{
( w& P3 E6 H7 C3 h- l    // 50% 占空比
" v, u' T+ b, s. T3 a+ d8 {    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);$ w* W' W6 [) q. M
    // 4 分频
, ^- L) n0 |. i! E/ W0 c    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
0 C- ^/ U+ U' T* ~* f/ q. R' a    // 单个脉冲宽度
6 _( D8 n$ c& P( w! u! \1 x    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
9 d) S( D& @& x5 D    // 使能斩波子模块
& G, x9 i; ~# V% }    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);' v- F# u- j' R- w* {4 ?
}9 M! r2 i! }' P9 v: [* f3 ~8 L

9 K% D- y0 c3 T/ d/****************************************************************************/
- b' J$ T0 n. Q3 L3 Y/*                                                                          */# Q' }6 R1 U; }0 Q8 I. L% I- t
/*              PWM 中断初始化                                              */, P4 Z/ R+ h& S, Z7 g
/*                                                                          */
4 g: ~, s1 c* c( K+ V9 s/****************************************************************************/8 d# \; p/ b" A
void PWMInterruptInit(void)6 |3 r4 J3 U: ~6 ^9 W
{' Q: U4 w' A/ v  a! |- y4 K
        // 注册中断服务函数
8 l* g, m& U6 F6 _4 b        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
) Y& u6 K8 [6 t  X+ E9 C7 Z        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);$ x: A% h% r; K4 \2 P+ I! o- P9 Y( l
" g7 A/ R3 L$ l' S
        // 映射中断
2 a% D0 M9 o. f8 \        IntChannelSet(SYS_INT_EHRPWM1, 2);' A7 c; R2 ^7 O+ J  a* n
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
" {- Q5 Z7 M1 Y; }
6 l6 r$ J9 D: G5 I. L        // 使能中断
& `2 @9 o" Y: x5 n: K) |        IntSystemEnable(SYS_INT_EHRPWM1);
6 @$ v6 {, H4 D) v8 n0 E        IntSystemEnable(SYS_INT_EHRPWM1TZ);# d6 }* _: @' m  @6 [$ @0 d
}+ a  k4 t* M; B* A
4 o9 |8 |% h9 f, j
/****************************************************************************/! {: i, E' w; z3 _
/*                                                                          */
3 b7 h/ @9 a- e8 O8 @: @/*              ARM 中断初始化                                              */
, G6 P$ V9 x% M, E% c. _/ x+ G% b, q/*                                                                          */
0 r) l# }* W. A( N/****************************************************************************/
6 }) Q8 H2 `' [8 Z7 Bvoid InterruptInit(void)4 d7 h: C' h: W  Y4 c
{
8 G) k" D4 h9 z# g& o        // 初始化 ARM 中断控制器. P! C' d2 W. }' u* O
        IntAINTCInit();+ u" a5 V0 K' J. B/ r  l. ~0 B6 g% ~4 Q
( M/ u' j% q( ?
        // 使能 IRQ(CPSR)- i, _9 I: c0 w' h5 W
        IntMasterIRQEnable();8 u8 ?; v5 D' o4 }0 k8 p

- l% d# t; K. F0 k        // 使能中断(AINTC GER). J' y& `- @) {* M9 @' m
        IntGlobalEnable();# t, u2 D, R/ Q3 ]
# a' b  s+ s4 S& @; {$ Q
        // 使能中断(AINTC HIER)
' I, K* [7 r: d. C: f        IntIRQEnable();
0 A, S4 O5 }/ B' p! i+ H}
( F8 ]& o* m- V+ r. S) d2 Z1 q
9 P+ ^' c4 E* o; ]) m! o
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/9 t' k+ Y0 B9 g0 G! b5 G
/*                                                                          */
( K( d" ~  a5 {% X- X9 G# F/*              中断服务函数                                                */" e. a. o% R2 P
/*                                                                          */
+ {/ ]* R7 x, `/ c/****************************************************************************/
7 [* |9 O; A- `) C- Xvoid PWMEventIsr(void)9 @* Q& p7 o8 `1 U( U# c
{
) g# L! b* }+ B0 l        IntSystemStatusClear(SYS_INT_EHRPWM1);8 d( Q! ?' {5 S; G* b
+ F0 C& `, x3 ]7 P
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);+ H( v5 J  @2 d- |4 ^8 ?
}% c$ e6 k# |& V8 D; i

* K/ M5 j% X4 p$ d  x$ Wvoid PWMTZIsr(void)
/ F6 O' S6 E7 v6 N4 `; q& P{
) T; }9 \4 a# [/ i, t2 E9 Z        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);( @) e9 B* R1 d5 q6 G" E, u
* S& |- n/ V& A/ ?% A$ Q
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
  D" |- m: F+ o& t}
6 _6 O# e. B/ k1 b* m$ x6 O* L1 V4 C5 Y1 _4 X
/****************************************************************************/. b. A8 N3 I; w6 y+ d
/*                                                                          */
% |- \: \1 ~6 ?. \/ f; u. z/*              初始化捕获模块                                              */
, D% F# U2 O- s' K9 d0 I/*                                                                          */
( y6 ^1 L1 Q* d, U5 h+ @$ e$ s" N/****************************************************************************/3 a, Y7 z" U8 V% M$ w
void ECAPInit(void)
, L- [  B* v6 W7 @0 K1 K{& ~, d/ D  O% X# p7 A" D( w
        /*-----设置 ECCTL1-----*/
. c: L% |* i( _1 ^        // 使能CAP寄存器装载
# ], h) F; ~6 ]        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
% R; l) F0 Y* M; G6 c! I7 x: P  K6 R        // 设置预分频值.4 i& T0 [" g2 M9 p& Q& O
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
- u/ Q9 B) V" ^4 _( \0 _1 \        // 上升沿触发捕获事件
! z# V# ]0 ~; l6 W        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);7 Q# }$ Z; b9 c. x5 a# n3 |
        // 输入捕获后重新装载计数器值.# r8 i2 v2 ^6 Z& d6 H( |
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);' y/ R2 |* h( H, P8 q; o2 |+ H4 J

  \# Z9 J$ A5 _. p  p        /*-----设置 ECCTL2-----*/
4 k) [1 j& s+ i9 A' ]5 p# l; J; X        // 连续模式4 Z% M% T' A+ t7 m
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);0 ~" _# g- V! Q
        // ECAP计数器TSCTR持续计数
1 J$ R2 Y+ @( p5 V% C        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);3 Y: V% o. k7 e; w) R
        // 禁用同步输出和同步输入
6 e+ K- \( n( h$ T6 o6 K        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
7 M& W/ _! ]6 i! S! R6 E. ^6 c        // 配置 ECAP 2 为 CAPTURE 模式0 m0 I% T7 ^$ p& l
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
3 [# J$ Y6 H! `+ t" N
& @% m) u/ j- W7 m3 \+ ?        // 使能中断
9 r# \1 b! X) n$ M% @//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& ~9 A/ v$ ^* a1 u/ i& }* k8 g}# o- ?: [, N# W( F& i8 U
' ?+ B( T9 M* g/ H5 N$ u4 f( g
/****************************************************************************/
" J1 }6 C0 ]6 M. E/ a. n4 [  S/*                                                                          */( N* y) K3 D% i& h5 d4 j& H
/*              取得捕获结果                                                */1 p* J" k) ]8 Y: N3 v8 Y2 L! A
/*                                                                          */1 C& r$ N, E$ }& ^6 n# A" ^* n
/****************************************************************************// n1 T* S5 v$ O7 a' v% P9 O
unsigned int ECAPRead(void)8 {) t* {6 D5 [" T4 t/ ~# K7 m
{
$ M+ A2 t; Z/ l8 [, {        unsigned int capvalue;4 O( h. {  G) n0 Z$ D4 Q* o: j
        unsigned long frequency;3 P. _: X! Q; U% Z! N+ O3 q# u
( V9 \( [1 b. m, p2 P) C; x* `
        // Event1 中断标志
3 d; ~1 x* r! M* l' A  n( u        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
- ^4 f& M3 i  Y* e        {& ^: E7 ]( d2 u
                // 取得捕获计数
4 h; _/ h0 A8 q) {. l                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
# c0 `. D; M1 F+ E% b' R1 t                capvalue = ECAPResult.cap1;0 ^% A5 ^. D) Z7 R5 ?, ]
7 s5 V& m) U+ C. e
                // CAPTRUE 模块 228M 时钟主频
. F+ S$ }/ e; _4 I' W8 m5 J, e                frequency  =  228000000/capvalue;& x) f( O6 a0 @1 N5 g! h% u
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
: j/ M4 V# G" G5 g. k6 ~0 A6 O/ r, h( v$ P1 y6 [
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
( @1 Q1 P3 }1 @: e" n//                IntEventClear(SYS_INT_ECAP2);
1 C+ a7 l% z+ k        }, j6 n: w; z) q' V0 b
        return frequency;
" x4 q" [% B9 e. E! M2 C% y$ _, Y% {) W}
/ j$ o% f! R1 \* K" ?* n! v
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
3 ?2 `4 f& ]4 O1 P4 B

本帖子中包含更多资源

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

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, 2025-11-30 19:39 , Processed in 0.048455 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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