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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
+ p) }; d- Z, ~. ~- ^7 g3 V. i/*                                                                          */
" _+ Q+ ^' r6 X/*              宏定义                                                      */0 _/ [( D3 z* x. F+ j
/*                                                                          */  ~3 x& J4 g7 w( E. |" H
/****************************************************************************/+ G+ {) Z- m0 s' ]8 K% p2 N. v* D
// 软件断点# J- n) ?2 m& e9 p) W
#define SW_BREAKPOINT     asm(" SWBP 0 ");
! F2 O5 k: q) M9 K. o( A6 B, N2 G) L7 @5 `4 m
// 时钟分频& z+ t7 p9 g0 M; ~
#define CLOCK_DIV_VAL     228
3 k! U5 x6 }. e* M0 N+ k9 e% v9 ^7 X) }
/****************************************************************************/- s+ S" ?, p1 L; Y1 d, w' b
/*                                                                          */( `# j8 \& w! i( s! q5 G
/*              全局变量                                                    */( n/ m3 ]6 D; w- H2 G4 J
/*                                                                          */8 K' O6 i9 P  G- j7 h
/****************************************************************************/  N) r& ^" N0 E
ECAPCONTEXT ECAPResult;
# F& }* ]2 _6 t9 F6 o+ T/ ]2 `6 P4 c( }# y, ^" Z5 I- e; _0 H
/****************************************************************************/
. d$ _( t% T, G# P& L' i+ x& u/*                                                                          */" K& ?) w$ o0 i+ c2 G
/*              函数声明                                                    */$ w# f# s/ K6 R
/*                                                                          */
( P6 ^! ?8 N1 N/ X4 ^' P/****************************************************************************/( L: r; W3 e" @# o" Y  O
// 外设使能配置
& D" }0 b. Y6 R9 w% I3 Bvoid PSCInit(void);8 q8 u& v8 y+ o) _; @: F9 o) j
) d/ p9 F2 E+ ~+ A5 ]2 V7 I
// GPIO 管脚复用配置# H& [; b. o0 q* ?3 q
void GPIOBankPinMuxSet();' b* ]8 [' p5 y5 v

0 ?. i/ U3 e& l8 E7 V, J! L0 J// 产生波形
. ~  _8 T% p2 ~, p% nvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);3 m$ h5 L8 e' w5 x; Y1 T$ m6 g
void ChopperWaveform(void);. P+ E! h' s* a/ o

6 P! H: h8 ?& d+ l9 A! v- n// ECAP初始化和读函数
4 f! @3 G3 s: xvoid ECAPInit(void);
! T, q# x9 m9 ?6 T6 A' D& A. Funsigned int ECAPRead(void);! x  `- X  T9 B9 f2 ]; Q" \" c+ X' i

: O& O- p( e$ U4 U7 k- Y5 A1 O& u//ARM 中断初始化+ t. Y; s4 n2 v9 g7 m
void InterruptInit(void);
: w  V0 w! a! Q, r0 @: S7 s% J5 S- Z+ b5 U; ?; R
// PWM 中断初始化6 }7 ~" H. M6 p- @6 p$ c8 ~$ L
void PWMInterruptInit(void);  p, b2 Y: J. F
// 中断服务函数
+ }) N- {. M. h; U; f& v7 h// PWM 事件9 W1 X* y3 O; M. q8 C4 p0 s+ E
void PWMEventIsr(void);8 Q( k* s7 s5 }& g9 S
// PWM 错误控制事件
5 g7 c" }/ S: u) a% J- ?void PWMTZIsr(void);" Y& b7 N5 E" s# g) s# B: Z) m

1 {6 _9 U, h/ D0 T$ f& j& t/****************************************************************************/) S& s, V0 Z9 K7 T" _! `1 `
/*                                                                          */
) Y' u" @+ G& p! L! _' E/*              主函数                                                      */7 ~7 r  e+ Y* i, x4 Q
/*                                                                          */
2 H0 F9 Q# z) H7 B/****************************************************************************/0 v/ C5 x+ c; L0 F5 O7 S
int main(void)
1 v! B9 p: ?1 D1 ~7 v, }, \{+ f5 F2 ]; `1 \0 H& L
        // 外设使能配置( r' F( S. u: \/ V( m" ?
        PSCInit();& A$ d1 X9 {- L2 D0 A& h

2 R& G7 |7 H) Y        // 初始化串口终端 使用串口2
7 x; O8 W& v2 M0 D; d' N        UARTStdioInit();
" e% M' e- ^: l+ w5 m9 i8 [        0 k9 k! O8 E( q; c" V$ O
        // GPIO 管脚复用配置
) p& P/ Y2 c, z. v  Y1 z: V        GPIOBankPinMuxSet();, t: @9 K: C* ~1 z- w
5 I# k+ H2 ?" q# s, Z* Q8 X6 x
        // ARM 中断初始化- R, [1 X7 C$ ^, b
        InterruptInit();
+ }5 `5 G+ s& A3 @4 w0 a7 r8 I# s5 d
        // PWM 中断初始化" a: c. X* b6 L6 I7 O2 V! e% Z
        PWMInterruptInit();0 F) D, P# j- p% ^# X) n

* H- r* z( _! R1 `. b: ?- y5 ?        unsigned char i;
, V/ \4 q  t. V1 D9 |$ K        unsigned int j;
: M  s) M4 ~* N+ F- A
* G. u7 P$ F, L/ D6 A, U. ?; R        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
7 ^" s: `1 K- ^4 z' w        UARTPuts("------------------------------------------------------------\r\n", -1);; p- y; g4 `. ~' K
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
9 R+ q$ A# t1 @' D9 Q% [        // 产生波形! Y3 x& X6 U  ]4 t
        PWM1ABasic(25000,50);0 a/ J$ z: e8 P! e2 @" M8 F) {
3 K; S% D% g& p6 v" J& z" Q
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
4 }* p' r0 _) `8 n' }  r, j        UARTPuts("------------------------------------------------------------\r\n", -1);
' s/ }3 k' O6 C# @
. q# v. ^& [4 A6 W" x
7 j+ s# D# I4 V6 W6 @# a( l/ L" {; T' U+ a/ l7 g
        UARTPuts("------------------------------------------------------------\r\n", -1);& q# o6 N3 ~0 l6 o3 V4 Q6 P
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
3 x7 @! M3 y- Q$ _( u        // ECAP 捕获初始化
' [1 Y/ t: ^/ X7 x" s4 J9 h# H' a        ECAPInit();
; {+ S" P7 M  y" `3 b# `        UARTPuts("Initialize ECAP.......\r\n",-1);
5 r6 c7 S$ f6 \4 b( l        for(i=0;i<5;i++)
8 I" S2 {" }& G. G        {8 W' N" n/ }5 Y0 M$ Z/ k# k$ _9 u
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
% h. p7 i- }# e9 g( i- X2 [                    ECAPRead();, O5 c2 R+ r8 F$ `7 p
        }
1 J( q! C+ x& J: c# C        UARTPuts("\r\n",-1);- v. K# n! A/ a3 h4 Q6 p
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
0 j' L+ v/ _3 c        UARTPuts("------------------------------------------------------------\r\n", -1);. V: H! N$ H- A- {5 k

" `6 R4 \! m/ {& k        // 主循环
, Z; t" E# u+ w& w3 _5 A: X# p: W        for(;;)( d+ W+ F. n- N9 G
        {
1 d* U" T  V* o2 u9 i" c  H  |  r0 g; Q4 e
        }; u6 |  K1 B. e: z- n3 i
}
0 L* D. _+ _+ z6 K% c9 {- l8 h
, @$ {3 g# B, {. h/****************************************************************************/: Z0 X1 v) ^6 a+ D
/*                                                                          */
* C6 [* v7 ?/ [3 v/*              PSC 初始化                                                  */, s6 A% G% d' F: Y# c2 [! N& Y
/*                                                                          */. ~, [: F" g+ x# y8 Q$ T
/****************************************************************************/: W4 u$ W& {: F8 S
void PSCInit(void)3 U6 l) T: |) c( x, b1 @1 v' M
{
) X' C0 \1 U% w5 v        // 使能  EHRPWM 和 ECAP 模块
( c" w7 [) M4 y: @        // 对相应外设模块的使能也可以在 BootLoader 中完成: B& b# u1 c' n. [; U: o- J
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);* u( _9 a8 X$ K
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ ]: Y! f. J/ ~- k}
6 w& p' o- N' q/ N" V" M! M( g; Z) L0 t. J1 `% B
/****************************************************************************/
& @$ N  K6 m1 w0 @( Y5 \/*                                                                          */- s6 b& S& ^. T" ]) O5 W$ k
/*              GPIO 管脚复用配置                                           */
4 R' t: h! Z8 A3 a& k0 ]/*                                                                          */
: ^9 Q$ ~9 Y, T8 k5 C% M( c0 F/****************************************************************************/3 u9 N* h2 w$ @& E/ W
void GPIOBankPinMuxSet(void)+ @7 B9 J3 L( D; R* ]
{
5 l$ P9 S' F3 ~2 I  Y) T        EHRPWM1PinMuxSetup();1 I, ^3 ?" }( s9 a- }" r' K8 A

. ~/ }; s6 X, _! Z% f        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
% s8 o/ u" w7 }+ v4 K- s1 Q        // 作为捕获功能时管脚方向为输入
8 b; N9 L6 b  @) s; q1 X  R# Q; ~        // 作为辅助脉宽调制时管脚方向为输出
0 p8 g$ W' {( t% m    // ECAP2 / APWM2; Z+ Z, H$ A; n& g" ]! b
        ECAPPinMuxSetup(2);. A* `* ~3 v4 v" p

4 b6 L0 U# w0 p) ~8 l7 K        // ECAP2 / APWM2方向设置为输入
4 m' m. @& A" c. H: \        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
6 @3 i! C9 S" T+ I1 P}
3 {9 P# M5 W) M6 W0 k, o7 v
" V+ R- d1 |  x% F( Y/****************************************************************************/3 G9 Y; J+ ~" K) Z' {
/*                                                                          */
7 r1 W1 M2 _* F+ C# l/*              PWM 输出波形                                                */
/ i; p3 u4 X! {5 |# {/*                                                                          */% o: r2 \5 [+ T" z5 b
/****************************************************************************/% M$ y6 N9 D0 K: }& P* }. j( Z  T
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
5 E2 i% J1 P( N% c+ C{, B2 r; x2 Q3 ^( O, Z
    // 时间基准配置
1 S! }3 M0 J5 @    // 时钟配置
; g$ |# u/ M% V/ O    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);8 Z; ^* _9 A; V  x4 d
. ]9 j6 Y, y4 L8 _9 m1 r
    // 配置周期, y0 _+ H; l; g' `
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
% O6 N2 J1 `( y! R. \                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
. O. z- p  F; S; b' ]! {# z6 C1 @# \# l. W2 c0 |8 x" L9 S$ ^
    // 禁用输入同步信号$ U, m1 I' o" G
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);; E5 I3 l) o& z+ r
& c! J! N+ T) o( O2 t
    // 禁用输出同步信号1 |3 f1 h/ X; P
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
) Y2 p; ~2 P1 [/ W
) F1 \2 p/ K4 t5 F0 x( q    // 仿真(DEBUG)模式行为配置
3 {* r' Q4 I7 b' E: G    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
! ]; ]) Y9 e8 ^( {- ?
8 g1 W: S9 Y  m2 g+ P( u  A    // 配置计数比较器子模块
# M$ f  t! A2 g; l$ k3 [    // 加载比较器 A 值( ~& ]- F/ J$ k9 Z; z
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE," t. M; E  @, W) B
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
: T! _8 |- Z" C4 l' C0 u" F" E9 H. T! s( e
    // 加载比较器 B 值) s4 j& t7 b; f# L9 N2 N
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,( d2 ?$ `: q7 s9 S5 J+ m
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);! U8 @. B9 G" D. D) q

* d. `) e+ s' C' N    // 功能限定配置(输出引脚触发方式设定)
; T. I9 B* c& t+ \/ g; A' l    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出! {) a6 k9 F' p$ N# a- s
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,6 m0 ~. }% X& _! M5 D' T
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,* }# a/ J* {; }( Y/ z
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);6 r' i3 s4 f% M. K1 @; @, p5 u7 W

# r- A. d6 A8 f9 ]2 Y! n2 q9 D5 P    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
! ], h$ p& b  `! j# `    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
( n7 n/ @2 Y3 E9 X( D* V; [& E
5 E  C8 N& E/ A: R0 c  D    // 禁用斩波子模块4 A7 l3 J* t; T5 b
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
( ]8 ~% ?3 Q; v1 y' F6 j5 R2 q- W0 j. A
    // 禁用错误控制事件7 O4 Y# a# z( M& m
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);2 G# B" G. a. _+ p% s- }4 A( ~
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);2 L' l3 `# }$ ^1 @

. E/ B. d  v- r! D$ `) n, R3 ]    // 事件触发配置
, t6 S( P  r  K    // 每三次事件发生产生中断8 C0 ]1 E% B. x0 C
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);: |* k# G4 |, {2 j7 j
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
( g7 z3 J2 S9 k) s. v    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
3 ^6 J5 Y% \9 t    // 使能中断
) j& k9 k9 g4 t" i/ f; `    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
8 Y! Z; T/ s+ v( s  B4 i
0 |2 [. a! R8 _7 u5 J- _9 B    // 禁用高精度子模块
5 c% y  R3 v! r0 R4 Y% [$ L- j$ E    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);8 ?9 R; w2 {- s/ P

8 M. N) Q! J; L$ G    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);8 B5 m3 u9 l% B& o5 N' w
}7 a# w# o* }7 K3 x2 G6 m
9 `% ^) J. j+ h" b8 r
void ChopperWaveform(void)1 O4 H5 ~; Q4 O
{
" k) S, h6 T( q) |$ G1 l+ ?    // 50% 占空比* ^6 I4 h1 T1 P' `- E. Z* _
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);: S2 e  a" Q9 C0 u' c+ v( T8 E6 |
    // 4 分频
  h3 _, c/ Z) J  J. J' w' n    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);6 t( T# Y6 @0 i3 _0 X: n
    // 单个脉冲宽度- l' x3 |! v8 t. R
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
7 V6 ]+ e; d" T$ Y9 M/ F    // 使能斩波子模块
; C8 Z0 L9 I& F' X0 Y8 P1 u    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
+ x+ |( N  e1 r3 k, B}% ~! R. z8 B7 g& S
+ j7 R2 w) N, Z! r6 r
/****************************************************************************/
0 k" T# F$ {- q+ T4 n/*                                                                          */# [4 [. p) L2 A) Z; A
/*              PWM 中断初始化                                              */
' J9 r3 y( k  V) G" u/*                                                                          */
/ t# y: a+ T) v/****************************************************************************/0 I- R) F4 D) {$ N
void PWMInterruptInit(void)+ ^3 s- ^% D' `4 W+ c2 ^
{
) t  `$ P9 Q8 D- a# e; }        // 注册中断服务函数+ R& p2 o& N- C6 M. r
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);6 a! @' S1 {1 {' D
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);0 f9 @/ ~  t8 w& k9 L7 f9 @
9 T1 g( y, y0 Q6 Z/ Z7 O- Y
        // 映射中断
9 ?. j5 @/ M* E        IntChannelSet(SYS_INT_EHRPWM1, 2);
! M8 ?; s# N& T5 {: [        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
3 G( p0 ~+ D4 S) C; b
; ?' Q! j# o2 Z* x4 M, \" U% P        // 使能中断
% o& w) k8 {" s3 t        IntSystemEnable(SYS_INT_EHRPWM1);
* H2 `1 C9 W- g0 V# T        IntSystemEnable(SYS_INT_EHRPWM1TZ);/ L" a0 {- H$ G  \: N8 ^
}
# i* L  v$ B" \  K( |- C3 E) O" s+ [7 o5 X+ _% }: |
/****************************************************************************/
$ B3 z+ F$ p  Q# k' P6 U9 O/*                                                                          */
, A2 |& W! A. [. G% m* _; ?/*              ARM 中断初始化                                              */
1 p; C. c" a0 h) v( t' G8 g/*                                                                          */
. u# h  }( g7 U/****************************************************************************/+ Q6 {4 T1 T8 H: o/ n
void InterruptInit(void)
$ F& X$ _* S; |! l{
) n& b! r( j. |" R7 o$ O! x        // 初始化 ARM 中断控制器1 z  }# t5 K3 o  J6 u: B" J" p0 N5 c0 S
        IntAINTCInit();
6 Z1 K6 O- Q& y0 e+ v. C6 `" w: Q: W  z$ r' l( k& `
        // 使能 IRQ(CPSR)
7 g* P9 W3 r4 b2 o  z4 o9 {6 j        IntMasterIRQEnable();
& ~" p' x, g; ~7 ~/ R3 @( O9 C7 C, v
        // 使能中断(AINTC GER)$ r/ x% J0 w, S, i
        IntGlobalEnable();
) z# U) O( r. K  i
: U6 e: o- ]% Y6 `8 J, C& A  k9 \        // 使能中断(AINTC HIER)' v: k! P% y; J% ~& m3 o+ f
        IntIRQEnable();
( n$ {3 q% S  k! p9 p4 N- t$ x}
) C% }$ p. }- y8 i; I* l
% ^: I* C8 j! `' m# |! {% z9 B3 ^
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/. S, N; ^  j0 p. \
/*                                                                          */9 R0 Y% k! ~! X3 D7 D! T/ r
/*              中断服务函数                                                */
! e' G; a' d9 k/*                                                                          */
; j- S% S) d, ]3 b! p- H/****************************************************************************/2 v7 S# J, R+ l6 B5 `
void PWMEventIsr(void)
4 B3 g3 r" ?3 V" K{
9 u/ r: H8 L' K. F: J( }% ^        IntSystemStatusClear(SYS_INT_EHRPWM1);) o( `" p) Z* j5 m7 a8 B9 Z

6 t2 d/ t2 U- j5 c8 L4 Q    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
5 _$ L- x* b7 }; z}- M( F9 k. r7 b$ _" r
8 {$ R$ R5 r9 b/ d4 @# Z' Q
void PWMTZIsr(void)
+ t! F8 {7 Y: h+ {' B{  \/ Y* K7 n: n3 c
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);" l, w7 v5 e7 P2 H$ Y( s# K
, q/ t* T4 L1 _0 g1 [7 J4 R7 M
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);2 f- S, [& K; U6 A" Y! u
}- X' C+ f' e5 ]" O8 W+ k) C
2 r$ _3 X5 r( L8 s/ H9 P
/****************************************************************************/
; g9 M0 ]. f4 D$ U: p) {/*                                                                          */
7 U) d% u! i. o- x/*              初始化捕获模块                                              */
6 n# r) D: V& d! E$ O' A3 |/*                                                                          */
; H1 @. k: k4 _& _) x! V' ?/****************************************************************************/
8 F5 J* ]3 t" D' Y' e& d8 w" z- Zvoid ECAPInit(void)
5 m! ?# w' A$ m{! d  I+ N6 T- O0 l! \
        /*-----设置 ECCTL1-----*/; t0 l( \! t0 D: ~+ m3 P  x
        // 使能CAP寄存器装载9 [- b7 ?% ~% X; {' C7 Y; H
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);+ R% y- j" R9 }/ B; P% L
        // 设置预分频值.
2 B: @$ N' e9 k* a$ o6 Q        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);: p$ r8 K) v& i6 c: |
        // 上升沿触发捕获事件
, G: \& O4 f# q/ K  c2 L        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
+ Q% B* t. d0 s        // 输入捕获后重新装载计数器值.
8 \: K7 p9 d, L# k, g        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
5 `! k1 l) k# k. [9 _5 \3 r4 `) v5 I3 Q. [8 _) e
        /*-----设置 ECCTL2-----*/
: ^3 w$ j3 t. e        // 连续模式
2 \0 K: H) @: G        ECAPContinousModeConfig(SOC_ECAP_2_REGS);3 N8 P9 l4 W8 V* {( f' C) y
        // ECAP计数器TSCTR持续计数
: w3 }6 x  T" N% p  u# s        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);% Q4 Y, L$ y$ I5 N
        // 禁用同步输出和同步输入
$ \; W4 M. o: v6 w        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
/ i6 O9 }& G( b0 \) O: K        // 配置 ECAP 2 为 CAPTURE 模式8 s. q; o6 ~# }  j7 p
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);& E/ T( T5 y/ x

# C6 b2 H5 F6 j; [        // 使能中断7 n6 D5 g+ s) Z/ S  G4 H$ t
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
1 K9 Q# x2 D, E7 K* J}( d; ^' x- {( ]

1 M  U0 ]$ [7 Q% m. }/****************************************************************************/
+ l/ z% r  L5 R' g- V  v/*                                                                          */7 _% M5 f' X4 }6 M' W& @, P  v
/*              取得捕获结果                                                */
* u9 E" r3 z  l! _  j/*                                                                          */
+ r6 Q' C* P, M/ f; F3 B/****************************************************************************/! a% D; I3 Y; V: d3 v
unsigned int ECAPRead(void)- o. k/ G7 q0 R+ k4 x' R0 O; ^& Y
{, \# c2 _4 F% N$ p" ^. ]1 [
        unsigned int capvalue;
1 N5 _, h) N, H. L) X6 b8 t        unsigned long frequency;7 ]# W9 W6 U" P8 a

+ k6 ~$ T7 Q4 k3 K! M        // Event1 中断标志9 |# o( S5 F" U! K" Y
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
3 i0 [/ n. d5 Y7 R) e        {
) Q; r) ~* G$ f% [$ k                // 取得捕获计数
4 s. d% b" y; V% B# v                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
- B. a2 n3 |7 y- m                capvalue = ECAPResult.cap1;
0 D0 g0 N9 ]  S/ I; j  o3 ]2 D6 b
, u2 x4 p2 L/ ]8 Z                // CAPTRUE 模块 228M 时钟主频) F/ A/ O) F: l3 K1 r3 ^& |
                frequency  =  228000000/capvalue;" K# b) W, z2 ]
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
- @2 r# c" [6 u9 M, C  s
# O/ s  R: `0 [& Y3 [8 S# x                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
& Y  [( P$ [0 c% Y4 c3 i//                IntEventClear(SYS_INT_ECAP2);: x9 z5 X4 s' o& W( o$ B
        }1 X6 Q+ X3 d8 R6 n/ q- C/ M9 X0 E4 |
        return frequency;
- j! [: ~8 u4 `6 O}
0 N+ o- t4 y& l! v/ t
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。2 P+ @- S" Y  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-12-14 17:38 , Processed in 0.046497 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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