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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/! f8 p; ^% b6 u' h) x9 [
/*                                                                          */& Q, P) O& t% V, g  \* R% }
/*              宏定义                                                      */
6 w  u5 e# q* x" \  a4 j* n  s/ R/*                                                                          */) L5 v  n' ^* C" h# R
/****************************************************************************/
- ~; z, r# S( O// 软件断点
. X4 i" S* ?5 y9 Y) ]9 O0 ^' l' k#define SW_BREAKPOINT     asm(" SWBP 0 ");& ?6 i: f% G9 }

8 T- k) F' m) C2 {% j6 b// 时钟分频( I  Y' e; F+ d1 j8 l7 p
#define CLOCK_DIV_VAL     2289 I7 ]1 ?, S- K; v/ T9 m* g
  A; C2 U) ]4 i- F. H5 U$ G
/****************************************************************************/2 S8 G$ x6 m; x7 t
/*                                                                          */" i$ Y! H7 B# }9 c
/*              全局变量                                                    */
4 ^! O/ K& ~" ]# E, H/ f: D! D1 l/*                                                                          */2 x3 t9 T/ Q) |& w
/****************************************************************************/
. I0 _9 J; \5 R# W' FECAPCONTEXT ECAPResult;7 H) m9 j: C$ E) [% i

+ `; [. [: D5 u; g$ x/****************************************************************************/
$ ]: }: k, q! ]' n/*                                                                          */
; \/ M5 W" V8 D: k/ P/ l; G/*              函数声明                                                    */
- S; ^  m5 s+ X9 o: |$ |/ ]+ ^/*                                                                          */
" e6 L6 H8 d( _/ U/****************************************************************************/
+ h# N3 d8 n1 f7 u+ U2 x2 z// 外设使能配置, V8 \0 n! l8 ^
void PSCInit(void);
. Q+ U- }! A( z2 O* ~& r- P
5 `' i* B2 w1 X// GPIO 管脚复用配置
5 N+ A4 p! c, a% ]4 Gvoid GPIOBankPinMuxSet();
5 O9 `8 E2 |8 V+ w9 ]3 h7 Y' [( D9 R7 r+ p& }6 {
// 产生波形
9 |4 n& ^( X, I) Ivoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);7 T4 D6 F# C7 P* c3 Z( D
void ChopperWaveform(void);
) J" ]3 x4 E5 [+ v8 k" ?/ o( M2 K7 b: m
// ECAP初始化和读函数7 r6 g; D6 l3 t+ R9 \5 w, Y0 R
void ECAPInit(void);3 h9 k8 |: ]( J
unsigned int ECAPRead(void);. a3 J4 V+ e/ S0 ^- M0 x

; G2 |8 Z6 q1 k" f6 T5 m. n. {//ARM 中断初始化$ H4 o0 W" B, f; Y- f5 r2 z, \, `1 ?
void InterruptInit(void);
/ ?/ t- d! v' a6 k, j. E( r3 _5 u  J! z
// PWM 中断初始化( w4 {. j+ j  {5 N6 ^
void PWMInterruptInit(void);2 ~8 _! T( U8 q1 r8 b9 c/ \
// 中断服务函数
# K/ \# }3 n" C" [9 b// PWM 事件
3 E% l0 u! ~- @# pvoid PWMEventIsr(void);, A; S/ |. T1 Z2 u$ `" U4 V; a
// PWM 错误控制事件$ O2 I2 I4 n+ N! @
void PWMTZIsr(void);
4 ~- ]2 E- E4 n2 c+ u3 l3 o3 W# b
/****************************************************************************/# C! p+ Z- f4 e* A1 R1 q# F
/*                                                                          */: j* `% j" X8 [: F% L8 T8 R
/*              主函数                                                      */
" r) G. c- j6 C/ J4 L: S1 C/*                                                                          */  Q7 J' t& E5 j, R: s) ?
/****************************************************************************/7 Q% G$ A9 {# ]6 s  y- A
int main(void)
/ i) S) k" ?4 m: e8 d6 N' |{* r; d/ M2 O( v- H
        // 外设使能配置! e; H2 Q+ n; [6 v0 E% F
        PSCInit();
3 u$ e0 e- q& t$ ?% P* C3 M/ q/ N- |% k. U4 n0 ?
        // 初始化串口终端 使用串口2
1 F* J8 k2 b) J/ s# e        UARTStdioInit();7 v' I% x1 {8 E, f
       
* [" ]( H$ `5 l3 x+ s6 v        // GPIO 管脚复用配置. |+ T* G# K0 p! B
        GPIOBankPinMuxSet();0 C/ L- i& Y: S' M

" \  {/ V; {7 o& Q6 N) E! O. {        // ARM 中断初始化6 u1 b' }" S6 m
        InterruptInit();
/ ?* X) i3 v6 d3 K" x+ w! _- p1 p0 x8 s  ?" m7 h; s; A
        // PWM 中断初始化  E5 ~$ j; P' s& g  j& @
        PWMInterruptInit();7 r6 q, e8 G. S8 r1 |2 [6 Q! p$ r

' A8 W  A9 [2 O5 g        unsigned char i;
! ^. Q. u4 D; g3 u7 V, ^; \        unsigned int j;
$ J9 o+ d# n, I" A
  Z3 u! i& h" i. A: U2 Y! j        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);: Q3 @" L' p8 H. B% c7 N2 v
        UARTPuts("------------------------------------------------------------\r\n", -1);
5 ~; K- d. H! t# S: v        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
2 E- f( e5 J% Q        // 产生波形
& J: K% ]; U) V        PWM1ABasic(25000,50);
( A7 Q! P& \  A" m$ _! H, Y. l9 ^
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
) I2 z( P; G: |# S, N% ?+ ?        UARTPuts("------------------------------------------------------------\r\n", -1);3 ]5 b' ~0 `' m0 t0 @

- y0 n4 L# Z) i- U
& V$ Y) ~7 f& B8 X4 f# B- u$ [$ D
- R4 w$ ]  N$ s; k8 ]* [6 p& c$ J8 K+ p        UARTPuts("------------------------------------------------------------\r\n", -1);
! g# a( A& G- \* b/ t3 k# a        UARTPuts("                    C6748 ECAP Test\r\n", -1);- B. Z$ ^. w& I( l9 |: N
        // ECAP 捕获初始化4 t# A1 E; C1 i1 k
        ECAPInit();- T( V) o" T/ F1 |/ c% B
        UARTPuts("Initialize ECAP.......\r\n",-1);
3 Z" \# O8 a+ _6 B        for(i=0;i<5;i++)
  r" G+ l3 ?+ a# f        {
7 ?) L( B( l; b. |* W                    for(j=0x00FFFFFF;j>0;j--);            // 延时8 F6 T4 d# x8 Y. ^* h+ }# ?
                    ECAPRead();
) q* x# F7 j) M# M/ M; ]% l( F        }
; a4 t# n! p0 r& M+ s: e' l" q+ @        UARTPuts("\r\n",-1);/ J. ]9 p& V5 p( ^
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
" h6 @2 r& u- _        UARTPuts("------------------------------------------------------------\r\n", -1);
% ~8 x5 g  [2 y  h; N6 [/ Z- {- B6 W- }" _, T
        // 主循环1 F: ~4 x6 ~0 }( |. @0 w1 g" b
        for(;;)+ S% @: K+ s: g% h& x9 g( c3 D
        {$ U( s  P3 z( X) y+ C
; y  Y, B7 \( v+ t# L
        }# D5 F* v$ t2 k& j. l5 H3 c0 q4 }
}
' H& [) w. n8 l  b: {  U6 |( y" y0 l5 b0 `: x: @! C
/****************************************************************************/! Q: c  `0 p# B1 p1 o# O, S9 R3 w7 d( ?
/*                                                                          */
+ F( Z4 v2 I" m! X/*              PSC 初始化                                                  */4 J, T7 c+ [3 Y4 K* Y
/*                                                                          */  `% n# ?& \. ]# r6 F6 Y
/****************************************************************************/: i4 {3 V0 P# P2 T! Z
void PSCInit(void)
9 f( M, |& \" k* ?' E3 U* x' W{
3 c& e+ t4 ?% N9 D  L- }8 v        // 使能  EHRPWM 和 ECAP 模块
6 H/ G" w( Z- O: T- Y0 a, {4 o7 N        // 对相应外设模块的使能也可以在 BootLoader 中完成4 U* \  j0 a! n9 p
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ T* e% X6 e  D% S4 J2 h1 R$ m    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
9 b5 W3 g* U; k- q}2 L0 S8 _7 }- C4 m# l' N% g# X
" j4 B* W+ c/ |6 g
/****************************************************************************/; h- W8 |2 a0 _9 o0 Y9 N
/*                                                                          */
( D# O+ H  d; r- b" t/*              GPIO 管脚复用配置                                           */
8 p1 Q; v; @' x/*                                                                          */
7 l( f: U1 @! A/****************************************************************************/
5 j! D$ X' c9 C& S1 E7 Qvoid GPIOBankPinMuxSet(void)
9 [$ U+ q+ N- q3 k{
! ~' k. ^. z3 M3 p" o        EHRPWM1PinMuxSetup();6 k5 T# O; e8 U% e, T7 V4 c

- M3 E# G  C2 M& X) z  F        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)9 C2 p' C6 M5 _; F8 Z& X& _
        // 作为捕获功能时管脚方向为输入$ s) d1 H" g* }9 j4 c( @$ P
        // 作为辅助脉宽调制时管脚方向为输出$ h0 W: K9 |. a' D! H
    // ECAP2 / APWM2
; o% n4 e7 r- P: D8 F( \; ?        ECAPPinMuxSetup(2);
4 I6 N0 S  @( d$ {, N/ O. ]3 a% t( B! {/ ]9 R6 |
        // ECAP2 / APWM2方向设置为输入; |- S& c6 ^3 P6 z( ?
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]8 N1 u! |9 V  q$ U
}+ b0 ~4 C( A: d$ D
/ d1 S6 [& [( @% d3 h
/****************************************************************************/5 }0 K2 o5 ^9 W) c# l; K1 U. Q
/*                                                                          */
. `9 f6 ~# U- e/*              PWM 输出波形                                                */( H' C0 w0 U+ v* _* [, @" C: N9 h
/*                                                                          */
( \3 x& o& Y/ _/****************************************************************************/
+ H, b$ S: K5 d% m6 Y' _$ svoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)/ I5 J7 k* |4 V6 P
{
. q" R; a$ N! o& L* _    // 时间基准配置& e+ G2 Q" f+ R) ?( z7 r
    // 时钟配置
0 O' K) X4 I8 G. E: |0 Z: J/ X    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);0 @; `# n  _5 t

; G  }. A0 G1 P% e" |* b    // 配置周期1 n/ ]! h# h! m: Q2 ~1 @
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,: \3 v/ X& `4 c( H- M
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);5 R1 R) p7 ~8 j
" @+ c6 z5 a# s$ s; e( c
    // 禁用输入同步信号
1 ^# L7 i; P) k    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
2 I; x7 Y" o. f, e* d' K/ I  v
: k* E2 p& e0 m0 f    // 禁用输出同步信号
$ M5 L6 U. Z9 }6 E; L, y    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);: M7 @% j% W5 \5 b% Z- y# I
) u9 Q  ^( q3 P$ H  s; |( @
    // 仿真(DEBUG)模式行为配置( v. ^# m1 O' v
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);: X+ O- M% w% V8 w2 d( [: K

# b2 ^$ Z2 T8 o+ [# J0 r    // 配置计数比较器子模块
9 J* `6 O8 O( S: m3 D    // 加载比较器 A 值0 I% @6 L* _( n; c. y) E
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
6 m4 h+ D7 ?& ^) ~. |& u                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) c. u) M) \: f
; o/ y0 T3 g# V( ~    // 加载比较器 B 值, e: z9 l/ t7 Y5 `' k: J
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,' e/ }  l0 ?# M% k1 }4 L6 L& S
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);4 t$ R* b/ Z' N9 L" Z

1 G$ u9 x4 s( x* M    // 功能限定配置(输出引脚触发方式设定)9 g; u: O2 Q4 @6 Y
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出+ c5 x! V7 M9 W7 @' r
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,' ]& z% q' G) v- B% N/ |4 x* I
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,; x, s- P4 c5 ^$ h  c% }; l
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
6 n; x3 R) Z5 k( B9 o4 {
/ Z- j! i5 r5 B9 x8 R    // 禁用(旁路,信号直接输出到斩波子模块)死区模块9 R; I8 A5 p: f. }' u
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
3 }% I- o7 y  _$ _, _% P! i$ ~1 [% p
    // 禁用斩波子模块
7 }! E; f- {! ]9 E9 R- K  H    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);0 |/ M1 ~) @0 N9 T
9 p: `- D% L' J, a# x4 m* A: T
    // 禁用错误控制事件
& d) I5 d( A# {; h4 y4 p: ]; M- ^    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);: p8 G, e4 Z! D# ?2 o7 [& b+ D' [% _
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
' h$ x% x2 @8 u9 M0 `" A; Z! C* B! @7 x* a& p
    // 事件触发配置1 A* |/ n# q7 [; P! F, s+ ^5 w2 n
    // 每三次事件发生产生中断7 @% _/ Q: i" {5 o
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
) d. I0 O/ y" W! D    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
& d3 [; C" K. Y5 R+ c) k    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
4 z: p" c( J5 J$ A" J$ _, l    // 使能中断
6 k8 E; ]8 L/ ~% `: `) U. G! J  R% t    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
3 X9 U5 h8 T% A! {; `3 v/ `: K4 W0 k1 p& y) F5 N. ^4 A5 K
    // 禁用高精度子模块1 R4 |6 w! A5 g7 w6 o# T0 ~5 v/ Z
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
7 o- w' V1 ]- {1 }) S- c6 r! k( a  b# X8 D7 m
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);. Q' M  Z; G4 O# O* F# [
}
: y# X7 Z# t3 M7 g7 K' {, }5 ]7 w! B5 W
void ChopperWaveform(void)
* ?; F3 Y  R9 a  W9 k( i{
6 ~$ s$ e+ t4 B3 {/ j    // 50% 占空比2 n# R" z- X6 p$ |4 E5 V
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
3 n% J9 Q, D/ q4 S4 y    // 4 分频
( q; `" q% p  E' V5 c: y9 T    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);3 Y2 w, l4 u: k' }" v
    // 单个脉冲宽度
! Z4 k. n5 U7 Z    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);) ~5 \& j1 g; r5 [' Q2 v
    // 使能斩波子模块# A3 {; {! e! u* k- v: ~
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 A: P+ i9 m' a}  K: O2 Q, ?7 d
  Z8 X$ m7 w) C* g
/****************************************************************************/" D1 c+ d, \$ u, L+ J8 J
/*                                                                          *// n+ `) ]  W/ y. B# @1 S) c/ ]
/*              PWM 中断初始化                                              */
  h) s+ u  J, \! f/*                                                                          */
" R! }% L1 @2 E! u/****************************************************************************/
) w- V8 d' m5 i7 Y( W4 uvoid PWMInterruptInit(void)' n' s0 L% t. o7 F
{7 B  M: x7 ]% }# U; X
        // 注册中断服务函数
, k0 B8 b, H% A9 {; R5 G  f& ~! X# g        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
% }+ M% ?: B/ i$ ~        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
6 J* d6 {1 k( _2 f; ~( {- k+ B1 `
5 g" j" O8 N: Y/ \1 M        // 映射中断
5 k' b- L5 R1 H- h) l* W0 y        IntChannelSet(SYS_INT_EHRPWM1, 2);
- A+ e0 v9 L( m4 N! _        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
2 [8 V/ l4 d# }. h* `5 \
( b/ z2 n5 E) i* b# I( n  X        // 使能中断  }4 @/ L; K( v9 i" I5 o
        IntSystemEnable(SYS_INT_EHRPWM1);- m" q1 }6 p: ?5 i# A$ {0 f
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
- ~4 Z$ h3 d+ C6 P  }" n# [}8 u$ x- X7 n. D' y: r7 @
2 @& g' b7 t8 ^+ I" `* M
/****************************************************************************/9 @- z. @7 v: x
/*                                                                          *// F* [8 E' }0 E  u. x' N
/*              ARM 中断初始化                                              */
1 E$ p1 I+ m- p8 R$ r: K/*                                                                          */7 a; T- h* E# Z7 B/ p* N* j
/****************************************************************************/' J, x# ~5 j+ s+ s& h, [9 v& n
void InterruptInit(void)3 `8 `- ~$ X* S  X* X& @
{
  @+ F7 D9 N# o* c4 _        // 初始化 ARM 中断控制器) f7 M, s1 W% o$ ~# }3 P3 F2 ]
        IntAINTCInit();" }# {% X, `3 Q7 d1 Y4 s

2 G# g* r- M/ Y3 z        // 使能 IRQ(CPSR)4 C. g1 W, r# x( I9 _. v+ ]2 S
        IntMasterIRQEnable();% N3 O$ {( u/ |7 z

( G* W' b0 j9 B6 @, C- W        // 使能中断(AINTC GER): ?/ J+ ?0 O" g. z
        IntGlobalEnable();( U* f/ }9 H3 p! w  a. \+ ?( I

' X  Q: \( t! N2 q, {! i$ _5 J        // 使能中断(AINTC HIER)
( ]) Z, n/ z) y0 |' l$ m  `" P        IntIRQEnable();3 h' A' k! Z/ c4 C( W3 ?! W% h. v
}) u) }4 [- h+ P6 V& |1 l+ Z

# V, a9 M7 G( J: i  Y% T
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/$ _7 W& d5 z6 u- @3 C. ?/ C
/*                                                                          */
1 m) U8 l. _; Z/*              中断服务函数                                                */
9 W- i" V# k/ I% g# P/*                                                                          */
2 \# G" Y+ ~# o8 B; j. e7 }* C: ^6 A/****************************************************************************/& ~) Z7 g) r8 O7 Z; t
void PWMEventIsr(void)" k( f: R4 Q# Z9 n5 Z% q3 p
{
3 t6 v- ?! {  L4 Q' f, k        IntSystemStatusClear(SYS_INT_EHRPWM1);
6 P& ?" J6 \6 ~- f: P% o3 U7 ^( H! W: y4 S
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
. u7 [2 H: o/ q  ~}
8 W  x, y) T0 A  p  N+ Z0 X- R* V0 j" \: |
void PWMTZIsr(void)
. P* M: ?4 l& f{
' G' F! s5 [$ _+ Y9 @        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);8 o9 Z7 U0 Y/ y  i. q4 O6 p$ X

; z: U; b8 V4 C! k' _( I    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);0 l2 N) j" @" C; J7 A
}
) [5 D: _- K8 G4 ]; D) L7 }, K9 Z6 L. K# E: f9 D2 ^3 b
/****************************************************************************/
9 ^0 t& f# R+ {  ^/*                                                                          */
- s2 y+ X/ y* B, G/*              初始化捕获模块                                              */2 o1 o: P% o+ }1 O; R: z* P
/*                                                                          */
; m  D0 {% O# Q& c0 X9 U% v* o! Q6 K/****************************************************************************/& P+ U* V% _" G9 o3 y
void ECAPInit(void)
$ c) z5 X9 T! L1 V{
* h" Y4 z2 |3 R6 B        /*-----设置 ECCTL1-----*/
' z; u5 n8 Z5 ~( \) [. H3 Q        // 使能CAP寄存器装载- Y7 ?' x" y. V) a
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);; U: Y% r" e- W* e* S$ i+ ~4 E2 A- Z3 b
        // 设置预分频值.
0 _. r/ l; Y/ t+ r        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
6 |; M1 {* h4 P8 T3 E" W' h        // 上升沿触发捕获事件
: Z% B3 [5 [/ b$ \  p        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
8 g, o9 z) r) v        // 输入捕获后重新装载计数器值.
+ X4 D6 P& s" ?" E        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);% ^! Y& b+ v$ |* `6 D0 C
( }: ?+ }3 ]3 `  ~* C. e6 ?- E1 j
        /*-----设置 ECCTL2-----*/
/ L. M3 v4 v+ Q' m        // 连续模式
3 v  q; K3 q/ m: ?% g0 |) M/ e        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
5 D- g! g2 L" Y2 E% u  z/ _% ^& \: Y        // ECAP计数器TSCTR持续计数
5 w8 |0 o8 R8 a1 V, T- [7 o6 Y        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
5 `" p6 a% `3 E" o; h* T        // 禁用同步输出和同步输入6 _8 ^7 l* B+ W8 R  E  _
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);/ L, u5 a4 y& ^
        // 配置 ECAP 2 为 CAPTURE 模式
6 f1 }" b; c9 o! }. [; h        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
) K$ U: r5 Y6 Y. \; b
' K3 M% F* S6 _        // 使能中断3 v7 D2 R7 s& T) r3 {9 |% p
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
  i5 A9 |7 i) f5 I}
$ }5 i  o9 U/ I6 O# p9 w
( p! ^/ H: F' v! o" i* X) ^/****************************************************************************/
0 b5 u" Z  q. v2 N8 D- m) m2 I6 ^/*                                                                          */
$ s* ~& h% Z, M, P2 R/*              取得捕获结果                                                *// A$ P8 t. N$ v7 c2 T
/*                                                                          */8 }/ r( x5 |! b+ M9 q* V' @4 g
/****************************************************************************/
9 x" V2 k  ?( W0 p" z! V1 Punsigned int ECAPRead(void)
$ w5 T& _8 Q+ l. }: z; ^{/ R; n* \& B  `; k
        unsigned int capvalue;
! M, R; z7 r. o" j1 P# s1 ~+ F        unsigned long frequency;
0 G! C: K8 M5 `# q6 @! J9 y" W7 W6 e& m- M/ b" M3 L
        // Event1 中断标志7 m' h7 Y& t, n& Z- |( N) [
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))& z2 j: ?$ Y, `2 w
        {
+ `- \* ]% ~- G& b) J                // 取得捕获计数
8 q# h# H3 t) r9 K1 s                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
3 e& U, a/ o+ V1 q' S* e                capvalue = ECAPResult.cap1;; Z& J7 k  D& J  W) L

2 p" m$ R3 {* W% T( y) G                // CAPTRUE 模块 228M 时钟主频
  S+ ?' c: X" W2 K) y                frequency  =  228000000/capvalue;8 [. U! l' B/ V; r8 ~9 o1 M; ^
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);8 I4 t% T# Y8 E' g/ w$ N; t$ A
7 [3 O/ u1 n* F: v
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);& g9 R  R& R. {' }4 L2 L6 U5 z. ?
//                IntEventClear(SYS_INT_ECAP2);  K* s9 N% K* Y5 ]1 C
        }5 D- C4 v2 B1 z% `$ _8 `  E" J; K
        return frequency;' E. E5 W( e: B6 B4 U
}
" q) X6 I2 S# |  e* |, I6 o* r! Q! X
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
1 s5 v; c$ ~/ B* j# f& I% `

本帖子中包含更多资源

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

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-6-14 19:03 , Processed in 0.045176 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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