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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
3 T& ~) {& s1 M  {4 f7 w8 o% @/*                                                                          */
/ \+ ^. P8 h6 N) \/*              宏定义                                                      */! y- y  J% |" _2 V, [
/*                                                                          */
4 }' o% n, @2 Q/ ^" `/****************************************************************************/
# P9 f9 m$ w! g, h6 P5 {// 软件断点3 q$ q0 F) Z7 g/ `5 y. r1 C  Z
#define SW_BREAKPOINT     asm(" SWBP 0 ");4 S/ @; z+ ~# s* B" `

9 K/ e+ _( f) b5 u, u' Q// 时钟分频; E3 S4 L9 [, c8 e! e5 J8 W
#define CLOCK_DIV_VAL     228
$ w& X+ I& \4 k! \& b5 V! ^) a; h1 m; Q; _: @" e" h
/****************************************************************************/
& q' Q" U5 W) q+ F: s" W5 G/*                                                                          */
* N* j0 h% p8 X  B/*              全局变量                                                    */: T- v/ `  H# x% |
/*                                                                          */
* [6 o- v: g: r3 S/****************************************************************************/
% g/ z  y) p5 {  ~1 yECAPCONTEXT ECAPResult;( t# Y, B8 r$ }8 ~" G

! N/ A9 q8 U" ]: S( z! U3 J/****************************************************************************/, ], |/ J. C% N6 J
/*                                                                          */$ u6 Q! S4 L$ `$ B
/*              函数声明                                                    */
" Q' U% r3 @1 H6 y/*                                                                          */
( w4 s7 b; M6 \/****************************************************************************/  ^; ~6 a1 k* N, @2 H4 f* f
// 外设使能配置$ B0 p  ?% r5 G! ]0 d4 @
void PSCInit(void);  }0 n, L# ]2 i- K  s
0 R; o# _5 u8 k2 \8 n$ T, v& j7 t
// GPIO 管脚复用配置
9 s/ P* L# c* Cvoid GPIOBankPinMuxSet();! J, t$ `( Z+ d. n0 L
5 [; ?) q; D' Q' A
// 产生波形* |# E6 }7 X6 g1 p
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
, Y" m$ N3 v  @7 R5 i! O1 D2 S1 kvoid ChopperWaveform(void);5 [! R  A% f& r" \# v' Z
3 z: w/ L2 W4 i# C/ Q0 t
// ECAP初始化和读函数# P$ f: }& ?1 V8 ~
void ECAPInit(void);
5 U; M( g! |( I% X% K- B" Aunsigned int ECAPRead(void);
+ r- M* y0 V/ t3 s0 o/ f) Y
" F$ f+ y% a+ @: z5 A//ARM 中断初始化
+ ~& h# X! m: y! jvoid InterruptInit(void);
0 e( k: S5 c+ F4 y
7 q: I9 @; M2 T' x// PWM 中断初始化
+ t; k7 o: e$ ?7 ]  R$ Qvoid PWMInterruptInit(void);$ Z" h0 \( o5 X/ E; b
// 中断服务函数% ~- \. \( f$ m4 ?- g0 G8 W8 d
// PWM 事件
. ?6 v& f" D3 N! u$ g( x& v1 t$ Bvoid PWMEventIsr(void);2 G7 c* s- h+ @' w+ d
// PWM 错误控制事件& C5 T# M: d: F2 h! V
void PWMTZIsr(void);% r0 V5 H$ \* R/ V7 D% {0 j1 i# S

+ }) i8 b. S8 U4 }/****************************************************************************/3 Q. B3 V2 }' ]; J4 [' M
/*                                                                          */
" `- E: M( X+ Q/*              主函数                                                      */
3 a' o) Y& [& R, v) V2 s/*                                                                          */& X' L* K' C; ]$ R3 R
/****************************************************************************/
$ z5 g9 s5 K* }4 W# Jint main(void)
5 c) e# J: w1 y& M  B! |2 H{
7 [: H$ L, x2 F* |+ r+ h+ C        // 外设使能配置, Y) a- h+ u# W% L
        PSCInit();- G/ r. e/ N+ G% ]/ b
* f3 t% P0 ^) U( I1 D
        // 初始化串口终端 使用串口2
( U7 V0 S- s5 a$ Y        UARTStdioInit();/ N) q6 A# O- d$ c  s, G' R
        5 Q" N% O) ^; l4 \2 \
        // GPIO 管脚复用配置% _* _+ i8 j1 L9 h5 f; k
        GPIOBankPinMuxSet();
1 {+ k2 l6 V* S( Y% k( Y. D. h: |1 P3 N
        // ARM 中断初始化
1 X' n2 y( |: f) E8 K        InterruptInit();+ A+ T6 O3 m% x+ D5 t5 I
% ~) [0 G( \! B: Y8 q
        // PWM 中断初始化; R8 G' d: ?2 ^
        PWMInterruptInit();
! P6 A, t6 H- o5 G6 B5 s+ y6 W! Y1 H2 J& X( c  W: R0 q
        unsigned char i;" Z- P9 W) m; e5 \( Q
        unsigned int j;
! I1 Z& E9 h/ `& V
( n6 w7 j  H/ m; _$ ^        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
6 B2 ~/ ?* I( r$ T0 E4 Y        UARTPuts("------------------------------------------------------------\r\n", -1);
: v* Z0 I* ]2 }) w; H        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);9 j% ~& w7 q6 p) [7 j& z
        // 产生波形
( B; J1 k+ v0 |: ~& D2 R1 k        PWM1ABasic(25000,50);
/ ]# k8 s( E5 K" s: R1 a' z* ?( N8 v
! f8 a& f4 k9 I( \! V& q/ C        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);. m. ^  x6 U* n; V9 A
        UARTPuts("------------------------------------------------------------\r\n", -1);
& L" Q- a2 y) J! ~+ y0 h6 m
1 R( c9 @8 F! u! M4 Z3 k4 p, \. I6 i6 @8 M

- W; x) f0 Q' P) a3 J1 d        UARTPuts("------------------------------------------------------------\r\n", -1);, z+ J2 \8 M7 y2 Y* J
        UARTPuts("                    C6748 ECAP Test\r\n", -1);& h, H; O: _9 v
        // ECAP 捕获初始化
* b9 _# Q/ e2 i' P        ECAPInit();
* Z" s- e4 e- \/ W; w: w) m        UARTPuts("Initialize ECAP.......\r\n",-1);
8 f. J( j- r0 G5 B        for(i=0;i<5;i++)
* H+ u/ u+ _. c. e# s& O        {$ C& _8 `" r# x& Q( F* S
                    for(j=0x00FFFFFF;j>0;j--);            // 延时0 ~3 w( Y7 g2 m8 b2 b
                    ECAPRead();
$ P* W( S9 k4 W: n$ d* I        }/ c, ^1 `) t( G& l
        UARTPuts("\r\n",-1);
& F6 D$ U$ {% A1 k        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);$ d6 C, d3 [3 t
        UARTPuts("------------------------------------------------------------\r\n", -1);
6 y) C# J& j3 [$ k8 D0 W+ F% a
        // 主循环
' o- F- [5 u% k( a5 r% P4 _& h        for(;;)1 F5 |9 G' s& X; c
        {- X' E8 ]0 j. V
/ P. i: P+ L/ ?8 H, @
        }
' J* b8 C2 t1 d6 x}
) }) N" B3 ~$ V' v% o) V1 `- c* q
/****************************************************************************/
+ X% G, g) g& L3 o) V+ N- ?/*                                                                          */
. Q* M4 c' G8 I( ~* `& i/*              PSC 初始化                                                  */
6 x- z" C5 \, G/*                                                                          */
1 N2 `4 C3 b8 |4 Q/****************************************************************************/" ]+ x' a7 ]8 i3 d
void PSCInit(void)
& q4 w  ~7 e: ^& \5 Y4 b! }{- T0 g6 {( n3 q6 K; D& ~. U, N
        // 使能  EHRPWM 和 ECAP 模块
5 P- @. t! Q$ n1 R1 @2 b        // 对相应外设模块的使能也可以在 BootLoader 中完成
: i2 s7 R. v* E. p9 _# h; J    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
2 j8 m; l3 v4 X( n    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);$ X! T8 L0 [- [5 {: F
}
0 P$ e: p4 K" W1 ^5 K
, K) \% h0 J  [  [+ b/****************************************************************************/: M; m8 c8 ?* ~" u2 @! ]
/*                                                                          */0 L3 m- K$ n- F8 z! d
/*              GPIO 管脚复用配置                                           */5 E* c/ F, i: ]+ I9 y: Q
/*                                                                          */* R9 W8 a# o% C  k
/****************************************************************************/- s) C& N0 T. D% b5 V% U/ T+ }
void GPIOBankPinMuxSet(void)- ^7 q: ^2 z& m5 _$ V5 b6 Y
{
# B! q- `6 A) l* |0 o) J+ l* U; v        EHRPWM1PinMuxSetup();  v2 D# j6 I+ o; n
( U' u( H$ a0 P! U, A
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)- m0 v0 o3 a% L& d2 r
        // 作为捕获功能时管脚方向为输入
2 q' p; m, `/ K. y: i: I        // 作为辅助脉宽调制时管脚方向为输出$ o0 p0 k0 K+ X2 z9 }8 A
    // ECAP2 / APWM2
& D$ @/ B% R# |: F        ECAPPinMuxSetup(2);
) ?3 {$ B1 y  X6 b0 k6 F
* @9 D% B0 U3 y2 K: ?* d        // ECAP2 / APWM2方向设置为输入- J3 {% s- F' K( Z; x$ Z
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]0 l4 S  v! w& x4 L# D
}
1 C: i% G, v8 ^- x3 F9 C6 q5 @9 q0 C# p0 n! f/ Z$ ^' n! J4 K- d
/****************************************************************************/
. |9 f1 t! Y6 i6 N* ~; `7 [  b/*                                                                          */' ~" `" V6 d, \/ Y- ^7 c9 W' q
/*              PWM 输出波形                                                */4 o) t3 Z0 J( w% @. p( Q( G
/*                                                                          */
5 k8 @1 L! _% Y8 e9 b/****************************************************************************/
. e3 G9 j0 F, F0 I3 R: lvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)9 U! D3 N/ t: k* s) u, ~
{
  }8 r" `5 j% x: N& N8 ]# I/ P- v    // 时间基准配置( b# Y1 O: ^7 U; F. k$ X
    // 时钟配置
( D" T3 I: R9 x4 H: K' j( @    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
" e+ J% q' s0 P: U  A3 _: j
& ~$ g1 A! l2 H    // 配置周期4 U/ `- @2 p( {
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,8 ]$ t9 ]2 e( G
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);* ?2 b) P2 y4 [: d

' e7 `( t. e( T8 V0 t9 C: f/ T    // 禁用输入同步信号
$ U1 P% t4 c  f* U# ]/ j4 _4 k    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);! x! x- C+ h! j/ q% |1 k1 D
8 h5 a6 T+ h9 {5 k  ]
    // 禁用输出同步信号* Z  q2 p9 I* d9 Q$ O
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
1 C# F$ t- m1 J3 d/ C2 E. ?' ]+ j( h6 f: u, a6 Z
    // 仿真(DEBUG)模式行为配置
  F3 F$ M( N* O    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);" H) @9 \- K6 T. n9 }

8 [& f+ t* D- I0 T4 k6 \) x    // 配置计数比较器子模块5 |  Y6 e' x: N9 I& |9 ?9 H$ H
    // 加载比较器 A 值
! G% ~! @6 o* G9 Y) |# h) F    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
& R  h) A5 z# _                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) x% f5 g( W! I* V3 ~  @: ?

* a: _1 K/ E: I" ^3 t    // 加载比较器 B 值
, t) Y1 ^/ j) b1 n    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
& j/ N/ A  E) r% W7 ]; j; f3 W8 Z                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
3 \- k9 P3 H7 m+ x
% N! s% k; |7 g7 }% t+ |    // 功能限定配置(输出引脚触发方式设定); O- b7 G* J2 `: y4 m' ?! j  q
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
$ H$ x: r& y& }    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
" Q5 H; ]3 c2 M# n/ ~. h$ f7 p                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
' Q1 P: F. N5 K                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);/ Q3 }) X9 i  S

8 {6 i6 l# q% V0 K* I* d1 p: J    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
$ a0 H$ W+ v* A& \2 x    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);, ~5 }+ H* ?5 O# d0 V

0 c( U* e. n4 ?    // 禁用斩波子模块: A0 O6 P* G2 e2 X  r
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
$ `: v. _* T1 A; z4 p  ]; X* o3 ^' u8 S8 [" ~+ |6 C1 ~2 m
    // 禁用错误控制事件
7 ?+ W5 X8 `  w* M    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
" h/ S$ X0 S: }; P) V; L3 T    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);8 z, e. H: B( |- A9 x, s. D$ Y

) B, }' p) j( j' D) v9 R  ?    // 事件触发配置
: N. `- O2 C! M$ y    // 每三次事件发生产生中断  p3 H- S/ q% z2 T0 j0 p
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
4 M1 N) f0 e+ x    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# S0 p0 ^% u/ s    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
0 Y8 j/ K1 A: ^" k    // 使能中断# N+ C: |5 b5 n0 z7 N2 S
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);5 I2 ^- a) ?4 c3 u5 j

3 A+ z6 B. a9 n4 s    // 禁用高精度子模块; [* K" k' X% H( C. l
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
! r5 k* d) c9 _6 b4 y; Q) c6 n# J1 b& G9 L# ~; Y; n
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);3 k9 c" v2 n6 g: H; g# u# P
}
2 \+ |$ j5 ~' y( q4 A8 k0 a, F& a
void ChopperWaveform(void)
! `1 Q) l# T& ^" [6 f! n{
0 r) ?6 y8 Y' w* ^2 i: c8 `  s/ i    // 50% 占空比
+ V' ], U* O6 ^8 r: `    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
" p9 N, L% z! w. |% M( U3 k    // 4 分频' A. J( F6 E; Y% D+ _4 X+ A
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);8 E' P: x4 o; \
    // 单个脉冲宽度- ?2 j, I0 x: i  B7 F
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);/ \( Y7 a6 o+ T: c  n$ X1 G
    // 使能斩波子模块. q; `% B% k/ C& u. U7 L) H' W
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);1 ]  ^  t; X/ \6 T( _0 n- v% M
}
. T, Z% L* H& e0 J. c
) \$ @# K2 l' X2 E% g5 X1 f/****************************************************************************/6 Z5 W& K1 j+ N& u. T
/*                                                                          */. u8 P. F8 L- t( `
/*              PWM 中断初始化                                              *// S5 d, Q  ^) J  ^* K* n
/*                                                                          */
3 d- V5 N& l' M  `; ?6 [/****************************************************************************/
5 L% y# f+ O& k/ _: o: fvoid PWMInterruptInit(void): D8 Y# Z, O5 c: V1 I
{
# x0 F! Q5 f. x2 o        // 注册中断服务函数
7 h6 Z9 W) [1 @- \3 j! |0 l        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
- {+ e* C+ b0 ?* }2 U        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
$ ~8 B1 Y5 s7 ~) t7 u
  m/ K( I, O: f( X        // 映射中断& @4 w( h) v7 @
        IntChannelSet(SYS_INT_EHRPWM1, 2);5 H4 l3 y) ^: d( S% G! O8 l, j% A/ i7 Y
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);! n3 o1 U9 E( E
% h  \% q& m2 v5 U
        // 使能中断
. F0 I- x1 F+ t# K% l        IntSystemEnable(SYS_INT_EHRPWM1);: R; [2 T6 R. m, g
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
7 N6 Y( C3 f. \}& J7 m% P2 D+ I6 I$ H

$ Y4 Q: e$ ?6 x6 v) C$ @$ o. |; q/****************************************************************************/1 }7 A2 s% D7 t) P# _% I
/*                                                                          */9 R1 H6 x, Q9 x1 R7 ]
/*              ARM 中断初始化                                              */
$ \+ k/ G" p( h7 ?5 n. y6 b/*                                                                          */
4 {, m! G) d; @9 k( v/****************************************************************************/8 H6 Z9 d& u# q: o4 K+ T2 F, t/ s+ b
void InterruptInit(void)
& U, A; @: |$ d( F- Z' X- o{: Z$ V& s  v2 ]# u2 s4 q$ S
        // 初始化 ARM 中断控制器
. g2 F" M3 O( y: u" I1 Z6 J, ]        IntAINTCInit();- @7 B* b) |9 A0 p5 f, v! H

2 X* |( _( F" q4 I: e# E2 L& [        // 使能 IRQ(CPSR)# u. \% o- r6 |
        IntMasterIRQEnable();
9 ?3 [( m4 J  D2 \/ G$ G* u" Q- \( z' L1 p
        // 使能中断(AINTC GER)& z' a0 X6 ?/ o9 m' X- s/ I) p; N
        IntGlobalEnable();+ p6 Z! j: Z+ Y2 W  c
! r1 A0 l# x9 T* k( Q3 v
        // 使能中断(AINTC HIER)  b6 }, k* h% ^7 R) J2 C
        IntIRQEnable();# p6 i9 F! P% w' S% T$ W# L* S0 }* z
}
5 ^6 @  B2 |! L4 \( M2 t( T: z9 w  K; E
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/! R# Q" ]' z9 [. t( Z1 [
/*                                                                          */
3 w8 G8 r3 u$ z0 A: d+ ?/*              中断服务函数                                                */
# j* c+ C) p: ~1 e' ^! e/ `/*                                                                          */5 k0 W9 ^7 e) c; s
/****************************************************************************/
! p$ n) Z% {* E( A. `/ z* @6 u$ ivoid PWMEventIsr(void)
" a% w2 x6 k" C! _; f3 o{0 P8 b" i7 [( J2 ^
        IntSystemStatusClear(SYS_INT_EHRPWM1);/ J$ C3 E: O9 L4 {, T6 ?/ i

9 o, h" P& p& g! g5 Q( j' h    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
9 S% h' ^9 L& \% U7 f}
: N# S; S0 ~5 T( \  \' ?  R+ B8 z6 M' x" T5 q, }
void PWMTZIsr(void)( w' K0 @0 E- z% o
{5 S6 l% U5 |0 |& I
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);& N* `4 h/ _6 T8 a$ I

% k+ H! m, X- j8 h+ {2 u+ c    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
' y/ R' _! Z& M}( {6 O2 H  g) @

/ C4 n# I' t4 i3 k. p1 T$ `, l/****************************************************************************/
: {/ \& ]7 f9 p+ Q* V/*                                                                          */) A8 x, e& J: z# z8 Y! l
/*              初始化捕获模块                                              */& l. V! J0 o* F' o7 s
/*                                                                          */; p. ]" k# }/ H6 i5 G" T
/****************************************************************************/5 V, o% K5 o, s+ j8 Z
void ECAPInit(void)
3 G  `# k" B4 R2 W! r1 r. G) d; G{0 i% s/ C$ A* p3 X2 i; O& i+ C2 R+ Y9 x
        /*-----设置 ECCTL1-----*/
4 p5 z6 t2 R. M0 [" z$ P$ ~        // 使能CAP寄存器装载
$ S$ Y+ o' d# [& p# K9 w, F        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
( u0 C2 ^, \3 O        // 设置预分频值.
- T' b3 J: |+ D) ^9 q; d        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);# F3 x& Q! l/ b' v$ {, \0 d
        // 上升沿触发捕获事件  M1 S- D5 q: @# w# z, b6 p
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
" I0 D% R1 s) R: I& L- [* Q        // 输入捕获后重新装载计数器值.
- Q1 o$ e) D" f        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);4 c! A8 o* ^: T& H1 c2 e8 [
% u) ?1 R8 z4 L3 L  d
        /*-----设置 ECCTL2-----*/
0 J1 I, |- x2 ?- D0 [        // 连续模式
0 H- C( t6 W6 Q        ECAPContinousModeConfig(SOC_ECAP_2_REGS);* k8 S/ {# y5 D) x
        // ECAP计数器TSCTR持续计数. l' [" J% [6 T  A
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
+ ]7 b! s5 w7 W3 i8 f8 y7 E        // 禁用同步输出和同步输入+ ]+ U, D/ `2 D, Z! a* m
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);6 o9 z; E* P( d) e% L) W& @( j% G
        // 配置 ECAP 2 为 CAPTURE 模式
! Y, }$ e& O1 Z0 [        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
! T+ h8 C; y% D  M: e$ l: E
  k$ a7 e$ \% \3 h' e. a8 D" b        // 使能中断
# }) f- Z" [+ G- z//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
6 \$ l, }  D. k; ]+ O}
7 x3 r7 B5 A5 O, X+ l& H# k- S' {0 v* o2 t. y+ v, \  u
/****************************************************************************/
. V4 V% I7 k$ W6 S' p* J& Z/*                                                                          */5 ]! i) U  ^9 l+ m
/*              取得捕获结果                                                */6 y2 h4 z6 {7 V: ]; L) l6 R! H
/*                                                                          */( ~3 v1 a$ s0 \: T& x& _7 S" Z
/****************************************************************************/
6 e+ \7 o! @; Z7 `( o; Funsigned int ECAPRead(void)
0 Y  I) f4 e% C  `{3 |6 Z. q" C! }* g8 }* ~
        unsigned int capvalue;
( }/ o: b1 h% ?, R) d. B. {        unsigned long frequency;* P9 j, u; w% d9 R

" ~5 _5 J5 k; D( T' p" y3 T# B) t        // Event1 中断标志5 T$ T2 I6 g5 t* T& e3 W
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
# L, B3 v  u- K/ `6 B        {
/ h9 Z- ?/ W8 u' w                // 取得捕获计数
, c* k; w, \/ ^' m9 u$ P6 y                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);( R7 e! u1 f0 ~3 ]
                capvalue = ECAPResult.cap1;
; N4 L0 X9 H/ L/ J& K( }1 I9 g' R8 ^
                // CAPTRUE 模块 228M 时钟主频
+ x/ q3 _  E+ K8 F; y) t                frequency  =  228000000/capvalue;
8 r9 m& R- P: y' g) W7 b& q9 G4 T. o$ ^                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);6 ?4 I# W3 d6 r& X6 R$ g0 b" _- ]
- Z$ S0 A$ C/ j1 J! @6 f
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);% \7 b9 p. J" s; T4 j$ b
//                IntEventClear(SYS_INT_ECAP2);
% |9 U, y/ J  z3 V% g+ S        }
( ~' }  D; j7 K8 S        return frequency;% T0 |: W' t# x
}6 Q# s. w6 p! i' V
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。# h4 E  ^5 w3 G9 n, q

本帖子中包含更多资源

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

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-7-7 08:41 , Processed in 0.046481 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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