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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
' ~! {( F: G, V4 S% _) Q/*                                                                          */
) l3 y# q1 |) n/ @/*              宏定义                                                      */9 G0 K& w# v2 L3 {' i% q9 O
/*                                                                          */  D2 L: a9 o; a9 i
/****************************************************************************/
1 M8 ^$ ~! B2 w( T  _// 软件断点
# M# i  G: d1 o9 y, E) B#define SW_BREAKPOINT     asm(" SWBP 0 ");& Y$ s2 n+ u4 C: D  ]
: U6 R% d! B! L& P! m
// 时钟分频
; a2 M' p5 W* m" B; }5 O; q' E#define CLOCK_DIV_VAL     228
, R/ `; `' I* w2 n) ?
( J* [! [8 V2 D" g4 M6 g/****************************************************************************/: B' E/ C: j! I. Q9 w3 ~
/*                                                                          */! ?8 h" D( e2 _% @" G+ u7 z( \: M
/*              全局变量                                                    */; l. A) E4 B5 o4 I
/*                                                                          */
5 E* h& ^9 A& ~' I4 C/ F  Y) l/ l, D3 t/****************************************************************************/
5 p  o: I7 o4 S- G5 _/ M% }1 SECAPCONTEXT ECAPResult;
' C- O- V8 [+ a. l4 ]7 d5 l4 H3 }4 h# M
/****************************************************************************/" b# l5 T4 A% s9 G# ^+ j
/*                                                                          */+ L# ?* \! Q) m1 A* N! |! b
/*              函数声明                                                    */
$ V+ N- a" h* c  _) _$ G1 F/*                                                                          */8 a9 ?) f" R5 {- P
/****************************************************************************/( W( _2 S( d9 t6 E1 S1 o
// 外设使能配置
# X& P: p4 X/ S4 u' ~! K6 hvoid PSCInit(void);
% w  h  K2 ~6 j3 }8 I
( p) @8 \$ N( d// GPIO 管脚复用配置
9 ^" `; i7 m7 g% h! S/ E% jvoid GPIOBankPinMuxSet();7 r; l. L% \* x, N  k1 y$ q

5 v/ f0 \7 T# a- J; `) \8 v% _9 E* Z// 产生波形5 z6 V: d3 {: X
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);/ E3 y& w$ w) H$ f0 \* k% U) `
void ChopperWaveform(void);
0 u* Z6 k# O1 M3 X; @  u# R
* C! I( J- D' I// ECAP初始化和读函数
; C% M' N4 D% F5 j4 Kvoid ECAPInit(void);5 I+ y, J9 Q# s8 z' `% N5 C
unsigned int ECAPRead(void);
$ k$ V& M8 ~# W9 o* D- [' x' N4 O3 T; r' I7 {- v
//ARM 中断初始化
# H; c8 |+ ?" m, uvoid InterruptInit(void);7 F# H4 W: v$ i0 B3 N  B" i' A; p
* B! d+ o6 z: O- s9 Y
// PWM 中断初始化
& {3 k. L# i+ k1 N- ^1 Xvoid PWMInterruptInit(void);, i8 z( J0 B- P. x# U5 \
// 中断服务函数
  {+ A' a9 w. g# w$ {) f// PWM 事件+ o! }9 H( @. m6 e! r
void PWMEventIsr(void);) R% A* S# K+ l# [' v+ o/ p( ^
// PWM 错误控制事件4 l, S7 d3 I  U/ Z4 B
void PWMTZIsr(void);7 J* M/ X* i( z& b

3 ?5 c; |% }0 B1 o/ e! E, \/****************************************************************************/  W  a/ x5 H  A; {
/*                                                                          */
$ Q6 s" y) O% I/ f% h/*              主函数                                                      */; H  Z. h" Z4 x- v8 \5 T6 l7 l
/*                                                                          */
$ c% j! ?( L3 k) y  O/****************************************************************************/
$ u& v# R+ e. A  S6 ~* |6 oint main(void)7 [5 |( e; E8 S! B
{
, U0 u$ g8 `) E) z: L1 `4 u- Q        // 外设使能配置$ j4 o) }; M8 ^
        PSCInit();
, R/ [4 q/ g5 P/ O, r: E" z* R+ O
        // 初始化串口终端 使用串口2: `$ p; f! m9 d! M8 H
        UARTStdioInit();
2 C: I3 Z* y3 D8 a. U& a+ y9 Q* @; V        . B: e+ ^: t  Q4 X
        // GPIO 管脚复用配置
8 N. [* q" [! b6 S% ^* ]; q" {2 ]        GPIOBankPinMuxSet();
+ O! j. N/ x& N; n& C& X( N& K
& j* ~; t0 q) A' T% \. e        // ARM 中断初始化
9 ~0 U  U9 B& N4 I        InterruptInit();* H( Q+ a0 s: d; A: Y" l

1 p6 u- K( @4 K* v' j# Q        // PWM 中断初始化
+ h" Z1 E5 D0 l" Z8 i        PWMInterruptInit();" A5 d7 W/ a0 A, R5 B

- G; _0 r0 t4 v4 l  K        unsigned char i;
4 F2 s0 M- `% O6 w" _/ e  e        unsigned int j;
2 d3 n; [$ k- A4 {: Z: }6 K$ g$ z1 \  o% a7 @. G$ `" K
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
& |7 v( b  @: p% L6 @        UARTPuts("------------------------------------------------------------\r\n", -1);1 I  X# I. ]) [; {1 Y: V# m
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
+ Z2 k3 P: W8 n" b: D( w! b* v5 G        // 产生波形6 y$ [& L/ h4 d$ ]
        PWM1ABasic(25000,50);$ @6 U7 N& ]7 C! \/ s5 i( ?. z# X& }
$ P7 N. q# c( K7 S4 J5 e
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
. I) B$ a& x1 C- N6 \5 O        UARTPuts("------------------------------------------------------------\r\n", -1);
2 |: l- Q; I2 ~" b7 |" ?2 Q. A+ r" _# B
5 r6 b* \& Q: g$ ~7 ^% c" ?2 b% q
5 v, \% _  s) ^. r
- ^! c4 @3 I, i6 [* B        UARTPuts("------------------------------------------------------------\r\n", -1);
2 v  B' k, J1 ^" A        UARTPuts("                    C6748 ECAP Test\r\n", -1);0 P' s8 a" J! r0 R, _7 M
        // ECAP 捕获初始化
, Q2 ]* Q2 Q+ X1 B" o  {        ECAPInit();# @4 z7 @6 G  {: D: N3 v+ J( v& `
        UARTPuts("Initialize ECAP.......\r\n",-1);; n6 s4 \6 ~1 S- ], c
        for(i=0;i<5;i++)
' v; x) d  a$ ]! A* O" M        {( U. ~: u/ a* ]8 E3 B, H
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
; _: C% X: @% |, U0 ]2 v                    ECAPRead();6 D; R$ x0 h9 u5 s+ k
        }4 B& E* J5 P/ ?& p% Z2 w8 O
        UARTPuts("\r\n",-1);4 U& S9 M6 k6 c3 u( l
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);6 [6 H* X. P4 _# o- x; W
        UARTPuts("------------------------------------------------------------\r\n", -1);6 m# i+ O5 r" I
# X! ^3 d. V" w5 O4 _
        // 主循环* V& D! }" Q3 t% H0 |( F
        for(;;)
# M  A9 n# L4 ?6 }* [* @4 D; Y0 R        {
7 q: N8 r4 `! h1 j( @) e7 H7 }
        }
/ [  q! q/ ?# ^( v$ c}5 Q# M! H0 [5 u  ~6 b3 b. h2 X
3 c! c9 f* b/ l8 h  G- F
/****************************************************************************/) d0 p# t/ W7 C$ F# S5 p( L
/*                                                                          */: J" S' `' P! o0 q( \8 S& u3 O; ^+ S
/*              PSC 初始化                                                  */" T8 |2 }4 C5 @- T) P4 U
/*                                                                          */7 [$ s0 N' ~8 ~
/****************************************************************************/, Z! M9 ]- N' J+ @1 |- Z& {: D
void PSCInit(void)) f( k% }1 ?9 {2 s6 [
{" r- ]6 f: n  \
        // 使能  EHRPWM 和 ECAP 模块
6 l8 O$ U3 }7 e+ ^" m' t, p" N        // 对相应外设模块的使能也可以在 BootLoader 中完成
, ?9 |( r0 p% B* i    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);5 L# n; V4 Q* w( }/ K2 z- U$ l
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
5 b3 X$ W1 w* t( K9 i}0 u4 x4 N* e: {6 Y. P

# d4 b9 B4 m0 [8 Q* [1 x' }0 Y, ?/ f/****************************************************************************/8 n  X$ E6 w: A! A# B! M
/*                                                                          */& m/ }0 g% m* [& R
/*              GPIO 管脚复用配置                                           */0 u3 G0 l" y0 b0 D. g9 c9 b
/*                                                                          */
( ?1 l9 i  l: ]& O/****************************************************************************/
8 k5 }! L  s: Q! o/ _5 J, xvoid GPIOBankPinMuxSet(void)
  e; R2 i+ A& @! \3 G{
* `8 v+ K) _& o2 r6 j7 g        EHRPWM1PinMuxSetup();
! v' H1 [% @) b8 g5 G$ [+ b8 L; v. f' P. @$ h
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
1 K  f) I1 N; y* |4 K4 \0 i        // 作为捕获功能时管脚方向为输入4 P6 t% S9 N0 E3 R1 t! u: w
        // 作为辅助脉宽调制时管脚方向为输出% C" ?' p# v5 k
    // ECAP2 / APWM26 q6 x, u( G' A1 k8 L3 ?
        ECAPPinMuxSetup(2);  r/ A& E" B/ O3 u: J' \/ F6 v

+ J- X, r$ P* G' R4 D        // ECAP2 / APWM2方向设置为输入
1 r/ ~5 B* B5 I% O, Z4 L: h1 F        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]: k) |& |' [9 h& K: w+ D9 M
}! U; |/ l* X$ _2 p( k  C
: u' _" I' q: i+ B% k! b! x9 G" f
/****************************************************************************/
8 S! A: J$ q. q1 C- i' c2 M/ z/*                                                                          */
8 `$ y0 k& [6 g. U5 [/*              PWM 输出波形                                                */
& `: d. o$ I1 {1 B2 ~0 o0 `/*                                                                          */
# f4 c, ]1 e% R3 I7 J/****************************************************************************/
( \) D) y+ |6 d) }9 F  nvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
0 H6 L; j3 i$ z" l9 L* V' n1 `, ^{4 y' u% l, V6 M6 n' a* O
    // 时间基准配置
$ W) e  n1 n4 X, r. k    // 时钟配置
6 v  X4 F+ e8 P. V; D5 p9 i    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);4 l+ ^) G9 E0 l7 I$ m1 M+ D6 `
0 J8 u( U) ?" k; q4 J
    // 配置周期6 F  w( F$ z+ R* W# O  \
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
5 p! e, |# X1 |                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
; ?4 q9 B. m+ G9 K% D  M& j+ I2 |! w+ c3 L) E+ a& H0 ^! c
    // 禁用输入同步信号1 N& s& O$ q, b7 J0 K1 i/ I7 `2 e
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
2 B& v6 p9 F- _3 h2 N5 Z( j7 [4 Q% L# ^# G& b* C- C3 c
    // 禁用输出同步信号
  G" ~, \2 D7 d/ X- o  @    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);; E) w* W! t  t7 j& x
0 u% C; r$ D+ ]$ f! m# A% \; \
    // 仿真(DEBUG)模式行为配置
9 Y" x6 S$ _; @. s2 z" O    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);8 L6 J& F$ _9 L$ u8 a
' ?% m/ W. B- ?
    // 配置计数比较器子模块
  z' t! _* Y% l+ Q    // 加载比较器 A 值5 p" S/ ]$ f3 Y% [
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,. w) I. ?5 @& H! W2 J# ~# P
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
. j6 c  p9 ^% ^8 J# X; D# r  [# w( w, w+ L
    // 加载比较器 B 值
# V; w! F  r' m/ D4 q4 j# d    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
8 R7 H* }$ g) q# ]- ?! q% s4 A. V% P                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);: G4 u" j) z. U& d6 ^

$ m( i# Y! L$ F" _5 f    // 功能限定配置(输出引脚触发方式设定)- O: x" d+ ?+ O* C8 v5 b3 X' l. K& I+ T
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出2 x' `1 d9 E8 s) O
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
; M3 O2 g# H5 _( W' H8 f& k                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,5 s/ `. Q# J, o" p7 M  Y
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
5 O) p" L1 i& s4 `3 D  [8 Z4 ]1 x% l$ ^+ V0 W5 g
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
8 Q% R- _8 I) v$ L    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
1 x- Q# L2 J" x* ~* N4 [
7 k! }5 m. }/ m2 X    // 禁用斩波子模块! f  b- g* @$ _
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);0 j0 n" b. z4 V% Z3 I
- J$ q1 q; j" Q) ^1 }2 F8 p# I  h0 |
    // 禁用错误控制事件
/ P5 f( ?( T& R, S  _. V$ {    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);% [; ~7 F( G, `  @: _: m! K
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
, H' H  J' \/ v: Z9 H! z, @4 ~4 U
    // 事件触发配置
2 R0 k3 ?" ~4 ^0 [5 I2 g3 O% t    // 每三次事件发生产生中断2 a$ `- F8 U$ Z: e# w. H7 h
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- ?. x# S. D! J6 }    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件9 m0 G, E1 P* s
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
/ {. J8 f8 c" _* @) U" q  K/ h( M    // 使能中断
6 l8 {' j' G. W+ L. |! F, [0 T    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);9 r1 y' z5 ~) j( ?0 Y2 s. Z

1 I+ e$ a' k( {7 z% X  H    // 禁用高精度子模块2 w0 K* ^) K% ]3 y% B, H
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);  n+ `: ]9 \: c5 ?6 u! P4 Z# D

1 K( q- I8 {; X    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);+ ~3 A$ [. ^" N6 Q& l
}
+ O- P  |3 L8 v2 g2 ~8 j$ `9 E$ P9 Z) H6 ~5 {; s
void ChopperWaveform(void)
9 Z' H8 @' g& @{" r0 b- ]2 t& L  a* o( D* x
    // 50% 占空比
3 C. }  E) |% B( x6 n$ b    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
7 q2 K' z+ g8 w% n" V    // 4 分频
$ l2 y8 ]1 a( G, f4 m/ F; r/ q    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);" E5 ~- m- j: d% Q/ e
    // 单个脉冲宽度
* ]5 i% x4 V* s: ]. G    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);& L5 H& A2 x) V$ P  Y" G: d+ v
    // 使能斩波子模块
) g3 Z, {1 C7 f/ n: m. e1 g    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
; D! c3 z; U7 B) k}
9 |# R' I, i% ^2 c& F0 b2 j, k8 d& G
/****************************************************************************/' j/ R  @' Y8 ~% N: ]
/*                                                                          */' c) z% [9 H% w8 {. p6 w
/*              PWM 中断初始化                                              */
6 k! N) i( `9 V5 ]0 ~0 t) o/*                                                                          */
+ ~% p/ x& J# v0 y7 ?. J/****************************************************************************/
/ \/ [1 _4 [/ k* |void PWMInterruptInit(void)" L* D" {% n% v. F7 k; ?
{' v8 W' B8 U8 ], L5 t
        // 注册中断服务函数8 O) h1 n3 _5 u8 u" U- o
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);( x! C  [9 G1 R2 }; _5 A3 w( i
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);9 W0 P- B! u6 G/ K' W
: [4 }0 _  t. G% x) n  i3 i1 I
        // 映射中断- E' F, h0 _' m( R
        IntChannelSet(SYS_INT_EHRPWM1, 2);
2 a- z/ c  @1 w2 X        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);# _% Q8 e! X* X/ [# F4 o

" {2 t/ u3 n8 W& ~        // 使能中断* D2 U: y2 [& g7 x# O. O
        IntSystemEnable(SYS_INT_EHRPWM1);3 l6 x. z5 h- y6 S4 j3 q- m2 |
        IntSystemEnable(SYS_INT_EHRPWM1TZ);8 k! B: x! ]: Z. I
}5 e6 e2 Y5 k1 g, i/ I0 P

9 [* E. L* w' R9 ~8 U( C3 L, U+ C/****************************************************************************/, l* Y; u0 E- }( c9 B& g
/*                                                                          */
0 I8 _% M" m: c8 \5 M' K% U9 r/*              ARM 中断初始化                                              */  R( n) Z+ q7 i  r0 Y
/*                                                                          */6 K* v9 @1 R, C/ H5 d
/****************************************************************************/
. |' Q( e8 {3 X7 Cvoid InterruptInit(void)! x4 d5 s$ W+ k3 L8 X7 u- V
{
) `6 X' K' U4 j/ P        // 初始化 ARM 中断控制器9 w! Z4 Y6 W, s6 j/ I
        IntAINTCInit();
" c8 j+ j  E1 W# T/ @% g1 r2 H: e
6 G1 D% k/ T" q* E- `  }        // 使能 IRQ(CPSR)
+ k% k0 v+ A$ G8 z9 A2 o; F1 v% F        IntMasterIRQEnable();
/ l# {* r: F0 c$ M0 ~
8 w" c& z7 j( v  y$ v) t7 Q6 O) o        // 使能中断(AINTC GER)
( c! C& W. U* S0 b        IntGlobalEnable();' f' r8 Q+ P8 Y/ V/ {* N& v

0 B4 z9 J; J  \$ G: e        // 使能中断(AINTC HIER)3 [9 J5 w0 i$ t& d! B
        IntIRQEnable();
2 R  n- Y) G" H# W# p}1 n% |) C' V5 P3 y& h1 R
: w# {0 h  Z- i* x* U
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/  A1 w" p3 M- i4 l. ?8 n- k
/*                                                                          */
* S5 a- n' \" t/*              中断服务函数                                                */2 k& b7 g; s; y0 q
/*                                                                          */
: ?1 {: V5 e0 j( a/****************************************************************************/
& b/ H0 J6 \: p9 p- U  |. y! F$ v4 `void PWMEventIsr(void)0 f4 }2 L2 Y% I0 M
{
( i* A% x5 y1 F, {' {$ f        IntSystemStatusClear(SYS_INT_EHRPWM1);! @( ^; F0 o# e0 i

9 z$ g3 U: J& [/ Z) J    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
3 x- m; ?9 a9 P4 f3 a) [0 [}- J1 j  a& K* `
$ I$ s4 P3 I5 B. x' R/ j
void PWMTZIsr(void)! a; c: ]' v9 r. B2 C- E
{; `8 W" U/ z) P8 R# D
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);  L: e$ T" X5 h* D2 g2 J5 W

: y& Z5 t; j* A. A. X    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);- N/ F7 c- c+ {. U4 Y- v; b! o( l
}
: j3 J$ n( [% g% }2 j6 t) t3 v+ K+ \
/****************************************************************************/
7 u" L; M' S/ o2 F" h/*                                                                          */
6 `- D9 U! S! P' o9 \: D/*              初始化捕获模块                                              */
  P  `$ A- s) Y- a/*                                                                          */, K) j9 I! w# j9 x% \/ p
/****************************************************************************/0 L2 @+ i! t/ l) C2 @1 Q8 E  |% C
void ECAPInit(void)1 g1 u& K5 r4 G1 h5 T
{
) n7 G% a9 ]- J1 U, m: S7 x        /*-----设置 ECCTL1-----*/
/ {; [8 P" t0 c9 N; o+ Y* h        // 使能CAP寄存器装载
" S. y  m$ Y, w" g        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
. a& v8 z5 N1 m        // 设置预分频值.
3 n: ^! ^( j" x        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);$ \4 A& r2 M9 b7 @  @/ p( I6 S
        // 上升沿触发捕获事件
2 ~1 L* _2 Q: |( I        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
1 V1 u, I, ^' f2 o        // 输入捕获后重新装载计数器值.
. m7 i% P* q9 x" V3 T1 o) a        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);0 r; `# i, p5 @9 u$ ^3 e# e/ b( w5 m
3 f! X2 L7 ^4 R0 M& D& ^6 I
        /*-----设置 ECCTL2-----*/
3 e8 A, Y" q+ {4 g        // 连续模式4 a$ n8 |; u8 j
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);5 z2 f. E' N% t5 R& c
        // ECAP计数器TSCTR持续计数4 x! Z  k2 y: a( X3 T* z) u- F( D
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
: l. T0 B5 q% v5 V2 ~        // 禁用同步输出和同步输入
7 J9 n  a9 D' S; y  U        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);8 X+ G$ n5 R" r# w. `! m
        // 配置 ECAP 2 为 CAPTURE 模式0 @! ~: v- t) E7 [
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);1 l" ~8 v/ ~  _7 [6 b

" ]. l4 ~7 ^# V  k* u/ G  T        // 使能中断, G) A, Z! s3 K% q8 g3 l
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
6 v# o1 d& s# y6 [% ]0 z% ?1 Z}/ L" ?  g8 g' {6 I
$ G/ U! E4 ]0 }0 }
/****************************************************************************/1 j1 b3 o$ w% h: l
/*                                                                          */) E6 i% X( A  Y* f
/*              取得捕获结果                                                */
" ~) I4 q; V* t! F6 S* r$ X0 |4 Y, T/*                                                                          */
9 J4 x; a' J- z: Y- M( Y$ l/ _. ?- i/****************************************************************************/: D# t! p$ R, {+ y4 }+ U
unsigned int ECAPRead(void); s3 `2 s1 ~) S& i. v
{
0 ~& ?- g" ]# D; h' [        unsigned int capvalue;" k% j0 v2 M* s! X
        unsigned long frequency;
: |5 F8 X8 ~/ f/ R' B0 n: _, |& b5 g6 ?6 H2 W6 W
        // Event1 中断标志
9 R3 o+ k$ `& y) H1 z        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
- y( j1 `  X9 `/ t  R3 Q. s& R        {1 }9 v) X: r2 j+ p2 l
                // 取得捕获计数
+ k$ @& Y: i7 a" w- b8 G  U                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);# G7 k7 A+ ?/ m" X! `! C( ?
                capvalue = ECAPResult.cap1;
5 n" T$ c- e5 I7 `- |8 \' T" K9 R* T  Y; N
                // CAPTRUE 模块 228M 时钟主频
2 X% _+ j; N  x6 h, n                frequency  =  228000000/capvalue;
4 s: ~- P% `! y+ U, u4 j6 D1 W9 q                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);# o- r/ _! q2 E/ l6 e5 U- ?

1 G  q& \+ x( U- p1 L8 t9 A. s: _                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);3 T* s4 G6 M& K4 r$ x
//                IntEventClear(SYS_INT_ECAP2);
' z+ p/ p, K4 s  H) ~        }
  _( L4 L6 I' U        return frequency;1 J$ S3 g3 K5 |+ e! k2 B
}
6 ~2 I% W) [* K. N# p8 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波。我们有相关例程,请参考。
& h3 C; S" q# g; C: `

本帖子中包含更多资源

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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