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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
8 N/ g) U0 `# ^" y& y1 S8 c* A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
* W9 i) D/ ?  _* k/*                                                                          *// i) R4 |0 f# G$ l+ u" @- d
/*              宏定义                                                      */$ y6 U' W, Y7 h. H# g' d
/*                                                                          */: y* p) g) W% R; T- |$ C' `" z( R
/****************************************************************************/
5 i7 Z9 ?' F& c4 Z" K  A7 o( n  [// 软件断点
6 M0 ?* n% q- \" z#define SW_BREAKPOINT     asm(" SWBP 0 ");
2 X& |( T+ g! R9 J4 B) J3 n- g& D# Q; ]% N! j4 z  ?
// 时钟分频
! k3 [. ]6 e0 |) f#define CLOCK_DIV_VAL     228
' a+ a7 \( F2 E+ t* P- U6 a' t3 Q" I6 r7 q  P6 [) I: Y( [
/****************************************************************************/4 y# l( R% _8 W- z" p
/*                                                                          */& m  C6 W% G4 \3 t0 E
/*              全局变量                                                    */
0 i) p1 |- U/ N; c/*                                                                          */% m0 w/ ~& i* r8 ?  J1 j/ _
/****************************************************************************/
( q) s% v" n' j2 |, U( \6 }& bECAPCONTEXT ECAPResult;9 _& x8 K3 d( @+ i$ d. d3 z

2 T' i  m& i) K3 f. z/****************************************************************************/$ r4 j7 @' v- e- z2 i
/*                                                                          */# O) H; \. f9 e; P
/*              函数声明                                                    */0 \4 I" g  \; E* t: z9 v' G% S
/*                                                                          */
5 @0 R$ n/ f" w  w0 \8 t. x2 R/****************************************************************************/
) Y' l1 X$ Z2 f0 F  l- l// 外设使能配置
5 c1 Y! K& A; `5 tvoid PSCInit(void);
* A! X8 Q6 m. B1 n$ ^) q& t) w  u! c! Q
// GPIO 管脚复用配置
& j/ ~0 X/ l$ {* h" gvoid GPIOBankPinMuxSet();
5 w$ q8 ~5 d' Q3 c3 M+ W0 q* u4 j( ~3 R/ n% d
// 产生波形
& N/ B4 S7 I5 |9 s& T% Dvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
8 l5 S+ _9 f# G7 [' tvoid ChopperWaveform(void);
& h" t# y3 e% x, C+ N8 ]5 z- p2 S/ _8 _, z3 I  }4 k
// ECAP初始化和读函数
. w) g( W) E- D0 K) C% ovoid ECAPInit(void);; W0 n, ]6 v/ h/ ~* b+ t/ f
unsigned int ECAPRead(void);, s7 v# O- A2 b. b. a, s
) S$ i; [+ B* X; z0 {
//ARM 中断初始化
8 I- _7 e, I  `) ~  G- Ivoid InterruptInit(void);
/ _+ g: Z- C9 Y5 P, u7 i
& p  g% ~& F: r5 n// PWM 中断初始化9 G, i& X4 @2 X
void PWMInterruptInit(void);5 e) V& Z- v: T: y2 @
// 中断服务函数
' ^7 s% l! c4 @+ D) E1 m2 Q+ b// PWM 事件
8 n1 ~' a: J+ D1 g; G9 rvoid PWMEventIsr(void);
6 p2 Q) e, f0 t// PWM 错误控制事件
1 R% X+ l+ v* S! W2 z! A2 Svoid PWMTZIsr(void);
  U  k5 ~) h8 P1 ?! A5 p0 @& m3 E5 G4 z
& ]" W& q. @3 u8 y0 {1 Z2 I/****************************************************************************/( g) ]+ s, f+ ]  c0 ^( I
/*                                                                          */
' X' P  |- v$ v0 s, z/*              主函数                                                      */
: K1 q4 s  G9 O, V% a% T/*                                                                          */& t* H  M, D8 d. H# T4 Y
/****************************************************************************/) d3 o- e+ ?, n. M7 ^7 s
int main(void)
* @. w7 u; C. R" J{
$ m9 S$ h7 ?/ [1 r! f1 K  ?9 k        // 外设使能配置
. a* Q7 p$ Z; r6 N- `! S        PSCInit();
. L" `% T' b8 H+ k  Z. M1 C8 D% {* f: }( i" `
        // 初始化串口终端 使用串口2" ?: K6 E  B4 Z- H! r7 Q
        UARTStdioInit();$ z2 a! N2 m$ [4 f0 \) x9 a; K
       
5 [- L7 Z  Q, h# V) f        // GPIO 管脚复用配置2 U1 T5 g1 {" D! e# D5 g+ R
        GPIOBankPinMuxSet();
0 P, F. h! D0 P* G, H& _
0 p6 C' j; Q5 O/ }        // ARM 中断初始化* d. u4 \- t% d+ ?
        InterruptInit();" J: l( w5 K; T. M. R: n$ \% v
0 L* R" }( }! y! }; J) h. l9 E
        // PWM 中断初始化
( {2 i! d: z. c/ C# Y2 R        PWMInterruptInit();
! T' ?$ Z/ R% g2 w" w9 r
# S; v) d: Q2 O9 }. ^        unsigned char i;
) N) b$ p$ ]. u, k        unsigned int j;
1 ?7 R4 R4 y# ^7 N0 V5 J- p, t/ T+ G1 _6 T2 H5 c7 ^' ]
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
. f2 X9 V6 v$ {$ I- X( E- X* b        UARTPuts("------------------------------------------------------------\r\n", -1);
- N1 z8 V9 F( d8 n4 c5 P9 S        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
. Z7 \' K+ X; l# n4 F( I        // 产生波形0 r8 B8 z$ i' [* G+ I9 R. ]
        PWM1ABasic(25000,50);
! y# f0 B5 H0 j+ U) @8 T
! r! x  n$ [: H7 J6 I, w* w1 A        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);1 |: I0 H9 `' e7 [- d& s
        UARTPuts("------------------------------------------------------------\r\n", -1);: [8 a# V3 R# s0 b7 O

' D" Q* G- e, J2 H
- b4 B+ P( _3 ]) g8 \) {' U0 f( W+ Z$ V3 X
        UARTPuts("------------------------------------------------------------\r\n", -1);! Q" {9 T7 p! C& ]% a3 e3 x* w
        UARTPuts("                    C6748 ECAP Test\r\n", -1);) [7 i6 `/ H* F# e, L4 d
        // ECAP 捕获初始化+ k6 |5 N5 b. D+ b, \
        ECAPInit();
& e6 D: y, p# F9 X        UARTPuts("Initialize ECAP.......\r\n",-1);
  [# {1 e7 Y3 c* g        for(i=0;i<5;i++)
0 \0 a$ z6 }5 \5 ]        {
1 ^+ ~+ a/ g. K% ]                    for(j=0x00FFFFFF;j>0;j--);            // 延时% Y# e) Y! f# B
                    ECAPRead();
) a% Q* I3 }( O/ d; ]        }
; |# u0 O3 }, ?! V        UARTPuts("\r\n",-1);
. }9 _! ]4 X" O! @8 F! U# v  t. H; E        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);% G5 I# B/ i+ v7 ^
        UARTPuts("------------------------------------------------------------\r\n", -1);5 z" h" c* J; |. d

6 b9 f6 a) t3 i        // 主循环- c* x9 `5 n- C0 r3 V) L
        for(;;)
  M3 {; J+ Z1 e+ i8 U' t- v8 [        {
' C( I( Z9 }, M( X# p$ ^. y% C0 u
' C" R6 d! i+ v, v/ k- d( O' ^4 I        }
1 o$ b( `" q! J  ]}
/ ?; X0 f& v/ I4 j6 `" ]2 o- N1 C8 C! D9 E2 Y8 k8 o
/****************************************************************************/
3 L+ m& |; O- E* F1 o, x/*                                                                          */6 T# t) w- X" x# ~9 z
/*              PSC 初始化                                                  */
: _) S9 p+ r0 z. i& A$ _' w/*                                                                          */2 @5 i9 `5 N7 |
/****************************************************************************/. }9 g$ Z$ s* V0 z* p+ i* _6 [9 [- S
void PSCInit(void)9 \  H1 q5 Z. z, g+ U! ^. i
{) L8 U: o  b5 O. e
        // 使能  EHRPWM 和 ECAP 模块) f9 y7 l* q/ z8 i; @
        // 对相应外设模块的使能也可以在 BootLoader 中完成5 p+ s% a8 g8 q. }
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
4 B- M' v! G! f& r9 P    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( q9 z  v- ~4 @% f/ V! y, G+ }' M
}) f) n; X+ o. b% w" ]
8 d9 k' v  e$ o# n9 s) O( z5 _
/****************************************************************************/
( X% y" h* f6 u3 i# t% ^3 S/*                                                                          */& O- Q5 I/ W) r% k) o" L% ?
/*              GPIO 管脚复用配置                                           */
; k8 h: `7 u; \' Y/*                                                                          */
0 h( z6 D2 _, F3 F' v/****************************************************************************/
$ T: t, k* c0 S* wvoid GPIOBankPinMuxSet(void)  c1 t6 S5 h; Q
{
2 U5 E7 K5 I' g# m- |9 W        EHRPWM1PinMuxSetup();. H6 d# p, M* }3 ]6 m$ J% y

, ]. [, C8 r. m# S+ T        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
. x1 Q0 z) \0 o( _* o        // 作为捕获功能时管脚方向为输入& L+ e0 e8 Z# [6 @. ]6 X# P! Z! P
        // 作为辅助脉宽调制时管脚方向为输出
0 c& s- u! O5 b8 p  a0 `    // ECAP2 / APWM2; d& V3 m0 [$ ?8 q. y
        ECAPPinMuxSetup(2);( v# o) D5 J, D1 Y1 B& e: u
" `& U5 F4 h: h& T' E( Q
        // ECAP2 / APWM2方向设置为输入5 s4 q; H  ^$ B
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]  `6 f8 }" _* g' B  K! s
}
( @2 V( x' v1 ~; w( @
5 R6 l7 E* t* F  i/****************************************************************************/
" W1 @4 }' |( J: c8 z; Z/*                                                                          */# p: ~8 ?6 @& H* t& l
/*              PWM 输出波形                                                */
# f4 e( b2 x% h& v9 Z* o/*                                                                          */
% C- g4 _4 ]8 g# N# `0 L/****************************************************************************// Q- p% q* v: b6 D
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
  ~; c, `8 u- U- v' M{9 H4 M3 h, ^) U7 P# d3 `1 S
    // 时间基准配置% y6 P( d0 s7 m( d! \1 Q2 e' ?! t$ A! ?
    // 时钟配置4 r2 t: @" j8 Z
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
6 C: ?% C" Q; C2 g+ r' |4 J7 O7 |/ f4 R, Z9 Z* x
    // 配置周期6 @% R6 \/ ]5 K1 Y0 V4 g+ U( a# H
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
- T! X. s" X% N; ^) ~                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);7 A% A/ H' ~% @* ~+ H$ T! N
7 H, Z! o+ t8 o/ ~! O
    // 禁用输入同步信号; i+ @6 J6 x3 |$ b& I' }
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
6 s$ k' |1 U0 ]! ~$ d8 q( |
: S& I6 _1 j  G4 |    // 禁用输出同步信号+ ?8 T  ]! P9 R, z/ S1 J0 R! X1 [9 T
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);! e# g$ z6 @6 `# V& _

7 O8 U) S% B5 s% n  [7 J. L    // 仿真(DEBUG)模式行为配置8 D! K  Z9 T3 i7 S
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
1 V" I  h/ z$ [6 X  P3 G$ c9 X$ U: P- w& X- h; a# c
    // 配置计数比较器子模块
  R* G! r( `+ X    // 加载比较器 A 值
' c$ k  f1 v. t' T3 x$ ~    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,/ Y( U3 z& r' Z1 U$ R: q% e# |: w! y
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);9 z/ F# e! u- v* m! c+ d: |: E
- F4 h5 _8 R1 m% m$ G
    // 加载比较器 B 值7 _3 Q( O' m$ r, N* X$ S' Q
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,6 f: I% ?" e8 D. D6 H
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 m7 |& D1 F! b7 v( ^( `: l* r( T3 q8 A" g* t7 o
    // 功能限定配置(输出引脚触发方式设定)8 @( o4 u' c; A1 p+ v
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
' o' T+ }% x+ R% R" v    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
$ ?. f! L0 w, w2 k                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,* k! J  C% n4 e4 @! D
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
) w' B2 X7 N6 N
& F, W) ?8 G. l3 G0 {    // 禁用(旁路,信号直接输出到斩波子模块)死区模块- h, E8 ~5 |8 V! f5 I
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);! Z: p# w, ?3 ~$ m

% x7 T% g) J9 {% I% N    // 禁用斩波子模块
- f& r, n% k$ s: z0 N# r  x6 z    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);5 G1 }, R4 ^3 N* }" S) r6 k

$ r0 L3 y' c$ M2 V% t$ L  N5 v; x    // 禁用错误控制事件7 w) z1 _  ^3 Q. l1 b5 |  @% d1 `
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
% D% S6 s. b$ T' W% t4 E- f    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);! c! [' ~  k& x/ v2 t9 z

* G" w) |: J0 j# |    // 事件触发配置
3 z  G9 z$ f; v0 j0 L    // 每三次事件发生产生中断
/ D( K% O+ O2 F: m    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);! t- \! n  i# q8 o# q8 v
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
2 J1 H, a6 ~* C$ `) Q: z2 _2 x# ?    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);7 p/ e, s- p; L4 n9 ~% E: }# b8 r
    // 使能中断
; C$ _' v& f( E: X9 W  [6 Y    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);. Z2 d4 b6 \9 l
# M* J# w* i3 N* D: I0 N+ O
    // 禁用高精度子模块/ K% g5 V: @0 z( l. x! g! S5 L
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);! y; i  o7 T0 s
: ^/ }7 c) t* s8 o9 A& s6 H4 l6 R* f
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
  g+ J/ B! I: p- j6 I1 i! H8 x; d4 h}
; v3 F! p. R. u6 O0 U6 P7 `( T& b0 m
  P3 k7 u; S$ k  _: ]: nvoid ChopperWaveform(void)
8 q2 T. H* ~# H" N8 q3 |2 a, w{
( q- \9 L$ Y8 W+ z3 S, J' ]    // 50% 占空比
, u& e- j3 i1 o% C: {# R. h* B7 m/ }    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);. F6 k- z5 w0 W7 L+ ?  E2 D* q
    // 4 分频
& {% m9 [$ T( S# s4 |% l    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" v: H6 J6 e; s/ y( p) ^$ S, O# F% {    // 单个脉冲宽度
7 w2 A) V: X3 ?8 W4 A. s8 t. u    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);0 Q4 ~8 F5 P5 e, r' l% K
    // 使能斩波子模块
! c4 E; c2 e# ]: \2 w/ H& R    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);& V7 G( _. @+ ~6 n; Q: k( ~
}- k, [0 E5 q& t$ ^% |

2 _# i" Y. \6 k+ p! ?1 M/****************************************************************************/
! d" F7 V+ b& Q6 A/*                                                                          */
  A! _* V& ~6 C/*              PWM 中断初始化                                              */0 U: o' {& C$ F6 ^" m
/*                                                                          */
1 B8 I$ _& I8 s: _9 z+ M" S; h/****************************************************************************/0 X6 F# E9 s$ N* C
void PWMInterruptInit(void)
" e& Z* m; O7 R2 p1 k2 C" n$ g3 E- b" e{, V1 L. G- L$ a. Z6 A
        // 注册中断服务函数
  R  f0 S* R2 Q' V9 L        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);, I6 c7 r! r/ X. J# Q
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);: o+ c6 |, J' g+ K% X& [4 U5 q
; u. S( x. s9 z' R9 ?
        // 映射中断
( t* K8 s7 ]. Q+ T; k4 O! X, o        IntChannelSet(SYS_INT_EHRPWM1, 2);+ ]" z- p. {( e5 W" S) D- G
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);; T! A* C) |( h5 u
+ S& D7 w. Q  W" l
        // 使能中断
- v% y4 k4 E5 t( `- d; y        IntSystemEnable(SYS_INT_EHRPWM1);2 c/ e4 @- f- e5 @
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
9 ?9 y  e* {9 O4 s, f7 |}
( G) f9 n2 \0 G8 A, c/ y) b5 ?/ Q1 p, @3 Q4 K1 p0 X
/****************************************************************************/) f5 w7 b0 N& N. y# l: Y4 J! b
/*                                                                          */, e' K" T' ^% ?3 U0 a: d% X
/*              ARM 中断初始化                                              */
3 K- q; p8 @2 U7 d3 d/*                                                                          */
4 x9 {4 G6 o% ]; a' U/ U# O9 d/****************************************************************************/0 A1 Y. P- S9 G6 H, p
void InterruptInit(void)
$ ~% \+ o* g! X- t{' G5 G3 z$ p4 T: H7 q2 |  P
        // 初始化 ARM 中断控制器
# I1 S+ p1 h) N- d" y0 o/ r        IntAINTCInit();
- U: N, _, U) Z; z' v8 @6 z" q
( J8 y5 o" t9 p        // 使能 IRQ(CPSR)5 q& c  I$ b* ~6 ~
        IntMasterIRQEnable();/ J9 A  l9 g! [6 g8 W' K  b5 d

; K3 Y& p$ K9 _, L2 i0 t, W        // 使能中断(AINTC GER)
* X/ P* O% e1 s5 c* z1 g3 w        IntGlobalEnable();3 t! k) P, L5 [1 K  s. z

1 D& G: t9 |+ G" y4 k. p( s5 O        // 使能中断(AINTC HIER)
6 k! p8 w1 Q( k3 g" Y' H        IntIRQEnable();9 |# H: r  _) L7 V: ~, \
}
" A  k7 p7 D; p- D; O; f+ s
1 _3 J$ q( v/ W
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
( ^# q) {- m  }+ b* L/ q) x# Y/*                                                                          */
5 s. @4 {) E5 [$ }/*              中断服务函数                                                */: m0 T" D2 W: j- p( I8 t
/*                                                                          */
5 I: p  ^  O5 E/****************************************************************************/
. d' j# s0 K. ?. G* ivoid PWMEventIsr(void)
2 t4 M9 {+ g2 V9 e  F{
9 N3 k+ y! J& x6 f6 j! K3 S1 U        IntSystemStatusClear(SYS_INT_EHRPWM1);5 U6 D, m! Q* q# C* \1 D3 p* \
- s0 I1 }1 I" X+ g3 j6 {7 h# c
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
7 T% b7 J% M3 B) O}
. G7 @3 Y9 R$ V
' V( X2 T& u1 [" f* [void PWMTZIsr(void)
5 _$ `* H4 Z  X& P{) t9 C7 r  Y" O
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);4 t9 I  Y  N) V, M1 ~, X% x$ j

! t* m! ?& T. t7 \; ^! u: d- s    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);' S/ @; L2 l. y4 P- e. V
}# d$ h# X+ x' h: w0 R
: o9 V! X. a7 N' v( W  ]4 o: {7 u; Q# |
/****************************************************************************/9 t, N4 }! X2 y
/*                                                                          */
, i. Z7 _; H, V; c; h/*              初始化捕获模块                                              */
$ t/ f+ S% X7 [, F/*                                                                          */: w0 h/ G$ P( l0 p0 P8 P
/****************************************************************************/
( k$ L. w: J' Z; p, `void ECAPInit(void)# N6 ?9 g, h; [! O3 O
{/ Q; ~5 N  B4 j; G, g, l+ R
        /*-----设置 ECCTL1-----*/
( ~* w4 }6 m$ I0 u3 H. w        // 使能CAP寄存器装载
$ ^, C" Z5 E* l9 |1 j! A% Q        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
# z- B. z  W! ?6 X" M        // 设置预分频值.
9 Y; Y( u/ Z4 Y9 }# R9 M        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
! y/ q( x; W* G7 F4 Q0 y        // 上升沿触发捕获事件
/ k) N: @8 g" K) Q        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);* B: Z  u' k  a. k
        // 输入捕获后重新装载计数器值.
7 Z! R  d* s1 N; x        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
" L& m2 k: E  o! o/ Z/ u
+ O# _$ b$ W- x" Q        /*-----设置 ECCTL2-----*/( b* y' e! p- {
        // 连续模式) |+ H4 f0 e8 O/ v# C7 o
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);7 d5 j- G8 k5 n
        // ECAP计数器TSCTR持续计数
  b) k* c2 c/ y* |4 i+ B; Q        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);5 o% I! V8 x" O; e* J( c' i" c; b3 N; h
        // 禁用同步输出和同步输入# O4 s! D3 ]/ x" t3 C
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);) E, |. k$ z% q+ T! `
        // 配置 ECAP 2 为 CAPTURE 模式
2 Q/ D7 w8 V' ?; s! L3 B        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);& |! e$ T* a  O+ c, X/ L
6 m/ \5 r( R8 U( p2 ]
        // 使能中断+ O8 K( r2 e6 S, F
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);! U( u. i. ^3 |8 r* v1 v% r! @
}
, J& R' ~+ ^$ C$ J" u4 N* l" u+ F6 M
/****************************************************************************/' b2 G6 O# ~6 h  f
/*                                                                          */, z! v5 z- @; m
/*              取得捕获结果                                                */; e- t) \2 p4 W# _& W5 f! |
/*                                                                          */
8 S! A$ H5 F: M( `# D+ I  l7 @- ~4 M/****************************************************************************/, Y/ v- b. o1 c  q9 ]
unsigned int ECAPRead(void)* b3 A* [4 ?5 m/ f) z" K
{1 V$ N1 f* p( |. G6 z
        unsigned int capvalue;0 ?; p, ]; @5 u. }8 R& h, ^
        unsigned long frequency;
8 l' G0 O1 m( @/ _9 |1 a+ y
  z: M; J* K2 f* [2 U' T6 F        // Event1 中断标志5 u6 r2 `3 f% w; C. s8 p
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))+ ~' _; I9 R$ c. l9 g& U/ n
        {
; u* r/ }& a# c                // 取得捕获计数" ]+ r6 g. d" c; ~* r/ e
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);4 ]4 N. O, e& ^% q' j8 s# j
                capvalue = ECAPResult.cap1;; g* m7 A: p: D! z0 f, E
$ h' ?& }- o* T. Y1 A5 r
                // CAPTRUE 模块 228M 时钟主频8 R9 o: y; I% Y- h
                frequency  =  228000000/capvalue;
1 s% X, q/ x# t# W/ Y                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);) H$ L7 Q; C# v/ ^$ o

3 F; {) |0 @" F# D                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);0 E, W0 z2 v5 g. {8 L
//                IntEventClear(SYS_INT_ECAP2);
: b9 g: C- I: l' M9 \5 _        }
9 c" X) Q( J; x% X" m6 Y8 P        return frequency;
  E  ~0 U/ v& Q) c}
2 Z; V" O( E1 }6 {1 X* ^& F
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。! T4 u3 F/ L- }7 A* h2 P

本帖子中包含更多资源

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

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 08:15 , Processed in 0.054386 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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