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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/4 b4 u2 q6 ^% k/ x. Z
/*                                                                          */1 x2 Q  Q! M4 _  p. U
/*              宏定义                                                      */
5 c0 q9 x! s0 e8 X/*                                                                          */2 g5 K+ ?2 Y: j" x4 q
/****************************************************************************/
* D9 k( m1 {( E( ?  j// 软件断点
' X* {9 A0 M5 R  [# n#define SW_BREAKPOINT     asm(" SWBP 0 ");
3 P7 f! |. p' Z; H
3 G9 E8 W; _+ z# S6 K* R. ?// 时钟分频' K# P3 F% ~, @% K8 y' s9 k* Z
#define CLOCK_DIV_VAL     228. r" k6 V3 ~; {. K# \! G
( a- M0 J8 A) X  |/ ]* m" N
/****************************************************************************/* X: [# x( V+ E  U0 M& w! M9 u; S: Q
/*                                                                          */
$ j  g3 e* Z9 f/*              全局变量                                                    */
2 `6 b- v% L1 z/*                                                                          */  |* l, y: c" G
/****************************************************************************/7 d. S% ^" F7 R3 O$ j9 h0 |
ECAPCONTEXT ECAPResult;0 \( c1 O' |3 I# W0 D

& @1 _. @  }: o+ ]) H/****************************************************************************/
1 I% W. L2 i6 D# }" }2 t1 k/*                                                                          */
6 h7 G7 ~$ X  K/*              函数声明                                                    */
6 h9 l' x) _9 v+ D( W$ ?/*                                                                          */
, i6 O# U* ~6 I( A% o- l/****************************************************************************/
0 {0 D' e# G" V! ~9 x+ p// 外设使能配置. K- X8 a" }7 Y. b
void PSCInit(void);9 C* X5 v2 h* {5 e: m# o' K

1 ?! p9 @' z4 a& |) _// GPIO 管脚复用配置7 ~5 M0 d' W" i* i6 t
void GPIOBankPinMuxSet();" d4 x! h" ~' B% m

" c" y4 y8 \& ~; S3 X7 x// 产生波形
, q8 V6 J$ ]6 j' Ovoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);9 ~2 L  j& P% s. d" S; }7 K: D* y, t: V9 f
void ChopperWaveform(void);
; x9 c' c2 |& X' z( h: ^1 A, t, }$ m
// ECAP初始化和读函数% }7 d3 y2 P$ N5 g" v
void ECAPInit(void);! y1 _: H- w8 L, _' `
unsigned int ECAPRead(void);+ P: m6 R7 z; x) z

4 |( |% c, H5 i//ARM 中断初始化0 I+ C+ V# C! l( `) E, x6 y
void InterruptInit(void);
$ m- D# g$ f3 j' d6 _) H& D/ r" z2 X7 D" Z# C/ u
// PWM 中断初始化7 `; R' ^' o% r  D2 c: Y" Q
void PWMInterruptInit(void);5 _3 a6 _$ v7 r
// 中断服务函数% `) d# t3 V$ _1 D
// PWM 事件, Z; z( U! a' \- e$ t
void PWMEventIsr(void);
! ?2 S: m  }4 i, Y// PWM 错误控制事件1 v# T( b7 ^1 U4 z6 m2 P
void PWMTZIsr(void);
* g$ H' n% D7 `5 S0 F7 g0 k  b: i
1 i7 P# k2 e) y( {; G( R  s/****************************************************************************/0 q" s* A! q5 S; N) d1 y) R
/*                                                                          */
" y  o/ _7 f! S: w' }" `/*              主函数                                                      */: \2 n: z  X) W# u# K* s
/*                                                                          */4 j; R1 A3 k# r: B
/****************************************************************************/% q* x+ ~8 [+ G5 A
int main(void)
* Z) i0 A- {) J$ r' }{
; G% x. G6 {5 r$ a9 o) a) A) ?8 }        // 外设使能配置5 |( X( {! W7 T, d
        PSCInit();
- X7 G* r. G% u5 L& ~
, H8 ~! b' c' R6 m        // 初始化串口终端 使用串口2! \- r) D% A3 i+ g
        UARTStdioInit();* M+ ]; a; n) U' r, n, W: M/ }
        2 K( |; N; i+ q2 n1 b8 o
        // GPIO 管脚复用配置6 v2 `. N- N# w" g/ X
        GPIOBankPinMuxSet();. z  M$ K& A+ g5 ~/ G6 e

0 _* m" n; G  J) E* _1 o        // ARM 中断初始化3 `5 [+ O# Q/ x% t; m) |3 y& S; d
        InterruptInit();4 A/ Y& o  x$ d. i5 w
2 \  w  }) r' a& G0 O( e4 r0 B
        // PWM 中断初始化
! L# d) K0 p4 _- X5 A        PWMInterruptInit();
4 X$ D/ j7 {- U/ |( e! w, d% J0 b- Y( u( }
        unsigned char i;
% s0 u$ G! l2 [+ e" ?        unsigned int j;- I) q. \4 d& k5 z
" j! s! C9 t0 K- D. @8 J% \6 x
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);% t/ v& S$ b% D
        UARTPuts("------------------------------------------------------------\r\n", -1);: n7 M9 b. W( M+ |9 c( Z
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
2 z# ~' V! ~1 v0 j- O        // 产生波形
* V3 h: ]: v8 M9 Q        PWM1ABasic(25000,50);: S4 ~0 Y5 k* b6 O6 u( L
1 I& _1 q+ V2 j% c: J
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);1 b0 F3 G8 s% {
        UARTPuts("------------------------------------------------------------\r\n", -1);% Q3 A9 Q: G/ s6 c% |+ _8 R* h
- ~6 [5 w5 }& {
  [/ P0 G4 ?# W" `8 P& @; A

2 t: d- j4 N, I: H        UARTPuts("------------------------------------------------------------\r\n", -1);
, q# }( W1 ?' t, R9 E) i        UARTPuts("                    C6748 ECAP Test\r\n", -1);
7 _9 r) s; n" Q( Y% D        // ECAP 捕获初始化
  N  h  h5 H+ g2 C        ECAPInit();
4 }  i$ T' c  u! d        UARTPuts("Initialize ECAP.......\r\n",-1);. T- ?# K! q- v
        for(i=0;i<5;i++)
7 y4 @2 ^* K* T8 M( c% u' t        {
- _8 J. w( n, Y                    for(j=0x00FFFFFF;j>0;j--);            // 延时
( |5 E; y7 n9 l0 A* Y                    ECAPRead();
7 j8 D2 K' P: E# [        }
( d7 J8 g0 d' z/ p; f9 u6 x        UARTPuts("\r\n",-1);: J, O2 A' V# d' a# ^7 p
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);8 d+ ~) z/ B( m% K( F4 W9 B
        UARTPuts("------------------------------------------------------------\r\n", -1);* [5 r3 ?4 j+ V& T# b

( g) y2 O" ]8 {4 ]+ o' V0 C        // 主循环
; E7 h3 c& a8 g% e4 ?        for(;;)) z5 o( }$ o% V
        {7 I' o9 N/ Z. Q1 b

, C  I$ y* D" I3 n- Z        }
8 e% a* ]5 Q/ h4 d$ |7 k' c( [% k}
/ o# \# c) N" @: T: P1 N+ {8 f% Z
8 \7 P5 m. K2 G2 M4 r4 M/****************************************************************************/
: d/ b8 `. p7 J" n9 c6 ]$ i- a/*                                                                          */
& _2 S8 ]3 ^+ R' C+ J0 K/*              PSC 初始化                                                  */+ }; @! _  ^2 U  V2 e; _
/*                                                                          */9 D- G9 ?7 [0 N* z; {) s
/****************************************************************************/; m8 W- \4 n9 F( z, e
void PSCInit(void)3 K3 {/ c; v6 {, B
{3 G: Y) v) N% u
        // 使能  EHRPWM 和 ECAP 模块4 A, i0 j' T4 M/ H7 B% Y+ X9 ?# u. V
        // 对相应外设模块的使能也可以在 BootLoader 中完成# W# ~: u  t7 h* c! E
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
  N- G3 ?  i! }9 H% X0 U    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
7 [2 V6 q/ F$ P3 z8 ^% f}
9 [9 G5 p: s& Q* ~* ~; d  [+ Y3 F' b9 l' {/ x
/****************************************************************************/
; C+ m9 b. v. J, C7 c5 ^/*                                                                          */
8 Z. G1 A( _. |) o+ j/ ^0 X/*              GPIO 管脚复用配置                                           */
. p/ j% N5 V% q3 y* w$ j. U. w/*                                                                          */
3 t/ H: h0 {. x% u9 S/****************************************************************************/
+ d5 c3 n/ G/ S2 p9 I; O6 Uvoid GPIOBankPinMuxSet(void); f& [4 S8 n+ ?5 P" B1 u
{4 d6 B* z$ R7 ^7 m, I& ~& P
        EHRPWM1PinMuxSetup();5 F: Z( h" g! d7 @' K; N$ x6 ]/ N4 s

9 l) A3 O4 G  z4 U) i/ C* f' r0 o        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
$ u1 ^9 {9 t! F' Y        // 作为捕获功能时管脚方向为输入
* g; G, C0 e" K1 U1 f/ f        // 作为辅助脉宽调制时管脚方向为输出
& a& O( Y: @* v  W) I' X    // ECAP2 / APWM2
! Z" V) P' ]" z        ECAPPinMuxSetup(2);8 r( {  c4 W! m; _$ A/ G
9 A! L2 V8 B, s  Z: d
        // ECAP2 / APWM2方向设置为输入
! _9 }: O6 A! ?+ L        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
  _* |, F( Y) a, x}
) l3 a9 H+ B6 U8 M# C. A9 I6 B1 b) j/ x( S9 c
/****************************************************************************/2 I9 t+ U1 A2 \6 y
/*                                                                          */1 f& F% _/ \  t+ F5 x
/*              PWM 输出波形                                                */# I; h- O2 W) ~
/*                                                                          */
0 {" ]1 l( z* x  e/****************************************************************************/+ t# Q, v( ?4 K; E3 g( f# B
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
# [) ^. d3 T6 M6 h- Z/ \0 Q4 `{
$ B2 F$ {- g- O: _3 [% i  [6 N    // 时间基准配置
7 R/ S" a6 ]4 `5 @! n! Q* _3 @* E    // 时钟配置. f# f$ q  d5 t& }7 a/ `& S/ U
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);+ [6 h& V8 s! d  i
7 b; t( _8 z" N' c. m+ @
    // 配置周期
8 c. ^: z1 L, Q9 ~% H& V0 D& l  g    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,1 ~% V0 t; u: E  Q2 f
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
9 s: t9 }: V- S$ D8 s9 f/ H+ M9 y1 B8 ?: {; {1 o
    // 禁用输入同步信号5 a. }4 N2 D+ P7 N8 ^6 f5 y
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);8 ]& @* Y- u9 V+ T# k$ W

9 ~1 V+ W, z1 O! F$ X* N) Z    // 禁用输出同步信号( @& @8 B8 t' x! p1 i/ e
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);, `* E" J/ E8 P$ S* H; Q

" S- m4 X3 \3 F9 D" ?) Y    // 仿真(DEBUG)模式行为配置# m5 t1 Z0 N0 y0 q2 @; c( W, [
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
/ r' M9 u! D0 X0 z, ~( J: r$ f( h. \- M/ `  I
    // 配置计数比较器子模块
; S( ^8 h6 t6 f- o/ b    // 加载比较器 A 值# }: ?+ ^# l+ ?0 U5 x! k: n
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,' B( h: Y& u% t, P  E8 a/ S
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
: E4 d  \* v% u/ y" s, Y+ Z- j2 {+ u2 y4 V9 Q! E
    // 加载比较器 B 值
. |2 @; z) r8 ?" Z    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
- `! i) l1 t8 z3 h                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 ]1 o8 w. i8 n* r' W
! X9 u: N. A, v& ~0 y7 f0 |1 D2 m7 V( k8 c    // 功能限定配置(输出引脚触发方式设定)
* _& E: V" t$ l! V1 l, y    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出" C9 g3 x# ]7 F
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,) @% \: h) O6 g6 X5 B& S
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE," y3 Z5 u3 U: v; y3 I' S8 @
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
; L/ P/ u1 U6 P( o# p3 C* Q0 f
8 `. p% f  `+ X( @9 Y    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
; g, s( g/ C' n; {* n    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
: ~: F% \) c' E5 b7 U: {$ Q( h2 X) W+ ]. f2 q9 \3 V; B& \
    // 禁用斩波子模块
% `5 T+ _4 t1 ~5 ]    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
( J# _( u; S) u' l" m7 l2 d; f$ U; D# _$ `% @# S" f
    // 禁用错误控制事件) O+ H6 b2 F2 q9 b% W
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);3 E: ~( B+ o# A. X% q; R
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
2 @8 K8 C, f3 s2 e4 m) A) q8 H# d: Q  H2 S
    // 事件触发配置. c2 d* p' i- G9 @2 k6 ], T9 C( }
    // 每三次事件发生产生中断0 y0 T% _8 r0 G$ i+ w
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);( p$ x' z0 F3 t) h* z4 e( m
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
* p4 I! ?: ]' Y* p% |; r& M    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);- O! X' K1 h3 |8 [* S3 K
    // 使能中断
! X. N" a5 v% _1 o: ]0 v. c    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);- y7 Q$ n! e, G) i- n" U
- E( c: K7 }# S( Z0 X8 k
    // 禁用高精度子模块
( f5 Z9 _. h& [# S" X    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
  {2 [4 g2 d# A1 x% \0 _$ j9 c
6 ?3 e7 U3 T1 Y: @; w- g    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);2 N( x5 I! h% S/ `# X/ B
}3 u" ^- @6 p' k

- x$ k  C% ^5 A) a4 }: evoid ChopperWaveform(void)
- @3 k$ a9 v7 m1 y0 K, C{
& K, {, V7 a. Y! \) }: F: O    // 50% 占空比
0 P3 r4 c! R+ X' r* Y/ f    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);6 ]9 [) r- L) S0 }
    // 4 分频$ ^2 n5 C& n' P3 a
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
8 P+ J9 y+ P, W    // 单个脉冲宽度8 N  c& C; ?2 P. D( Q
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);. T# ~" u' r( j& V, P. j! l9 y
    // 使能斩波子模块
% A# c; k4 l+ r9 m* |4 ]    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);0 \! ]* e4 e  K4 n2 b. {: w7 _
}
8 P' B/ A) P9 Y/ Q9 j( `. X9 c" k' X
/ O5 g% {2 W% R) ~: H4 E" k/****************************************************************************/; Q' [; i$ K% P; C7 g
/*                                                                          */
+ O! ~% k, `1 P; }3 H( `4 P) r/*              PWM 中断初始化                                              */
: v& A. _3 N+ r' s2 Y/*                                                                          */; \6 U4 T" I, K  }0 G
/****************************************************************************/
5 k+ V2 E1 [9 s2 B% H$ s) W8 _void PWMInterruptInit(void)
" s" i: _4 D7 ?{: T8 @( A- _5 e
        // 注册中断服务函数
! e0 h0 |; d, w0 \& S- i) O        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
, f/ v9 `( N6 G. ^        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
+ h. E% U4 g1 X1 C
% X$ d2 l5 K5 b' W5 d        // 映射中断
. p8 M+ v2 n+ `, O  i1 F# Z        IntChannelSet(SYS_INT_EHRPWM1, 2);; x6 X# C( ~9 {* O+ m, T6 n
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
. n& V4 m" H9 i$ j: r, h: d
/ I& \/ X) O6 y# y3 X/ z& ?        // 使能中断3 @! J* c3 L5 p* Q1 \
        IntSystemEnable(SYS_INT_EHRPWM1);
" r( V0 }- _9 h        IntSystemEnable(SYS_INT_EHRPWM1TZ);0 P2 A$ L- H+ h2 \0 c! \
}
: B  F# e' p- m6 Y, U5 e5 {6 O4 J5 I" `/ k
/****************************************************************************/9 \  ~7 Y4 j! Y, j
/*                                                                          */
  p9 [3 g6 L; W: f5 R$ c/*              ARM 中断初始化                                              */
8 F$ e5 H+ p* S' F1 h/*                                                                          */
) |. W, x  T* [1 ?. F/****************************************************************************/
7 O# S8 m7 A3 N. }7 Uvoid InterruptInit(void)( G  V1 I' X& p! o/ a2 Y& H
{
+ n, z; }8 n+ ]( G        // 初始化 ARM 中断控制器
# o, v' O0 p/ N5 N: q* c1 F8 D        IntAINTCInit();
" t' H* S5 b/ [; o
1 |, ?0 A% z& r  W+ ~2 Z' `4 O* x        // 使能 IRQ(CPSR)' `: d9 \- s! k  D: Q8 m
        IntMasterIRQEnable();
( u8 t( I% V' n  ?$ l
' j3 b# s% ]2 M9 y        // 使能中断(AINTC GER)
" G9 b* K+ {4 y, i% Y, n4 C' m" Y4 `        IntGlobalEnable();. @2 |5 w* p$ a! ]; K1 K" f5 z$ H

& v1 @* J4 @3 m/ d( r        // 使能中断(AINTC HIER)
' F, X% x8 d% L2 e4 P/ m' ?* ]* W        IntIRQEnable();
" f9 Y1 v( q: {7 }- G}
& N6 L; i% F9 u7 r' l2 `* S) R0 u; @) v$ b$ d( O- [' m
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/( O. K3 T) k& l  D% K8 O
/*                                                                          */
. F5 H5 K; L" i' y/ t) p9 f- T/*              中断服务函数                                                */* z( Y6 F+ x3 z3 @# _
/*                                                                          */& j: ^+ P' L" q9 M8 B' u
/****************************************************************************/2 C: T7 t" |  [& t3 A5 j0 x
void PWMEventIsr(void)
, f% ^" n4 r7 n; |6 I5 I8 o  v{
" _% Y% t" N8 }# b2 S* D        IntSystemStatusClear(SYS_INT_EHRPWM1);
5 F- @5 _2 {) i; j! y1 g# F1 h6 L. M
: F" B6 o; u; ^) [6 M# F    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
+ @8 _( x( Q7 w# G}+ H. b0 ?) s# U0 V: C+ D) h( I7 k
/ K: R4 q6 D0 u
void PWMTZIsr(void)
( E) S8 r! {8 H2 B0 k- s{
5 h  l7 a/ G" [) t. L5 l        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
1 ~& ^" V# H! W) t5 [# B- c" B, W% i3 F$ E; ~
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);0 _& h# Z# f# j) f5 e& S
}. c! _) ?) K8 @2 X( e/ X
. _9 @8 R& A, e: L
/****************************************************************************/. }; z' p7 Z, ?+ o1 t8 L, u
/*                                                                          */
2 a! f+ Z5 r9 T0 E/*              初始化捕获模块                                              */
* p8 m5 _% M& @5 v0 S* j- y+ Q/*                                                                          */+ \. L: L& |. w$ \% g
/****************************************************************************/
. b5 K/ x0 m5 k. w5 Z; `$ nvoid ECAPInit(void)$ b4 w; G6 e; \- L: g  Z6 G" I( T
{. H% W) n" j4 A1 W- j* V: C1 n
        /*-----设置 ECCTL1-----*/  m, s# D% Y6 `2 k. d' h- h3 y
        // 使能CAP寄存器装载" x1 a3 }) |( q8 `* a" Q8 @& D7 V% g
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);( }4 ^! F. M3 u; {
        // 设置预分频值.
! y' J0 Q) L1 h8 j4 u2 [! O; L        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
6 L" p# i5 f1 S8 ^7 u5 k* B        // 上升沿触发捕获事件5 U. r3 M* y8 G5 Z. Q
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);: g' r" J& Q, N0 w4 Y( i1 y) n
        // 输入捕获后重新装载计数器值.
4 p& z( m+ i/ G. L# G* J) Y        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
! s4 B' E5 `( K7 L, W
$ C! s1 U! G8 o        /*-----设置 ECCTL2-----*/1 W* _5 m$ [: n. p9 \
        // 连续模式# o# h( C3 H1 `
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
9 h; q  B0 i& ?( A        // ECAP计数器TSCTR持续计数
8 @2 o* X' T" Z; U) x( u4 F4 I' y        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
  u- S: V: ?0 |+ K; v        // 禁用同步输出和同步输入% x0 |. @7 h# N- e( o( q7 q
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
' Y* T! H7 q; X0 j& r        // 配置 ECAP 2 为 CAPTURE 模式/ |6 ?3 W. P9 L# z
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);( e$ h9 U/ m9 c7 ~
3 B  Z: c" A. d# t
        // 使能中断
4 u$ @& |  p$ M6 T# ^9 F//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);- ?" w4 D+ A; t+ x
}
' c$ L5 K4 O: j5 u" I! ~* _5 N' Z6 i& [8 K& A" q/ P" e
/****************************************************************************/1 @2 s/ z9 z8 k- M7 f1 Y
/*                                                                          */
7 C4 V- c- \% A( ]$ K. t/*              取得捕获结果                                                */
* o7 E' C- u: J8 X5 J  ?- L/*                                                                          */: @! y; o4 j+ {% E. P$ M! E
/****************************************************************************/
# @" v6 y- z& R* ^* X+ Yunsigned int ECAPRead(void)
6 l; O' _6 z2 o5 T- M8 G{, G$ J9 r0 ]- G! |; d7 \2 I. B% M3 ]
        unsigned int capvalue;; B6 d0 w8 }5 v* _% v+ s6 H) F
        unsigned long frequency;
& k& t, |- X# K
( L: s% b2 B0 K; U: I        // Event1 中断标志
& q7 }# I- f- b! c& Y        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))5 z8 [; N  l- e/ v* [
        {/ P. m9 q3 T) @- v2 ]8 G# M" K) p
                // 取得捕获计数
: J, T: M9 Q/ @) _1 `/ @) Z                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);) ~9 `3 r: l3 T: W" T
                capvalue = ECAPResult.cap1;) L7 W2 ]& g7 x. X: s0 l

) x$ j: }- n9 W( I  k                // CAPTRUE 模块 228M 时钟主频
/ g& f& [4 {+ b; r                frequency  =  228000000/capvalue;# z5 _& V  ]2 N
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);' w8 c3 r8 U2 ~0 n

% ?) E2 q( ?& V0 P* N                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
4 I' S: t9 r% Y7 m0 A2 H' E//                IntEventClear(SYS_INT_ECAP2);& n" O5 n7 m$ L0 }( J# Z
        }
* X3 \5 A& _, \$ ?        return frequency;0 _( N  _7 x+ X  y$ s
}
4 s9 X) y. P4 |  x4 O# a
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
- Q' ?) h8 i% \1 v' f5 h' o. ]5 f

本帖子中包含更多资源

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

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-12-15 18:04 , Processed in 0.057368 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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