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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/0 k' b1 E% n( j& d, a+ A( R7 E
/*                                                                          */7 ^% [0 k* g4 f! q% G1 c
/*              宏定义                                                      */4 ^& A( W& D- v$ u. {$ f; S1 M
/*                                                                          */
3 A2 d3 o7 D6 d9 |& L+ y- `/****************************************************************************/( i! i6 Z0 A, j3 a! d
// 软件断点
4 w' `% F2 S- G% G#define SW_BREAKPOINT     asm(" SWBP 0 ");$ ^, Y$ q* f' v
0 c0 N5 N7 l5 v2 u% d" [4 X
// 时钟分频
9 t- {& r6 h7 p" E#define CLOCK_DIV_VAL     2286 k# L! }% d: d$ U5 y

- P1 T( K0 A1 P) ^  U( X/****************************************************************************/" e' d3 @' D! q
/*                                                                          */
* y0 X5 J4 J5 @0 W0 G& T/*              全局变量                                                    */
; h4 |  K: R; p4 o/*                                                                          */
! i* h& e6 l$ w; o8 j( c" U" w- a/****************************************************************************/
( X6 N1 z7 M+ I3 x- ?ECAPCONTEXT ECAPResult;
( F, L6 ?$ \) v/ b$ X& V& p
& T, f' V6 V. C( E/****************************************************************************/
' L) q; o7 H% S& _6 @/*                                                                          */
: K/ S, b8 @) s1 z/*              函数声明                                                    */- h2 x( g$ r. N: _0 x
/*                                                                          */! y4 y, h9 m! _9 E
/****************************************************************************/
) B: N/ k9 D# {* P: w: g: g! A& X// 外设使能配置: J) _4 i$ O7 [/ u* S
void PSCInit(void);) V$ o% [& n% ]
9 p! c/ t6 |2 R: ?7 e
// GPIO 管脚复用配置
( T  S5 U* V; D+ I% s7 d4 L. qvoid GPIOBankPinMuxSet();6 N( e, X1 k% e# N+ |5 |& x4 N" ]7 m, D
* T* ]5 O3 O. @8 j0 l/ V( t3 {* b3 r0 G
// 产生波形
- S) {1 O* l3 c' [" |. {" cvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);. J+ F  @* |- m) A
void ChopperWaveform(void);. E  e  P& c  C3 }/ \; B  L

4 a5 i# }; y7 V2 D/ ~& U" x// ECAP初始化和读函数
8 i- ?  q- \. S7 n, i- t7 rvoid ECAPInit(void);
: n9 h0 [+ a! e5 Tunsigned int ECAPRead(void);
5 D# S1 N: X1 n" [2 o/ r# [0 M* O
//ARM 中断初始化
# c' N7 b# ~5 wvoid InterruptInit(void);. J5 w% S: Z/ ~: Q4 y

1 A$ V% R/ B, P$ o// PWM 中断初始化4 s" z( p  A; w( ~( B- U: b# ?
void PWMInterruptInit(void);
$ e% E- M+ M& Z& P8 a6 h7 n. S8 @5 l// 中断服务函数
$ c1 ]7 ]+ `# F. u! v5 B4 Z// PWM 事件
* n" G& Z+ `6 e3 l! X- nvoid PWMEventIsr(void);
' T& x4 y; o2 i. i# m; s// PWM 错误控制事件
% _3 R+ X% h- C& K, N+ }void PWMTZIsr(void);1 w6 ?- V# I0 Y& j% a/ {
$ U7 R" H+ \" Y1 x7 |
/****************************************************************************/
! Z1 k, b0 G, ~* `/*                                                                          */0 [% i: s( I8 z) n
/*              主函数                                                      */6 M* d6 x- ~5 f4 a# {1 m! i
/*                                                                          */) u! a# U$ \& P+ g; P% G
/****************************************************************************/
2 b' t0 L; k" `+ Q' Xint main(void)$ Q6 t9 O$ I" i
{
3 Y' k" y# |; d) Y  Y+ r        // 外设使能配置
: @1 J8 A: R- e/ O4 }; P        PSCInit();2 G4 H! N; S8 z, i

* u0 t& B0 B+ L3 R2 a        // 初始化串口终端 使用串口2
0 t. D4 I, \4 S        UARTStdioInit();
8 G; O! a5 D8 u& o) \1 ^) J& p        * \) B+ y- e$ L2 j. q
        // GPIO 管脚复用配置
" L& u/ c. ]& N' _        GPIOBankPinMuxSet();
# [0 h8 W3 g# _2 V: B1 j9 r
" g  n8 K) |. w; G2 x6 y# y6 w$ s        // ARM 中断初始化; R* l- ^& b1 z! N7 ?
        InterruptInit();
/ \* f0 x  u  T2 W( ?" p0 l" I3 Y5 F' s8 J8 B
        // PWM 中断初始化* K- r8 Y" @' y! ^% e# V1 l
        PWMInterruptInit();
) u' c2 j* Y+ K) y6 n8 K# \( z2 W5 Z( z" o/ B( N( R$ @
        unsigned char i;% \/ s" Z) n8 H# p" s& j) O
        unsigned int j;  l. Y3 j9 i; ^

$ _0 S  _8 q8 ~: C' U& H* }: b- j) W        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
& ]: l; M7 S1 p' M# X% I/ R, b# s        UARTPuts("------------------------------------------------------------\r\n", -1);
- F& ^/ l6 a- K" [9 W) R4 ?7 q# Z        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
5 X8 H8 x) `( M0 m3 w0 G        // 产生波形
  n: s# a0 ^7 k  R        PWM1ABasic(25000,50);, X7 Z: y9 G9 l8 B8 @2 Z7 D) |  c

1 T6 c0 @; O8 i' w. P! g        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
- p+ z3 s4 q3 X+ O        UARTPuts("------------------------------------------------------------\r\n", -1);! S% W( ^, m6 I

4 U/ Y% G' r! \0 T$ i8 Z4 C
: R8 k. m% j+ T. ^9 v" }7 k6 o$ \/ B1 }; d
        UARTPuts("------------------------------------------------------------\r\n", -1);8 V! n) R* \2 c9 @
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
  G7 ?, N0 ?3 N" q. D! ~  p        // ECAP 捕获初始化! N: U- `' q. E
        ECAPInit();
. t- c/ Q& }9 q( x        UARTPuts("Initialize ECAP.......\r\n",-1);
/ |; s6 M7 \  C$ _( }; j0 m' u4 J* Y        for(i=0;i<5;i++)9 o+ h4 M# @" E6 N) k: V' f% c
        {
& a5 p. J7 J, X% W# G' n. I                    for(j=0x00FFFFFF;j>0;j--);            // 延时
8 R1 _9 H7 ^3 L# i9 s; e% E/ a                    ECAPRead();
2 y% p1 a) F$ C& W* E        }: G# r8 d& [& N4 S4 n
        UARTPuts("\r\n",-1);
7 @/ G2 A: Q# L" m& p        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
0 e6 n! v7 b( @& N        UARTPuts("------------------------------------------------------------\r\n", -1);5 ^% e) l, X2 r% ~

1 k& h" O, N& k8 \" ~; k$ j        // 主循环+ q8 _' v( @3 [- A" O% _
        for(;;)
4 g- n' k6 T5 I3 S4 z        {$ ]' p+ ~* x9 ]2 _% N
0 H) S1 A: D6 ~  a) h
        }5 [: m$ A- e+ t3 i. [
}
6 @$ i( s8 C- |& v/ A/ Y* O
0 \. K6 H, Q. X# T/****************************************************************************/
5 i/ H! S' W; g/ K/*                                                                          */1 Y& L( L0 a: }* ~" u* N
/*              PSC 初始化                                                  */
% g" h- o3 ~5 q, I9 R' d/*                                                                          */# M, I5 K: i9 v! m" H
/****************************************************************************/. t& ~- g9 T1 r
void PSCInit(void)
3 Y9 P4 q2 v% N" P. c{+ l4 h8 }* U$ _8 k0 P6 z
        // 使能  EHRPWM 和 ECAP 模块/ h8 p$ I# N# E& ~
        // 对相应外设模块的使能也可以在 BootLoader 中完成/ A% C; J" q. ~3 _9 a6 x  y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. E2 Q# h. h8 i$ z/ H  i    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; ?" U5 K& S% a% k. @}
  p1 x" M8 \: {" y) U7 r: h2 ]+ L) D: G7 t: A% u9 ]$ `" E, i% ]
/****************************************************************************/# n2 d! g: v: }% e. n2 Z7 Y: d; H
/*                                                                          */% F/ g  X, b1 k
/*              GPIO 管脚复用配置                                           */5 @( @% Q  f  b7 ]/ m7 f# s1 ^
/*                                                                          */
& a% g2 E2 B3 V% f  G; l/****************************************************************************/1 e3 A4 [: y9 v
void GPIOBankPinMuxSet(void)
1 ?' x9 z. y" j+ W{
* E: V  x; i3 }! K) t1 J        EHRPWM1PinMuxSetup();
' h1 `' q, O/ S" R2 R4 ], S9 x( @/ W0 a
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
) Q: ^* v0 B! V, y+ _7 ^. }- ?' v0 \        // 作为捕获功能时管脚方向为输入. y% L$ T, r" f0 J" k* M7 h+ e
        // 作为辅助脉宽调制时管脚方向为输出
+ w) `2 d: Y  M7 Z3 F" u1 i    // ECAP2 / APWM23 X- O% W9 l9 q) u9 B
        ECAPPinMuxSetup(2);
* c* f# L$ v, y# L
0 {$ H: f$ a" b  q5 o( D8 H        // ECAP2 / APWM2方向设置为输入
3 w1 t9 S# W0 E% i+ j        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
  x2 P# W9 q2 |7 r% {1 ~- e}
0 X, C( X# U' V- B" n# q; Z$ j  H4 u) M4 |, J4 F8 A$ K# P
/****************************************************************************/9 B) Q2 Z" |4 `+ s; _2 F2 I
/*                                                                          */
* N  ^& I  }: n5 u# e1 s/*              PWM 输出波形                                                */! M: o2 H6 E2 z& z9 ?
/*                                                                          */: F% ?& P& o) p+ E
/****************************************************************************/
0 I4 h# r' H3 r, [: S/ B$ pvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio); k, K/ V' v! E& Q% m
{
0 T+ D/ L0 @0 y" X  ~& l2 K    // 时间基准配置" D! k# U3 k, s
    // 时钟配置
. H2 q- M6 [( t1 ~* g$ _  l6 L' o; u    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);' T  X  j  Z3 X4 K6 F( V: n$ P

& V! m( o+ n0 N% n3 C9 L# M9 U    // 配置周期7 i4 e0 n* q4 \% K& y4 p$ ^1 Y
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
5 `% R0 @: Q% h! l2 C                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
' r0 k& o3 g9 W  T% z% G7 m6 y" P- J# R- s: A) N
    // 禁用输入同步信号
+ s+ s, I$ R* m" C; p$ M    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);8 N; |& M, _3 C+ G6 |
- M# R4 B/ K7 b& b& j
    // 禁用输出同步信号  g- I# L$ j/ D  s
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);* i- [& b# a7 ], U$ P) K- z& e& i
1 x: h8 X- {7 y  {- ~
    // 仿真(DEBUG)模式行为配置6 v5 B4 \) [4 W% X2 D0 y1 N. V
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
9 [: Q2 M; W  A( ^+ w) d' e# \
+ n5 i* V: u; c" L, I! l5 p; @+ d    // 配置计数比较器子模块
( [# \. [' F1 J6 q0 |    // 加载比较器 A 值
* L3 A2 g4 J0 V2 W    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
( N0 P# h1 E1 J' M                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);& u. O5 L7 p* e- u

  {' t. t. [; I/ x8 x6 J" u% b( @0 u    // 加载比较器 B 值
( Z3 X& L+ \* j0 e1 P3 f% X    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
5 j, X! f# W' G6 Q. h& Z                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) V0 Z: g' m$ L. w. y2 z4 G1 {6 R
% g, k7 Q5 L; U# o. t* |
    // 功能限定配置(输出引脚触发方式设定)$ @7 ]3 d' Z! f% f
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
0 w% c3 N8 g. o% a/ I1 z/ t    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
& E& v* r2 ~7 A8 w6 K/ {                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,3 c3 `7 o" ?: n0 t4 l& X0 f& D
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
5 B$ N+ l" ^) j: G- F' X2 X" k
( P0 B' Z$ T6 e    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  Q: W1 |6 B/ g    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);1 M+ O; w+ _3 v7 G; C  T* S

& |: c& h7 j8 s+ M    // 禁用斩波子模块
  E: e% a. k* B; h; W    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
" h: N- l4 f5 x
* c( i2 p" B1 V0 t# x7 r    // 禁用错误控制事件- Y, ^! c- R7 t& ~! i
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
& V2 q1 N" t; o  Q; w    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
0 }( a& E: u3 a- m6 E; P& v/ p. X7 k/ e9 Z/ ^  |' S4 x  m
    // 事件触发配置
1 U0 f( y' n4 N  M/ Z    // 每三次事件发生产生中断
% T; v2 n* d6 I    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
  X. k  S( {* e4 B3 J    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
, u2 X# L, E2 E* }# t% ?" q0 G) U    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
9 p# n! p$ E0 f    // 使能中断
* W% G% [) K& f4 U& F0 y    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);8 n* C, R( ]  |" y

2 f7 T" K3 ?8 O; u" r; d+ {1 d    // 禁用高精度子模块
3 J  M, m* \2 ?5 v7 D+ [    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
" j% }3 Y/ Y' c( V0 z" L
+ U1 L. ~4 P( C    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
, b' u% U- j' n}- D* P- }+ U( b8 b% k1 j

1 C$ z, `# J3 qvoid ChopperWaveform(void), z: {$ p. B) |  R6 o  y
{
- \+ _' s' X4 E. P+ b( x! U    // 50% 占空比% c% u+ ]) X( |; R# d, X% G
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);) ^$ M, u4 \% {  G* [
    // 4 分频: Y! H8 @( L# n6 n' Q
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" b5 t0 ?! N8 b! _; V( z    // 单个脉冲宽度
+ I  C/ M( F5 R- |6 P) l' P    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);4 ^; r( l, _  P2 p
    // 使能斩波子模块) V" D4 F% m' I* ^" N) |1 g
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
; n; L/ {; }8 L}
9 E0 t- R1 o+ I* P
: T/ F& y: @1 v6 i/****************************************************************************/5 V- W! Q+ ]. b8 E( `' P
/*                                                                          */" B- a7 C, \8 N8 j0 W
/*              PWM 中断初始化                                              */
% J0 @( J- ^- r, |+ X/*                                                                          */5 e% v6 E# T- j
/****************************************************************************/- Q1 S" [9 I: u
void PWMInterruptInit(void)/ J+ G& E% [9 ~8 e- i% d
{& [9 }" T- D  u# y" H
        // 注册中断服务函数
5 H" @  x) f- b$ |: Z, V. B) S( R        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
4 J$ d0 ]* I2 w8 f; h6 K        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);/ ^9 Z( b. ^- B8 F5 S) x5 I
) L, k. v2 N! L
        // 映射中断
) o! O; f5 A0 j7 v- V        IntChannelSet(SYS_INT_EHRPWM1, 2);5 q& R0 Q. ?2 W& t. C; g
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
( f  Z! B8 {  ~, w6 y1 v5 c5 @, R  z
  P5 @# \! q) G        // 使能中断. A* |- ~' b+ n+ O. O
        IntSystemEnable(SYS_INT_EHRPWM1);
. A2 V9 ?# l4 n2 M6 P' v6 z4 B. e        IntSystemEnable(SYS_INT_EHRPWM1TZ);) Z" g- s, n! l
}
, I3 {- `; F8 _
5 H; o- M' ?! [0 H/****************************************************************************/& N5 ~# C3 F5 I+ m
/*                                                                          */
- j% Q$ g0 F5 E. k) y, z+ ]/*              ARM 中断初始化                                              */
8 j2 ^% t7 `: N* z/*                                                                          */. f4 a- u. e* q  k( o! Z0 I
/****************************************************************************/# [9 p" R, Y5 j0 _" y. E
void InterruptInit(void)$ w0 B0 R4 U7 ]' K9 `
{# }2 c; d) t( S" ?# `
        // 初始化 ARM 中断控制器3 Q* D) S/ f* E$ m% b. d  T6 W
        IntAINTCInit();
+ Q$ \0 ~4 R  M8 [* e% W+ I; K2 C( i/ Q( Y
        // 使能 IRQ(CPSR)1 J8 ^7 a: ^8 x& \& @5 C+ X) P9 I2 r3 X
        IntMasterIRQEnable();5 y7 _3 ~7 N8 a! o7 Y$ Q* }
$ l" f% Q6 l% c1 O# p- ~
        // 使能中断(AINTC GER)( T$ O1 d6 Z4 Y- C, n0 b0 }
        IntGlobalEnable();
$ v+ m) H4 y2 c9 i7 }
* i- V/ \$ G" F: i        // 使能中断(AINTC HIER)
$ O; u  g, z! T8 _. H0 d1 C        IntIRQEnable();7 G+ B8 w  v# X2 M/ a- a
}2 u1 `0 N) p; n

4 Z% k+ |" S7 _: G
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/# @. E5 z1 p1 m8 h2 W. F' i( q
/*                                                                          */% h8 j' h5 b! a" x  q  P
/*              中断服务函数                                                */
) P+ w) `) t" G% v/*                                                                          */
' I! i8 F! D% @- _/****************************************************************************/
" J5 D  j+ J  Tvoid PWMEventIsr(void)
  a/ p7 q* R8 b! |5 j  F* S{! M4 ?" N3 ]% G# J
        IntSystemStatusClear(SYS_INT_EHRPWM1);: X  c% t, H* Z% e* u
8 D9 R+ W  G8 b3 y) a
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);7 z3 f3 c- y% L8 C6 H5 [
}+ ?6 z* Z, r4 l
5 C( x1 b; F( @* Y3 n5 w1 q& ?
void PWMTZIsr(void)9 g' I2 l& l% F5 k1 a# J
{" Y- r- L$ X% x3 n1 I; t
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);; R) u7 I( q/ E1 \2 Q
) I) j* W" ?: E; q% B8 j* n
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);$ H8 F& d2 D: G8 u- c" r
}) T8 [# U& Y6 W9 l. u

6 H- ~9 J! W' ]) }' ?/****************************************************************************/+ t# x  @8 R: x3 l  O
/*                                                                          */. p# t$ d- s8 x6 r6 p
/*              初始化捕获模块                                              */
+ C( w+ X3 L* I+ q- U- ~, G/*                                                                          */" O) y6 E" v5 G$ _6 ?7 h0 c0 q$ l
/****************************************************************************/* k4 _" J  B! F8 W7 S
void ECAPInit(void)- z3 _  g, j8 B; [1 G
{, n# Z0 D- S$ ?" C/ J7 N! D  j; F
        /*-----设置 ECCTL1-----*/4 U7 y* `; U) @4 K. y6 T
        // 使能CAP寄存器装载: v, \( W, v% c$ v/ n3 X' G0 S
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
( k7 I) Z, ?% K        // 设置预分频值.5 p3 k2 Q4 U2 F% G5 A: T
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);9 P1 T# v3 q, x" r* X1 t! Z% R
        // 上升沿触发捕获事件) ^; k5 F4 f0 m5 f7 J) V
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
, l7 B% Y, M5 h' S        // 输入捕获后重新装载计数器值.6 a( d' z/ [# U: d; ?$ V
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);8 N. |& u) u+ e9 Y8 P8 C
. n; h# ^; |$ c- }9 A
        /*-----设置 ECCTL2-----*/
) j, d8 t- J0 J( {& d. x        // 连续模式
6 e  T) X) n& }/ Q7 g  A" t        ECAPContinousModeConfig(SOC_ECAP_2_REGS);& p8 B; E) x5 b, @' |
        // ECAP计数器TSCTR持续计数
7 B0 _- a. {6 s5 O# n1 V        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
4 G4 p3 ^% n( X/ \        // 禁用同步输出和同步输入
* d0 r8 |- Z) H' ]  e9 Q; J5 C        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
5 L  j" M' R% D5 e. N. r; l8 g        // 配置 ECAP 2 为 CAPTURE 模式3 e; X+ u! U! T4 I3 m" A7 Z& r. d
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
( z& A3 ]) C/ z) u# I( H6 }% `4 ]8 Z. H4 L* U) [
        // 使能中断4 z+ T3 V' H2 e0 P, m
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);: k4 y! l5 [! k3 z- v
}( L: `% M( X8 ]$ M

8 {9 A4 Q, N; L/****************************************************************************/" r7 `. L0 H0 W) i
/*                                                                          */1 w9 j: G" l! e7 {2 M  M
/*              取得捕获结果                                                */( |& @* R8 S' Y
/*                                                                          */
/ G* S. X* W* t1 U' ?' a  V& c; A/****************************************************************************/: T( y2 G7 ^) ]2 U3 R; ]
unsigned int ECAPRead(void)5 J+ @1 W' `; p
{
  l6 X0 z6 D& a1 b0 [        unsigned int capvalue;: [- U+ G& k& b# y# `- I
        unsigned long frequency;
9 R% |. j$ `  K0 ], k+ z- {# ?, H, m9 A) ^9 W$ N
        // Event1 中断标志
2 x! t- v! w! [- U$ M        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))5 N4 L4 p+ R; L
        {
2 u! }" _: \5 m5 D- [                // 取得捕获计数! @' w9 V/ Z; o. r
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);0 P* N. _! A, {3 t5 {# u' J" D7 y
                capvalue = ECAPResult.cap1;' _1 ^  n, U3 a

* |  c% S) l1 p2 D                // CAPTRUE 模块 228M 时钟主频
9 ^! l) |$ I: l& [2 O) @( @                frequency  =  228000000/capvalue;
3 n/ v4 |" x& _+ j+ s+ A  {6 O                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);4 F, ~' E  }) r0 I) o* h
" g0 i" B" Z+ E% p! f0 W) K' w
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);  t5 y; I$ ^+ [3 _0 n. {
//                IntEventClear(SYS_INT_ECAP2);
6 _& s7 Q: [) j        }
. U$ h! {1 \! }/ V, [8 r9 ]6 t* y+ q        return frequency;
! N% K) U- s  w* d' D9 r8 c( U}, Z( M$ p$ O/ K6 z; A9 z7 i9 @2 d
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 只看该作者
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
6 D" c4 n4 A$ @

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
6#
 楼主| 发表于 2018-11-1 21:27:34 | 只看该作者
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
7#
发表于 2018-11-2 08:51:16 | 只看该作者
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-7 06:10 , Processed in 0.046490 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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