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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
1 Y7 U' {, u" R- A6 J+ n5 a/*                                                                          */
) G1 o1 I0 n+ d4 s4 d- E/*              宏定义                                                      */7 t- _  p: w( r
/*                                                                          */4 t  t8 \, w+ R9 T" M
/****************************************************************************/7 d4 ?- n8 O- o
// 软件断点( j- k: [& h" @1 N
#define SW_BREAKPOINT     asm(" SWBP 0 ");* X' S: X) r- H/ @3 H

) k* J6 W$ [. g' a: ~  @// 时钟分频
; N0 D, s, R  o" }#define CLOCK_DIV_VAL     228$ V5 ]+ e9 l" W4 x' h! F

7 J6 g- Q# j9 F+ E/****************************************************************************/
& l, u( E& B; q8 w9 q. m& w/*                                                                          */
7 [# y6 f+ ]% I3 W% a0 Y/*              全局变量                                                    */
) u! `( m  C( W( x: ?) l/*                                                                          */: Y6 D5 _4 t0 l! I- l- Y2 q
/****************************************************************************/# n2 _$ f7 r( y1 V, \
ECAPCONTEXT ECAPResult;
5 f8 ~, @$ c4 b- C7 A% b/ S. L& f& Z7 J/ x0 P
/****************************************************************************/
) h; q$ C7 B- ?, T% s/*                                                                          */6 c, Z4 L  A( r* y0 ^
/*              函数声明                                                    */
. V3 Z# l' k$ Q/*                                                                          */
4 c8 ?8 d4 T8 j( d' l/****************************************************************************/
1 a, @+ S2 {$ W. ~' C0 a( q6 I9 I8 K5 T0 \// 外设使能配置1 Y/ u4 A0 `7 G. x' M
void PSCInit(void);) N6 {3 |5 m4 c; ~$ Y: w8 q
% L. F" p8 D1 a4 J
// GPIO 管脚复用配置# n& n. H9 t- v9 N$ i1 ~/ n+ H
void GPIOBankPinMuxSet();& ~* b! `7 v4 s. ^
1 |) d) H+ o6 {" i# G; e1 Y8 R; w# p
// 产生波形7 @7 u1 A1 P: P: @: K! n4 B
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);8 ^2 r0 j2 P/ g( Q' z
void ChopperWaveform(void);
: F! ^  y% P! q2 l* O% g3 v6 J# |7 \7 K6 o
// ECAP初始化和读函数
' |0 \# z( N5 v/ Rvoid ECAPInit(void);
9 R- ^' |5 [6 @8 X3 \$ G. Aunsigned int ECAPRead(void);6 y$ _: e, G' {& o

+ l; a; T; l+ H$ q. k) W) W//ARM 中断初始化5 K7 C4 n' |7 [' J; a
void InterruptInit(void);
0 v3 k2 @+ T$ V+ K9 g- ]9 K
  a0 }4 l3 }+ F3 d3 {// PWM 中断初始化. x2 g' m( ?0 f) Y5 P) v
void PWMInterruptInit(void);
% E$ L. v1 A, W+ T8 D0 X! f& m# N// 中断服务函数, \0 Z' D1 G0 I; K" m( n6 O; q
// PWM 事件! `: ]9 W+ Z+ P& d3 w
void PWMEventIsr(void);
1 s( r7 {9 U0 h* U, g" o$ T0 j// PWM 错误控制事件9 Y. ]$ C  i3 x) P% U
void PWMTZIsr(void);5 W) {% \! A3 d5 v' m) W
4 b- V$ I2 ]  q6 f) h1 Z$ c
/****************************************************************************/
% Z1 `- f) c6 R% U# e) y  ?: C. e/*                                                                          */* \9 V( z7 m: p# p
/*              主函数                                                      */
' m, q* ?) g  q/ J/*                                                                          */
2 d4 P) Y7 J& R/ \: Z/****************************************************************************/
/ X4 L/ x: O" Z& i( a: cint main(void)$ L. [2 r. }7 D6 G) ?5 G
{
3 H' Q* H4 p; C: Q        // 外设使能配置
& Y; ?- R/ q( I0 A        PSCInit();1 u3 v, ~3 E4 _0 D6 Y; @3 [

: l2 X/ I/ V$ K. j  d        // 初始化串口终端 使用串口2
: s" n+ M7 p. J/ }! A. i" }        UARTStdioInit();
( u; F8 k' q0 t$ K: J2 L$ U+ q+ @       
: {6 e* Y+ h8 ~        // GPIO 管脚复用配置
3 v2 A9 W4 T  P# v+ J* h2 i        GPIOBankPinMuxSet();
/ i5 [# H* D+ ?, ^6 q( n' m
6 `$ h: J0 A; J. E6 X' X        // ARM 中断初始化/ ]4 I6 h( @. u6 b
        InterruptInit();
  V, A! q; S' b! u7 D: l  x
9 F' _/ }' h9 O- K  M7 a        // PWM 中断初始化
5 I* _9 V' C' ?3 g, b* h$ H        PWMInterruptInit();
% l3 b- v) }$ [5 Y
1 j6 Q2 A" \4 n% e. s, U        unsigned char i;
0 ?# X: l. ^7 ^9 A        unsigned int j;8 e1 T7 G! d$ C$ J" i

  q8 L) T% {6 _% q; Y' [        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
: Z& h1 d& f0 T- q8 f" f        UARTPuts("------------------------------------------------------------\r\n", -1);+ F8 @" p! v; b/ Z! f' M
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
9 d' r% G" Z0 o  t/ ^2 u+ l        // 产生波形
% h5 B# X5 n# W( B- O  B        PWM1ABasic(25000,50);
  k# [0 A# F# N, G8 [6 Y/ q' a1 U% d" Y) z
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);0 W! |: [$ E  U* X
        UARTPuts("------------------------------------------------------------\r\n", -1);3 ?- x" i2 W, z, W' H, @4 X

5 C1 J% D  m9 p1 B
7 {# r2 J6 c- L9 k; _" l# l& R- r) |5 i" q
        UARTPuts("------------------------------------------------------------\r\n", -1);/ l1 a9 B7 d8 x: M( d
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
7 \+ J# E- ^) O6 {) `8 X2 g, ?$ Z        // ECAP 捕获初始化
& P% @4 o, h+ S- \# }# {* K        ECAPInit();
- s: N, |5 }- g# O: g+ k; U        UARTPuts("Initialize ECAP.......\r\n",-1);
$ J3 r/ }* s& Z0 s* Q        for(i=0;i<5;i++)* }4 O  ]# L* f- D7 x: Y1 n! {
        {' O! Y) _  w1 {
                    for(j=0x00FFFFFF;j>0;j--);            // 延时' ?. h2 Z; Q+ C. p4 E- e7 E2 O% M
                    ECAPRead();
5 s5 n7 @% b% J2 z3 M        }) T7 f. {4 ^8 j; g1 `
        UARTPuts("\r\n",-1);! ^( x1 Y: _8 `; A
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);" \7 x4 H" g( Z4 @" S$ P
        UARTPuts("------------------------------------------------------------\r\n", -1);
6 ~% X8 f+ @9 |# w  ?. a: J; d" N( z, m' ?5 ]
        // 主循环
/ G6 p% N0 z. e9 t6 ~5 |        for(;;)
. b! Q2 h0 v1 h5 x8 V        {
1 p1 S0 G0 |( B  k, G
7 b' {: F% ~( T1 [! O! i: q5 ^( w        }6 J2 E( L. J3 T1 ]
}
2 g9 E6 t7 O: S  [# h' d& ^7 _" j; r; b: v5 t9 d. w
/****************************************************************************/, M7 r3 [" s! q" u# F) [. V  {. I5 P
/*                                                                          */* L3 {: Z  s0 W5 w
/*              PSC 初始化                                                  */
9 Z! S8 S% ]& f7 W+ F- ~5 Z% N/*                                                                          */
7 f6 p" v* U# }( B( l1 `/****************************************************************************/% ^. Z" Q4 Q+ P( D# s
void PSCInit(void); l/ S- o, K/ B4 R6 O. |
{
1 {* O' k) _/ ?        // 使能  EHRPWM 和 ECAP 模块
4 h  s* A# o. H# H        // 对相应外设模块的使能也可以在 BootLoader 中完成  |  |% p: a7 b; x# a, g
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
' X8 f; t7 E5 i* T    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
8 l* |/ B& z; W: I5 O}: T. z6 K( [8 k

# C( c( W5 A  m$ l+ I/****************************************************************************/7 b/ e8 {! E; |4 K( r( n
/*                                                                          */* s9 x4 x  K) Q7 F; b9 R% z3 G+ T3 I
/*              GPIO 管脚复用配置                                           */. M& H0 ]) O0 j& W4 q1 O+ `0 [
/*                                                                          */
5 b8 I- o! M/ O. `/****************************************************************************/
/ B0 }) @! J! `$ p; P2 ^void GPIOBankPinMuxSet(void)
8 Y1 j. Q; k& Q4 x( Z+ X{8 D0 r  m+ ~. n& O2 R; |
        EHRPWM1PinMuxSetup();
1 }! b& W" l1 L& e: F* k* D$ _1 `8 e+ ~
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)& @# ?' y$ F% u8 A2 P
        // 作为捕获功能时管脚方向为输入5 {2 {: b; Z$ k9 A- F, k
        // 作为辅助脉宽调制时管脚方向为输出
/ j* `1 R( Z4 m    // ECAP2 / APWM2' J* |5 K! ~: B) ]$ h) M# _. S
        ECAPPinMuxSetup(2);
# f* _* \7 d, v5 _8 O
1 i/ ~: @( x' U# s1 P" ^& V        // ECAP2 / APWM2方向设置为输入! @- w1 U& o. L
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7], B' i$ }* z# U7 n
}% x9 X: t0 Q2 y
4 E9 V- Y4 [1 A0 D8 X  y) i7 r. x6 `
/****************************************************************************/
# q0 ]1 p& |/ e, i- ^# O$ N5 u/*                                                                          */$ d- g! A0 Q$ E& ^0 J4 c1 S) c
/*              PWM 输出波形                                                */- _/ O4 F8 `+ I. }. d- n, Y
/*                                                                          *// u8 e9 |# C5 E, S& Y) |* I
/****************************************************************************/
0 i; I/ H& \! b! x  M/ h- i4 rvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
8 z; R, _; C2 ^7 e) W2 m{
& U6 T+ |  T' G' m% e4 }, c2 Q    // 时间基准配置& |' \6 P# M" x& _5 o2 P
    // 时钟配置8 k1 Y4 ~% Z2 j# l& A8 l
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
- h: V% [/ o( O3 D/ \
8 _; ~& n+ f2 n  w% p+ }    // 配置周期
& U/ s4 K6 T( M    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,; E) r+ f" G$ B' h" N  m( e# Y
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
3 `, |" O" l/ g( {. s8 b! L- H  m# [" _8 N& V, b  M  N
    // 禁用输入同步信号
+ V4 g' {- `( N& j1 o! a3 Z+ O( O    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);7 u2 l/ q5 K4 Z" r, U

' ~4 w: f( L' K* Z: Z    // 禁用输出同步信号0 O1 v7 M& v! x& o# z
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);  m$ c, D7 \2 T0 B% n$ z9 [# {

. P! S: L+ V' }: P* u4 K# e' ?4 ?    // 仿真(DEBUG)模式行为配置* m, A( Q8 I) x* B$ w) m2 I
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);: G) j! @: m& h* H0 ^
1 H1 x! {! L0 a
    // 配置计数比较器子模块( a' U# P$ m6 z- d
    // 加载比较器 A 值
! }2 {: U& n/ s" u' ]* H. K. _+ n% g    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
& Z2 M9 o: H5 f3 o3 I' C% T$ j0 P                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
9 f: r) N9 _$ Z& [
  t( W) h0 }/ ]7 L! z    // 加载比较器 B 值/ I1 V: j: d5 ^& E0 Q& Q$ b
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
7 W: |" N  _" m% j% ]1 g  N. [9 `                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);( v: g% Y. R7 X
5 }# B: q6 a4 c) H: [7 R
    // 功能限定配置(输出引脚触发方式设定)
5 A1 Y( ^# D7 s% w    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
5 ]9 O6 h' g8 x  w$ Z* T: a. ?    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
8 F7 r$ O# U4 T" Z( R9 W. h6 a                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,5 w, `' z+ i2 K; U; }5 l
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);5 S2 Q5 b( _6 A1 G1 ?$ l# C! F/ A
9 ]. \$ H9 P0 E, F4 V  s
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
; D3 a" l8 m  F' a! @) z/ X/ x6 y6 W    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
9 ?2 x( X2 I. h
4 G$ d( l- X1 o4 N3 P    // 禁用斩波子模块4 P8 @& j  {. [/ i. \7 |
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
, x# K. O0 p) m: p7 i" P1 f+ h% a
; G- C% {5 d) M* T) `) E# t    // 禁用错误控制事件
2 d0 y' V/ z& Y# B/ b( N    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
7 K5 ?6 S' P) w* m! W0 L1 Z" O    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);+ K3 ^2 `( u0 N% R" k  z9 R

/ t+ J4 E# ~" _    // 事件触发配置7 a& y5 a0 }) C7 U
    // 每三次事件发生产生中断- o( Z* _  f% ?/ x" ?  X
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
# X; w9 w. }. u3 Z    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
  `. C6 B1 q& _2 g  Z/ i    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
' p  o; Q( d% r) J  X& g1 C1 Y% ?    // 使能中断. V9 G- e* L/ A" J2 P% I
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);2 ~. t5 m1 d, h* D8 n' t$ Q4 a# e) Z! ^

- W% [: f2 x1 q4 K    // 禁用高精度子模块( R1 ]1 j6 s6 f' f
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
0 h/ A7 K/ r1 m0 s- e! W3 h8 o% K1 s6 }
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
' `4 ]. O1 Z; {1 @) L( B% j+ C3 n}
8 s/ W! {0 t0 {: X* P9 F& t* c/ `' ?# |/ C# U  S7 k8 O
void ChopperWaveform(void)8 W/ o: l2 o2 d/ }' D* C' v  k
{
0 y9 i7 O/ @7 H6 I& h" d- S    // 50% 占空比
: K' v" C& V' j8 D    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
& e0 R# n  Z" q( A8 a7 d5 U    // 4 分频' x+ g, f) R0 ^# C# E
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
& r) n7 P$ v( b. F    // 单个脉冲宽度
( @' q7 P4 j3 l. X; p    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);% V4 `8 a5 P% X# b! V+ T3 _
    // 使能斩波子模块
/ n+ |. [' F( O: Q# A6 V    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
' M5 g4 n( }' D4 f3 h}
# P: c# c9 S. A/ j: r" _- Z! `( z4 ~# i
/****************************************************************************/
8 W) y* v' G" u/*                                                                          */) g5 A* u* j5 r- W( M. m" ?5 D
/*              PWM 中断初始化                                              */
1 F2 p0 v' u3 ^  V2 N/*                                                                          */$ M# K4 b. E6 R3 ]5 e
/****************************************************************************/
! K, `% \" p: Lvoid PWMInterruptInit(void)
; E: j( [- V2 P! M- y! R9 O{0 C2 O1 E; \' v" D+ e) X8 \: @* G* W
        // 注册中断服务函数2 d: a: s) C5 R# n# t* y& s& ]
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);; S. B3 Z* e1 z2 }8 K
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);# q$ h1 N: \, l. X) }  S
2 O- M$ v/ P0 X3 i* I
        // 映射中断' U8 h4 _9 n- d& |3 v  G
        IntChannelSet(SYS_INT_EHRPWM1, 2);0 p" X8 j/ P' v  J+ ^8 m, {( j& n
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 }% Y: o+ i9 k# M/ u( z
9 h( ^  ]2 C2 R$ b  }" X        // 使能中断
9 f0 X$ Z% A4 P; o        IntSystemEnable(SYS_INT_EHRPWM1);
$ v8 O  o- e! S! I/ ^        IntSystemEnable(SYS_INT_EHRPWM1TZ);
% I7 c. e: f* J9 R4 z}  B* f; h' F; t
, c0 l7 u8 `, M' O- K* d* ^
/****************************************************************************/$ N( y: z: w) c# y: b
/*                                                                          */
8 S! @% I* @- J& h0 ?, Y8 M$ u/*              ARM 中断初始化                                              */
' {/ u' `8 D! i/*                                                                          */6 u' X, L; G/ `% d0 e( f, Y
/****************************************************************************/
* C( C$ w1 `- B" A$ X, z7 K1 dvoid InterruptInit(void)
/ f( ]! K; P3 }$ `{: c7 f( @: A+ R' H1 o6 z5 ~
        // 初始化 ARM 中断控制器2 p- ?' D4 f' w  d' e* |. `
        IntAINTCInit();; u# ~# j0 L5 ~' j
# G' |, H4 U0 p- z9 i2 S
        // 使能 IRQ(CPSR)
$ }% G/ Q5 Z; i) V) N! o$ ?1 h        IntMasterIRQEnable();- g. u& R6 Z6 G, [; g( E' B

8 N' |. R; C4 a" G' M/ Z        // 使能中断(AINTC GER)
( R6 S6 [( r2 e) S" t        IntGlobalEnable();
% \' W' Z, g% Q3 f
/ F* F: V" a4 c1 ?, }' K        // 使能中断(AINTC HIER)
  s: ^2 h% D$ n        IntIRQEnable();+ Y4 z- ]2 P& t  S; o4 f
}
7 x: U6 U6 h% u7 G3 d/ @( Q" b
! o4 }* V7 \5 E3 J) h% k0 ?
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
% n2 J( ]( m" {0 _7 w$ _1 p. H3 }/*                                                                          */0 w1 A) h, o6 Q  f, R& p
/*              中断服务函数                                                */
: o) E$ x5 n) @/*                                                                          */6 U& k% d  l, I) [, R
/****************************************************************************/
# \* h! l+ D' ^/ C/ Y+ J) Jvoid PWMEventIsr(void)9 v0 s! T) h" L; @) C/ T
{
+ O, ~) A- N9 N: X        IntSystemStatusClear(SYS_INT_EHRPWM1);5 j2 ~& T+ B! U. G0 a# i1 D9 o7 ?

0 U* l  x# ]+ A! A( i# G6 y    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);! k+ W# ~. X+ v+ d1 F
}
4 [# I; O+ f0 ?! A2 C6 S
( A2 s2 b" g8 ^  R. o9 A5 F, [3 N6 kvoid PWMTZIsr(void)
5 K% f: i# J% l* S: y  U; q( n{
/ L5 ~- @: t/ \, p9 k- c" W2 }4 q        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
, w* `' |0 M+ C7 [( r0 C0 H2 F& K+ Z* I7 ^, J  }
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
( M5 n- M2 \3 j0 u' z3 R3 D}
/ U9 x5 G; J8 i- l3 s
) S. t1 j8 e% }3 ^7 y8 X* p/****************************************************************************/! e  r% i& M# K9 k: {8 F% \6 {; L
/*                                                                          */7 h: y; T  r$ e, C
/*              初始化捕获模块                                              */, ?7 [4 d+ _( A5 |3 V
/*                                                                          */
* ^+ c1 n8 w( I3 b8 Y/****************************************************************************/% e1 G: |+ }' Q$ L7 i
void ECAPInit(void)
4 n$ Q, H4 O3 U{
" C: [4 l; S' x; x: D% }        /*-----设置 ECCTL1-----*/
6 X- S% L( O, e; M& n        // 使能CAP寄存器装载
+ K1 W# `# |/ B( f  u        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
! u- y+ Q0 A4 [6 T$ q        // 设置预分频值.8 H( \+ y6 e6 h' _: \4 ~
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);/ V. q! v; l# ^; i
        // 上升沿触发捕获事件& b" S: [  @! v9 k/ _3 }
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);. X  I/ ^) @8 m9 K+ q
        // 输入捕获后重新装载计数器值.
" \% D2 |! Y; U, H' D! L5 O. v- U8 }        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);1 W' z9 }* b) E& s6 a# z) L1 X- N' i9 Y

; e5 ]9 e- t5 ]9 `  a; Y        /*-----设置 ECCTL2-----*/
9 R8 r6 _! }7 z8 }: z3 Z        // 连续模式
) P0 s* D% V+ \. W; q+ ?, K        ECAPContinousModeConfig(SOC_ECAP_2_REGS);' x' `8 M* X* t% p  a) D/ c& l( x
        // ECAP计数器TSCTR持续计数
! c0 a& S+ `6 l/ _9 a' E        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);* m& c7 l1 i" V- @% O2 R7 M3 L
        // 禁用同步输出和同步输入
* x/ y4 ]8 i1 _% h+ ~8 B9 l; A- F        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
. T3 f- t$ ]% k. e+ B/ b+ n$ |" i        // 配置 ECAP 2 为 CAPTURE 模式6 ?1 B0 F# l; w" u
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);5 v7 E6 ]2 k, d6 P) ?- c  I0 Y
* u+ B/ Y+ c/ g" F9 q8 ^
        // 使能中断# j- D0 P/ ^( W! X2 C& t) d# I- {6 w9 M
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);( H" ?: a( ~7 V& Z4 O, t. J
}; D- b: H, i, d. q

3 C2 [6 x4 K0 X3 c3 v/****************************************************************************/4 j  I, ~* y& _1 j6 o
/*                                                                          */
0 ?# m8 K, o+ S( S: D/*              取得捕获结果                                                */
* g4 [9 x  ]% }- f. l! H+ n1 C/*                                                                          */
# p0 F9 i4 L9 r& O; b/****************************************************************************/
5 x- R; j% ^: f$ i% b  Vunsigned int ECAPRead(void)
! v- k3 y( `( D) v$ v% x{+ ~$ A9 i' h# j. V2 H& x
        unsigned int capvalue;+ r5 e0 ~" m- f. D1 F5 n
        unsigned long frequency;
2 Y4 ^9 |5 N  i3 S' d& D. ~& T: k$ t8 Z# r$ Y7 r6 U4 Q7 }# y
        // Event1 中断标志
$ O! E! {- d( N        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))$ e3 a+ m& J  G
        {
, `4 G$ L, F( V/ H! P6 O                // 取得捕获计数
3 Y( J. S* J# U' o) I& p                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);  e4 q# _) A. L  C7 F
                capvalue = ECAPResult.cap1;: z$ ^. r) c$ G( Y! O. j

6 l& k. `, {" C/ ^; E                // CAPTRUE 模块 228M 时钟主频+ A; _7 q' K# E$ ?+ c0 s
                frequency  =  228000000/capvalue;! f' g: q7 X5 n5 @! z1 `$ Y
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);! R+ g; A) k5 Q0 B
2 }3 e4 H7 v/ m! j- r
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);8 G7 w$ F3 r8 d) \: e
//                IntEventClear(SYS_INT_ECAP2);
5 \  n) S+ F/ Q        }
7 x+ m# t# g8 r1 x6 f) R& c        return frequency;' X* K( @6 C0 }' C% I. |$ i
}
5 }* L/ a7 h9 j" E3 e
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
/ z2 \) |5 ]" u& E

本帖子中包含更多资源

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

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-7-15 04:50 , Processed in 0.045999 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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