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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/: J9 |3 g1 e+ t( Q
/*                                                                          */3 A6 M4 M; `$ ]
/*              宏定义                                                      */
+ L: p5 [( t& M. p3 Y* Y. z" q/ V/*                                                                          */' k: g( r- a7 y1 r& t0 D
/****************************************************************************/9 b8 B3 P/ T. r. u
// 软件断点4 l* x& l2 @1 n7 o- W! w
#define SW_BREAKPOINT     asm(" SWBP 0 ");7 g( }: q9 O; K

) F; Y1 }% A9 k9 Z// 时钟分频
  r1 S; I# ^# v#define CLOCK_DIV_VAL     228
8 K) U- E7 H9 N$ a0 L7 B- S+ k3 |' E; s9 _, g/ U- v3 c4 w# ?
/****************************************************************************/
9 a1 E( y5 ~4 q4 Q" ?  w" h9 d/*                                                                          */
8 p( Z; t, q7 H, }$ E4 ~7 c/*              全局变量                                                    */
+ e' r$ J  t+ ]) m* P/*                                                                          *// m4 t3 M2 _0 p4 ^
/****************************************************************************/
& N6 g) `& `, n( f* o8 Y$ \ECAPCONTEXT ECAPResult;
2 Z- Y' S% j* O& N+ V3 Q/ m/ G/ n$ E1 \- M1 H9 J8 B
/****************************************************************************/4 s; g1 ?& D, a% t" a% E2 u$ o# B
/*                                                                          */
" l! H) I$ r1 K% v9 Y2 C; X/*              函数声明                                                    */
3 f8 G4 R3 |5 B5 \/*                                                                          */
* T+ m' c5 C- f: Z) H* \. Q4 k& y/****************************************************************************/) G! ?% f' g' a4 h+ ^
// 外设使能配置
; `' T& [" M% U/ gvoid PSCInit(void);
- O6 U+ R6 l# r3 K9 x
  Z/ p" b0 o6 J8 S, X  X. `+ s- ^// GPIO 管脚复用配置' k3 K% K3 |) s+ g3 q6 F! B, k7 W
void GPIOBankPinMuxSet();: N2 }( L: H: m  ?2 a# V& d

8 W$ z3 q. ]% l# k7 U: O// 产生波形
2 r' q" ?1 B6 x. e' K5 @void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);% h: q3 p/ Q+ ~
void ChopperWaveform(void);, n* ?8 q3 u- D7 B* c2 K

: I- c* L7 l" m; I2 D2 j7 d/ \) t// ECAP初始化和读函数- g" E0 T! M. O1 d
void ECAPInit(void);
& G3 d' ?/ [# d6 R' Dunsigned int ECAPRead(void);7 F" G3 y" X  h7 n( D) v( f  b
; r" u: m0 C# V
//ARM 中断初始化& R4 c; s# g8 h& `1 L$ R: d' L* y0 ]
void InterruptInit(void);, k- o; x2 S6 R

: X: i0 Q4 x4 D// PWM 中断初始化
5 ?" J+ o: ~' D: c, Bvoid PWMInterruptInit(void);
* B8 X1 v4 w2 Q$ V) \) x3 c- B4 g// 中断服务函数* B3 l& d8 H1 l' f4 r
// PWM 事件$ g( q+ Y+ h; l- x1 w! }
void PWMEventIsr(void);$ w! O7 l3 o8 G
// PWM 错误控制事件* o9 u: p) m, q* R9 k8 z
void PWMTZIsr(void);: B$ C5 U+ @, \: q2 ]
4 g7 |! K- y; j. N$ f0 C
/****************************************************************************/' a! y( l5 T: @. l- S2 W
/*                                                                          */
- u; G0 t: \; z8 G  C8 _1 f& E/*              主函数                                                      */4 C+ F8 _4 S; T6 T( C& ~
/*                                                                          */
% O* X' d! @! z: e4 G/****************************************************************************/1 n* d; B' d0 e2 t/ U7 V) K
int main(void)* a  a, M/ ]( Y, s8 b
{
" m( Z( _9 K6 f# q0 ]- M0 Z2 C        // 外设使能配置& s- d: l' t6 Q; ^6 ~( j
        PSCInit();/ F1 e# j$ E) m: L. D
- x/ x3 A& [& I3 [$ F2 d6 S
        // 初始化串口终端 使用串口2
$ C9 [1 |% I: t; U6 X7 i        UARTStdioInit();
) ~& {: H0 _7 z9 u3 ^* j8 S       
+ U( I2 {2 z$ M5 X        // GPIO 管脚复用配置
6 _/ I3 L  T" n' j( J        GPIOBankPinMuxSet();
: N: `/ E& G" P0 {* p; d  A2 a0 v$ q; V5 w. `
        // ARM 中断初始化
/ C1 U- }( T$ Q9 n2 f3 }; \4 m4 \        InterruptInit();
6 d* u/ a3 V8 S% i$ U( R5 }
( ]) T- T  J: L" i# m& _' _        // PWM 中断初始化4 W5 B: ]6 D( `: v( H! p
        PWMInterruptInit();
# f" O9 u* s7 ?3 {" f  u$ u, w: W$ m0 X+ }, B
        unsigned char i;- X* Y' Z3 t$ t0 t# ?' E1 i
        unsigned int j;7 B: ?! K. [. g' W7 V( |
8 K" U3 b+ v& `' {9 C
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);3 z2 t% |# N& u( l+ W) ?5 o
        UARTPuts("------------------------------------------------------------\r\n", -1);" \: ~& `0 w* I# m0 r3 N
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);% w: A6 q" Z- O7 T) B( w
        // 产生波形
" H- N* ^3 I+ t( D* J; d        PWM1ABasic(25000,50);
4 v: m% ]4 d( G% l$ O& O  Q5 _# h
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
# v7 u9 P$ {. g- {' i        UARTPuts("------------------------------------------------------------\r\n", -1);# r  I! t; s0 B1 K
2 ?: J' J3 S8 m$ u. x1 J

3 J! F/ H6 I: J- S6 x3 n" }; l
, J5 I* n9 A' b8 W1 O! v        UARTPuts("------------------------------------------------------------\r\n", -1);* j% ]3 |, h( T# [8 H2 H, N8 G6 c& ^: K
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
3 C) D1 w2 B/ l7 B9 v5 C8 y1 Q& K        // ECAP 捕获初始化
* a2 N+ ~, o" X# V# A        ECAPInit();6 V# x# h* {; A7 I4 ?9 b6 ]
        UARTPuts("Initialize ECAP.......\r\n",-1);
/ L3 S: U$ h7 x) n0 C8 {/ ?: z        for(i=0;i<5;i++)' g0 @: r9 F* ~9 U2 q$ |* q. S
        {2 {; D8 K/ l3 l- I- ?
                    for(j=0x00FFFFFF;j>0;j--);            // 延时1 R5 I* O3 C6 [& F
                    ECAPRead();
7 W0 F2 y2 x- O        }& i: V4 Y: R  [% }
        UARTPuts("\r\n",-1);
. }, f3 d  a1 F, k3 Q        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);9 `1 @8 b2 x3 a5 C, J
        UARTPuts("------------------------------------------------------------\r\n", -1);- i7 a% x2 C3 z4 B4 I  A; D' B

, K. W- Y$ |* S# `        // 主循环
. O; \5 R. C1 E' ]! e( I        for(;;). f$ e7 O/ H( q9 C
        {. U8 z9 h/ c0 G) ^0 I8 W
% U, x7 G4 `8 A1 d/ h: g
        }
, `) u4 u0 K' [9 x  q8 [0 S1 X}! M$ k/ T: [$ k% k  @
4 i5 e+ }/ P- ^& h! W: k
/****************************************************************************/
2 a- n4 _. v1 v+ O  b( h, R7 v$ l/*                                                                          */
8 }: g6 w% b) E/ ~. V/*              PSC 初始化                                                  */
* t! T2 l+ D: _, D/*                                                                          */
/ S/ v+ F- [& l) n( U/****************************************************************************/
3 j  P$ ?/ ?/ i; f8 I/ B/ L3 c4 Vvoid PSCInit(void)
' Z/ Q: w; {" f  T5 l9 f{2 O5 c: o/ A" B" N
        // 使能  EHRPWM 和 ECAP 模块6 {( ^0 H. M5 j! U) c& ~
        // 对相应外设模块的使能也可以在 BootLoader 中完成. J6 `5 @$ y# ^' a
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);2 \8 R$ z- N$ ^
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
: \6 n% W2 ^; F}0 q$ y% V! ]! M$ P( Z$ _
& y+ H8 S) ?: w  e6 D
/****************************************************************************/
' `/ l( Z5 a- M: n5 o* b/*                                                                          */
6 c3 P5 r" V0 C3 H* Y4 v/*              GPIO 管脚复用配置                                           */
: N" I9 j' q( U6 N' d) t/*                                                                          */
! m- a% U7 G# ]- D4 q  Y/****************************************************************************/
2 B, c4 W7 ~' Y. R' lvoid GPIOBankPinMuxSet(void)
, b% `, s+ X6 M. F{
, U! N' W$ S) j" |$ N- m        EHRPWM1PinMuxSetup();
) [2 Z# U% n) i2 D
/ Q* B" b* q7 \5 p, n& j        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)  y+ d" h) P: k' c- L
        // 作为捕获功能时管脚方向为输入. ?- y9 p4 t& K9 F
        // 作为辅助脉宽调制时管脚方向为输出( A- A! W+ _# K
    // ECAP2 / APWM2% t: ~( j; i3 C: h% R& i1 K
        ECAPPinMuxSetup(2);
. c( [' `$ }- b% l7 q/ i: }; z
+ i' L3 H6 G0 O        // ECAP2 / APWM2方向设置为输入- n. [) H! J  Q$ K
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
) {) c# a2 g5 c: `}$ G, b- ]% \$ ^) G1 V1 I

: X: f2 i8 D/ t! N$ N' i4 z/****************************************************************************/
! g2 f% n" \9 m0 P" N+ J/*                                                                          */
' q7 K" x- }; R4 P. w" m* ?2 b; g/*              PWM 输出波形                                                */0 g' A3 ]4 c: O" Q
/*                                                                          */( P5 @9 B5 V5 r8 h% h" h7 L
/****************************************************************************/
, ^; Z! \1 C2 z" m' d+ Svoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)) `. M, e/ r+ U; Z) c$ z; R
{
( k/ ]+ `3 }9 S' K    // 时间基准配置
7 V1 z/ Q* d+ \    // 时钟配置# n; L8 |+ v! O5 |6 {
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
5 V: q3 h5 n$ \9 M! {7 N. a- [9 Q! O/ L5 Y
    // 配置周期1 T1 C5 I' X2 U  |( N0 R( o
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
  }& V- H6 _$ v& Q; D0 i: j3 X. G                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);% ^: G0 s" q4 \7 z- T
9 {2 @  u  U+ q6 S+ Z( ~. _- Y
    // 禁用输入同步信号
7 z/ L- ?! `* G5 F; ]    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);) T& E$ t( v* w

1 W$ u7 _, E' u( @: x  A% H4 f    // 禁用输出同步信号4 V# c* f, h7 p. p- ~% U
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
2 K) ~; ~. q5 [+ |
4 p+ J! C0 A$ U    // 仿真(DEBUG)模式行为配置
& K7 R2 {# b+ k3 a1 _    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);6 O! a- D3 j' m, H1 V7 a
3 q0 G) m- U/ {( G$ W8 w+ f2 m
    // 配置计数比较器子模块0 ~) ~- r% F* v  o* S
    // 加载比较器 A 值* ^  h- n" f& I. W% g9 \9 w8 f
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
5 [# o! D. `0 ]                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);# h9 m$ v% o9 j& D; ?& O
3 s+ T& g* g2 }
    // 加载比较器 B 值, V! ?) X, x/ J5 V3 J! |& r
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
4 y+ x, m) ?* U8 x( ?                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);2 h6 ^& a! [$ g* f
( G, A" z, p8 h$ A
    // 功能限定配置(输出引脚触发方式设定)" D+ X0 @8 `* X8 f4 X; c
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出6 V  h% d; p( l  c( W
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," D- p) G- f1 b- r; ?1 Q  x
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
) [3 d* K, w% }7 ?* p) g                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
7 f  k8 k# q0 }% _$ v
" v8 E# D( y7 Z, j' |( ?0 L    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
- a# C- |" P& C. L' B    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
) X* A8 e- G7 c; q" K3 {7 g( \* J  y* |/ H' E
    // 禁用斩波子模块3 ?7 T- G1 F2 h3 c. L3 ?
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
) A$ H; n  d, o3 b( t: _# \! y2 ^8 s: k$ s
    // 禁用错误控制事件
1 u8 e5 p, K( X  c    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 {: c( B3 {8 j" _% z% w' E6 x
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);1 L/ S5 A& W: M1 g" K& `5 U9 J, W

) Z" e1 a* g& p0 c    // 事件触发配置' g2 g" w! ?  Z/ P/ n) A5 s: l
    // 每三次事件发生产生中断* j; N3 z9 y9 h
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
# i: T5 q6 a* o! P9 _- z    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件) u3 m) _0 m6 f9 Q8 Z' }
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
: [/ B5 [$ Y  ^6 d, l  u    // 使能中断
3 R' k, M. }- K" l) d3 q- |    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
" j' j) `7 L- B) E) D& a
! f" _8 C6 R1 P! V. R! z    // 禁用高精度子模块1 L$ v; Y& N: {" e
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
. E9 K6 L0 d. l8 y/ M
1 m4 r* m4 F+ o) N/ ]    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
) ?' h, d# K) H" p; u# Y% D6 G}) c% {5 V! \# t& S
! r9 k# S* I2 b: h) p
void ChopperWaveform(void)
: M, P; F# o& G% Y{2 Z& g, n0 T) Y. W, k- e
    // 50% 占空比
6 T& k" K* c3 N: |) L    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
; Z; Z3 }. k/ h, o    // 4 分频  M  C: W3 t+ G9 e
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" H' o! K. w/ {. K    // 单个脉冲宽度( c# S: u! o2 d- \* l9 l; I9 ]2 b
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
& U- E/ M% s, x- }/ y) z$ Z    // 使能斩波子模块- Y3 a: j7 k  r! @
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
! c' x  y' X* T. B}
6 t* }6 I% C; X2 k/ @
4 ?1 g; ^/ X$ h+ O4 m7 a/****************************************************************************/
" ]& U9 W5 D) ?9 t/*                                                                          */
) q7 s+ C1 g8 I/*              PWM 中断初始化                                              */
, ~) `9 s8 o0 G/*                                                                          */
8 ~" w1 g3 y; H$ q/****************************************************************************/3 I* f  M3 y; r( U1 `
void PWMInterruptInit(void)0 h7 W+ V7 Y8 K$ E( o, c
{
0 A0 q/ A4 H7 f( j. E5 f        // 注册中断服务函数
0 J5 j# _, X. D, C, X        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);; j+ X5 }8 B: E& D: S
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);! k; H7 ?5 l1 B6 Z. \: |; u3 M! d
; j8 s: w. s6 {- ^8 u# S
        // 映射中断" z" }5 g3 T. X$ ~8 N
        IntChannelSet(SYS_INT_EHRPWM1, 2);
# D0 o6 p7 Z" q8 Y$ G5 L9 b  h        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
* `& V4 W4 }+ |4 |! l0 U* p/ F* n
        // 使能中断
! P7 J" F" Z& _# ^        IntSystemEnable(SYS_INT_EHRPWM1);
/ m* x+ V& M) [+ G! @1 d6 b" K8 W: i        IntSystemEnable(SYS_INT_EHRPWM1TZ);
( k% ~2 G: [4 F' n: C& h}
7 J" ^& R! ?+ N7 J% H8 p) I% v& d6 Q( u/ q8 V7 b
/****************************************************************************/% R, }" w. a+ N# e( M; ?
/*                                                                          */! m3 Y) b6 k0 \5 z/ D, P
/*              ARM 中断初始化                                              */
: h2 y5 W4 b, U; @/*                                                                          */$ c" \8 K) Z% c/ L; X6 d, v9 e2 {- m
/****************************************************************************/
' v7 u6 K/ Z" L" @! `void InterruptInit(void)
% Q# l& N; M0 s& L5 Q* ?" @$ r{2 G, a( I6 C& R2 \
        // 初始化 ARM 中断控制器7 i. e% K- q4 F7 x; R7 t" P, v
        IntAINTCInit();
. E' w! N* J# ]5 ~' f" ?1 x' _0 p, H
        // 使能 IRQ(CPSR)
" {% ?2 ]" D. E% m) l- t$ Z' Q        IntMasterIRQEnable();
: E& |& Q8 @; W/ g. j$ @9 h) c7 @, t& R3 M; u9 }  o
        // 使能中断(AINTC GER)
( {4 t: V! @) P* [        IntGlobalEnable();
3 R% p! U1 C# L* d' @& x8 l( h0 l/ m
        // 使能中断(AINTC HIER)  N- d  R* Z& p2 ]$ p
        IntIRQEnable();. |( {( ^6 n% E4 }" B' @
}
: X& n8 y8 Y* o8 B2 w6 [' ^) m+ k: q* K% H+ R
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
  J/ D! v) \3 \' t: O/ E/*                                                                          */# [9 O' n/ l  W
/*              中断服务函数                                                */- \9 ^. l9 D# R2 [& E) P) e0 i
/*                                                                          */; c1 x$ c( Q9 G% {; u
/****************************************************************************/8 ]. _. R- D& B, Y
void PWMEventIsr(void). o$ c4 g; `; K
{
) p( m4 d( ^7 s, ~) H        IntSystemStatusClear(SYS_INT_EHRPWM1);# S  i8 ?* H* U; h) Z
/ e$ j$ `& U8 ^! V0 C0 [
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
, x7 q& M7 A' A3 [}: E3 X% g0 H  D1 E
( ]9 w& E  ]1 E2 O
void PWMTZIsr(void)
8 C: f! ~8 @# f# \0 n0 P' u- F% z{- \9 ~2 n4 q, f
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);/ [% y- \- P- _% v
3 g4 U0 R; B& {+ M$ D7 [- ^1 |
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);0 l# O% X/ O" ?/ M3 |1 @: V
}1 K* X8 v( b7 F' f4 m7 w
# |% [/ e0 G% _2 w2 s5 _5 M
/****************************************************************************/
: X, x& N; `; {* c! Z/*                                                                          */0 D# D3 e( l% y* M* z
/*              初始化捕获模块                                              */
4 J8 J7 b8 u' K7 A: `6 c/*                                                                          */
8 n  b, g+ d0 l" {: F/****************************************************************************/' @" i9 b: ?! [5 I" j
void ECAPInit(void)2 _" x0 g9 w3 M
{4 D# d5 S8 v: |7 B& n1 y& E" t
        /*-----设置 ECCTL1-----*/
6 L% [" o  j0 v# X. [9 v        // 使能CAP寄存器装载: d- n3 p1 N7 ]5 T6 |
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
: d% K0 [/ i. o! y0 X        // 设置预分频值.2 }# ?- Q& x) s/ ^. _& H3 q
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);- D* q8 K" v! {
        // 上升沿触发捕获事件
' R% \; c. L" I0 ^. h        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);" M1 |+ ]5 |: j) k6 m- x
        // 输入捕获后重新装载计数器值.
; ~9 J( }$ k/ {        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);# h# ?& D5 a1 V/ p, k
  V- d% D5 f. s: \( D2 I, a) a
        /*-----设置 ECCTL2-----*/
3 d0 E: n4 f, Y9 d+ [' |6 `        // 连续模式
( f: P0 E3 o0 e& t        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
( i& I  ?1 h, p* j1 ?        // ECAP计数器TSCTR持续计数+ _7 L/ L4 T, _6 C4 `4 ?
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
# g& p* O! y$ Y9 F        // 禁用同步输出和同步输入/ y5 h- m, i0 v2 [8 I% L
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
+ \9 f2 I' q4 M1 c6 C        // 配置 ECAP 2 为 CAPTURE 模式+ n% Z$ X& I! i7 R  h2 ~
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);( J1 h+ G  `; w1 I% t0 t
6 g( c+ o* }9 A# H' F! x: v% Z
        // 使能中断
* S. k. G! F$ u! a+ Z) L2 a//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
2 Z2 o' G! s- _: Y+ w' O}
4 c+ F; f4 m, u+ [; F* ~& G! W. V$ m* B" ^% P) D' B& r
/****************************************************************************/
0 z$ `' N, b, A5 |4 ?. s8 b6 d( u7 X! H/*                                                                          */% N. ~+ ^3 T4 \
/*              取得捕获结果                                                */
+ k7 z1 c) h7 A9 P% Q+ S/*                                                                          */7 B0 ?* l+ P/ h+ q, c
/****************************************************************************/
' q7 q) f+ F3 y( e# Bunsigned int ECAPRead(void)+ g8 P4 z: U* q& |. ]
{
1 M7 Y; R0 ?8 E* m/ B7 k) |        unsigned int capvalue;
$ F! {) D$ h) j4 t* u( i3 `0 V% L        unsigned long frequency;1 u4 }, }& p+ \0 r5 ^8 N8 P8 B
) D# l0 k) @6 m' D0 o
        // Event1 中断标志5 r% R! W3 t( ?( F% A' Z- R7 w
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))7 R& y+ R5 W- u
        {
4 f2 S1 V, P1 a, M& y. j                // 取得捕获计数
, E( Y' j( j; I5 o: v- s7 O                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
' C$ x0 H6 }; `# o' \                capvalue = ECAPResult.cap1;. s, Q( G4 T: I5 |' X
  e5 ^7 h- }1 [3 ~/ Q: L) T
                // CAPTRUE 模块 228M 时钟主频$ ]% W, S4 Y- B' c
                frequency  =  228000000/capvalue;
* x- b1 U0 P4 w# d" n  Y                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
5 u* r9 u0 H4 q+ V! G
" O& T! @+ u* \( K1 a                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);9 _" G- D! M8 _5 _5 L1 R3 X
//                IntEventClear(SYS_INT_ECAP2);
  O$ I; G( v+ g3 O6 w* L        }
1 Y& h3 B( Y$ w, j4 F6 A3 ^: R        return frequency;
0 B  J1 _7 N0 I: ~6 c: b: i}- J2 y, m) I3 B
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。0 H" {7 m3 f' V$ e! C/ y' C

本帖子中包含更多资源

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

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-10-17 22:04 , Processed in 0.044923 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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