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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
& O: y  a6 H% L" J4 A* D/*                                                                          */4 f1 t! m( m8 [- T9 [' Y8 n# {
/*              宏定义                                                      */% d# }* a: c4 d7 W2 z8 p
/*                                                                          */* T/ M9 {" Z3 x. Q
/****************************************************************************/: [( ]& p" v( a/ Y
// 软件断点! F) D7 _% o' ]! y# N! m( o. ?$ O. d
#define SW_BREAKPOINT     asm(" SWBP 0 ");
, c# o- ?3 g$ W) `  L5 b" I: ]5 V0 Z
// 时钟分频
1 ^2 g& ?: ?/ D% C#define CLOCK_DIV_VAL     228
) a+ T$ K) u0 D! B# b5 W) C3 f
4 p- j: d7 a) P/****************************************************************************/. R7 O9 x- _$ F4 U+ u7 l
/*                                                                          */  E( ^5 u+ ^7 }# D% f* f
/*              全局变量                                                    */
$ ^1 Q( z$ F  [- |  m/*                                                                          */& A# A$ T  V0 V4 A  u
/****************************************************************************/
! {* e7 c6 J7 j& i! aECAPCONTEXT ECAPResult;
! C: J( t) O7 I2 P0 D
- z2 n. X% q! l& X' L/****************************************************************************/; z+ h# _0 x" ?0 ]8 i1 X
/*                                                                          */; S# `8 c% [6 N% [' B
/*              函数声明                                                    */
+ z; o5 O- ^9 o- Z7 m9 Y/*                                                                          */4 n0 M" r- W! P/ G3 K+ V, p
/****************************************************************************/
% U+ Z9 A% b4 L0 \// 外设使能配置5 A+ s, ]& J7 q/ H; e+ X; c5 c
void PSCInit(void);5 q0 n' q0 u0 i/ f( c& S8 [
' Y, M1 r  u  |- S$ B  V3 T
// GPIO 管脚复用配置: q9 A# A3 A- y1 H. \! t/ {
void GPIOBankPinMuxSet();' v" e& e! M) p# n4 n& O
8 |2 l6 A) F# m3 Y& Q& i$ m
// 产生波形# ^( v! P2 d1 ^$ y! g7 F
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);9 O& b$ W0 @2 _% ?3 U
void ChopperWaveform(void);$ a# @6 o2 b, x$ w+ e; }6 p4 X7 L/ W

2 |- G. Z9 L8 z- V7 c- _// ECAP初始化和读函数5 o+ ^8 J+ f' S4 R( R6 O3 O
void ECAPInit(void);. Q' u, T0 J  X6 w) j$ u( y. W
unsigned int ECAPRead(void);- f1 I1 c4 O, W; |6 U" p2 ?

7 o  ?% V! [9 }1 Z/ v. Y* O//ARM 中断初始化! a9 u' w5 B8 M& a+ X* T; z6 I
void InterruptInit(void);
8 o' l3 ?' g: q$ m) o8 ~) }4 h( ^; e& V
// PWM 中断初始化
- n8 H! r% A  c0 X7 D  ivoid PWMInterruptInit(void);
" D0 V- S5 X: o8 j# Q// 中断服务函数
1 N/ u' C6 ?+ B: e; y: j, E2 k// PWM 事件
! A8 ]! u$ P( v0 u6 a6 g6 {void PWMEventIsr(void);& G8 D  h) p% e7 \
// PWM 错误控制事件
- t# t( C* I7 A& Y. z7 d/ ?void PWMTZIsr(void);
# I9 h5 T3 E- x; G3 l# L
  ]; }' Y' H7 _! R! h# E4 A& y/****************************************************************************/% M* @% G+ ]( v$ r$ w; `
/*                                                                          */
1 _; {+ R( `" x' M( K/*              主函数                                                      */) D# Y) c8 d0 e4 n& f/ |2 C
/*                                                                          */
; r/ v5 v; b& w6 z( T/****************************************************************************/4 L3 ?8 {" x% T* F0 i4 h) t
int main(void)
2 ?+ b- u+ B  _/ r{
6 H# x* Y. U$ l        // 外设使能配置
1 P3 m0 b' }. G0 R        PSCInit();' g1 W& C7 A' b
) K/ z: ?9 S, s+ M% x. M
        // 初始化串口终端 使用串口2% O. I4 N* C4 i' w! ^: M: Z
        UARTStdioInit();
: C! ~; ^8 z( c! P4 Q3 R3 e6 {        ; Y' z/ f/ y2 E* j, f% [; [6 ~" R
        // GPIO 管脚复用配置
3 R( l* C2 h' S        GPIOBankPinMuxSet();( K: r3 G* {1 M
0 `3 ]- g, }% t/ W+ l9 v! l$ Z
        // ARM 中断初始化0 F* p) s) t7 i  }/ d5 W5 V0 f
        InterruptInit();! ]) y3 ~- u' _* J

7 s2 q) d( w1 P        // PWM 中断初始化
3 ]6 d4 o, v1 r1 w" g6 Z1 N. p        PWMInterruptInit();3 p- A: a/ H! p4 P! u, p7 I' k7 X

7 n( x- L  ?2 H. v. j$ a( @        unsigned char i;
4 B$ [' L  V/ ~0 ?3 a% u* H" t! O- s        unsigned int j;! J. k6 p! w9 [

  [; X. N" x: I! C        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);% b0 |! b  C7 x$ V
        UARTPuts("------------------------------------------------------------\r\n", -1);- P1 s3 u7 B5 f$ t1 N' G7 I
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
) E4 A& f& n0 f. Q        // 产生波形* [# Z' [) s- a0 r# N  p* p7 ?
        PWM1ABasic(25000,50);$ d( J: Z+ i8 Z2 S6 v, l
. S/ S3 u# X2 P( a0 y  h4 W9 N
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);% V" g# f+ Q$ e7 b
        UARTPuts("------------------------------------------------------------\r\n", -1);) C; Z& m- R& Y) F) n9 a

; K: {, P0 |$ g: f0 s- F1 L1 e
0 p, `5 z4 u+ Q: R% c1 j& ], I4 S1 O% |+ `) e
        UARTPuts("------------------------------------------------------------\r\n", -1);
- @( n# m* J0 W$ Z* P& ~, m        UARTPuts("                    C6748 ECAP Test\r\n", -1);3 k8 P6 }" C, V$ _
        // ECAP 捕获初始化
# }9 K5 A7 M  G9 `3 D" [        ECAPInit();
! d1 B% Z1 ~0 t$ l0 b        UARTPuts("Initialize ECAP.......\r\n",-1);
, y" o' x  X; T( g2 E" [* A) J1 c        for(i=0;i<5;i++); i' s$ B* |3 ?
        {$ [, J/ B1 O! s: T0 S; t- c
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
. ?. J+ V9 w5 y: t6 \                    ECAPRead();
! y' [2 t- J3 h4 d        }% n+ F$ [% ^* L8 h0 F2 M
        UARTPuts("\r\n",-1);
' {8 Z3 p2 x7 C# c4 ~/ @- R, A, t        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& ?* f4 H% v4 N2 h" D; z2 N# r
        UARTPuts("------------------------------------------------------------\r\n", -1);) O6 I( Z" i( z& e; _  W

- h* A3 R( ]6 d" s        // 主循环, u0 }! P& g; J4 m  \* Q$ v
        for(;;)* u2 A; Z3 ^5 }% s! I6 F
        {
$ B4 J5 l4 a3 n7 C! d7 i( j3 \7 Q0 d& T# D0 t
        }
8 x7 f0 K( t- U& n. a& k) l, z/ q}
  }5 Q6 b' C; w) M
( b3 |! n3 f; z! V8 x# k2 K; N/ n/ l/****************************************************************************/  G4 c+ J3 |6 g+ r9 C
/*                                                                          */
0 B; r. u8 g3 L: B. N/*              PSC 初始化                                                  */
% z2 G5 }% `- b+ y: ~3 f" w/*                                                                          */; w! E0 {# o0 ?& L
/****************************************************************************/
" r3 }" u* l5 B  x& `  k( Ivoid PSCInit(void)
/ J$ K7 ~' N( k5 e0 |* m+ q{
; N9 D  Q# {# w        // 使能  EHRPWM 和 ECAP 模块
5 f( v/ p  ~. `+ s        // 对相应外设模块的使能也可以在 BootLoader 中完成' Y! x, U( d) d- ~; ?7 g3 u7 ^
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
, G/ Y7 v  }3 P) P3 ?    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  W7 ?7 r% x5 Y# C
}
) n8 Q/ s$ n! S* X7 M
# c3 V$ j0 h) S+ s/ k# J% z/****************************************************************************/
/ V$ ~' q+ E" B$ c/*                                                                          */
# F3 m5 ^3 @8 Y- `: V/*              GPIO 管脚复用配置                                           */
3 {5 s; ]& [5 m/ @/*                                                                          */& o7 O! a1 A" D4 a7 f' V
/****************************************************************************/; V, w# m$ M( X& L, m$ o
void GPIOBankPinMuxSet(void): Y5 W) r% F( s+ g8 [! ?
{' Q  E" E' [! }5 n% k
        EHRPWM1PinMuxSetup();: W' e/ m3 S% r( g+ S4 z

- g) Y% U/ `3 E! r        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)  `9 w' I# \3 [* m5 J/ \
        // 作为捕获功能时管脚方向为输入. I4 C" a4 Y* H7 u
        // 作为辅助脉宽调制时管脚方向为输出4 N3 o# ~9 M2 y. l* {9 d
    // ECAP2 / APWM2- N: o$ m. p0 H$ E
        ECAPPinMuxSetup(2);
# G1 `" P" k9 P2 P* b
  k8 i0 [" `' \1 F. V+ x        // ECAP2 / APWM2方向设置为输入( R  K+ P: h# i' g1 X
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]' ~: P& a2 t; J. w$ e2 A
}2 g* u2 A; k7 _" c. ^7 u2 q

+ ~- w6 g) D  X3 A. V4 |2 I& F, j/****************************************************************************/
8 k* U) y1 O- j9 }* _0 O/*                                                                          */' t% H1 v2 A( M
/*              PWM 输出波形                                                */
: W. c. [4 Y& u& M+ w/*                                                                          */' D6 \; M" T; v* r1 f; `
/****************************************************************************/
8 c& h. e( Q+ E) I5 i* t* h5 j2 wvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
' C- K' t5 P5 F{
0 @: r( ~! O: u, y5 o    // 时间基准配置
7 l. i! a/ Z# c9 g! Q1 ~( l    // 时钟配置
/ E  p4 G0 J% {, F# Y    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);5 K! \( H, n9 N: l: ?5 _) v
: t8 P; G4 n: l2 a) \! c3 e
    // 配置周期  V6 _5 m( z- M/ L+ I
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
; @$ i, G9 o* l" E/ l4 e                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);" L- V- `; }7 D; r
' S) P- S( A$ g$ D
    // 禁用输入同步信号
2 Q, e5 T# p% ?+ g0 R% P# k    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);8 U9 e7 ?2 }' @' I

* T& L- \3 K' x/ g0 h    // 禁用输出同步信号
1 k6 g' T) V# h0 O# Z; i7 s$ c    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);. D6 L6 x" B  `2 U
7 ^  m2 h; m! i
    // 仿真(DEBUG)模式行为配置" c3 ~6 s' ?2 \) A  Y
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
4 x. X" r  K. k5 w" S+ V& s2 e' u# `6 C* m
    // 配置计数比较器子模块( ~& e2 q  h- J- M8 s, l
    // 加载比较器 A 值
& N  z; Z! L: `5 \& Z* Z* _1 j& y    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
5 y0 S! c/ R3 g9 W8 V                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
, v+ ~( O9 Y( U8 O! K
3 R; N) W3 m6 g5 h    // 加载比较器 B 值+ Y( ]9 N& @- `9 C( u, Q; F7 \
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,  g# U5 ?- ]9 ]& r+ G, X
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ a* n+ r7 m. `, L/ A* k, u
+ |+ v4 Q5 T5 w# l* i( Z
    // 功能限定配置(输出引脚触发方式设定)$ Y3 M: G( S2 A2 w# U/ ^' v6 e  ]; G
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 a- @# d+ ~+ P* o    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
& a8 ]0 r5 ?3 D                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
8 v3 \2 u$ X9 K& W                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
9 S. e) L$ y3 H! q$ J0 a$ j& e( ?6 p6 `* Z
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
7 ]2 B1 l  l5 p! A8 A. V    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
$ ~, A; }3 Y# h* ~+ O) }0 v6 l5 h0 V
% K* k8 M- M/ y4 Z: ^2 v/ {    // 禁用斩波子模块
1 \* G% W5 v+ X$ _1 x    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
! ?( ~1 Z3 m; S; P0 y
& p1 H- M  t  D. Y3 @    // 禁用错误控制事件& g3 O8 _! K+ a
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
2 H1 W3 s" ]" G4 v    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
. A2 i2 I% A9 H7 ?. c# T5 w7 `
& M- ]3 E" w1 R$ c& }8 v( H9 z    // 事件触发配置
" s! [+ z* I/ d2 L    // 每三次事件发生产生中断' C/ H% A/ d' ^; @! o( ?
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
* v; R% x# a3 P: \( D" C1 @    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
' Q, V; s, y2 y, u5 s    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);% u4 `' a- ~  O9 G# W7 {
    // 使能中断
8 N8 w4 U* ?( y+ f    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
9 e+ r" X- b! ]0 t7 S* r" Q
1 `: {! J; d. I. N, R8 ~1 g    // 禁用高精度子模块
4 a. ~/ C* l' h+ u4 @* n! A    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
* Y/ \0 g$ C& j  r# S) W! {% N0 W" N" @+ P+ K% ~& l) b
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
  @7 F1 H- K' T; ?}+ ?7 F1 l% n- P* e! ~* i

5 p3 E% u5 ~% D$ M+ M+ lvoid ChopperWaveform(void)# B+ D6 g# }$ q" M4 l( x6 q: I3 E
{
5 d+ X7 ^: j1 {) A/ u1 {8 P9 _    // 50% 占空比2 L# }& u7 T9 Z. ]
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);. f4 C0 U( ^, y
    // 4 分频
5 K/ K2 J" a+ {    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);  I% S0 H# T2 v6 D  z( _2 C! T$ D2 @
    // 单个脉冲宽度
9 K6 ]3 g2 z$ q+ ]9 k    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
0 v; L9 a6 Z. D+ y1 ?    // 使能斩波子模块
" ?3 D5 G) l  ~; e    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);3 I9 b1 u- X" `  E( m
}
7 h) Q+ g! U, Y, Z0 |! y
: ]# e& {9 m& i5 w/ Z/****************************************************************************// [0 S$ W# A/ A
/*                                                                          */( ?( f/ z; ^: Y; ^- j: j
/*              PWM 中断初始化                                              */  [0 a% D) T9 ]# {& k+ j
/*                                                                          */: l2 ^) [8 t# N
/****************************************************************************/
- _6 E; n2 j4 z/ r& Gvoid PWMInterruptInit(void)
, G7 K  G7 ^% F, L$ C" o{8 |0 _5 l5 D( I+ I% i
        // 注册中断服务函数3 y% t4 U$ k, Z* B( ?
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);! O; Y+ ?7 A" E: i' u# j
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);0 l2 R' H- S9 \  N5 N$ {+ b

' l. {6 ~5 I2 o# ]4 q        // 映射中断
" e& v# G8 u! m3 P        IntChannelSet(SYS_INT_EHRPWM1, 2);4 G2 _- E( t$ p1 d" l& l
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
$ K& g6 c! s% c( b+ V! _, D& d$ |1 {9 b9 @; t$ O
        // 使能中断7 u2 G3 f! b/ E' v8 s
        IntSystemEnable(SYS_INT_EHRPWM1);
5 c% D& X5 V) K3 |# Q  Q        IntSystemEnable(SYS_INT_EHRPWM1TZ);
, Z9 ]* Y- _% ^* m# R! A}4 S0 _6 q, f& i# ^
# M% v" j; c6 z4 G4 S
/****************************************************************************/
& U! Q" |( m2 }1 r* U9 N/*                                                                          */
$ T! k$ J* i, C0 T5 P/*              ARM 中断初始化                                              */
% }" t5 I5 f7 i3 B  F5 k/*                                                                          */4 @  r8 O9 e' n: {8 J/ e3 ?
/****************************************************************************/
) B2 v& {. [% a4 B& Evoid InterruptInit(void)+ ^4 ^/ \5 W1 y( c: E3 ]5 w
{2 C# q: K, e! [: ?: ~) i
        // 初始化 ARM 中断控制器
! F( X) }: E% y; ?& `1 m        IntAINTCInit();
* Y6 }. L! d+ Q  k/ ^# e
7 d% J2 B5 L' a" ^3 }8 t& g        // 使能 IRQ(CPSR)5 Z; B4 V, j! R" A" e) }
        IntMasterIRQEnable();0 I' n- j( e/ p

0 s/ Z: K$ K3 u7 F* A+ N6 O% ]( s        // 使能中断(AINTC GER)+ i$ {: b3 ^" F7 w
        IntGlobalEnable();) H3 t5 H( A4 `& [* l( h: u6 ^% S( E

+ I8 ]' }7 e3 U$ `        // 使能中断(AINTC HIER)8 `! j( i, T1 _% I/ A% ]& Q
        IntIRQEnable();
4 Z% Q6 `' z' D}8 H0 N6 k2 i) v/ V' X

( M5 a# P. \/ {. S
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
. ~5 a5 K& ?2 b. C0 S8 d/*                                                                          */' J/ c- ]5 _, a7 i; R" {' b
/*              中断服务函数                                                */, m7 l- R& @( \$ B0 k' p
/*                                                                          */# s& N& _  Y8 y# ]3 e
/****************************************************************************/
+ v: R: u7 P3 I% R- ]/ l" _; rvoid PWMEventIsr(void): i! p$ m# p: N
{
# o. A' ]/ w( q0 e4 e) y4 e        IntSystemStatusClear(SYS_INT_EHRPWM1);
9 |9 J6 f) t* O& @2 z# i* y" I* R( |
3 x+ K  A6 S5 \2 X7 Z5 E    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
/ I1 z4 r7 s8 x  C* U}
0 y# d  z( }$ y& G5 S; `1 z  O) V0 C
void PWMTZIsr(void)! Q: E+ j* ]# d" x/ Z5 O( `1 A
{% p5 {+ G. }1 }& q: E
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);* Q; P) V, w! `) I8 W" P  F

, S. k$ u. b2 U/ s; t: [    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);# J$ o7 G6 j* e4 F8 o# [; g' t
}
7 L" h2 T# u: @1 ]" Y' I
% S3 [& p& U3 r. E" R- c/****************************************************************************/: X; `9 G$ X% T' S
/*                                                                          */
( l  ]% ]: b# K9 W1 ~# A& X/*              初始化捕获模块                                              */
# M# W4 P! o: ]& S7 b9 a% M/*                                                                          */
' X/ I& [' V) R) h; a' ^/****************************************************************************/& z  j6 A  _+ ^2 M+ m1 o/ ]& r7 E
void ECAPInit(void)
! n5 A2 h6 {2 o8 I+ c, W{
' {* ]: t6 F# A9 d$ t0 d; V        /*-----设置 ECCTL1-----*/4 [9 D# K5 D8 Y" N1 x! U
        // 使能CAP寄存器装载" ^( F! W0 V6 H: m! b8 B% u! Y/ c
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
" }1 `4 M9 a0 [% k7 {! T  z        // 设置预分频值.
( o/ r% L$ U5 `$ }        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
  I  P% A& D1 n  U) r4 r        // 上升沿触发捕获事件- M/ G: B" N0 }# {5 m* U
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
/ Y& y. I' k4 X( ~        // 输入捕获后重新装载计数器值.
& s& B9 ]0 u1 s( s        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
# `9 R: K6 b2 D9 [' n" \  P  z) }. _: h5 `# a* V$ Y/ _
        /*-----设置 ECCTL2-----*/
  b. a4 h2 x/ ?8 s4 ^9 |        // 连续模式
0 Q; O2 Z" P: {% K* j        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
) I) T* [: u/ U4 ~3 [" F& r% J$ S        // ECAP计数器TSCTR持续计数
9 _. e2 i# I3 A* M' d& _        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
$ M4 d, _& r3 H+ W* Z3 P# @        // 禁用同步输出和同步输入5 y7 j" J) Y  Q! q) M3 |3 B" F
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
! t4 r" p; P. v  V1 j        // 配置 ECAP 2 为 CAPTURE 模式
) ~7 r/ [/ Z+ A: J2 u& w1 X        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);$ w9 X$ ]8 v8 F$ Q1 F8 _2 F
' |) S4 r" i7 h, }" h$ _
        // 使能中断* f" P5 S4 r) g* R; r, f. w. S* v
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);2 C% f  B5 \6 q8 D
}  W% H" O7 K3 r7 c
* m# o' S9 [* [+ z; j
/****************************************************************************/
% l5 a& D% P% O' v% K2 J: ?/*                                                                          */: D1 w+ U6 W) X6 l2 y( K. J6 p4 u
/*              取得捕获结果                                                */
& M/ f8 Y2 c, ]- ^( M% r. V: ?/*                                                                          */+ K- v" H; T+ o1 ^
/****************************************************************************/
. J5 W- u" Z8 o4 d$ x, z% T- c, M' Kunsigned int ECAPRead(void): u( E. ~' I' ]" @9 R$ v2 t
{
, E% }4 N& F# a* S8 j( `6 ~: e; Y9 n6 c        unsigned int capvalue;0 S: n# {( k8 F1 R8 c
        unsigned long frequency;0 r; q- z# L# c% q4 u: k

: l/ n6 }$ f4 Z# E  B        // Event1 中断标志/ e3 _" H% a6 k8 x2 Z
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
: z+ L, w4 A- o& x        {2 N, z, G( k5 Y1 \
                // 取得捕获计数
% ^5 O1 w. `/ Q+ M% w+ H7 b/ _' F5 K                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
. u0 D* H# U  \  M9 B                capvalue = ECAPResult.cap1;2 ~% L' c9 x7 v9 j" W( f
! Q0 R$ a, `( ]9 @3 F  X
                // CAPTRUE 模块 228M 时钟主频3 B- M/ o! J8 W) H* @4 b
                frequency  =  228000000/capvalue;+ V- p. s$ q/ Q
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
) [2 P$ h+ \' g. `5 e5 m! L, L0 P
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);0 n: q. e7 U  h( t  w
//                IntEventClear(SYS_INT_ECAP2);
7 {& i8 x9 O3 L. e        }
1 z9 o- E; x( L. S; n        return frequency;
- c. k$ H1 W! Z) c- E( A( T}
- R9 F" C5 G4 |. n' T3 N
回复 支持 反对

使用道具 举报

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% A6 t# V+ W' {

本帖子中包含更多资源

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

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 00:23 , Processed in 0.047726 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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