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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
; e' K) K; s% v- h/ |" u0 x/*                                                                          */
& \/ Z2 f- {% m1 m% x5 [/ L/*              宏定义                                                      */
$ M* w* V& n* {% [0 _/*                                                                          */; Y5 O! Q. X& d) Q1 s8 E2 Z4 @3 H
/****************************************************************************/' t! f# K% J+ \3 s5 @6 L. f) c
// 软件断点
6 e# {1 H0 `8 a4 t#define SW_BREAKPOINT     asm(" SWBP 0 ");
# J- _' S- \' A8 W' H0 I4 H% @- S7 {& o* h, D
// 时钟分频' S& S1 q# h6 n- c2 ^/ b
#define CLOCK_DIV_VAL     228
; G/ @( B6 C0 i  M0 G# S
' w" `; c  Q9 w5 D5 v# [/****************************************************************************/
- e. E& _* a' _  M- u6 q; K/*                                                                          */. {$ A7 L- e+ O6 A1 i
/*              全局变量                                                    */- k- m" p3 Y1 X- C  w) T5 y
/*                                                                          */
. U5 w& c* ^9 m% i: y/****************************************************************************/  X4 _! b& c8 r0 F: h( [6 E
ECAPCONTEXT ECAPResult;$ L2 Q% I( y2 K2 N) G! }# e
/ z0 W8 g+ u  f; E1 e% C7 E- o- s
/****************************************************************************/# s6 X% C" E2 C2 ^
/*                                                                          */0 m! n" r9 `% A% L
/*              函数声明                                                    */& L# f$ [; b; k5 O5 s, v  M
/*                                                                          */# t* D7 c3 |5 ]
/****************************************************************************/
7 Y' P4 W4 z  ~0 O( E7 W// 外设使能配置
# c+ p4 t) p* E: Bvoid PSCInit(void);7 c  t4 h( b9 `/ d! h
$ c3 e8 t1 u* r+ l" h
// GPIO 管脚复用配置
' s  t/ r; U) P2 e& Tvoid GPIOBankPinMuxSet();
: e5 T% y6 b) L5 w/ H8 u- L# H; x6 j; j9 x7 I
// 产生波形, P3 q8 {7 m8 e2 Y- D
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);, B0 ~7 M: j, t; Y) l
void ChopperWaveform(void);  B4 Z+ _+ y+ p
3 }7 u$ J8 F. N, V1 F6 m
// ECAP初始化和读函数
) y9 j! x) r9 X" }% Jvoid ECAPInit(void);  }9 ~' Y6 T2 u
unsigned int ECAPRead(void);
1 R: p1 X; ]7 y, Z( J6 U7 J; D6 G9 P
//ARM 中断初始化
% z  ?5 T1 N& M& R2 W& C3 jvoid InterruptInit(void);
: W6 L7 U$ m' P% `+ ]0 D* V7 L
0 C/ d+ V4 K- v: e  \0 g9 }9 q// PWM 中断初始化
- }* Q) |6 q8 P5 Y( ]7 K: uvoid PWMInterruptInit(void);' E; Q* y/ @# ^1 L8 t
// 中断服务函数: T9 V" _2 t* {- d( W* c& {
// PWM 事件
3 d- M2 u' H- ~, ]0 S! X! c9 S: rvoid PWMEventIsr(void);
- }7 O+ _4 b) J! s: F; O// PWM 错误控制事件
2 \  ~# u) T1 E, T  |void PWMTZIsr(void);
# a' [# O' R! p5 O. g% y, H, h& S; N+ w' `
/****************************************************************************/
% |+ n5 M3 z4 j2 {/*                                                                          */( U6 l2 m( s. h* B, m: n1 S) M
/*              主函数                                                      */
: a  J7 m4 ]. i6 S! y9 }/*                                                                          */
+ V0 y- B. {; Z" |( l/****************************************************************************/
' e3 v) R1 t" vint main(void)
- w& O  t3 p' x* ?" a& y  H  n; X4 O{
! C- v* {) Y3 j; B, ]7 y4 ]        // 外设使能配置- X; o0 H5 y% l( S# Z% ~% m
        PSCInit();% H& P6 s* l2 `
8 L9 ?5 K0 L% z* K+ @1 \
        // 初始化串口终端 使用串口29 f2 K' L8 e! {
        UARTStdioInit();6 y; W: S) L* b& \3 z
       
' Y3 y; p( v% Y. X        // GPIO 管脚复用配置
- W6 `8 A' _9 G, |$ f        GPIOBankPinMuxSet();
; J  s& j. M1 h7 b8 }6 V' ?# Y6 m- O' G% T# q$ M- s* @
        // ARM 中断初始化
/ {1 I; I3 H3 m* i! r. c  J        InterruptInit();
) D7 G: k8 f1 U: r" }; P
+ r5 D8 J" k1 q        // PWM 中断初始化
% a5 A3 Z) p, A5 Q# b5 n8 u8 H        PWMInterruptInit();% i3 M+ S. R5 D4 H0 I# {
$ r% S7 h& P9 R
        unsigned char i;
! V1 m( J$ a, H0 J4 T& J- G4 G        unsigned int j;
, B) R" ], D, A# B
6 ?0 i/ }7 ?) P* b) T! [9 O$ @        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);; H) m) ?4 a0 s1 e- A
        UARTPuts("------------------------------------------------------------\r\n", -1);& I1 n1 ?7 r3 u/ r& x
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);+ `5 @- p, ^% V; @* l! w
        // 产生波形/ r6 }# y- `( W7 ?9 q0 T
        PWM1ABasic(25000,50);: B! I; \+ r2 [3 N4 w

1 i( b* K& x6 o) d' H# O4 e- J3 F        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
& h# n" H' {3 G# E2 N        UARTPuts("------------------------------------------------------------\r\n", -1);7 f; \- Y: s2 D* [3 c% C
, I0 k* l2 h3 H0 @
# j6 e# X$ ^. z, b
, C$ Z. C3 ~  }0 V% p: p1 W9 f
        UARTPuts("------------------------------------------------------------\r\n", -1);
2 J- @2 f7 ~1 `( g- i+ \        UARTPuts("                    C6748 ECAP Test\r\n", -1);
7 v% x7 H5 n- O$ V9 x; H        // ECAP 捕获初始化' K( E0 s" _% {' Q& `! T: X5 U5 t
        ECAPInit();
5 g6 Q; r$ X+ {# a        UARTPuts("Initialize ECAP.......\r\n",-1);( D1 g2 P. ]* X/ T+ Z
        for(i=0;i<5;i++)
8 Y/ d5 H0 P1 w- T- L0 a        {
  W4 ^+ T8 e' g- f" Q3 D4 j                    for(j=0x00FFFFFF;j>0;j--);            // 延时2 k2 u2 D4 _/ t$ b; b1 u0 D- P
                    ECAPRead();  Q: E5 F. s# ?$ E+ ], U4 l& f
        }2 C6 O* V7 b. H! L8 R
        UARTPuts("\r\n",-1);5 z  }! }3 d5 T- ^. q9 R1 C
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
9 f5 y6 Z! C/ j9 M5 }; B: ~        UARTPuts("------------------------------------------------------------\r\n", -1);  }- \; `+ u/ P5 [+ G0 L
4 \4 [/ I) D. F, ~+ O8 x8 b: s
        // 主循环; I: F4 J. X5 N: m0 k
        for(;;)
  _9 [/ M6 Y* z4 q& g        {; z" l! y" W- S# J1 w

9 w' I4 T# p' t! x/ E9 f: T        }
, B( i% h5 S/ P) ^0 p# i6 I1 S}
; b' o  O2 T, l' b: q
& t# N8 J& F1 w0 G! e% S9 r+ i5 T- u/****************************************************************************/
( U+ @- F& D7 I/*                                                                          */
  }! {4 c, A' h/*              PSC 初始化                                                  */3 B/ h# k2 b3 P& [4 N: x9 U, `
/*                                                                          */: @) G  P' d  b# k
/****************************************************************************/% }' _. N, j# a5 P
void PSCInit(void)
/ y, R' m; |, b0 F7 ~1 s{. U6 ^( b; `) A1 I9 o& ?
        // 使能  EHRPWM 和 ECAP 模块
# N" G- A" X; L1 E        // 对相应外设模块的使能也可以在 BootLoader 中完成
' c& q$ z* `5 |# }" p    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  w! N1 i6 I. h. W: W4 ^& f( }
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 V* `5 E5 b9 ^1 m9 w" F) V
}1 q; {( X- a. P
# b# l5 }! v, U! ^1 k  [
/****************************************************************************/' W2 P1 z0 U( {8 Q$ m% E
/*                                                                          */
- u8 @4 q, i/ k4 X/*              GPIO 管脚复用配置                                           */; O5 i1 V* j7 r
/*                                                                          */
! |( p7 ?/ W1 F; j/****************************************************************************/
' W5 r* T$ I0 ivoid GPIOBankPinMuxSet(void)
, w' p! D. V3 G! Y) v4 {, S( c{
1 m# h' O, Q" T9 P1 a        EHRPWM1PinMuxSetup();" ^7 p, P: e/ _7 W& ^2 U

8 A( F2 U: z# E+ O9 I+ ^! C        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
) V! G9 C- R# t& a2 B5 z8 Z' \        // 作为捕获功能时管脚方向为输入
1 W! F4 t8 F. ^& N* x        // 作为辅助脉宽调制时管脚方向为输出
6 B1 S! l( _6 x3 `) G: x    // ECAP2 / APWM2
# U* \/ _- g9 `, [3 M- z7 k        ECAPPinMuxSetup(2);
. d- |2 r  ^9 l7 ?: t! G- F! [2 j# y" K3 G0 f; M( L3 E; x
        // ECAP2 / APWM2方向设置为输入- d& {5 v& n* i: x& H( h1 W4 I5 M
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]5 M( e) b7 g8 _7 P
}
, V$ m( h) W* Y) ?4 {& W' x0 }9 H7 l
/****************************************************************************/+ ~/ {# s: g5 C6 W+ c9 @5 @
/*                                                                          */
  ~! b  l) D) K5 ]7 o) x/*              PWM 输出波形                                                */; u1 L/ H" B8 O8 ^) {- c2 V
/*                                                                          */3 [1 B- d+ n2 @/ J4 c7 }
/****************************************************************************// ^3 J5 ~. ^, t6 g' s
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)  ]/ v) c) W9 A! j5 G- f
{
7 C# H! i3 ~. v; ?* r! v    // 时间基准配置/ Q. M* s3 e" X0 `8 ^8 k- t
    // 时钟配置
/ Z' e- A: v& w! d    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
  e1 t! s1 O, [. i( v  M6 i3 Y& h5 q3 d
    // 配置周期
- \" d! j/ J# J; W    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,# s3 Y- V" B  e) a% A, E
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
* \" S) m% \, L" o0 l3 c# X
2 L0 ^5 O+ }/ c' b% Q    // 禁用输入同步信号
' O; P2 i0 _1 j) ^- a    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);' [  F) D( Y% k; F5 `4 Q7 {7 S3 m
; I1 y1 D5 z1 j  S+ B! k) {# L
    // 禁用输出同步信号' o8 q, o: d& ?; |& @
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);5 e8 b% D2 Z- k* ~
" X- U& ?* c8 u4 a
    // 仿真(DEBUG)模式行为配置
5 c, {2 `2 O/ q' ]% ]: T    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
& Z7 m" J6 }. |" h% K1 \6 d9 Z, u" H7 R# s$ V4 ?
    // 配置计数比较器子模块
2 [" @9 H2 Z, H# k    // 加载比较器 A 值" g9 |5 E, p' M* b, i
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,6 K: H0 m, l+ m" G5 y3 v
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& e+ y/ X! H. e6 D
# A( _4 a5 m0 ~6 r+ m    // 加载比较器 B 值  Q, ~: a; E* m; b/ g
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,! B; r$ T# ], f9 @. v( }+ S  M
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);+ m( r; h1 Y( I: ]
3 _9 M4 D- C/ N+ r) f
    // 功能限定配置(输出引脚触发方式设定)
+ |2 f. s! N: R    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出6 L( h, \- l. w. W7 A
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
; W; Y; A! E3 l: u                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
* |- {' C! j. Q. f" }( B. ?                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
8 ]1 [0 @- {( }# |7 \. Q! T4 j3 U7 j: d1 {7 g, p2 q; o+ ?
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块& `% |( ]& p% D4 n
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);1 t1 z4 }2 i3 C0 @
4 O9 X' r: x2 R% ]$ K) Z+ w
    // 禁用斩波子模块
8 D1 A+ B" ?: d5 [9 t    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);1 `! f4 f% J! n- \& J: ~

! q& F- L( p& I    // 禁用错误控制事件, w/ \7 y5 W5 I1 j
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);1 ?5 i! j  `; R: i" d5 u
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
1 _+ R* d. M/ Z' x
/ }7 [. ]4 o! Z0 x    // 事件触发配置0 {  ~( l2 u$ }% k2 c" H7 `
    // 每三次事件发生产生中断
5 R; z! O5 d7 e3 U    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);* X; G- {% x7 b: l0 [
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
0 U4 M8 g1 S' q  _    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);3 i' Q. S; y  Q: f
    // 使能中断# Q. q/ R" [7 A. v! i4 j
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);* F: M* P0 o. b4 L, f) X
$ F3 \7 i7 N7 [% R0 u
    // 禁用高精度子模块* ]3 g" K" W! C
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);( R& c& m& Y& @( F# y
- K3 h) Z/ y# D
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
" j/ w" G% K1 f8 \}% L  K1 k8 K% s! o  B. I
1 `4 s' `( q1 l: \. w3 n9 v
void ChopperWaveform(void)! k0 E4 u0 k+ T$ j* ~4 o* T( {
{) Z1 ]4 s7 J1 F" |8 x8 V! I' E7 m
    // 50% 占空比
5 A9 J1 o0 S* c3 C5 Y    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
# ]; q9 r' z. d9 ~    // 4 分频* m6 F3 N" R# G* k6 u# y
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);' g# w) P+ S  V
    // 单个脉冲宽度
" |) h  F) z3 O% k, k2 A    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
, F" ]! }- E4 Q- S% z' \* ?    // 使能斩波子模块
. w% K" f( z7 T- L    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
; d! Y  ~7 X% \% y5 b' u}5 @. y7 W. B) V  b7 q/ `( t

. j( b" N6 ]# H) |' ^* b/****************************************************************************/
: X$ z0 p/ F/ _2 s/*                                                                          */! S& D3 Q2 D, P- R9 A# M
/*              PWM 中断初始化                                              */) c; F7 j, F3 ~0 ~9 S$ K' ?- O
/*                                                                          */3 ^! j& h" R+ c" k8 V/ K' {
/****************************************************************************/
5 M1 u5 u2 w( g4 W$ }void PWMInterruptInit(void)7 Z6 C7 m( w( V+ ]
{
( c; y2 P# d( m/ v  K% y* M" n        // 注册中断服务函数$ O  F/ r  |" R7 K4 b
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
( |5 F* I+ n8 h6 m        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
. N8 P3 T0 \4 R- S- n( @9 G: p# A
        // 映射中断
  V5 E: P; E7 |: C6 `. |        IntChannelSet(SYS_INT_EHRPWM1, 2);
9 a0 I! i4 }3 @8 B% B7 P& `6 K        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);3 |3 s4 O  T: I( I
- T$ N9 x0 z) r/ w% C
        // 使能中断7 G- _4 D6 Y! ~5 W  D
        IntSystemEnable(SYS_INT_EHRPWM1);
: k) q3 F* W" \( \' n; |% Y        IntSystemEnable(SYS_INT_EHRPWM1TZ);) e; J5 [" H; j( H7 ~
}
" Q  A3 e, M8 J; R* _! p; O+ R; n8 h8 r$ H. E
/****************************************************************************/7 ?. I- J8 o: ?: A
/*                                                                          */6 C  n2 [0 n* n# R2 R* E
/*              ARM 中断初始化                                              */9 b+ _' Z$ b2 Q/ [, b7 \) ?, h7 m
/*                                                                          */
; n! N4 p- A; n/ }( X  m6 y/****************************************************************************/
7 p" N! W# w, O+ \& Bvoid InterruptInit(void)
" {' B  J4 j$ ~+ k{. o1 s- g8 D# @4 \
        // 初始化 ARM 中断控制器$ o5 R3 H$ r/ a# p) C
        IntAINTCInit();' `5 ]1 S/ P. \  I
& y  A* M$ |7 I) R4 e; w
        // 使能 IRQ(CPSR)
6 ~7 U+ |1 r% W4 J4 S9 ~        IntMasterIRQEnable();3 x9 v* F, Z/ M( N& z  b8 G

( Z' \& [7 ?6 g. ?. u- |        // 使能中断(AINTC GER)
! n/ N3 P& l* g( z( Q- d: Z        IntGlobalEnable();7 V/ m# l$ V) n7 M# N0 P" |  W8 s
; F5 v8 j, r  `! t1 `3 q+ L
        // 使能中断(AINTC HIER)
' a; `% l' r" k; F0 a9 [$ Y$ L; {        IntIRQEnable();
7 Y! k* H& M+ s$ p}% l8 ?2 {) @+ Y  r$ H' {8 v5 ]

9 u7 j" H  c- X+ p
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/; q6 P( {6 d4 V" i$ g9 w* X4 z7 m) ^
/*                                                                          */
4 O6 v& s) K0 a* g/*              中断服务函数                                                */
8 m3 z, ?6 n0 c0 L9 m' l/*                                                                          */
1 G, p" J! Z  J3 n7 ^# H" M- ?( o/****************************************************************************/
% M% Y3 T& ?& a1 [% yvoid PWMEventIsr(void)4 ?% F+ G- w* P8 p
{5 J$ b; T4 o8 X/ b
        IntSystemStatusClear(SYS_INT_EHRPWM1);
) k) T, o3 F4 G% f# q6 P
/ g% H& M8 ?8 K    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
3 y. u5 _* M. C) ~5 I& V}" Y8 F0 d5 j& ^# K! b
* u& m: f5 u/ D  {
void PWMTZIsr(void)
% {1 t: ~2 F9 u2 Q" v6 c{
4 }/ r1 \0 ~4 m% z5 g        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);2 u+ G# h, d" v7 K+ B$ R; }

/ x" j. o( j& \- J3 w    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);  U9 _+ t9 |( v) s" p
}4 g' j9 k) ?2 T4 C& m* [

5 V  K; a, ?0 {& b' l. q/****************************************************************************/
& T* R+ q9 ?& [) G# A/*                                                                          */  i( \' a. D0 L# }) }
/*              初始化捕获模块                                              */& J, N3 p* ~" h0 [1 a+ x% l: q
/*                                                                          */
) l) n; t& O9 X' _0 e+ c7 s/****************************************************************************/& W4 ~. u0 @7 i4 f9 Q
void ECAPInit(void)
( j1 e1 P( u- B$ v{; g5 p$ [7 _) _4 q) Q* m  W! `
        /*-----设置 ECCTL1-----*/: Y* M* N6 d( r5 E8 Q: Y! g" M4 G
        // 使能CAP寄存器装载
7 u+ {0 ^% d$ @        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);  o! a4 R5 T* i9 _+ U
        // 设置预分频值.1 p' s$ u) \5 T! J" J
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);  W/ X/ G+ W! X. H
        // 上升沿触发捕获事件) Z5 D! N" s% ]$ S! u+ y
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);0 K8 g1 x" p- e" @6 M
        // 输入捕获后重新装载计数器值.& ?5 [. X9 b/ _
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);% @- c( T. N( T( G
2 V" D' X1 x- f' g
        /*-----设置 ECCTL2-----*/
4 G- p/ ~# n7 P, Y, S7 E        // 连续模式
+ T& P5 l) ?/ k2 E4 O9 i' ~3 i        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
7 ~2 Z0 j: ~* B3 i! D        // ECAP计数器TSCTR持续计数
2 b* ~* F7 u  A  o. o+ A. x2 o! |3 X        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
# R% f0 y8 \8 C. p& y1 A        // 禁用同步输出和同步输入" a- e2 M6 k; d* M. M% q1 ~
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);7 ]' ~8 j/ S' S9 i! c/ f
        // 配置 ECAP 2 为 CAPTURE 模式. `' W( I3 X0 x9 |1 T  z2 M# {* P! ^
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
' ~. |9 U6 \. L  Q* r4 Q  g+ `
        // 使能中断
7 D: }5 V/ v: n4 F; P" j1 Y1 B3 |//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
* s6 j5 F5 ^/ g9 a6 z9 p: j! s}! T+ r5 D3 [& M5 `2 X- b

' m1 b3 k/ R+ l1 P' y; c! b( W! K# G4 f4 Y/****************************************************************************/, C3 g5 J5 w! _8 i/ K* S
/*                                                                          */# q- S) c! C" V. j
/*              取得捕获结果                                                */; |  |; |- u: ]9 y
/*                                                                          */$ G1 C3 o, b5 G3 T8 t8 r8 H
/****************************************************************************/
2 [/ y* @# H2 i* ^3 L4 [unsigned int ECAPRead(void)& a( n0 t" `! M2 N( d( v0 R
{
$ W# R( I  ^( P! O$ D& \% a  m: H3 k        unsigned int capvalue;
& ]8 {& s6 E0 N& l1 r        unsigned long frequency;
8 H  w/ H; s: L( X7 B) O5 [! M$ ~4 G6 i7 Z( A" p: p) s
        // Event1 中断标志+ g# x  _4 W5 y+ U0 |+ t  X7 v
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))! Z* U$ J0 o  B% M( P8 Z5 C
        {
* I( Q" m% Y. }! r0 [/ Z+ Z" k                // 取得捕获计数$ ]& w0 b" g1 s! Y/ {
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);% O1 v' P9 p, }1 d
                capvalue = ECAPResult.cap1;$ H* I) w) z4 s/ a) L3 n
! v+ h6 V; \# v" t" C
                // CAPTRUE 模块 228M 时钟主频
- q" l9 |& g3 H; v, U4 a$ Z, D/ |                frequency  =  228000000/capvalue;
. a6 z% p* ?4 p: k' h" [8 F                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);# J0 p6 }, i' F& j/ C0 p
0 o7 Y  X+ ~4 F+ g
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);; c5 J+ W+ F' H  X* o8 _; \; M3 t
//                IntEventClear(SYS_INT_ECAP2);* A/ U3 _2 J- [  b
        }4 \9 d& p6 L* w5 E# u* _) y
        return frequency;
7 S/ K! E) T( [* G' B* R; E6 g}6 P* r: s  w! O6 J
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。- n' n1 m$ V: K; W0 z% N

本帖子中包含更多资源

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

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-5 10:41 , Processed in 0.045124 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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