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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/5 s; c. h. T% E4 Y
/*                                                                          */
+ S; ?! q4 M  K- M/*              宏定义                                                      */, c5 j3 {. Z0 [1 y6 _
/*                                                                          */
/ n, d# [8 g5 s& y. t$ \/****************************************************************************/3 ]" q0 t5 M2 r* U9 N; V! }# n3 @
// 软件断点
" K- N8 s+ u" `: {- P- T+ @#define SW_BREAKPOINT     asm(" SWBP 0 ");
  Q( P( U! V( l3 ?6 h& k
8 Z, K2 g5 j& A+ G6 m0 M3 C& y0 A// 时钟分频
: s: _# b6 g8 @/ A#define CLOCK_DIV_VAL     228
! E8 r% j3 {( V8 `
$ ?/ k* g0 Q/ g) T/****************************************************************************/! Y* y0 H( S0 C: M. f+ k/ k5 V
/*                                                                          */
$ @2 f" o! |* O8 J/*              全局变量                                                    */0 l# i' k3 f( |( Z! {+ j9 Y
/*                                                                          */" F/ i; w, V" e# E
/****************************************************************************/! d9 \" F6 r7 A  p+ I0 d  Z
ECAPCONTEXT ECAPResult;
. F6 r" k: \& H- _( E' Y1 w6 Z# D  s' `- b/ H
/****************************************************************************/
$ M1 W7 O- o" Y- T6 h9 R2 L/*                                                                          */
- H* a: m8 W+ E+ Y+ \/*              函数声明                                                    */9 s3 y, e' D5 ]! C, p! P
/*                                                                          */6 k, Z& P  L( H$ H
/****************************************************************************/
9 c' a+ u0 f& [# S+ b5 n// 外设使能配置
0 Y2 w+ Z  J6 N5 w% {5 Lvoid PSCInit(void);; y+ c0 |: G9 Z* ]: I7 r
1 i4 G% N. V! \3 R: m
// GPIO 管脚复用配置4 K0 q, Z2 l5 z3 ]% I
void GPIOBankPinMuxSet();' r$ E# |2 l. v4 y5 I3 o% ?

6 s4 A- K7 s5 I8 b// 产生波形
, l( }. z& W2 {3 z/ N. I% `void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# G2 y3 s4 L; J6 {2 |# H& ?" svoid ChopperWaveform(void);
/ D4 `3 e: B" F6 Y8 J; a& z
- |. I. j$ G' i. {8 |1 r// ECAP初始化和读函数
& d7 o0 [1 V9 B8 s9 xvoid ECAPInit(void);& E9 O9 F6 |' s2 y6 y
unsigned int ECAPRead(void);) J$ x' o& r9 m* m% k9 x
2 J; o( E6 Y" {
//ARM 中断初始化9 ^" H0 o" j9 q- k7 s
void InterruptInit(void);2 r2 o' z+ [% t7 C! {* E; H
$ o: n- t6 @0 ]' @1 q/ O- I
// PWM 中断初始化# r% W, p1 Y" J; N& D2 t
void PWMInterruptInit(void);2 A* h3 Z. U$ q6 }& O$ S* K( V
// 中断服务函数- k0 e; h# s- S3 A0 P' y) D: x
// PWM 事件( l  @% Z7 `; y$ i+ ]! h
void PWMEventIsr(void);
0 {( g  s$ _6 A+ b, U9 ?6 Y0 E8 a9 P// PWM 错误控制事件! U* y( ^2 h( k! _: S
void PWMTZIsr(void);0 K  |+ u1 n  i  @

( x/ [+ O# m6 r+ C7 D, |/****************************************************************************/
5 |) l: Z2 J- \4 y# H2 s/*                                                                          */
. K& O0 G. k  e" P" F/*              主函数                                                      */
6 M. p4 E) C) B& D/*                                                                          */" d2 t% G( e1 a
/****************************************************************************/
1 l9 j  m: W7 n5 v; g6 G: _) F) [4 Wint main(void)) D2 F& G0 N* h8 H9 P
{
+ n) V5 u5 I. k+ ~1 y        // 外设使能配置9 g  k9 D2 H, p& D
        PSCInit();
; U0 Q- }+ D& t/ @: {' b+ W7 p9 l8 M5 @' v4 d  d9 K  B
        // 初始化串口终端 使用串口2! X9 D' E" w# {
        UARTStdioInit();
" q* D- r* a) a/ J  }2 P, U' I        8 p  k" W( D0 Y* G# W: i
        // GPIO 管脚复用配置
1 L( E0 ~2 C7 H' q6 `2 ~        GPIOBankPinMuxSet();
% i; j7 d5 @1 \
4 o0 S9 B% a8 i# r  R& n- f        // ARM 中断初始化! \: S% Y7 x: h) f; i" R
        InterruptInit();, |3 S7 z$ R. c' [
2 p' T* N* v/ y) Z/ }* o
        // PWM 中断初始化
8 V* |8 V# s* f$ @! P+ O/ m        PWMInterruptInit();+ p& z8 O7 D) I1 H
8 ~  ~' m, d7 Z. z& x$ }+ g& c% }
        unsigned char i;4 n' i; Y+ g- p1 p
        unsigned int j;
3 Q7 c+ m/ w) B$ G3 V. X2 K  j9 z0 R, ]4 r0 L& v
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
; X4 n: B# \& n" A7 g        UARTPuts("------------------------------------------------------------\r\n", -1);
- w; e& k& e3 P" J9 Y0 @8 l        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);' Q6 ]& @! P6 |& g$ e: p
        // 产生波形+ T, L+ c, |. ~/ V, ~1 z. {3 p. E  F
        PWM1ABasic(25000,50);
" _: Z4 O& R3 f! {' H7 C3 z# P) T( t  c5 {! B$ M1 D5 M/ V) t8 v
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);6 m- l' ?- z; ^. R8 C9 S! Z
        UARTPuts("------------------------------------------------------------\r\n", -1);. k" A# L  W$ z/ S! _* r
0 |% V% x$ S, Q0 e: o; u
7 a0 ?: [9 b' N1 [

8 [; a& E, b" `; A$ c. ^        UARTPuts("------------------------------------------------------------\r\n", -1);
- b1 r- N$ w* ]' X# Y' b        UARTPuts("                    C6748 ECAP Test\r\n", -1);
& t* k% G+ d, F) D$ w. [" Q, ~        // ECAP 捕获初始化
8 w' ~' q5 \" D7 ]% g        ECAPInit();8 M/ |5 ]* o  L
        UARTPuts("Initialize ECAP.......\r\n",-1);0 I2 M2 e3 x( y3 Q# h. U- Z4 t, L' `# Y
        for(i=0;i<5;i++)! ?5 E" _3 g3 T  Y% E# W* ~! E* c9 x
        {
8 F; G, [& [  V& z) C                    for(j=0x00FFFFFF;j>0;j--);            // 延时% ]7 ]/ k0 ^2 [' m& @, k2 b( ?. J# X
                    ECAPRead();2 ~7 h2 n" q3 m) j+ e1 W
        }
; R! L2 L  R& \/ ]9 a        UARTPuts("\r\n",-1);
2 h6 }4 W; P0 ]* d        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
" Z3 R& j  j4 n4 K' L5 C/ b( ~! ]        UARTPuts("------------------------------------------------------------\r\n", -1);
6 I) A- t8 Y5 O/ w8 `; Y5 [1 V' ^( q3 b7 W$ ^
        // 主循环. {( j4 m* ^3 {- I7 i' R% {
        for(;;)) A' I4 m8 a) F1 V
        {# |; j7 ~* J9 z+ U& f, Y2 g

9 u6 L! G+ f1 M! F5 R4 ?        }" [! u, Y+ }- f) d3 m1 {
}% u6 {0 e2 M- f( G& Q) g0 U( F; s
$ j0 x7 G7 G3 ?5 X
/****************************************************************************/) o; T3 ?3 [6 E
/*                                                                          */
" l6 a1 D( F- F" C; ^5 t7 m6 h3 A) V/*              PSC 初始化                                                  */
  s3 F5 _& W4 h6 y' H0 ^, S8 x% S/*                                                                          */3 B% {% x# o  n* V5 ?
/****************************************************************************/) Y% o( c( Q+ o0 {. h# G6 N2 w' F
void PSCInit(void)
& O4 \( x8 k2 w0 H{% t! j3 S% L7 s% J/ y1 [1 Y) p- P
        // 使能  EHRPWM 和 ECAP 模块: o4 K+ c5 G. Y8 Z  J
        // 对相应外设模块的使能也可以在 BootLoader 中完成; j2 \' J4 \0 R0 P8 e
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);. r0 F3 E7 m3 {0 c+ C" b5 s
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);7 o  F$ p, V8 I: p4 K+ F
}
$ F5 z8 t% N, u7 l, D7 B; n8 {0 {/ G( {& y8 @
/****************************************************************************/
) v- b( t$ d4 `/*                                                                          */( l3 T1 H& h" l0 n9 j
/*              GPIO 管脚复用配置                                           */
4 x2 w% m* `, `: I$ h* y+ a/*                                                                          */* q4 ?4 H# k8 t1 @& J
/****************************************************************************/
/ c$ H/ W3 \7 o" o- x5 v3 Evoid GPIOBankPinMuxSet(void)* |  m2 o/ K9 s0 a' d
{
0 ]8 @4 Y- ^' v, D        EHRPWM1PinMuxSetup();
" O# j4 M6 P1 `
7 m8 J& z2 V0 H8 }' J% I3 W3 ]        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
6 T) l$ o1 `/ c/ P1 [        // 作为捕获功能时管脚方向为输入* C* ^( n9 N# q2 y! H! b+ ?* s
        // 作为辅助脉宽调制时管脚方向为输出
9 O$ y2 _( `+ `  ^    // ECAP2 / APWM2
0 o/ [" l/ @4 ]        ECAPPinMuxSetup(2);2 B$ p1 [# F4 j" x3 H7 X" M
% U( K+ h* {5 T# W0 _& v
        // ECAP2 / APWM2方向设置为输入) u4 h+ T6 B  {) u2 }0 X1 w: S
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
/ o1 N9 D( O6 F9 d. c9 {}5 b% a; H; x/ ^: A2 p+ q: _

+ F8 V. e, ^, ~/ d* I/****************************************************************************/
  u9 U, W+ C. L- M- G/ x/*                                                                          */
* p) ?% B. s7 l& ^1 i/*              PWM 输出波形                                                */$ P7 G% B7 a" T8 Y
/*                                                                          */
* |- n4 @1 w! A) E: e- q# `/****************************************************************************/- C1 F- q! O& ]- m1 d& w
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)6 q- `$ N' V: A
{, c: l" Q: h5 j# c; {3 k
    // 时间基准配置; Q& Q5 f9 F# G
    // 时钟配置
' Y% ]: H- H& D8 {4 Z    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
' |" \: L8 T; D) G9 N- ~, J0 j8 [, H  f8 f
    // 配置周期! y$ a+ w( I% M
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
  K3 g/ f4 K( A                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
' h, b: O. X9 n5 w; E5 o- L& A7 ^3 s  R
    // 禁用输入同步信号
9 [3 r% T5 |8 D7 Q& u6 G    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
" ~* j' r/ s- t2 i. c
3 T4 w4 m. D7 N8 f    // 禁用输出同步信号2 l" z9 j% q& [& m, N9 z
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
+ G; f0 ]' z6 k# u1 `; x* J2 t9 w8 o( T8 t4 J6 X; g
    // 仿真(DEBUG)模式行为配置9 j+ [2 ^$ j* S
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
, k% j, N. k. f7 z0 o( Z* J, F& F; Y6 V1 i7 w0 n
    // 配置计数比较器子模块
4 `0 l" M' \. c    // 加载比较器 A 值6 n$ f$ K: q. F+ Z! H0 X
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
8 t8 s0 o  @- Z0 K# I4 c  L4 ^$ ]                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);: `% e# d/ x8 X" P
! _7 w$ J5 t9 ^
    // 加载比较器 B 值1 u' P; o( D9 P1 P3 \
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,* i! {! V6 N% P
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
" J& P' D* Z: e$ `; z* b0 A; B* S. H) a* Y6 q
    // 功能限定配置(输出引脚触发方式设定)
( e7 A' A+ T: V) E    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
" {3 a* g' ^& y    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
5 ^7 \- w  K  r! l% q: l                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,6 y$ t9 j, c8 x% J" Q  L& D
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);: d7 c. v5 p7 }/ j, c; x) i5 P

; t, I: |0 C) T& {7 n1 ?! J    // 禁用(旁路,信号直接输出到斩波子模块)死区模块9 m$ z5 T/ @1 w# N! g
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
6 _! ]" K1 M; |4 C+ K9 ?! N  L) m- a7 z* n2 ?5 K
    // 禁用斩波子模块
8 A: X: g% c% z. R    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
- {* r4 z9 T0 ?& o
! r; }* F' x# p4 ]    // 禁用错误控制事件
  {  g& O7 U) x    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
. A$ i+ C# o7 m( U    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
/ y% b$ Z# a! V9 p" G% A6 f# e; }4 K5 k' |2 w+ W
    // 事件触发配置6 T3 o% A) k$ @- A3 \3 T
    // 每三次事件发生产生中断
0 y, `6 C( k5 t" d9 Q    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);3 ?% d! J+ y! }4 t. U7 T, m
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
9 Q7 \8 m3 W' a  P+ E" W2 @    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
/ [6 p- w7 S+ e# P8 K    // 使能中断( u! L) R3 X0 h$ ]( [/ C
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
% \& ?- l: W2 o3 f
; r$ G) e) {7 T. Y/ z$ i    // 禁用高精度子模块  r: N! M! r7 r* e
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
, W4 S$ J+ |+ H4 b
- A) E8 H( z+ e" H    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);9 m' I' r& S4 R$ [/ w
}
/ i0 F1 r5 @, C/ Z9 p! }0 r
2 x1 x' ~  w) s* ^6 e6 U5 fvoid ChopperWaveform(void)  T0 m( _0 ?4 A/ n/ O3 ]
{
: P% [2 I; N  T    // 50% 占空比
+ D# \9 G% h! U& s    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);3 F; \- d) b9 ?  T/ C
    // 4 分频
8 w' I8 K7 c0 F1 _    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);) I" d0 o$ a& R& @" }+ u9 G& L, H
    // 单个脉冲宽度  {# }" J/ I2 U5 h+ W' B1 m- z
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
+ C- {1 w# z9 i, B0 o    // 使能斩波子模块( I6 r* H% t0 \$ M- B* N/ }
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
! X$ r: {" T7 \0 U}
! z4 m3 K2 Q2 S% L: a
7 P' }: |# m6 S$ B* \/****************************************************************************/; s" i* Z! ?/ I" A8 C
/*                                                                          */: W$ j/ H' Y- I& v
/*              PWM 中断初始化                                              */; Y( b7 c2 t9 O/ \4 a% _
/*                                                                          */0 [" Q2 r; B) W4 h3 P5 k" `
/****************************************************************************/
$ I6 r& {8 M  t5 z' Svoid PWMInterruptInit(void)3 T+ m* H. M( I' T- f
{3 d) r! W8 o# o8 ~
        // 注册中断服务函数
* n6 @+ R/ M8 o& N( R/ W        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
% D' q$ h5 i) ?0 ]7 |        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
9 Y# v% M  i# x. L9 @/ E4 o7 V
        // 映射中断
2 x. G. o; O9 z0 q9 B. |- [        IntChannelSet(SYS_INT_EHRPWM1, 2);! F" t" f6 v6 p
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);- N) A' `* w, O" z: w9 i

. ]6 v' ~2 ~8 r* f  I# X        // 使能中断8 x" n8 L+ C$ S
        IntSystemEnable(SYS_INT_EHRPWM1);% o4 j% i4 X1 J! @
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
" J- L- |' l) m}
" p% q+ Q! Y8 m
( U& a. ?' d) `, m% X) l6 ~1 P' K8 j/****************************************************************************/
* V" }0 i8 @' v& Y/*                                                                          */
; b2 m$ v: O6 f- H, K/*              ARM 中断初始化                                              */- Z6 l' [) {# U  J. T3 D9 ]- W
/*                                                                          */& h" E% L8 _" e- U5 Y
/****************************************************************************/
4 [3 l6 k1 q$ @/ z" E2 bvoid InterruptInit(void)
' \* \1 }6 H6 v# }: a{
0 M7 n0 R8 a; R. e( Y        // 初始化 ARM 中断控制器6 v. k* l7 }: `. z+ R' D
        IntAINTCInit();( T; A+ x: h. Z! m6 e4 j

. Q) B; Q8 w4 }. i        // 使能 IRQ(CPSR)
5 u7 i6 t! u0 O; k        IntMasterIRQEnable();; O  L- V; L. U1 P/ O) H# }* E
( B& j- A' _0 L0 B% ~" A
        // 使能中断(AINTC GER); _3 t# a' ~$ V+ F, ^
        IntGlobalEnable();
8 J2 u- t4 I4 c2 u7 T  }: ]9 v
+ E7 ^5 Y; T' U) h- s+ Q        // 使能中断(AINTC HIER)" X. L6 z. @* J2 C: A; L2 u
        IntIRQEnable();
$ Z  ^- C, u/ F/ N}0 y7 r) b! O$ Q8 D/ B9 i
' o6 W4 _8 x! U8 i9 ^
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/2 h) Q5 B5 i! F6 \& c) W
/*                                                                          */. |9 q" O7 l# B- Q
/*              中断服务函数                                                */- X/ {' X6 P7 f1 W+ \
/*                                                                          */' _* q. r) Q( n& r
/****************************************************************************/$ Q( V0 t. B2 Z6 x
void PWMEventIsr(void)5 ]  X1 @, ]: c% }$ P1 h+ h
{
! J, p- U" u1 V, j* B8 [        IntSystemStatusClear(SYS_INT_EHRPWM1);# ?* X5 j* `$ N: H
- G, k# L5 R$ E7 b8 m1 S. z
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
& r& N, E$ m& p- |$ J4 \. J4 y+ p8 |! ^}6 V" F7 K: P1 w5 k

( y" }, I* `+ F5 Y% E# }6 V1 uvoid PWMTZIsr(void)* k& c. Q. R# N. Q
{
# M: r+ {/ K$ ^) p6 ~        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
6 Y9 v/ K' J/ w, y( E7 E- T
: }8 E$ J- ]3 \7 H7 L7 k9 X. O    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. g# `5 Y6 s5 s8 \}. _4 F. n0 m8 b, Q) L2 e* k
% Q- ~/ e+ T, A. j. }& n3 i
/****************************************************************************/
, T' s; }, @) r/*                                                                          */+ E  J, G' M0 p, {3 l; k5 `6 j1 h
/*              初始化捕获模块                                              */  K2 q" X% e6 l/ f8 Y# p  T8 c3 o
/*                                                                          */
5 G3 {) q4 [( `; A2 B/****************************************************************************/2 M5 U9 ]* l# T$ o( R3 X# C1 k
void ECAPInit(void)0 r' {  V$ K# l+ U/ P  e
{
  ^# {# U- J! s- a* U6 V        /*-----设置 ECCTL1-----*/
  S5 g- d% b( @. `5 x/ h        // 使能CAP寄存器装载
; j" U- n$ |, L: v        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);+ a( V7 p' n: e& z) ?
        // 设置预分频值.0 ^! m% \1 A0 D& Z7 H% T0 F
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);# J! w* F, t0 @8 @( h
        // 上升沿触发捕获事件
  @0 m5 A) J3 X5 @! d/ n1 j& E) Y        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);4 Z; n2 c  c, F; g
        // 输入捕获后重新装载计数器值.
" x) p% g, c* L( ^) z; `        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);% Z: x! S' @' U; X

- K! b' d0 o. E6 P  _* t        /*-----设置 ECCTL2-----*/
5 G$ N& g0 N, B" u* z4 A. S/ T% I        // 连续模式9 ^! o' L* K- O- F: M
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
2 p. [1 ]3 [9 R3 p' m% w        // ECAP计数器TSCTR持续计数5 \0 a: V) u* F- E
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
2 `! O4 O/ p5 X7 Q        // 禁用同步输出和同步输入. @$ W% q8 X& k1 `  ^5 W* i1 v
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
, W7 U( r* \1 o+ r) ?* y2 a        // 配置 ECAP 2 为 CAPTURE 模式
" |" S8 [$ o, B& y/ r        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);* j5 Y) E4 {) q# ?& F( m3 G. p

/ _0 y+ p' @) t( ^, m/ v7 }        // 使能中断" R+ |( ~0 S% }& V
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);5 W; d3 m: x$ d1 N2 }8 J3 S3 V
}$ y1 k0 _% J/ I% g0 N+ J
7 k0 M# `! V! k3 ]/ V
/****************************************************************************/! S0 j4 j% M# H. Y* M' p7 D
/*                                                                          */
$ C: H) D% q: U! Z4 y7 s/*              取得捕获结果                                                */
& G$ I- X( g8 t6 u/ M: p9 F/*                                                                          */
2 y. q& `6 r6 r4 S, \2 j) ]1 I/****************************************************************************/; t! U. E9 q( C: M; g/ u
unsigned int ECAPRead(void)
9 S; g1 \% A7 f& i{
/ m4 O* G8 N" \/ V5 G4 j5 S        unsigned int capvalue;
" c  _- b2 N& h2 A9 k3 o/ ~        unsigned long frequency;, N8 ?( g+ D, K& w& r: T& w' l3 Y
3 \% A' _( K3 [: t
        // Event1 中断标志) M+ B" l5 V% c2 U5 z+ p
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))  q6 x+ }$ \. J& W8 O0 ?/ ]
        {6 |* `' x$ I* t: C! u5 X
                // 取得捕获计数+ r* N, _' L+ @0 C+ g; L% `
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
2 Y2 @# j  w6 B- I  v                capvalue = ECAPResult.cap1;/ I4 E( G: _: x) _( A

) ~1 }8 a3 T! F* O  M                // CAPTRUE 模块 228M 时钟主频6 W' v8 j) k' A2 l! e1 y' G
                frequency  =  228000000/capvalue;% |+ A' G  ?; P4 }9 O
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
' O' [7 ]" Y2 ?; V( g; ^* }/ L# i2 r
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
* n' [# x1 j. Z//                IntEventClear(SYS_INT_ECAP2);
4 L7 Z; O1 O5 `4 P& w2 ?, t8 S        }
4 D$ e6 D8 D5 {. I6 e6 d        return frequency;
1 ~, l  b# R/ L8 K1 ^% v}6 T* [* l- T+ g  `
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
( w, S2 A4 O3 y/ J7 x1 F

本帖子中包含更多资源

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

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 18:18 , Processed in 0.047717 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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