请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/8 y! H& X$ z, c" b9 r: s) r
/*                                                                          */& r. B2 A( ]$ H$ r9 C: b$ J' S
/*              宏定义                                                      */" \+ }/ g0 W9 Z* A+ X3 c
/*                                                                          */* j* n# j  W! d) I
/****************************************************************************/
1 b4 S9 b) T) G9 ^1 @5 t' Y6 |// 软件断点: Y" M% t4 r% A- ^+ ^5 x+ u
#define SW_BREAKPOINT     asm(" SWBP 0 ");' b" k8 @$ W7 ^1 i, r

2 ]: k# `8 h3 @8 j) `// 时钟分频
! ?/ B% a' X% ^8 c7 O7 s- ^#define CLOCK_DIV_VAL     228
5 X: G, e% J) u3 f. J9 V7 J% _
7 i; }" T5 ~: y8 n/****************************************************************************/
+ ?/ e: v! Z/ p. [/ ?4 J/*                                                                          */
+ X" Z5 V* ]# a! U1 V/ h- v/*              全局变量                                                    */
" G7 W# t( K/ s0 t0 O4 `/*                                                                          */# z8 P4 N3 s5 G5 z! M4 U
/****************************************************************************/
9 w% S' q1 \: P8 R+ z- U* M7 `! cECAPCONTEXT ECAPResult;
; P4 N8 U0 h, n, m
# {, n4 v$ X' p) e# D% v5 p/****************************************************************************/
- L6 D- R7 G) [8 P4 d6 P) |2 a/*                                                                          */4 O" M) Y) I1 \" l* Y5 L: v2 U
/*              函数声明                                                    */. @1 P- B. {6 _; c! U( N; e
/*                                                                          */
& S) p* [# t; [: Q/****************************************************************************/- E6 s1 Q4 ~9 `8 P0 ?3 R
// 外设使能配置
0 P% f' q' S' `* ?4 C5 d0 kvoid PSCInit(void);  h7 s0 K- j! h* A+ l0 b6 s1 |

/ O7 M4 \" ^6 L7 ^4 }  _// GPIO 管脚复用配置
9 M; \4 {6 s( }- e' uvoid GPIOBankPinMuxSet();# e8 ~- n# A* B, r$ C

# C3 g% ?) x0 |: a/ E9 F// 产生波形2 K# ~/ m1 q6 p% m* N" H
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
7 C# b' e$ s8 @7 q4 p5 Z# ~void ChopperWaveform(void);8 N! a4 N5 h" S2 v3 \: N, w
5 F  r2 I7 l; V, ?9 H7 ~
// ECAP初始化和读函数
0 V1 m+ W( J% W; c  u& Mvoid ECAPInit(void);0 A* W  Z! {) a
unsigned int ECAPRead(void);; J5 F: Y6 G6 t

0 Q  `# z1 ~! @5 W//ARM 中断初始化
1 d: ~; y2 Z0 |; \! L: c5 X: gvoid InterruptInit(void);" t9 j: N0 Y0 _! O- d

! \( F% A" K; ]; T. S// PWM 中断初始化$ t3 f# Q8 J0 r9 r7 `! q* h: B
void PWMInterruptInit(void);
: M( z6 L& C8 G% a# F3 j9 o// 中断服务函数
# e9 m5 X$ Q! g// PWM 事件
; [( @' {3 S/ t( b( N, Dvoid PWMEventIsr(void);
) l5 w! U) d! n5 e$ B8 F; X( c// PWM 错误控制事件# k: c. \& t+ a3 e: k# K
void PWMTZIsr(void);
  ], }; J, d4 {' M" i' p# Z6 `2 q1 ^8 o; f  X7 n
/****************************************************************************/7 {& |. n" Q1 B+ G
/*                                                                          */% \0 |7 z# ?! O5 n  s+ v
/*              主函数                                                      */' V* e/ d$ b+ n/ {; w# b7 {
/*                                                                          */3 U) X6 D0 m. P8 ?# o# {6 p; {/ _
/****************************************************************************/
! [( n: f: i; _/ y; b. yint main(void)
( _( L, c6 Z' E1 o& U3 [9 `{
3 ]+ X; ~0 `. N3 z5 x        // 外设使能配置
6 R5 x- C" @. \7 N        PSCInit();
5 d$ Z$ x! w: N7 v4 P$ X# f: `) k
# m3 J2 C' Z/ y( m        // 初始化串口终端 使用串口2
4 c" s5 J7 @8 J. @% z        UARTStdioInit();& _+ x5 [% @3 x& y0 d! J: a! U
       
) [2 c  X5 u/ ]9 O& I        // GPIO 管脚复用配置( W! M* d+ A0 m! Z
        GPIOBankPinMuxSet();
6 ~" H& }9 o3 k. \8 @9 v* \( b
# l  G* l" W5 z3 ^/ z! P        // ARM 中断初始化4 ^0 T7 h$ z) @$ f! d* z& I
        InterruptInit();
3 @( k. p- g( Q' h7 t" ^4 b) R/ J6 J6 ]( W0 E
        // PWM 中断初始化
9 r' a9 z$ _. y" i. U        PWMInterruptInit();
% L9 R6 I5 l" \; G1 b5 z- n: O2 b% r  c2 `9 [& z6 S& J) n2 N  o
        unsigned char i;* j8 R$ Y. z- m1 y
        unsigned int j;) M( d7 }; j. I/ ?3 m: {0 @
5 p# @( [2 P- z# ]0 {( k& O7 D' Y
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
8 p" X8 s! J, T6 t4 \        UARTPuts("------------------------------------------------------------\r\n", -1);
% _1 `4 N, k* B8 y        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);$ O0 U! u( i3 p2 ^& Y7 J
        // 产生波形
- \+ K6 ^5 ]  b: v/ `* e, C        PWM1ABasic(25000,50);
+ ?8 X7 E" [8 m1 m0 [
0 U5 @6 A6 t( |' `( E: ?. G        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);+ J& H5 Z0 K. S" ]$ P
        UARTPuts("------------------------------------------------------------\r\n", -1);) d& \, D; x9 F7 `  ~

- p1 }0 {9 y& l1 U% `$ g3 V& H. Q& n0 H% M( E4 e1 h4 h6 D, S

; c, M) R8 Y) N' @2 W! b5 \        UARTPuts("------------------------------------------------------------\r\n", -1);$ h# G  M6 f. `, Z
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
% k$ B4 i" g: L8 ~- E$ n3 l$ O        // ECAP 捕获初始化
6 z$ K' V" Y" R! W$ L, @. V        ECAPInit();
  ^* g9 g# l. `, M        UARTPuts("Initialize ECAP.......\r\n",-1);9 B" T, n# A' }% f: B- N- d5 B
        for(i=0;i<5;i++)/ T- B: c6 i0 G7 k, h  c
        {
7 J, ~, ?$ V' N- l                    for(j=0x00FFFFFF;j>0;j--);            // 延时/ n. s8 d6 |4 P& g4 [
                    ECAPRead();
7 @5 o! v' n9 e: [; v        }/ T# g1 I) C# M! q
        UARTPuts("\r\n",-1);: G( u9 E6 j  v. b1 [
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);* R# b( f; \0 ]& H* p7 S9 I
        UARTPuts("------------------------------------------------------------\r\n", -1);
' H) w/ d6 ?: _, i/ s
/ C) g/ g- s7 ^# t5 J* t        // 主循环8 v/ J$ o0 w6 w& k  r# |$ B# X
        for(;;)+ d& s" n- Y6 J! ]% ?% K& v
        {
4 G5 W+ O; X; m1 y: i% C# j2 Z# ?% w/ m2 Z( g0 U2 w
        }, t/ H7 X/ g* I$ E( {7 \* _# k- b
}
: p# x  y+ X4 A- S4 g" c2 \" j% Z0 Y9 F, S
/****************************************************************************/
$ W$ a0 R3 E% V/*                                                                          */
6 a' S% W& L; M- k/*              PSC 初始化                                                  */
+ a4 g" t0 d3 h+ H: g/*                                                                          */: y1 \5 y( y+ L1 ]3 f- e
/****************************************************************************/
  V% M! X) ^4 K, l( ?6 Lvoid PSCInit(void)+ ^1 C. t! U: _
{
* M" i, C' b% u7 q! M/ R5 K        // 使能  EHRPWM 和 ECAP 模块
  ^& Y6 F3 v: |        // 对相应外设模块的使能也可以在 BootLoader 中完成# q! k! S( n) g' G
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; z9 \+ o: ]$ I/ L8 `1 |( ]2 B    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% q8 x$ F# p! H5 h/ t8 R9 C& o
}
1 k6 u8 j  [+ D+ |- q; K# a
2 e- n% S" p2 y6 O/****************************************************************************/& _. E6 G! X4 F+ A
/*                                                                          */
5 s1 N7 I; {' o$ o! _+ B" o/*              GPIO 管脚复用配置                                           */& p0 k) P& d1 A! ~& |+ m6 s" }( {# H
/*                                                                          */" x6 L9 ~6 D2 G" y5 O6 A
/****************************************************************************/0 V. o, \6 U$ _# J
void GPIOBankPinMuxSet(void)2 U7 b5 Q2 Z# y
{
; r+ c8 `4 c0 \- g1 g, k& u' p        EHRPWM1PinMuxSetup();+ k4 m" h* R- Z/ [
8 }) v1 ^8 L0 Y- Q
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)$ ]9 x' v* `0 p# k. b
        // 作为捕获功能时管脚方向为输入7 M* L7 s& G" g
        // 作为辅助脉宽调制时管脚方向为输出! ?# v( D7 \; n. D
    // ECAP2 / APWM2: ]2 V5 o( e5 v# f
        ECAPPinMuxSetup(2);+ E. t' d4 l7 c) W

+ Z: L( G, C1 U+ Z7 m% F        // ECAP2 / APWM2方向设置为输入
* v% b% _6 N6 U2 q6 p        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]0 I: \, o* p8 I
}2 ~! v. f. P0 H% R9 A/ ^

7 V/ o( X: B* P2 h/****************************************************************************/2 Z, ]9 _' H* ?% n6 ~1 v
/*                                                                          */- X% y( ?' r# M  ^
/*              PWM 输出波形                                                */
5 K& D' _0 c/ s; @# S6 s8 I: x/*                                                                          */
  I5 S; Y& V5 o# l/****************************************************************************/
2 Q8 @$ x" J% d7 A7 a: i5 vvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)( G: Q. Z4 q) ^; W- I5 f7 ~6 a
{9 F+ ^& M$ M7 H9 m
    // 时间基准配置: W# _' C8 Q" r
    // 时钟配置
# y- |/ L8 q3 `  H, k( G3 ?    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);8 \* B; ^* c2 c5 |
" f% M2 v+ n' {0 z0 f1 S
    // 配置周期
+ Y5 \; n1 K' H    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,- |: k2 h# u9 h6 l3 m& ?$ r
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
: P9 h. |4 s2 t6 n: s  B/ v) L& u# u8 E* ?2 t( j
    // 禁用输入同步信号
* s; p2 l6 e% A    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);1 r' Z  F5 `# U9 H
! r' K/ T1 H$ m  q4 m
    // 禁用输出同步信号
: [% ]4 |1 g" ~- K+ p0 {    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
- N4 U  M  O5 S; z, U) `6 ]8 ^1 a
/ P! y6 j+ E$ K8 t1 P& z    // 仿真(DEBUG)模式行为配置
( ~$ b9 z6 j4 @8 {# J    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
: T1 R5 Q! v6 b0 T2 Y: E6 n
/ l4 g4 h9 l- X8 i" D" T    // 配置计数比较器子模块
+ d3 `2 A2 R/ G    // 加载比较器 A 值7 t& W  @- I4 e3 x9 ]* B
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,- w$ C- q% j: h. X; V
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
5 E! u' B, e5 L+ T5 q
7 N7 p0 e+ P; w    // 加载比较器 B 值. }* [9 L7 e+ Z# b1 X' h5 {
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,0 F5 ^' s2 ?' D! k0 z5 f/ G1 h
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);9 d" _( E9 G4 I0 M

9 h' p1 S7 c! t8 J" d) w    // 功能限定配置(输出引脚触发方式设定); h; Z: O/ K/ d! }% M
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
% l$ f/ ]  Y  _. A8 {    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,' n& o* K! j  E* ], O
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
' d# z! ^! n6 z/ B  r                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
5 c+ n! @6 I, D
, Z+ l/ O3 x8 ?: q    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
1 \+ U+ ]" X- t' g; i: |# n' h    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);+ j& N. Y$ {3 b; u% E. H7 B

$ v$ s$ b0 k* c8 h- \    // 禁用斩波子模块  z8 S" |# n4 Y; i
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
3 f- }- ^& g/ ]  A" [: u$ h: x/ A0 k9 I: o0 s. x* l5 e; T! q8 S
    // 禁用错误控制事件
% |6 m( ^4 m4 M) z# M; U3 a: O' M    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);( p5 ^, V$ {# t' [
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
  [- u# {6 m/ C1 H. \& x$ ]  S. D
    // 事件触发配置6 e- K7 G0 |% K$ ^" T1 O. e9 ?
    // 每三次事件发生产生中断
9 g+ y' ^8 n) W4 j7 \    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
2 l* N3 J1 s* I5 Z0 ]7 g    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件: j7 R9 j7 c* _( l
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);) }7 G* g0 N: k9 S9 i: Q* y7 f
    // 使能中断
, K, X5 y" D* r& h( p. X7 p  T    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
- A9 T3 t$ J* y5 u7 X9 z
0 @; I8 m4 V, d+ u9 `- v. @4 O    // 禁用高精度子模块1 X  U7 }8 q4 s- }* O
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);0 X+ w2 T# A6 K0 P0 f, D
  R! s* A9 X3 p8 _6 I5 l& g
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);1 ?. F5 x$ Q* r! Q5 A: L  m
}6 T* Y7 E7 L( @! [

& T$ N7 C# X* q+ n3 E8 j: Uvoid ChopperWaveform(void), b0 G  C, k  j/ i. V: H
{; D$ e5 o& @# P' Y9 c
    // 50% 占空比8 z$ J0 f+ a  _. X
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);# w4 e& }1 \- s% z  L1 ?( P+ b3 Y
    // 4 分频
/ M6 ]+ N# o- I% A# z5 C  |    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);: f! |8 Y" c& c" B3 m
    // 单个脉冲宽度
2 X% h/ _- B" Y    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
2 W2 b  A+ Z3 O' _- ~- ]; f    // 使能斩波子模块4 z0 X* q% H/ P6 Z4 J
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);9 G/ A3 F  s4 b6 p
}  w+ _5 I* M: m% w* ]/ N7 p9 C* ?
) W7 k' I) c  w- O
/****************************************************************************/1 J# `6 k5 @3 [/ {$ r6 z  i
/*                                                                          */
' _. d: O& S4 }  b8 S0 m% I/ w/*              PWM 中断初始化                                              */
# g. |' e  K# C/ d6 V/*                                                                          */
  b/ B% P8 t6 J( _# [- ^- [: V/****************************************************************************/
  ?2 r) y- S! V& O+ t- Dvoid PWMInterruptInit(void)& [2 |. Q9 O. m8 I! z3 x1 S8 q
{2 p0 c& }' d& D
        // 注册中断服务函数: _- ^5 ?: u5 ^! Z) v
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);6 h9 \2 g1 t' H9 F- Q
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
5 G; N+ r7 Q. L" \. {; s" t) G
/ g: i6 t7 }. |1 C5 i        // 映射中断  t& F3 L( k' Z  m4 }
        IntChannelSet(SYS_INT_EHRPWM1, 2);
% u+ s9 f' l0 C* {2 P        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
/ y% L/ E8 |$ |, M& @( s2 c- Q8 z3 N7 Q3 k
        // 使能中断
  ~+ b' B+ s2 q" i) A        IntSystemEnable(SYS_INT_EHRPWM1);
/ h  X9 {7 L3 _, P5 K7 o        IntSystemEnable(SYS_INT_EHRPWM1TZ);( }# K2 }7 a# X
}; ]: W- P$ S1 T9 {+ h( n! h

2 b. M4 @( ^: _; a+ O/****************************************************************************/5 F( d, ]5 K9 M, T+ ~/ |
/*                                                                          */
% s  V+ A1 U( j; ^9 L2 L+ S( B3 b/*              ARM 中断初始化                                              */
# Y) _" D  j$ R6 m5 i5 Q) {: |5 n/*                                                                          */
0 p, u1 G1 G* \- ^5 z/****************************************************************************/
" f1 {1 u8 x. I; G2 \9 E; M8 Z4 k9 lvoid InterruptInit(void)5 A0 O9 Y* U) f0 Z3 N
{
4 n+ l: K$ e* A: y! {        // 初始化 ARM 中断控制器# r8 `! T' g% n# b/ g
        IntAINTCInit();* L$ B3 P5 `& h) B2 y3 ]$ }
3 a  o4 d/ H' a- X
        // 使能 IRQ(CPSR)
. W4 K8 ~# X# x5 h9 E2 V        IntMasterIRQEnable();
# x2 m: [' @' z& I, ]
* H, f3 B# x: @- M        // 使能中断(AINTC GER)( E+ t, B) Q2 m* [
        IntGlobalEnable();
1 _& V7 }& f5 P* `# \
+ s) h$ L! {* b+ e1 Z        // 使能中断(AINTC HIER)- o1 ^! M. X, k3 |; z$ t
        IntIRQEnable();. P* Q$ c+ ~' V' O6 L: g' t$ z- O
}
7 u$ o" q& ^( q! M, H
0 D; d! f8 _9 S
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
5 u! P$ G+ t  F/*                                                                          */9 I! S& H: Y1 w0 s
/*              中断服务函数                                                */0 m* F; _( q! s2 [
/*                                                                          */
+ c# C& s+ ?  H. ]" i3 E/****************************************************************************/' d& m; o# l2 ?4 O3 P
void PWMEventIsr(void)
6 \$ L) y$ G. _* k{( }9 V7 J  `3 _
        IntSystemStatusClear(SYS_INT_EHRPWM1);
3 d4 z: P# o# n* S0 t5 O) N
& d3 m& r: H5 F$ C    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
/ x5 n* h1 T; h: `6 Q. ~# r}5 \5 p3 |: a) k/ f4 Q, C# f$ G
4 N, _/ t2 S) f6 o, T
void PWMTZIsr(void)
: o+ y. p. Z! y{
/ d2 o# N2 y* K' {0 _. x        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
$ B4 X; f4 E& u9 }+ M  P& B" ?3 s! u1 ~6 W8 U% ?
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
' I0 [; l6 m1 i9 v) M, i}
0 b7 P; ?: L: y0 |+ s( M+ q, G" F9 c
7 t6 R, J0 h7 g, [; s. T/****************************************************************************/
' f( [# S% C4 `6 \; Z2 m9 o# T/*                                                                          */7 }6 Z1 Y8 M: ^+ E
/*              初始化捕获模块                                              */
" r- Y; u- T- t. g/*                                                                          */7 L( c5 F7 w9 O" J, t0 y& g
/****************************************************************************/
' a; W9 X) N( o) Y* U# xvoid ECAPInit(void)
2 ~/ t! I; N8 {( ?6 y# R{& S6 y7 |; L9 K" f) e- u
        /*-----设置 ECCTL1-----*/
3 C4 k0 @- Y5 {/ c% y$ z        // 使能CAP寄存器装载) V, A; s6 D! w' P6 s" t
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);; J* B4 s% n. V6 U
        // 设置预分频值., ^" e; f/ Q* z
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
6 i) @4 V# y0 g1 K2 e* J        // 上升沿触发捕获事件  E$ r* X0 L7 `) a- A
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
6 e* e8 {6 b" C) l4 I/ y        // 输入捕获后重新装载计数器值.5 X3 J8 Z* E" y; @4 g  L, y! s
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
0 s. `4 {' @* v' Y4 I% r3 g
+ k, n# t( {' n  x. O3 [3 q        /*-----设置 ECCTL2-----*/1 r4 h/ T$ z* e9 Z! {
        // 连续模式
# f  r( n% X1 o) E' p        ECAPContinousModeConfig(SOC_ECAP_2_REGS);' d$ x* R/ V9 z: M5 I/ L
        // ECAP计数器TSCTR持续计数
% {+ t5 Q  O- T        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
8 ~' X4 C2 u6 g- T        // 禁用同步输出和同步输入
) C! C4 B! ]% [6 {/ I- a        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
( c9 V0 W- @1 f% ?4 q1 a        // 配置 ECAP 2 为 CAPTURE 模式
; X4 J" U9 r1 B6 w8 ~2 F        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
# L, \! e- `5 V, p$ k5 E3 g# P
! }( _5 M; r# X        // 使能中断# D+ D- u. I; a% P
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
. M+ {8 a3 F# v/ _* I}  a8 v. J; w- [8 f0 z
6 Q! X3 I( T8 s0 p, M7 M
/****************************************************************************/. `8 n/ n% G+ Y" M. Z+ U
/*                                                                          */* S4 m$ t8 S! s. e
/*              取得捕获结果                                                */
. J8 o9 H! B% ~! _) D: ?$ b( z6 g$ m; e/*                                                                          */
( j, D2 K) I9 q" |/****************************************************************************/$ o( T# q6 L" C. N; K& Z
unsigned int ECAPRead(void)
$ S. E6 j. ]9 G; F2 F5 N: R{+ {$ p) v. |- M: K$ h
        unsigned int capvalue;
/ ^( c5 E0 d4 R6 k* p        unsigned long frequency;
/ u1 y8 I6 M' h" Q( u* \/ z$ |7 _5 J% z3 F
        // Event1 中断标志
3 V  K$ e  q! K+ h' S9 e        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))4 A8 _3 Y; I( y+ N" N  Y& I# P, W
        {
" a6 @5 m2 x7 I: h1 l                // 取得捕获计数. c: o; x, v5 }- ^1 m' F$ v" b
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);' V& I& E3 \: R' f% D8 t) h# d( H
                capvalue = ECAPResult.cap1;3 F" b5 }1 k1 M/ `

0 F9 ^9 P. ^+ a7 n7 y2 p                // CAPTRUE 模块 228M 时钟主频
% h% P: u) N. e; T5 w- ^/ W                frequency  =  228000000/capvalue;* d& n/ j" n8 n& L! N
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);# C  k& X4 B; o9 b0 }( m
; m$ B: e) p1 ?0 _" q/ u) E% N  l2 J2 e
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
7 R  B6 n2 V; j//                IntEventClear(SYS_INT_ECAP2);
/ D7 E% Y+ l# H! R$ B        }6 n( X5 A' D2 L$ S0 F; s' D9 N
        return frequency;
+ u3 F# |+ g! t2 ?( n3 h}
! \5 B# v' |. y  }) P: n1 _
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。, p) o" y, |$ Z5 u% {

本帖子中包含更多资源

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

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, 2026-2-21 21:29 , Processed in 0.046695 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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