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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
& V8 e* z! `2 [- t( m9 l! L/*                                                                          */
1 O/ _' Y6 M: O  a6 O7 y+ t/*              宏定义                                                      */: W( w- i1 Z  w
/*                                                                          */
8 c7 Q7 b) w: d  Y9 ]" _: e  _/****************************************************************************/
) s) s. F- M4 @7 l// 软件断点
* h+ {. @8 p4 G#define SW_BREAKPOINT     asm(" SWBP 0 ");
: |: ?" G, W' }3 X0 I$ u9 m$ B( ]+ z8 W) {
// 时钟分频  ^8 [4 M7 K6 U- J& Y
#define CLOCK_DIV_VAL     228
* W. w* G6 ?0 O1 V2 E+ R8 O4 P- ]7 \, b& t1 j7 L  D% o( R
/****************************************************************************/7 _3 H( H: u/ [# Q) f0 q# u
/*                                                                          *// p- G# z3 d8 e. O
/*              全局变量                                                    */) b/ o: L/ [% L8 N/ M4 X; [
/*                                                                          */. Z! L/ w& Z; E3 p0 c
/****************************************************************************/: E0 s* U1 B% B5 x$ w
ECAPCONTEXT ECAPResult;0 d7 U0 P2 F1 p2 u

1 c: ~- c2 A  X/****************************************************************************/
+ ^1 I' C% A4 n3 c) H% [' x) h1 D/*                                                                          */
  \2 @4 H' d. ^/*              函数声明                                                    */
1 }- `( O  o' `/*                                                                          */% M6 E6 P. [1 K' [
/****************************************************************************/. t0 A" g0 ?- }2 \/ e5 P) U, x) @
// 外设使能配置" c+ C6 m4 g8 J. V" B! P, k# T
void PSCInit(void);
" }8 Q. t2 j) O# O5 b1 s" z" s' B& A/ ]# i
// GPIO 管脚复用配置" i# G  g/ G: A0 r2 {
void GPIOBankPinMuxSet();+ q# p! O& X# `  _3 {+ D

9 T+ O6 O8 i1 u0 q) U6 A// 产生波形
8 ]1 K  ?1 n2 L$ p: Tvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
$ `- x# {) k" F, d( ?void ChopperWaveform(void);
/ w. W& [+ N8 W& M1 G' Q! B. @9 G( {. _: _% T
// ECAP初始化和读函数  O, h1 c' h( m9 k; T4 d
void ECAPInit(void);
/ B6 \9 ?- P  [# D- Q; ?unsigned int ECAPRead(void);
: L) c+ [' t- x0 N
, d  S9 c( W: T* z//ARM 中断初始化
) ?. |) |/ Q/ V3 P" M& jvoid InterruptInit(void);
. x' W1 k4 B9 I( A: S) N$ t% G" P8 B, a
// PWM 中断初始化
: N" q7 ?1 H+ ?7 G- j! o8 j8 B- Dvoid PWMInterruptInit(void);0 e- P3 @$ W! v. v
// 中断服务函数
0 Z- Z) M% @' |- A+ P- I) i1 P// PWM 事件
0 O+ y8 `+ ^' D1 ^9 R! J) [0 Z0 Kvoid PWMEventIsr(void);
, v2 r6 {" ]9 \, |) j4 M) `) S: [+ G// PWM 错误控制事件. r, e" z' `, X8 g0 x' S
void PWMTZIsr(void);
, L2 w1 p; Q, K6 |0 ^: s4 f5 L' |! u4 R) K5 m- h& s
/****************************************************************************/
" r) m. d1 C* X) k, s5 O/*                                                                          */+ A& m" ?" c( P% m7 C* h- S
/*              主函数                                                      */
  o* z" t5 m4 H$ F2 V7 y: w/*                                                                          */8 x0 }: w( |$ ]0 Q- \5 J8 J- l
/****************************************************************************/
0 i# R, H/ W& Q) Dint main(void): B8 Z8 k. c, O
{; O9 A  t) i5 E( n3 S3 S- p
        // 外设使能配置4 n( Z3 `0 ~8 Z
        PSCInit();- `( E0 A3 ^6 w, S6 r0 G' I
+ Z0 H6 K. \8 n# `% G& i
        // 初始化串口终端 使用串口2$ W% t! _: ~( X0 G# q6 _
        UARTStdioInit();5 O) B( d3 |, n
       
/ H6 `% k6 b' G! R6 _# X# O- k        // GPIO 管脚复用配置0 |! J$ d) S5 _
        GPIOBankPinMuxSet();8 {" g0 y# R7 z. M6 G
$ \2 T( Y$ h+ i3 Y! n  a
        // ARM 中断初始化
  S# s1 X( |$ R, Q8 i  R        InterruptInit();: P( L% d' B6 I
; X: O' v7 ]4 g2 W1 E. L2 n3 f; e
        // PWM 中断初始化9 u+ t, r' x, z
        PWMInterruptInit();
7 ?0 A6 V: H: b5 r% e
/ o  `( e0 r0 B5 |+ Z9 j* A        unsigned char i;
6 m9 F6 e5 ~3 X! w1 [; n- L9 V  F# p/ K        unsigned int j;
5 W3 w$ `6 Z6 m) `* e/ g( G2 I& x+ B
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
; ^3 [5 e/ R6 m  H$ W- Z        UARTPuts("------------------------------------------------------------\r\n", -1);
7 D* r) [2 O! n; Q$ }! B8 K        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);/ l+ w7 t& D! T% I
        // 产生波形
8 M& L% L" V  B% K+ p. M: L  Y* @        PWM1ABasic(25000,50);
4 ]1 Q+ T# ~: T1 [" W3 ^
; _, g% `7 V0 L) C3 B/ m        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);4 K" n' Q$ N1 l/ b% I# |
        UARTPuts("------------------------------------------------------------\r\n", -1);: M. l2 `! h% @; h# N9 q
  C& _5 u2 J3 H3 h
' W6 z( Z% g5 h# W) Z( `6 }5 G
% E) M: O7 u7 a/ A. o
        UARTPuts("------------------------------------------------------------\r\n", -1);
' I2 Q( F; R& ?6 V3 u4 q/ C        UARTPuts("                    C6748 ECAP Test\r\n", -1);4 J7 u9 ~3 T4 e/ t. z
        // ECAP 捕获初始化0 n, }+ |& l. T  I% @
        ECAPInit();
9 f* n2 F$ Q- W1 u        UARTPuts("Initialize ECAP.......\r\n",-1);! o  d" a6 Q6 h/ E+ n6 R
        for(i=0;i<5;i++)
9 i/ C9 j5 `: p9 u, c' ?        {( N" ~7 ^5 G0 N
                    for(j=0x00FFFFFF;j>0;j--);            // 延时$ x* O" U0 U0 }4 K" _4 m2 \1 Z) S
                    ECAPRead();0 y% a* u$ o7 r# X- @
        }% \/ v# e1 ~. R: J- i
        UARTPuts("\r\n",-1);! w, I3 R- S/ {* A; q2 r
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);7 o' U* L6 ^& y% e) G3 j+ S2 `
        UARTPuts("------------------------------------------------------------\r\n", -1);
7 @$ n! H. `- D* V
: o: A- X% B% n4 U! b        // 主循环
7 }1 ~8 P8 ?& S: _+ `  Q, t        for(;;)
  h& W5 N2 c6 m, w1 ?        {
  _8 s+ ]$ F/ l0 L. k0 J3 A2 h
+ z3 E( r. A5 Z        }
, s4 }* u% S7 L- X& b( [+ S}: T6 W& j+ r/ k/ N* @
5 p8 `% b5 U* A  v* x. L  g# H& ]
/****************************************************************************/0 U( b8 N6 A( t4 b+ j8 ^
/*                                                                          */8 ?* a. J. o* }# P: ?
/*              PSC 初始化                                                  */
- a( U/ Y) R! s/*                                                                          */; n2 t. e: u! u8 @* n
/****************************************************************************/
0 p+ y) c9 }2 d3 jvoid PSCInit(void)
! v: U: h) V' o# d3 T) H2 l6 N{7 D3 W# L2 J- k' q) L$ g
        // 使能  EHRPWM 和 ECAP 模块
( t4 y) N& _3 p) ~( h3 k7 D        // 对相应外设模块的使能也可以在 BootLoader 中完成& s( Z' k* x* k; O+ @/ {
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# e1 r  c0 x& W4 n4 X
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
5 _9 {0 j  X: D9 v: p, T$ P1 L}
$ ~  K6 }$ Y) V0 n+ v0 j0 c/ |5 }
* u3 x, i) T! \7 @) P/****************************************************************************/- V; s6 W4 W+ E5 p, ~
/*                                                                          */  r# g+ b) [9 {- A7 y
/*              GPIO 管脚复用配置                                           */8 C- @7 Y8 H  @1 m2 Q  w
/*                                                                          */
: g- s1 q5 |( T# O" J& L/****************************************************************************/
" }( t8 m& ]; |8 p8 ^1 _3 xvoid GPIOBankPinMuxSet(void)8 z, b+ V% _# [. }6 v$ G
{  Z# X- @/ P; V6 N0 m3 c) f
        EHRPWM1PinMuxSetup();
+ e- L; ]% c/ l% `( Y/ L0 @9 w- E5 a+ M
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
! [. ~/ H$ P! F, M        // 作为捕获功能时管脚方向为输入
" q) Q$ |0 f  W        // 作为辅助脉宽调制时管脚方向为输出
& c& o& A+ Z+ q/ a! ^) P5 O    // ECAP2 / APWM2& h5 @2 |' j, j9 _+ G: G2 }
        ECAPPinMuxSetup(2);
; q' T7 L. |, E- k& S- q
' R) {# b- A( q( @% F* q# B        // ECAP2 / APWM2方向设置为输入( H) e9 N7 u- e/ L, Y$ u$ I- S3 H, B
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
% c& t% y# G; N+ L2 `! i; u( K}) I  h8 P$ N& K( U) ?) N" M1 ~5 Z

. \! E6 l  E. u/****************************************************************************// _# i$ B7 S6 H! C% ~# L/ Y5 T
/*                                                                          */
/ j: L9 P5 J, Q4 J# @/*              PWM 输出波形                                                */
/ V% S8 [) P0 y( I5 [0 [: Y/*                                                                          */
" J5 w" |* A) M/****************************************************************************/
4 d' H8 m8 ]( t; v5 J) Nvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
  X. s5 k' t& n1 U1 x8 f- w# {3 E{
- |7 e8 }  {: H    // 时间基准配置' H; L8 m# V. |# \
    // 时钟配置* {+ x; L4 ?# ]
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
3 F1 W# w# b/ s) G6 F  o7 J6 A) Z
  i# l/ N0 w1 T, Q2 Y    // 配置周期
) K( U2 J! A% b% Q    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
: A# g! T* E6 w$ o                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);0 Z. h! r( M1 c6 h

3 h9 a' R# U) c1 x    // 禁用输入同步信号
2 K5 m9 i7 v( U' M& f, J6 X+ P    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);$ a7 ~0 f  ^  z8 n. l
) O( z* K3 g* _; t
    // 禁用输出同步信号
' }" B# {. W( b6 ^7 |% F* U- T4 }  n    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);/ r& W7 I6 B, Z6 g8 w" b$ a# l1 t

9 C( |. g9 B! v$ ?- \0 [9 `    // 仿真(DEBUG)模式行为配置
& A, J( O% a  q2 C& E& u- A: |    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);, S/ s' B3 z* n  `2 a* m
$ ]1 I/ e+ D8 H' c& d) K8 M' I
    // 配置计数比较器子模块$ h* @5 E. G1 E/ G! v; U: s5 L
    // 加载比较器 A 值; e, A3 Z  h$ Q0 W
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,+ ]* y7 O6 Q- F  O+ Y- n% k. v
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);" B& }. Z, d- O5 E0 O8 ]9 d. n) G- R) D
5 Q% i- C4 U& @5 ^, c
    // 加载比较器 B 值+ G6 l0 B% ?0 G' |+ @3 f) e' f
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,% V' g; l0 e) x
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);, X3 }6 m9 W# Q" |0 H

6 G( H& ?5 s% g; ~: s+ A    // 功能限定配置(输出引脚触发方式设定)0 ]" J. |; p6 O+ z
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
4 Y- m2 ]; L. K- U. M# _    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," Q1 |  y7 a! ?: J# G
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,, Y# k) D$ ^7 l! y
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);6 ^6 A$ q+ [, \5 B0 x6 `1 s1 x
. \: F4 A; l6 x; L" g
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块+ u. B- D2 {9 U
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);2 k( t' j9 C) R( X* p) c

, i# W! I+ z( b) {! \& @    // 禁用斩波子模块
( d) H: ^; ~3 u- f    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);# B. o9 L' b; k6 S4 Z
" j. Y* b# l) U2 r* |
    // 禁用错误控制事件) K) H5 E, E/ S; @; i" K% K' i
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);+ l, _, X3 R) i5 r
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);+ f  S8 W4 w/ n9 _- k
) P6 z3 ~  u0 ^  Z- g
    // 事件触发配置
( W: a* T8 y$ ]: k    // 每三次事件发生产生中断$ ~0 H% q1 c7 P  g1 E! v6 s! H1 u
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);9 C* l, H# k7 v; O. F- v' A+ y* @- a
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件0 v' j/ k, r1 L/ W7 Y
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);9 ^! ]1 n# X0 t# G
    // 使能中断
% S5 N$ m, F: G; t* p; b    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);4 x6 L1 v$ J6 G

" E$ Q9 Z8 y! k; @    // 禁用高精度子模块7 i: k9 m+ S" S  T4 [8 e& @' M, N
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);. W7 T$ Y$ E5 z
: ]% `3 l: @/ E  _$ `0 e
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);7 g, K( J8 Y- E  z5 z2 F- T
}" f- d$ U9 Z8 ]( b. }! u& o
+ b. H. r8 P& T2 o9 ~+ c. l1 E6 k) E
void ChopperWaveform(void)
& V+ b/ \0 L6 S5 U" H8 _1 D  `* ?{
: Q* X7 C7 u- ~9 R( `    // 50% 占空比' e: k1 r; K% T& q
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
3 W" F! ?3 W$ u" ]! U    // 4 分频
$ X4 b1 Y% c: F/ b  f# {$ P    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);& @, F. w; c3 t  G& e1 i! I
    // 单个脉冲宽度$ b# `+ `: b5 t5 X
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);: C. A: _& r: I! H7 A; o# O
    // 使能斩波子模块6 X# n3 k# u# E$ g. G
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
- v1 \" t+ m1 p) s( @3 d3 R}
$ T4 o2 {2 D. R- B- L7 J
5 F5 y2 k  |* t6 c! Y/****************************************************************************/; T% A& x! Y4 M; E$ q
/*                                                                          */
* j) A2 k2 Y. M( d6 n' Z2 W- n/*              PWM 中断初始化                                              */1 R5 a" m9 m7 }1 j
/*                                                                          */
5 t4 n0 F2 o' U$ y/****************************************************************************/) k" n. T( H) W; Q. _
void PWMInterruptInit(void)
/ g4 G! ^$ T, F{
9 @( ?; O4 l& \( k$ [. ?        // 注册中断服务函数
# k) y8 ^, z4 p) o& B        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);2 `6 l3 o; Z3 @5 V7 _
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);0 j1 [7 v  ]& v/ u( t4 S

( I6 c# g' u2 ]9 w        // 映射中断+ @& X; r3 J$ o  z) f) U) }3 }
        IntChannelSet(SYS_INT_EHRPWM1, 2);
% R1 Y- A$ h8 ]        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
; \6 ~8 ~& m( g6 I1 w1 @+ c' z: X  ?+ m" ]/ D0 e9 U8 E
        // 使能中断5 O* l$ O4 n9 X+ i  q
        IntSystemEnable(SYS_INT_EHRPWM1);7 W0 }2 j7 O  J; G" k
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
$ Z- Y/ \% x8 `7 c1 d}/ `2 f2 f+ f) i/ ~, o; M/ q3 n
" }9 K5 `; `2 {- r1 r1 U% [
/****************************************************************************/  s4 H: X  p* `  P$ R; v
/*                                                                          */0 g4 k( g8 S( \
/*              ARM 中断初始化                                              */0 L+ q% n. ~# y
/*                                                                          */7 @1 C4 T7 h1 {' H7 d$ y" k
/****************************************************************************/
5 [$ H& q/ g* b, C* _: R' f3 Mvoid InterruptInit(void)
- m2 _, |; q) i6 F- t6 r& @{# ^9 X( y! V  E0 M
        // 初始化 ARM 中断控制器
) ^/ F- _9 o  F0 O. f9 S        IntAINTCInit();2 L! C8 N* c/ @7 o

7 `2 y4 r/ j% u+ h4 Y; F  @        // 使能 IRQ(CPSR)" x1 s# e6 m& l+ k/ Q- w
        IntMasterIRQEnable();- P+ Y3 m$ m/ j' r+ h1 X& q

' l+ F% }% t" s0 C        // 使能中断(AINTC GER)4 p/ Y& m9 [( W2 y
        IntGlobalEnable();
# X$ f, c6 g3 _, z* ^3 n
- b4 g( H+ o" Z8 d        // 使能中断(AINTC HIER)
. S1 J, t! f- M3 ]& B% i; v, S        IntIRQEnable();8 `' j/ w2 [9 I
}
, W6 g. Z+ E3 Y4 D( v2 e3 u( }$ b. h1 J- K5 Z" R! R2 _6 k/ ?
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
0 m. \8 A' N1 e6 T6 \5 f. M% x! L/ }/*                                                                          */
, L1 q' v" d% i& j9 I' v1 m/*              中断服务函数                                                */$ l2 F+ |. r% Z  D  O; R
/*                                                                          */5 X" F+ G6 X" ~9 C" P% {: h
/****************************************************************************/
! `' i, ~4 L0 [% {/ k" _void PWMEventIsr(void)/ m  F+ R6 D) G
{% I! d' @1 W, d- U5 D
        IntSystemStatusClear(SYS_INT_EHRPWM1);
+ U* @  t) p8 o9 T! O8 P
0 B) g; S( V. c    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);- {  _1 o9 \" Y& y
}
" E9 }6 j5 y' {6 [9 ?5 n( A( _. z, ]) ~2 I2 W0 q% q- j3 k1 z
void PWMTZIsr(void)
+ _5 J% c4 P  p{
$ v( E0 M$ }! O9 z  {        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
3 q$ W, g! B! A3 B$ |
8 _% Z. o- f, m* n    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
" k3 M0 t2 b$ V% s) |; v}
9 q9 n* F* m' `( ]/ y  A% l
1 R& R$ A( q9 d5 `/****************************************************************************/$ @; h$ ?5 y! T' u  m+ g: g
/*                                                                          */
7 S6 c  b9 @% {/*              初始化捕获模块                                              */
6 `- a; r4 O+ n% T9 I6 c. P/*                                                                          */
2 H4 c/ k4 t& |7 F* ^: [/****************************************************************************/7 B7 m9 x+ h2 b$ l$ }5 x
void ECAPInit(void)
2 y+ s. C) n5 E8 H. B{- I1 J7 v, B; W3 C9 p) _
        /*-----设置 ECCTL1-----*/" Z1 ~, W* Z7 |) X; \: Z8 x& |
        // 使能CAP寄存器装载
+ P4 x0 U7 V- j$ ~  K        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);' N1 l) k% Z# g" S* Q
        // 设置预分频值.
; ^* v: R% S+ r# H# d        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);2 L7 H8 A8 h2 B$ i7 B
        // 上升沿触发捕获事件
8 W8 O- n& O& x& E. Q. b6 b        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);2 H/ Q2 c4 t! r# c$ y
        // 输入捕获后重新装载计数器值.# z& W$ m0 b! o2 K! w
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);- V% f6 T# o, J" T$ e

3 e5 A8 t% y3 H* ^% k  c- q& M        /*-----设置 ECCTL2-----*/+ p0 F1 b5 a9 a$ y+ U+ F# W2 J
        // 连续模式
% v. m7 `, r! ]' ?9 D        ECAPContinousModeConfig(SOC_ECAP_2_REGS);5 L+ X* A# q+ h6 M
        // ECAP计数器TSCTR持续计数! c# k+ O1 N) s3 {
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);5 j4 y& @7 v/ k
        // 禁用同步输出和同步输入& K3 C2 O+ k0 V( D# ~
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
/ B& e7 y% a& D, S% J, l2 E& U  ]- {* f# ^        // 配置 ECAP 2 为 CAPTURE 模式. v- P6 h  M3 H2 _4 }
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);7 h$ x6 x+ Y2 l, V" j9 z
, s" o5 v0 `; ^; U/ c
        // 使能中断- h  g: M# c6 u
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
1 @3 h# ~8 u; e! P}
# g, u. Z# \+ h) R1 T. d$ D9 {  v  k- T  U$ V! P  O
/****************************************************************************/4 s; }9 P# e* f5 i
/*                                                                          */
$ Q' ?; b4 s$ m: f% B, j  l! m/*              取得捕获结果                                                */
* }6 Z$ o1 |( L% {( M# l8 W/*                                                                          */' Z9 \) v0 U" I1 e( w$ P# w* Q1 P
/****************************************************************************/  H- U* S2 Z- z2 V1 P3 [5 c/ ?$ s' n
unsigned int ECAPRead(void)
  N! I3 c2 d2 w4 f  e3 q. J) c' Z{
" E& R' h1 V$ K! O+ V! \        unsigned int capvalue;0 i- I) S* q. o6 x" m  [
        unsigned long frequency;# i$ Z; O1 O$ [6 h
" D" h/ T. z! \( `. }: P7 p9 Y, E
        // Event1 中断标志% j" y8 l: q- `- D
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))8 ~6 k. }, e  h+ y
        {8 w6 g) x7 s) Y" l3 @" L2 Q
                // 取得捕获计数
$ Q8 W/ \8 @8 V, x0 e: t' h                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);) w2 E# ~, @  ]1 m2 H
                capvalue = ECAPResult.cap1;% t' b/ i+ M8 K/ F3 w3 P
7 H) y, Z; p, y4 X5 Y3 H* z
                // CAPTRUE 模块 228M 时钟主频) q1 j& x0 u3 u8 L" B! G
                frequency  =  228000000/capvalue;" `3 X9 V0 ~% @2 E# X
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
% }* v* `, b3 ^& d" g0 S' {8 H5 U5 p3 n0 Z, \5 ?4 g& N
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);4 F: X+ J* c' E0 `( b. y
//                IntEventClear(SYS_INT_ECAP2);! f1 Y& ~9 z( x" g. f
        }
1 t. H* ?; q( v" {        return frequency;$ A" E- e+ N, o2 f) _8 ^$ h
}
' K: |* w- Q4 m7 I& w& 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波。我们有相关例程,请参考。
: y% a3 s' K& Q# n4 C6 G

本帖子中包含更多资源

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

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-8-10 11:25 , Processed in 0.060457 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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