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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/, f, V, m. q, H+ J. Q
/*                                                                          */7 C  L/ B: U, s* V( z3 {# v
/*              宏定义                                                      */
0 _' M0 ?5 Z. b1 K3 B% R/*                                                                          */( \6 T& U1 p! w: p, H% N
/****************************************************************************/) g+ g# V4 T* s3 f8 g# j& Z' ?8 \" l
// 软件断点
$ m% P' ~" H% d0 {2 z9 e+ D( t#define SW_BREAKPOINT     asm(" SWBP 0 ");
/ N' M( L% ?& a9 I' u/ L9 j+ Y6 \
! n6 A3 u+ }- N" N// 时钟分频- k& N9 {0 Q* P' M* [
#define CLOCK_DIV_VAL     228
/ n# B1 K/ l; o( {  ?8 C
* G2 w5 A* ?' p" p) |- _$ N+ K: \/****************************************************************************/9 H3 k5 d$ V; D/ o1 d9 a2 p
/*                                                                          */6 b- M7 T3 H$ D! k1 ~- y
/*              全局变量                                                    */
- Y. T: X& m0 X0 F( B, V/*                                                                          */  S- s0 C6 d$ v+ T
/****************************************************************************/* ?. q1 j- B9 V) a  {# n
ECAPCONTEXT ECAPResult;
+ p) }% b! ]5 M) \: M; Y
% Q4 h3 @# s# I8 ?$ m3 H' P! v/****************************************************************************/
6 S7 @! u* E6 R$ c! a/*                                                                          */
2 \0 i* E$ o; ~/*              函数声明                                                    */# `" T% t& V8 Z3 }$ p
/*                                                                          */
, b: B2 T& H% w6 [0 O! _/****************************************************************************/
# p$ x6 U) ^& l  ~% f. Q// 外设使能配置- @; Z6 h9 l, ~; F& b% o$ t/ L. w
void PSCInit(void);
* A( p0 `! y4 z: C
/ l! O. `1 r2 D4 j// GPIO 管脚复用配置: e$ L. U5 z8 M3 b' u- m
void GPIOBankPinMuxSet();
8 [  ]. ~7 z6 ]0 G
  T  l6 Q/ q# b0 @" x// 产生波形0 q; p( N9 A7 I5 Z( _  K
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
6 M- j6 L  J+ v" Q9 ovoid ChopperWaveform(void);
+ C* W- f9 [* l3 _0 p9 k; Z3 W# t
& `* e  H5 Y$ r+ f) U& C// ECAP初始化和读函数
0 x  V+ d" K, W( P% cvoid ECAPInit(void);; s4 B( l. K8 ~0 G9 j
unsigned int ECAPRead(void);
% [# ?( v0 _5 F- _; w
- z/ n: @0 }! z' b, _0 I* F: ~* N//ARM 中断初始化1 ]6 v  V6 W' V. R9 w, [1 Z" ~
void InterruptInit(void);0 O& V4 K7 V3 d5 b' a

9 b1 K* F8 \6 n, c& |// PWM 中断初始化
5 e  e0 F8 {) S1 H" Cvoid PWMInterruptInit(void);
4 i, w) t2 x2 Q1 ^( ^$ V// 中断服务函数
# ]' L: k. P2 [' a0 P  A// PWM 事件
3 P+ C" T* W2 Q9 y" L; w5 A4 U- O3 Zvoid PWMEventIsr(void);
3 U- y8 T5 ?$ g6 _, c6 O// PWM 错误控制事件) {8 _8 W/ M, I% @+ V' D$ V
void PWMTZIsr(void);0 q$ o3 c% l- q
8 ^) B& s$ c" {; W) W
/****************************************************************************/
( K2 R" N0 m0 S4 C/ `: Z) k" a/*                                                                          */
( U/ d. z# |/ y( z; p/*              主函数                                                      */
& F7 ~% d0 z) U1 a/*                                                                          */
4 g8 e/ i$ ?6 H9 S4 u2 d% O% k2 L7 s/****************************************************************************/
( N1 _3 d( E1 Z" N7 Q! aint main(void)* x8 m( [! q! q6 o+ |
{9 b/ A. R! ?5 {" [1 u
        // 外设使能配置* K7 ~2 M  n' }) z+ w
        PSCInit();- i( n0 `9 i$ _3 A# b

( z0 n( x$ o; H( H) C        // 初始化串口终端 使用串口2
" g: m: V$ M0 y9 v! z" n        UARTStdioInit();) e! Y  s2 O! [4 c) @6 q
       
6 d5 v' K. j+ h* y- }2 g        // GPIO 管脚复用配置7 _+ e; S8 o, \2 O
        GPIOBankPinMuxSet();
9 p2 t/ j2 {4 b% O& J3 R/ D" V2 H* m1 A: x! k
        // ARM 中断初始化
3 P- i- N# V& B        InterruptInit();, t% E$ C) T) H# p0 u' B

* A: {/ f: y  r7 O: o# V+ v        // PWM 中断初始化4 i7 O( P6 a+ d+ M
        PWMInterruptInit();
! ^% p7 K( V+ ?, P
" Q( A3 P. W- ]/ I) U        unsigned char i;6 W  M) k0 K8 p- J
        unsigned int j;
4 K  C; O. V4 V4 ~; \4 I
1 X. \/ z1 K4 r+ i        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
, E" {. B* s6 {8 n' t6 Z& s3 q        UARTPuts("------------------------------------------------------------\r\n", -1);
; H' }- \, g0 ^3 k        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);0 o8 i8 y2 @3 t- \' L# k' a# u
        // 产生波形9 W6 G* |: p4 s6 L0 R; @* l
        PWM1ABasic(25000,50);
. Y* R1 X* b3 t/ ~8 f: G
- D  r& T% q& J/ t" I9 {" O5 m" \        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);3 C5 X! [- x4 l) ]
        UARTPuts("------------------------------------------------------------\r\n", -1);
+ T+ B6 \+ t( H0 d3 G$ c3 S* a1 V6 o( i2 _- ^4 I; E
- M0 [8 ?/ P( K  p3 K

7 I" h/ z" \3 u. A- z& [0 o% @        UARTPuts("------------------------------------------------------------\r\n", -1);* ]( S2 S0 L. j: _  |; P: k* z2 p
        UARTPuts("                    C6748 ECAP Test\r\n", -1);0 S0 E4 q" w7 I, l' G: N6 l
        // ECAP 捕获初始化
! s1 R& D' ]* Y9 T3 O( F) q        ECAPInit();0 x, X: d9 E1 h  s  j) Q7 [. {7 E
        UARTPuts("Initialize ECAP.......\r\n",-1);" `6 G2 g' i5 P! S
        for(i=0;i<5;i++)
; ~' g/ s' u/ @  Z5 F- N9 p+ b: N4 A        {4 V! b( ]9 M5 v
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
7 O5 N! a, U, I  L% Z6 j; k                    ECAPRead();
+ b. l3 G  z% @3 O        }- \3 {: I4 Y  c( V% ]1 X- G
        UARTPuts("\r\n",-1);( W) |. u; {* t4 m" n
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
) V3 F1 |0 V9 T+ x* S$ @* p        UARTPuts("------------------------------------------------------------\r\n", -1);' R5 W6 h- ?( E$ i9 J4 h+ u" g

' \+ j5 Z; f$ h* y! {; `        // 主循环$ O% H$ j1 j) Z$ ?
        for(;;)
! M, c0 B3 P  h0 R0 p        {
  ^. r7 O2 G3 l+ a
9 `7 ]$ I$ p  {( o        }5 ]0 d4 d! @' @
}
( E. {  T- v# V  h* B6 H& B: A
7 q" x+ t- @* m/ n7 Q% [1 O$ A6 K% A0 U/****************************************************************************/
) v5 u$ s6 k$ C9 B; \/*                                                                          */7 i7 V+ }- O1 q8 K/ _5 y- v4 R
/*              PSC 初始化                                                  */. q# a9 ?) ~8 ?# I
/*                                                                          */8 Z; K' j7 D+ @0 Z7 x
/****************************************************************************/! b: q. z# `, C' ]
void PSCInit(void)
; u4 ?. l9 w4 W{8 S! |6 j; @7 q* |3 G
        // 使能  EHRPWM 和 ECAP 模块
0 B& q3 b) ?2 y8 o        // 对相应外设模块的使能也可以在 BootLoader 中完成4 b5 U2 O! u; ~6 ^1 t
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
8 M* V: `8 A% U! N2 f    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
' Y. e# k* f$ q. @  M}
/ ^5 Q  K6 x: A7 u1 X, q6 E' A' p, P* b
/****************************************************************************/& _2 z# s, t$ ?% {) W
/*                                                                          */
4 [5 i$ m- t% Y4 n. J/ g, n0 G/*              GPIO 管脚复用配置                                           */
$ B# j9 `9 Z4 P6 U/*                                                                          */
) B5 f/ K8 [( ]$ u# O4 h/****************************************************************************/( N2 B  g  v( o- w
void GPIOBankPinMuxSet(void)
/ p# a# o, ?4 H. M1 i% k/ ^{
) s9 a) P1 Q1 k7 j        EHRPWM1PinMuxSetup();6 `! D/ \* `3 I& d4 f: g2 J
! `6 d* j( Y# Y& [. `& b
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)- H- P3 J, q; D* s- {' U
        // 作为捕获功能时管脚方向为输入
- ?- B5 m% }( q( |* T3 @7 J  y+ r        // 作为辅助脉宽调制时管脚方向为输出7 W& k4 m8 B" Y4 e* Y; v
    // ECAP2 / APWM2
% O4 q9 Z8 c! L9 i# ^" i# X        ECAPPinMuxSetup(2);
; J& Q4 }7 @& _+ o' [( N2 n/ z1 n$ ~  J% R# V
        // ECAP2 / APWM2方向设置为输入$ W& ^+ M# k1 z# G, k
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
7 y. C# j1 @" [4 E8 z$ R}
6 e8 Q2 ]8 q. p1 l; ]% N; b2 z  v; V* J  W& {8 t6 Q6 W& n
/****************************************************************************/0 a" j, @/ P7 c/ x4 n
/*                                                                          */
9 H" t6 W2 M& O/ Z% f* p- v, K$ ~/*              PWM 输出波形                                                */
& W+ b( D' P) t& x/*                                                                          */
: b4 ]" x9 K- E3 \3 B/****************************************************************************/
2 _3 G8 l0 }4 kvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
1 d7 w' C4 Q2 N2 q{4 q% t! I+ K$ ~" I8 m; p
    // 时间基准配置( @2 ]8 f1 [7 \/ \: S' B
    // 时钟配置
2 ]; u0 r" e' P) n3 C: P    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
8 P) m+ `# @( d" i+ @$ f! e8 N  ^7 k+ C- [  i
    // 配置周期
8 J& n7 Z( ^/ j+ N, H8 J/ k3 }. @    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,. \! D5 o& g9 p$ ]3 v, b
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
4 c$ b& J6 u3 J% f. X& o( j$ c3 d0 U; P9 L
    // 禁用输入同步信号
. s. H, A& Q( G4 n! h0 J    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
! B3 j4 i+ ~8 G
/ d) w+ E$ ^0 `$ T; a    // 禁用输出同步信号
4 [, |# t- E) u& l) B    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
  _( I6 a  W6 Q' g' O- A% q' m% z" ]1 I6 ^# r
    // 仿真(DEBUG)模式行为配置
! h- r( O9 k) t8 B    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);+ v! K$ \9 M. h
2 \% W/ l- n; t; W% o6 q  Y
    // 配置计数比较器子模块6 e" o4 M2 |5 o) ~( b3 X* @
    // 加载比较器 A 值
7 F" x$ d& K1 {9 U1 s) ]0 F    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,0 ], S+ g, H' w# Z6 E. F) I
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
4 T5 C  m  d$ `3 m8 i, I
" i8 S. o% T* O    // 加载比较器 B 值3 _: O/ _/ E  V
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,( G* S1 ~, C$ p/ ?. F  x
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);  t3 ?1 d. v: F( b. Y

$ {0 F. j, B5 j/ u9 }2 a$ }5 m    // 功能限定配置(输出引脚触发方式设定)
9 x9 |  i& r: y" v6 O    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出* G% T6 e( V0 [! P, U" F; @& G/ ^
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
4 L9 Y) t- d3 z; Y  U4 |% m                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
3 H8 Y$ p2 Z7 K: n2 u/ V                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
/ r) A9 i9 {' G2 ~; V0 S6 c, Z7 [/ h
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块$ c9 F9 K1 N2 m7 ?7 m
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
  Q) w2 P$ g) o
  C3 B6 c0 k: i4 A( v. E6 ?    // 禁用斩波子模块% R( L0 U; U$ e( B: i" `& n! @
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
0 L3 Q3 U( y. V
  l. d6 Z+ E$ D; `- ?7 b6 U    // 禁用错误控制事件8 q* T. u9 Q. E
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);( y# ?6 x6 M" z! E% I) a9 M
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);4 t6 T2 X/ F5 d' h4 e9 C: `

/ h. u1 i! I- o2 N) |    // 事件触发配置. U/ A; ?- f3 y; e/ q- V
    // 每三次事件发生产生中断* r. d) D$ s" t( B
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);+ ]( {+ c. Q% \4 s) u
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
6 y* Z+ q0 ~- B) r$ V; u    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
) K: u- O& v  I, M6 t( {    // 使能中断" E" S$ C% h( H, F7 R, ]0 i9 a$ X
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
' c. S. L6 s% P# s# T1 E7 W  f/ I( C
# d6 r$ A! c9 J- C# U, C- t4 z    // 禁用高精度子模块1 C9 M8 ]" q+ b6 Y& {4 P
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);4 H2 B; J! t) Y

$ k4 r/ ~1 k) N# i; G    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);6 C, S# f3 Z2 b& p1 U
}# l( n/ c' G4 |  {5 |4 |0 Z# w( |
# ]& N; p: E4 L. d" G3 W
void ChopperWaveform(void)
5 B# |9 y* u; j1 c$ i0 z: B{1 [9 I7 x, k# `
    // 50% 占空比/ R4 F8 N; ?0 G% `4 }& j
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);: c4 i! M7 p& G; \5 u9 [
    // 4 分频
# T, C% m7 Q, M    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);0 {9 A- x# \& A
    // 单个脉冲宽度1 B! Z$ I7 E% O1 r: p
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
% R) [# J8 ^/ o  o4 S    // 使能斩波子模块( f$ i* b- {3 O+ H6 G6 O8 q- g
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);1 ^- ?' d: P1 g8 [
}
  w; T( }2 _! Z! k5 g& C& B" d& U% v
/****************************************************************************/
/ z" c) F  t3 r/ z/*                                                                          */+ u' T1 J  M4 U
/*              PWM 中断初始化                                              */
6 }+ M  P9 J& z/*                                                                          */, \( S+ w2 d9 `- p, D
/****************************************************************************/
2 S0 p/ F0 G, u; U4 lvoid PWMInterruptInit(void)2 q- ~; \8 V5 ^2 E
{
1 D& n% P  ~; S3 k6 M9 G        // 注册中断服务函数
% m$ h/ H5 o( o5 d4 O! d* a5 s# l        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
5 n# |2 v( i7 {. n6 D# i6 ^        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
8 I$ P/ O( M2 O: ^6 p6 I
  q, d) d+ e1 F/ ]7 G        // 映射中断3 h4 F- ~/ @% [. Z. t% q3 e
        IntChannelSet(SYS_INT_EHRPWM1, 2);
3 O% J: f+ \4 z: h6 J  d: U- n        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);3 Y% L# C! t7 S3 a& ]$ `; X3 V

: e6 h5 h  q# U) r        // 使能中断4 E& j. E7 C, Z! Q: N; i
        IntSystemEnable(SYS_INT_EHRPWM1);( ^3 g; @+ G2 l9 U! X6 {" R
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
4 H! j, v' w9 V2 Q& v3 q3 P7 a; f}; e" a0 A) u: I$ ~, S* i

% Q( P, z0 z3 D1 \* c' o8 F, ?7 d/****************************************************************************/5 i8 Y# a8 R6 B' F8 ~
/*                                                                          */
  G9 e# N3 |  J/*              ARM 中断初始化                                              */
7 a! S# }# R7 J3 a& p5 i7 w/*                                                                          */! k4 \: P  U( V/ T: J+ X4 \5 U) z
/****************************************************************************/$ S6 S5 v: ]$ o$ G" L3 D
void InterruptInit(void)
3 s/ c7 }- \; a{4 B) }; V6 P1 O. a" \: E
        // 初始化 ARM 中断控制器4 z# H1 Q& L) M  B6 z5 b' e7 y
        IntAINTCInit();
+ X: q" P( O3 u1 p, C. D6 J( t$ V8 y" A) `" c: A2 c
        // 使能 IRQ(CPSR)
+ F9 X1 T% @7 K6 y        IntMasterIRQEnable();* C+ T! E6 n% u$ {- n

5 ~$ ^! }/ j7 F" E        // 使能中断(AINTC GER)
9 E3 k5 G' L5 }  ^        IntGlobalEnable();7 h' Y9 X3 ^! T& @9 Y

$ Q9 A0 o0 t4 u4 T  A2 e        // 使能中断(AINTC HIER)$ E) G2 Z* a; E
        IntIRQEnable();
8 t$ y0 X, U2 h}
4 F4 E9 Z# R3 T6 n2 e# }8 F0 w5 q0 g5 _! W: W+ C
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
0 c" n& b. v. _3 B5 h/ D7 z; ~/*                                                                          */* g4 J- ]) L( j% L6 V4 }
/*              中断服务函数                                                */
/ D) Z6 F2 |# X* }6 o2 J& |5 y/*                                                                          */" \3 v+ p8 P! ]4 t, h' C3 I, r
/****************************************************************************/! D1 P! w( g* w- _/ Q3 S  Q1 r* \
void PWMEventIsr(void)" `$ X: s' Y8 [) r  Q0 b
{( ?, `1 _, s5 h9 {
        IntSystemStatusClear(SYS_INT_EHRPWM1);
( w' O" r8 r0 ^9 [9 N/ S
7 U  l) J; X0 h: m% q9 a( ?. e4 q( r    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
9 i- v. @! k: O  [+ Q}
- O3 Y% z1 C" C6 d; [: d: x' p& d5 L7 f) r: H
void PWMTZIsr(void)
3 q2 y1 v: W/ H8 M{
2 h, M; T' B4 ]/ C# N; s4 s        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);/ p) n3 D1 L% t
* f5 C' p' }  j9 E' r/ A
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);$ x% P! L  p; c* a% N* ^6 `; F2 ~
}
" ?& U% j, G7 q& e, ~" I* e! T7 u) v+ E% [: L6 T
/****************************************************************************/# M5 g2 O3 P* B2 {# x
/*                                                                          */; V" Z  W* K' K+ {% l! O
/*              初始化捕获模块                                              */* N/ t4 P  C. A; q
/*                                                                          */, P" \9 {9 M- Z6 i1 ]2 Z
/****************************************************************************/
9 X( X1 ~6 B2 ]7 G7 jvoid ECAPInit(void)
1 W, S6 N# y& b# l5 ?* @{
% Z6 N3 u3 U* v4 M        /*-----设置 ECCTL1-----*/
7 j' {5 h; P6 A- |. N  e; e/ E        // 使能CAP寄存器装载
. Z* C" V4 ?2 y# D/ I        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);7 S6 V  a% B( j! @$ ?/ x
        // 设置预分频值.& M) d( t4 y4 P& ~6 e# H
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
$ M5 k% R; V$ b        // 上升沿触发捕获事件
, r9 n% M0 M% {) q        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);0 M# z/ y% u; {: n( s- [8 z
        // 输入捕获后重新装载计数器值./ L! _5 F( F1 v# v, x
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);9 `# ^9 x$ o3 {+ W; W- C

# y4 s% }6 K7 W5 |" U1 d% g) e# v        /*-----设置 ECCTL2-----*/
8 @8 K8 I3 s' V/ Q        // 连续模式
' f: h+ D  }" [        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
9 ~0 B" d5 W- N* k  Q        // ECAP计数器TSCTR持续计数+ I/ p$ R; f9 a5 L% l! |
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);; p8 m. q$ a; J
        // 禁用同步输出和同步输入
- r. I1 b$ ~5 d. a! y        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);; g1 c4 d: r7 ]- M. ~, @0 {) ~+ D1 T
        // 配置 ECAP 2 为 CAPTURE 模式
! r7 G7 S6 X3 ?" J8 O, w% |        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
9 h; F# ?* K/ B: q% o- m# R/ t
$ s0 g. v$ |! d6 Z; N! d1 B        // 使能中断$ ~. e9 I1 @5 A: Y3 s# B
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
  z6 t8 p  G9 M}, Z5 |# X! I5 d, _1 t5 ~8 n
1 U* a" ?2 s: B# k4 T
/****************************************************************************/: V0 Y: i9 i& w1 q5 ~
/*                                                                          */, B8 \0 n, x" `. |4 M
/*              取得捕获结果                                                */
7 N% C; ?" O7 b' q2 Z/*                                                                          */
! I5 z! l0 \5 I/****************************************************************************/; I( z* p. d: l4 n. k
unsigned int ECAPRead(void)  J! e, k- T' H% k" e. _! E
{$ U2 d( ]& L7 @( s# ?
        unsigned int capvalue;
8 @8 I6 R. t( ~! I3 n        unsigned long frequency;* o" t' Q  i" u. Y1 ~
4 H( g. F8 b2 F7 m: ^* q
        // Event1 中断标志, o* t$ m0 g  ]2 E
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
  {4 E) S+ q4 I6 O: B4 S) P        {
3 i& B9 W; k8 n                // 取得捕获计数8 {/ y# Q" ^9 n& B- m
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
* c( ?7 B% i/ J. c& k& F. {! i# c) J                capvalue = ECAPResult.cap1;; k$ K/ c) J3 T1 I; ?, g
5 c" C0 j* X$ w1 }
                // CAPTRUE 模块 228M 时钟主频
* e5 I, f" O% Q/ Y5 l. B8 ~                frequency  =  228000000/capvalue;  E# _' ~: ]. v
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);5 o3 _. j+ t6 ^$ J5 J5 H/ R

1 n. B" `- L# t) p0 p: W2 x                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
- s* ^& N+ w( d0 k1 t//                IntEventClear(SYS_INT_ECAP2);( d, r5 K7 ]4 q- O' X" h6 F
        }
, J- V/ e  s* W6 F8 T3 O        return frequency;" V1 F0 m" O2 s$ m
}
4 I4 U$ C+ i5 g3 y  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波。我们有相关例程,请参考。! `, l4 s; I, ]  F2 h% e# Z

本帖子中包含更多资源

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

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-6-15 21:59 , Processed in 0.046048 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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