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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/# p' I' W3 x- z# `0 k
/*                                                                          */
+ P  Q% G& s: E6 n: ?/*              宏定义                                                      */
0 t' T$ z9 I+ A$ C0 K+ e8 W4 Q/*                                                                          */
' n: o% A2 Q& |* `/****************************************************************************/0 U% u* I9 J# e' l
// 软件断点
, a7 H5 `, _( M#define SW_BREAKPOINT     asm(" SWBP 0 ");& y1 [' C( X6 @% n4 Y

. G1 F) f# ?; Q& v/ A' ?8 `8 _8 H// 时钟分频
0 E6 ^9 _) J% V+ a5 P8 z1 @2 A+ S$ H#define CLOCK_DIV_VAL     228
4 k9 I7 L: L3 L7 V  U" {6 z3 f4 n
; F) I9 }2 @* Q7 Q8 S0 r' g/****************************************************************************/
) [& g2 O8 |% \6 F# f* }, j' O4 D/*                                                                          */
/ a' x/ G0 [4 ]! e' }5 r5 E/*              全局变量                                                    */) C& d; [4 F8 M: a4 L" _7 G% K4 D
/*                                                                          */
- j7 n4 o' w4 w/ Q/****************************************************************************/. }6 @* x! r2 ?: z0 o. ~) q
ECAPCONTEXT ECAPResult;/ ]6 ]  }# H4 J, B1 h* |

9 D' v# B' G5 l# s/****************************************************************************/
$ ^. w7 Q8 p% ?/ X8 |. i. u- X/*                                                                          */7 x9 w" E5 q3 y5 ~% K
/*              函数声明                                                    */
7 r* L* R  l& B/*                                                                          */
5 w, B- C2 q# m3 Q/****************************************************************************/' B  X9 M! }0 K0 j4 M! }$ t" a( g
// 外设使能配置1 B1 l: `3 D5 Y) `" F$ o
void PSCInit(void);
% M8 |+ K0 C4 ]3 A, E! m
) O8 P6 n! J; }4 D% A) n- e; L// GPIO 管脚复用配置! T; G: `* b. N2 n/ T, m3 S
void GPIOBankPinMuxSet();. {2 b$ i& k  `7 J* l( X, E
8 j6 @! Q( Z& V
// 产生波形
9 f1 y4 u' Q* H1 C1 D0 vvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);/ D( s! V$ `9 _& k6 V) c. D
void ChopperWaveform(void);5 d- U; G) D' N* n% w, p/ D
: \1 m5 ^* |1 V* K0 x/ ~
// ECAP初始化和读函数( z8 B: V, ?) K( }5 M* g3 Z- Q
void ECAPInit(void);
( L5 Z! e8 z* y9 munsigned int ECAPRead(void);, p0 ]. ?5 ~/ `  P# h
. I( G; E; \/ V" x6 E& U6 C& t0 H
//ARM 中断初始化
) G& g8 l: r9 ~! zvoid InterruptInit(void);& o1 g2 J7 [% y
9 N& S8 [  Y" H
// PWM 中断初始化
. z9 c9 P- ?, W( s" e# U  Gvoid PWMInterruptInit(void);
1 R4 x! M" y0 S+ I// 中断服务函数
) d' Z+ {: D. k- T: a) m// PWM 事件
; @" `  Y, g0 U4 G% e  Uvoid PWMEventIsr(void);) w$ ~9 b4 u6 Y) n' w5 p, }
// PWM 错误控制事件" [: w7 [' b& w, F, Z) a4 u& J
void PWMTZIsr(void);& W' h- G) g2 \  C$ \. a. A

+ f) F: Z) l6 s/****************************************************************************/
% q. [5 s9 g) a2 c) @, e0 W7 @/*                                                                          */+ D3 r) ^4 t  {/ g* A
/*              主函数                                                      */
1 g1 }5 j/ l5 ]* a: q4 d# `/*                                                                          */9 J! l6 l/ N3 L: z, {7 ~
/****************************************************************************/* s+ u4 z0 U& v% K
int main(void)
9 z; a' r& z8 P' S# Z0 G- Y" ?/ T1 a{
2 H- E5 T: ]' W+ G3 W        // 外设使能配置
$ L9 W7 j: p/ u0 _6 x        PSCInit();
$ S: k( I! m* @' U/ ~" H2 J
% p& j0 A6 J  |- T7 g        // 初始化串口终端 使用串口2, T; s- {4 h. _6 N
        UARTStdioInit();6 ?- q+ |1 h5 v9 H( v/ a( t
       
% Y0 d' l* {+ Y2 U) q+ I) ?# A8 I        // GPIO 管脚复用配置# V( C0 D' t1 p5 Q* Q8 }
        GPIOBankPinMuxSet();+ G2 v4 x7 F8 V9 l2 q6 G8 x
; Z' S* _& J- C
        // ARM 中断初始化+ |) m4 y# e2 O  V0 {. |$ s! |
        InterruptInit();
: y: w" E! J5 `& b& v" K7 q0 P) J. ?) Z4 @4 j
        // PWM 中断初始化
% }/ M' u3 G* W! J1 J        PWMInterruptInit();
1 n- n$ c# k* v& ?# C* ^! `/ x9 o) v9 d* _2 v9 P
        unsigned char i;
% ]* |% A/ N: K) q" f; d: H1 o        unsigned int j;
$ n' k3 h' z6 h, @# N9 Q( D
8 Y* G  L- F, C7 g        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
, K+ Y7 i9 F$ H/ g4 m4 w( P+ n        UARTPuts("------------------------------------------------------------\r\n", -1);
% e; S/ @* V: g" l. ]( e* A. X! h( P        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
9 \4 P" c* v9 J8 v        // 产生波形
  B( `# s2 i4 j; ^. K0 [6 w        PWM1ABasic(25000,50);
4 r$ X9 {/ y, S: P; M* m- o$ s, h9 \1 r8 ~# k( D/ i1 j
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
6 \& m# A( X9 ]1 Y- b. o  c2 R/ h# m3 E        UARTPuts("------------------------------------------------------------\r\n", -1);
- ]5 s: J( e: F
/ m- m; ?7 H/ N' b
+ g/ z3 G3 \, V. D- B( h
4 t% g1 I4 q: s& x$ Q0 y        UARTPuts("------------------------------------------------------------\r\n", -1);" C" u- s8 n) s6 O6 a3 a2 ^2 k7 l  ]
        UARTPuts("                    C6748 ECAP Test\r\n", -1);0 r2 w/ k# K  J, w  D# [. ^
        // ECAP 捕获初始化1 ~( Z$ U# ?! d- F
        ECAPInit();/ Z: d+ h4 T" L; r6 l% R* N7 X
        UARTPuts("Initialize ECAP.......\r\n",-1);% c3 \: \7 `7 t8 v2 D" x2 V
        for(i=0;i<5;i++)
  u) o9 f+ B" |& l& u# O3 s2 w4 G. ?8 ?* [        {# H* X) k; h+ h/ L/ f, t
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
$ i4 {8 \+ n5 W5 q- T4 y                    ECAPRead();
- S! X, Z. q8 V: Z4 ]) c& q        }. U* l5 `8 c+ a+ K$ W
        UARTPuts("\r\n",-1);1 U* G# @. F( o( f, P7 h0 A
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
: P; S0 T, q: a4 s        UARTPuts("------------------------------------------------------------\r\n", -1);% I, x2 _! C. i0 A& p/ N  ]5 B  \

. [+ u$ R" `: k# `4 Z/ A- ^& s4 I        // 主循环
4 Y% c+ r+ X) b5 W        for(;;)
: [1 b: A8 X4 A. E( C        {
7 O; Z5 |: h7 w. N9 i! H$ E
! j: z  T/ u/ b        }* l, ~9 L; s1 F+ q2 \
}- N# w; o! d7 D5 x4 V. s
) n  L3 J  n" `" a1 A' c
/****************************************************************************/8 `$ D9 A9 v3 _" @0 z9 [1 \- O! k3 A/ c
/*                                                                          */
& J# O' `# l/ V/*              PSC 初始化                                                  *// p, Y8 T( V. T
/*                                                                          */) k* U. }! q9 t+ w$ I- c
/****************************************************************************/' x' y0 H( K8 k+ R3 Y$ L0 q
void PSCInit(void)/ Y0 k; Y$ D6 F' v" }- c% c
{; z: S% x# E+ U" h
        // 使能  EHRPWM 和 ECAP 模块$ ^# U2 Z; e2 B1 r5 d
        // 对相应外设模块的使能也可以在 BootLoader 中完成
2 G- I0 M6 s. w+ j' S    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- c" [& Y  u. h- M# j% G    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);/ w: ~/ y6 I# o0 w- p, _
}
6 f8 l3 R! J4 j# C4 c- v' X0 x. G% n# R4 W* \! w6 P
/****************************************************************************/
  D- t& i. i) f! s/*                                                                          */$ `4 y0 [& |" N# M. k
/*              GPIO 管脚复用配置                                           */
( m2 h) T; g' C3 q/*                                                                          */
, E! x6 K; p) E; N/ B/****************************************************************************/
  ^8 X! _$ e* U5 c% T3 v% K, Lvoid GPIOBankPinMuxSet(void)# I3 c+ Z* R4 ]3 t$ x- }! j$ w
{9 t7 V# o8 z. p8 u9 c
        EHRPWM1PinMuxSetup();5 |7 s- w: O4 L$ j
& W4 ~2 j6 ]& h5 e
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)# e& T/ j* c$ v, V0 k
        // 作为捕获功能时管脚方向为输入8 S6 e7 L0 B  m! L
        // 作为辅助脉宽调制时管脚方向为输出
1 P7 m1 [! r! ~0 [- k9 S! y% ?    // ECAP2 / APWM2" ^! v2 L  f+ q: C
        ECAPPinMuxSetup(2);7 `% J1 v: J* l# {

' l' m/ b8 m( p# h  r/ h4 V        // ECAP2 / APWM2方向设置为输入
, \2 D* {; P' u5 q1 m* y        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]4 H/ s( [( y- J
}
+ x3 t( d/ Q: D' ~) E$ o. J0 P9 A2 }) S! A6 e4 {
/****************************************************************************/" L5 _' E. D( F# p+ m3 l
/*                                                                          */7 W" V% N: X1 |( o2 ^
/*              PWM 输出波形                                                */
" P: _# Q/ Y8 R/*                                                                          */0 Z4 Y& x7 J1 c4 j0 N; n* `
/****************************************************************************/
3 C) b. s6 i* }+ \void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)5 E  _. ~, _5 o( ~1 ~2 b+ h
{* {- E" Y; q( [) J% v
    // 时间基准配置
) ?. r6 C. k: v; g8 Y    // 时钟配置
8 X. d8 i- Y: p  N' L0 c( a    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);* Y# i8 `" d& L) z9 H

) ?! l" v! C! B    // 配置周期
7 V8 ]1 W& X! b$ b! r- z    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,9 Y4 W2 P9 f; Z7 ^4 x
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
4 S9 X& ~! f9 t& K3 `9 O5 l% b4 }: n; p4 H* t
    // 禁用输入同步信号
5 H3 H2 e+ A7 q9 Q    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
& J6 M! j) _! a) Z% l! ?2 V3 e& ?# o' o) g1 U7 b. I8 ^/ D4 i
    // 禁用输出同步信号* f0 w' X: |# g5 j
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);# q( @6 r8 v& A' q: J1 v

& W& d% W) U8 `4 s% B$ x. O    // 仿真(DEBUG)模式行为配置
/ l: c. N% b' v    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);6 @2 X, z+ W% }+ A
* I1 Z$ {: l7 H8 b6 c9 d5 j
    // 配置计数比较器子模块
+ z6 I5 O# H. e" [1 Y( r/ E3 ~, o7 w9 n    // 加载比较器 A 值
* i$ L9 i. o  c6 ^) B$ E    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
7 F/ ^1 X3 _/ P6 `* J( \                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 _3 ]+ a- H) h3 ^: f9 d9 w% J1 S0 h  [2 J/ \5 A% p
    // 加载比较器 B 值% `, J1 B$ t' w0 t" l
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
  z/ q5 N7 h; }% P2 _8 u. U% _% T                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
# j0 a( d4 K1 F0 v9 h6 b1 p
9 F$ O3 o, t( O; V; Q    // 功能限定配置(输出引脚触发方式设定)
4 c5 Z( O9 O8 @4 @$ k    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出- h- O* s- ]! [* t
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,  E5 i* [" Q9 R8 t# t8 M! K9 W
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
$ |, y2 F% X* A! R3 W! @2 v0 p                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
6 C6 L9 j4 K' o1 c: ?* m
8 W& G5 T/ n3 E! J+ H    // 禁用(旁路,信号直接输出到斩波子模块)死区模块# Q/ m+ z- v& ?4 @( ?3 i' D; V
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
% K& t$ [& H' j, @  {
, ?0 o  i3 z5 U0 b" S; i/ i    // 禁用斩波子模块
* L) b& v% g7 U! e3 w    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);8 @' h9 i# W- z5 @2 @* N

- }4 P( u2 b* s" `    // 禁用错误控制事件& o$ q& M; z9 K' a
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);3 i. U, k& }+ X' S
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
: x- ?2 {  b( \) @. w) X1 i/ W8 z4 [& W. R5 k- A5 T
    // 事件触发配置& f, v6 `$ n+ [& h6 u1 c( S; o2 N& e
    // 每三次事件发生产生中断' k1 q0 q9 @: ?* U
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
+ h1 G2 P' H4 H2 l% C+ p    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
' K! ~% d8 e2 z$ t6 U- U    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);- z9 S: v6 x  R6 F
    // 使能中断
' v: c  C; l% U2 e8 I" I9 ?    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
# n5 [9 `+ k+ m2 W" X  {+ y8 w! L4 M% x+ N0 k/ e" W
    // 禁用高精度子模块7 [$ a& g! V0 H, a7 L
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);+ ~2 e7 N* \' |5 u( u
0 x( W0 s+ M; R% K5 G  ^" R- c
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
2 I. d% }# c. N: J% h# d}6 |2 P6 Z" J2 F% `
: ?4 `0 E+ b0 l
void ChopperWaveform(void)
' `  i9 w$ W$ A+ [{! r8 H5 C  z1 C4 `6 W2 m2 Y
    // 50% 占空比
! g; {! p# q- }- B    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
1 ^- y' r( c& `2 _2 J8 h9 G( ^/ Y    // 4 分频- B4 d. o  \' @- n7 W% ]
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
% x! N$ z8 l0 Z2 L* Q    // 单个脉冲宽度1 F$ h* B4 e# D2 L: h8 E7 t! `; W
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);! D& s1 B$ O, O! N
    // 使能斩波子模块
" Z# c1 ?' h+ P7 R" V    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
/ u( F2 y& F7 G" V3 [& Y}
$ @" b( |( `) X: d  t
" x% b' V: f$ E/****************************************************************************/
; f  x: {2 ^  s/*                                                                          */
' H) x; Y6 V/ v/*              PWM 中断初始化                                              */6 l( G& ?& V8 a- Q, j( A
/*                                                                          */
" S! r8 `' D- s! K4 u7 ^/****************************************************************************/
: M" b" J, T/ V6 k0 z6 d  H1 _void PWMInterruptInit(void)
' \" C0 u. Y# E4 B) l1 m{
: q$ Z" q$ z% y3 R        // 注册中断服务函数# x% S3 s* B/ a8 m7 o. b" l0 {1 n
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);9 L, Z9 [( H/ m2 E
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
9 h1 ~" \$ D& r8 i0 B' _: z; P3 w! d3 m% s7 e: R
        // 映射中断
- l0 ?9 g& g/ L: t8 z$ y        IntChannelSet(SYS_INT_EHRPWM1, 2);
) T+ m. P/ _  m! W0 R! g        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
& o' p# X& I. C& u2 O! A( z
, R2 n# k" J! p4 @( c/ f) q  K$ Q        // 使能中断
4 z; |9 {$ I- l$ H2 w8 T        IntSystemEnable(SYS_INT_EHRPWM1);7 u' V- f; \; C  M
        IntSystemEnable(SYS_INT_EHRPWM1TZ);% [6 v9 [- @2 D. i
}
1 h6 ?( g: f: }. L3 T3 d1 g4 B* `( r( `
/****************************************************************************/
6 b: s( S3 m" }+ a1 {/*                                                                          */& z1 Z/ z0 G: S1 c9 y  I
/*              ARM 中断初始化                                              */* z$ E' n1 V/ W
/*                                                                          */
3 ?- W  d0 A7 ^6 M3 k' _: a; p/ ]/****************************************************************************/
0 V9 _9 g1 L. j- [8 |void InterruptInit(void)$ A9 t# d3 {$ y$ D8 x2 c, M
{4 g6 K! z+ i% e3 p$ b% s. d4 \
        // 初始化 ARM 中断控制器+ A; q3 N. c+ l5 b
        IntAINTCInit();+ Y5 S" m& q: K3 c: {; Z% Q) M
8 ~8 b! y: P6 L, {( N! |2 J
        // 使能 IRQ(CPSR)- D7 Z, x0 q* j
        IntMasterIRQEnable();3 k+ N' {9 Q1 s% M0 k4 k% H
% ~; P% @2 m0 Y6 M$ I  j
        // 使能中断(AINTC GER)
% H$ n: e5 l* B" ]2 S& y# B        IntGlobalEnable();
8 l# _; F3 V) h3 }( n/ z6 f  J- j9 q
        // 使能中断(AINTC HIER)2 w6 X/ \' W9 A. ~% o
        IntIRQEnable();
0 f1 H( Z( ]: O}- Q& g8 O5 |% X7 W5 A
* R4 W0 W  j6 `( b2 v6 j. q. b9 X5 s
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/7 S$ T, p, Q4 Q- Z& L- y
/*                                                                          */1 ?. f& @0 }& x+ M' I+ b
/*              中断服务函数                                                */6 Y# X1 @/ r2 e" J: N6 f7 I
/*                                                                          */
6 f# V1 M) o6 P3 z4 ?& I+ e/****************************************************************************/  \8 \* P1 b5 H; y
void PWMEventIsr(void)
9 q4 B/ I  ~* B4 a{
: b, u+ x! R/ G) o7 f# y        IntSystemStatusClear(SYS_INT_EHRPWM1);
& Q8 }2 X  [5 G  d; A6 X6 V
" O: R9 _5 k/ X" M! ]    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);9 w3 T  h! E0 l7 ~% W
}
: C0 d7 e9 i2 S6 a- e, Y% j$ l8 ^5 r( y" u  R! T; e
void PWMTZIsr(void)
- a  {6 |2 `& @; |{
! z4 e* f0 [8 {- U        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);* P0 m0 G. g1 G. o# p" C5 n
  a1 N1 A4 k, y8 o9 z
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);. y' A, E+ Q  Y$ y
}
3 O! X$ c! |5 V0 L* D( I' N8 G
# Z3 C- @7 T. R1 Q" I. ^4 k/****************************************************************************/  K  S% d. H+ }& d
/*                                                                          */1 g* Y. M6 t  Y8 [' G( k
/*              初始化捕获模块                                              */
  U& {7 `" f& g/*                                                                          */, j& I7 s. k6 h) _  p7 t0 p8 r
/****************************************************************************/
) z4 H% Z/ T$ l! G" E$ @, Zvoid ECAPInit(void)# d* H9 O( c6 `4 \/ ?, a( N! u
{7 l* [7 }3 p& Z! ^5 p) ^
        /*-----设置 ECCTL1-----*/: ]$ i- \4 Q5 g4 ^4 |$ D  y  r
        // 使能CAP寄存器装载% f! l( o1 [7 n5 q( H& ]/ J2 }
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
$ S: K3 E, ]; p* {        // 设置预分频值.  f9 ]5 [* c- A! I
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);  f6 Q! S$ c! V9 L7 t% m
        // 上升沿触发捕获事件* B4 B$ P/ o3 U$ W9 U$ N' }: W# K$ d
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
5 T( e. m# b4 E( w: x, ?' j        // 输入捕获后重新装载计数器值.) X( P1 @( h5 ]& Y7 W
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);. a+ a' a2 G( ^& R

8 `! N2 Y. I, i8 l        /*-----设置 ECCTL2-----*/, l& q8 \2 L1 a
        // 连续模式$ \# H( [6 S/ L, w* p, S
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);0 ^# c/ N+ Z" S# f( w
        // ECAP计数器TSCTR持续计数. x3 J( x; H7 {8 G7 L2 w
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
+ c' @8 I. ~8 ~$ x5 Z        // 禁用同步输出和同步输入+ C* y+ X5 A6 I6 L) J. E  _
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);7 V' U3 K# V3 n# t7 e" X9 n2 Y
        // 配置 ECAP 2 为 CAPTURE 模式
8 U/ m' i3 h# x        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
2 C8 X/ _# F! x  ~: P& T5 \: F, E' d# w7 Z1 H
        // 使能中断8 |& [. d2 ~% t4 x) o
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);! z% A: {0 T! @3 A- y
}
6 Q+ F+ I% A- u- k" t" j* l- |- b* E& F8 ?0 p) m) P
/****************************************************************************/
# L; h7 O+ v# K  U+ m0 e/*                                                                          */- o% A2 S# S1 ?9 B+ M" T( m
/*              取得捕获结果                                                */
% ?7 S2 f5 B) f3 C" {/*                                                                          */
& N3 G1 T% G- Y7 X- l$ F9 Z- k3 X/****************************************************************************/
/ I( q  w) }; m5 runsigned int ECAPRead(void)# k7 h4 H+ F" I- Z
{
* t( W3 p! }$ A        unsigned int capvalue;  `+ r$ \; y% k, Z( b
        unsigned long frequency;0 O4 k+ ]6 p$ x& n! P7 Y5 s2 y

( z+ }" ?) ]6 Z+ w& B$ N        // Event1 中断标志* D8 F% W9 a0 W6 j9 p
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)); m; s; ?  e) S* R7 H% R3 R
        {1 w8 W% d  v) [! z% A
                // 取得捕获计数3 C/ Y" A/ F) z7 O* {+ T
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
' v- t8 C9 x2 \. o& @0 q0 R                capvalue = ECAPResult.cap1;
' Z7 T) }- ^. u4 B0 A5 ~9 T. h) L, F' t3 H9 j) b
                // CAPTRUE 模块 228M 时钟主频- r6 L8 y1 g2 B/ t
                frequency  =  228000000/capvalue;
( s" A' Y0 f+ s. Q9 _0 _1 x                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);9 q! Y$ s6 `0 D  N2 I) k

: I8 t+ ?8 T" u; g0 P" C, i5 S                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
' s. {& q. ?+ u9 m+ b//                IntEventClear(SYS_INT_ECAP2);! I7 I' T! c- ?4 v4 g
        }
. E/ K" D2 x* b' @        return frequency;
4 o8 ]/ z$ g  c0 }" g  P}
8 R0 {7 e5 \2 s3 f  j2 f) {" o9 v
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
) _  U, X' P0 N; W7 J* Z% t

本帖子中包含更多资源

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

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-6 22:04 , Processed in 0.046686 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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