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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/. g9 u1 \" R4 B" m
/*                                                                          */1 }3 C3 A8 A& L/ O% h% y6 j
/*              宏定义                                                      */
* o4 O& p3 z) m! b+ L4 I3 y# V$ b' m$ x/*                                                                          */
- i1 C( X( H8 M! D  V/****************************************************************************/+ D. P$ J7 h8 z( k5 s
// 软件断点
% B# |2 J/ m$ j7 s6 p#define SW_BREAKPOINT     asm(" SWBP 0 ");
+ S$ O5 n$ [/ Z" R2 |% \7 }# M3 ?& T8 s9 ?- S3 ]# i, _( E$ b
// 时钟分频0 u  `; B( c# B- z0 p
#define CLOCK_DIV_VAL     228
+ w+ R  b8 B0 H  E) E. k! \- O, B. H! `1 A- g
/****************************************************************************/
, m$ O; d9 O; v7 ^8 ^- [" z2 D1 s/*                                                                          */
9 s! A0 c) H1 `" j# P* x' _9 e/*              全局变量                                                    */
4 f7 b( y* D( \( h9 D/*                                                                          *// Q, ~. D8 I$ d0 t- l
/****************************************************************************/
: n6 [' V! ?- IECAPCONTEXT ECAPResult;: p+ Q, F+ M  }  r2 s  s3 V

4 p' b3 g# p$ \$ u  X/****************************************************************************/
' L9 h, Y' l0 `3 Y9 j+ H/*                                                                          */
. F* s* k$ [" @7 n/*              函数声明                                                    */, F6 V3 e; T3 D1 h/ m3 b8 @6 `
/*                                                                          */6 J9 }- L/ r6 d' P7 M
/****************************************************************************/. S0 J9 G0 W$ d) ]- X; @% |
// 外设使能配置6 e1 m$ Y2 C7 e* U. A$ M
void PSCInit(void);
, }" ^. }+ K0 K  o: d# S4 J' _1 r, w; h, H0 n. g3 E* c6 g
// GPIO 管脚复用配置
+ ~. y* w$ {2 k2 \( evoid GPIOBankPinMuxSet();
1 O* K% @6 r6 d( I& k+ ?3 d9 K0 K  [8 D0 J- [  m# R
// 产生波形, |. x% i9 {) g9 q" Q; ~" x# C
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);' d4 t( s+ b) ^0 {
void ChopperWaveform(void);
( F2 {3 J8 L  X& {
8 j1 Y! G, F* r// ECAP初始化和读函数8 S, e: n" A* @6 ?4 {
void ECAPInit(void);
, l9 S( V7 b5 u: D9 uunsigned int ECAPRead(void);3 m( y; ^7 W. ^! ?) l
+ M% U+ e0 f) R- b4 H- c
//ARM 中断初始化! f, }4 X& P. q- o: V, @: b/ g! e
void InterruptInit(void);/ e5 ~$ @8 [; [9 F

4 P2 {! N! e  [// PWM 中断初始化
1 g( e1 `) W" x$ z$ bvoid PWMInterruptInit(void);
7 Z7 D; W/ R7 |8 @2 I7 Z7 {// 中断服务函数8 {. _! ^5 V  O5 `; X7 c
// PWM 事件
% ?' P( |; X! evoid PWMEventIsr(void);
* n, y6 @3 v& E+ s* n// PWM 错误控制事件
3 n( b" n8 {$ d/ y3 g8 U+ E& ]* Rvoid PWMTZIsr(void);" F- R3 [8 _) `$ S( |8 F
! {5 |% {) N/ N& y7 G! A4 l9 D
/****************************************************************************/
& f1 R0 j5 e! q/*                                                                          */; x) [' ^& ^+ F. W( `/ ~; a
/*              主函数                                                      */
2 ]- ^. l, C/ w% q) N6 w2 O3 s/*                                                                          */9 `& n0 O0 T1 w
/****************************************************************************/( \& j! n* ?9 q4 r9 C9 ~
int main(void); X8 G4 d4 D+ X9 g5 E- o
{
, S9 i$ g0 }+ @: n) I        // 外设使能配置
7 J7 D0 O5 _4 X5 c4 f        PSCInit();: }& M3 e2 ^, O3 G7 S0 G1 v

$ E8 m" r- `5 D        // 初始化串口终端 使用串口2, @- Z8 _; }* w, s% ^% s
        UARTStdioInit();5 K0 l: r; c! d0 {5 w% V' [
       
4 J5 b2 q4 L+ i6 U, X' a        // GPIO 管脚复用配置: d) U2 |) _! @  |( C" k- b5 M
        GPIOBankPinMuxSet();7 r6 T3 c" `+ F4 F! G

% \9 ^2 B6 X. A% g        // ARM 中断初始化5 u" L5 i8 P. I% N
        InterruptInit();8 g5 ^0 r, t4 m7 b/ H8 P  D0 B

* f. V- I8 ]- u; M  K        // PWM 中断初始化
1 x. _7 |* _& a+ o" `; P        PWMInterruptInit();
8 f' i) L  T: D( ?8 @% d$ B3 H1 |
        unsigned char i;! L9 {- P- Y  ^# t6 e" a8 Y6 ?$ v
        unsigned int j;
' B; v7 R4 n, B1 ?  m0 X; I  y0 M) R9 Z. P
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);; F, b& Q0 F8 F+ F, e4 X
        UARTPuts("------------------------------------------------------------\r\n", -1);2 t4 H' m$ i: X4 T9 T# f" ]
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);# ^$ ^6 c" s" u, j
        // 产生波形
0 w  I- H+ E- h: E5 [2 h1 m5 e        PWM1ABasic(25000,50);3 ]0 f" X+ C: j0 F$ T- u) G3 ^( ^% u

, W' T# N9 Z; Z7 {! [        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
" A2 [$ U4 }; @% q+ J/ S+ q        UARTPuts("------------------------------------------------------------\r\n", -1);
. h; b3 v+ m. n( s
7 m5 Z7 m5 R7 @/ Y# v) D3 @' e3 @' i, ~( r' h

  B% ^- P6 A5 e& ~6 v7 p- S        UARTPuts("------------------------------------------------------------\r\n", -1);
1 v5 w) i( Q: b" R# o9 e* m        UARTPuts("                    C6748 ECAP Test\r\n", -1);
/ ]7 c4 O& @1 d" g$ P0 G9 h        // ECAP 捕获初始化# [4 l, F+ \6 f9 C
        ECAPInit();* h  F1 l- P8 j; P5 t! N% E
        UARTPuts("Initialize ECAP.......\r\n",-1);
1 m+ t7 B3 |+ q" B+ o( i  [        for(i=0;i<5;i++)3 }0 o, L% O9 m+ M8 V4 A
        {
# m3 T9 H, o0 w% T* ?' y; C                    for(j=0x00FFFFFF;j>0;j--);            // 延时; ^1 X, L' [1 D3 Q. ^/ S+ D3 v5 x
                    ECAPRead();
+ H5 e+ R1 S7 c+ V! D+ u  |. y        }1 x" p/ B( i1 H9 v) a
        UARTPuts("\r\n",-1);* G' {3 \  ]$ W, P0 j$ }
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
! v) q( y: i5 x# p. ]0 E        UARTPuts("------------------------------------------------------------\r\n", -1);
% z- Z) o) z7 V1 k" y6 A3 W) Q2 s: l5 h
        // 主循环
/ _4 q7 x4 h  G' `7 ?$ T$ ^  @' c        for(;;)$ D* A; K5 U8 v4 q- l% X6 _1 I
        {* b/ `! C& ?  V3 ^7 j. k) ]

) p$ i' i4 R/ t' m1 A" H. r        }8 r! c! t- }2 M
}
% v7 r  _; [, g3 h# K* T  K6 |7 Z3 ~9 y& t8 f. B
/****************************************************************************/
$ F6 b4 ]2 a, g" I( s/ ]/*                                                                          */
! f" V1 H% N& U/ W/*              PSC 初始化                                                  */: H  E: r! Q7 l5 d; [
/*                                                                          */
. [# v1 i' ]2 p' K( ~) a( h/****************************************************************************/6 b. Z* s6 i0 l4 r1 t
void PSCInit(void)
! @2 o$ x7 ]8 f9 U# t6 C{4 ~! l0 Y3 b* {7 }, D  E
        // 使能  EHRPWM 和 ECAP 模块
3 ]8 e# g) S  O1 E" B# P6 S        // 对相应外设模块的使能也可以在 BootLoader 中完成; g9 q) e( ~/ I4 k" ?/ ?, v& H# u8 T0 s
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
! @% X% L# E0 t2 J  U) w    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
8 o: @! T7 X  f" p. {/ G0 f( t. T}
1 B, ~* r8 e6 r( f* p+ N3 Y
) b  K6 U4 ^* |- {& s- a/****************************************************************************/
6 ^" a1 T2 _1 g' X2 P/*                                                                          */! ~" }# ?+ g+ A$ b/ H6 t
/*              GPIO 管脚复用配置                                           *// b" t" A/ V( n6 p
/*                                                                          */* k% x( U$ @1 z2 G
/****************************************************************************/
5 H& N/ B: q3 h8 Qvoid GPIOBankPinMuxSet(void)% }6 `7 y) B( @- D3 [8 J6 g
{- `* H4 v4 |2 U" |, h
        EHRPWM1PinMuxSetup();4 Z. q1 H' d& }9 @" K/ I5 l

% L1 M2 Y- F0 {7 R) Z        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)" e7 x1 E2 g/ n6 I% _6 Z2 D* d2 O) Z1 C
        // 作为捕获功能时管脚方向为输入, f8 S3 n! b" ]; O4 H7 M
        // 作为辅助脉宽调制时管脚方向为输出
4 {! f* a4 P/ G* u; e% [    // ECAP2 / APWM2) m, g/ C2 _7 ]2 `2 t
        ECAPPinMuxSetup(2);9 }1 Q/ _( ?5 b; w
; I; n5 p0 Q8 r2 X1 u' s
        // ECAP2 / APWM2方向设置为输入9 \* w4 U; s% N1 T
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]$ C8 n. S! a1 K8 J" t
}
$ z4 U  I7 r+ v, |+ v& `& c# y, G* u% Z' |* K) g& e7 p& a
/****************************************************************************/) ~) L2 B: d) C' u% [$ {
/*                                                                          */
3 ]) U  k- \, S, ?' B/*              PWM 输出波形                                                */
$ J6 I" ^7 |8 \7 X/ K+ \8 w/ o/*                                                                          */5 a$ t7 p) I5 [/ s
/****************************************************************************/2 Y# W. S' ^& [  J- S9 q
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio); e' k- y" @9 N6 L$ T
{. A( ^7 V" C/ m% [, k! a; F) C8 W
    // 时间基准配置
9 t2 H# n2 q/ Z1 E$ D. L0 t. u, Y. M    // 时钟配置
5 ^7 l/ o5 F* k    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
% X* u. T; q! I: K6 P& q4 s
9 }- p! ^( {4 o- f7 V: a0 m1 X* q    // 配置周期. d& L9 [+ U& `+ d( Z. L& R2 [6 v
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
: t3 E  j- n2 z6 A                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
# y' B' i! i7 j$ M! e! U
0 h, y% W& G( B1 ^    // 禁用输入同步信号
+ g6 ?' x2 Y7 e6 m    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
1 k. \) h# e% Y+ g4 h5 X6 n6 V, r# I5 t0 F5 \' ?9 N1 K0 G6 `0 B
    // 禁用输出同步信号
* a# f9 s% N; z' G, _, M    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
. H0 K3 F' c+ m+ h2 Q" r/ d, x6 P9 ]+ y# j$ N. T
    // 仿真(DEBUG)模式行为配置
0 g  a2 a# U+ D  L0 \4 s% t; F2 d    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);$ \  K0 c& V7 C, ]# V! v3 ^
+ u0 Z* ^& z3 p& B8 F* h2 k* ]
    // 配置计数比较器子模块2 T1 N/ h7 o/ l
    // 加载比较器 A 值
. [4 I% H2 E) _  D( z    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
$ ^0 q  ?2 U2 Y, I6 [3 _                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);1 O6 v* E. v5 Y1 b3 M) {
/ Q6 ]$ l$ q8 h  g+ f8 g: Q# A7 h7 ]
    // 加载比较器 B 值
- I' A) d8 a* P4 X6 O- V3 {    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,  ~- ]% S, B) E9 S
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' f8 I6 y: I$ H: r3 r6 A  h  T' w0 v0 l5 @
    // 功能限定配置(输出引脚触发方式设定)7 t3 x9 z. S# A! i2 X0 \: ?5 w
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出, c8 R' ]4 U" ^3 C& h! h; ~( E8 k
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,3 \$ ]& O0 \9 J# K
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,0 E' |! ?" ?' z; J
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
: U: s+ N  e: l5 D) s% I0 S3 |: ~
/ Y# |) ]1 ]- z5 W  b    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
2 e7 z# v+ Y1 q# u' a' g  f    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
4 f! R# n6 c* E* D) g, n& m7 C  |" \, g$ Y. r
    // 禁用斩波子模块* m1 \5 C& Z0 G5 R5 B# h
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);( l$ K3 w/ ^" c# k1 m4 v9 m& ?

2 |( y/ U0 f5 @) i; @% m! W8 F) P7 M    // 禁用错误控制事件3 `0 }; j- P6 g, r: r' X; {
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
. d# M9 D% K; N, v    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);% k8 S7 ?, ]" {. [+ e
6 c4 y3 D$ B6 n8 D/ g; m
    // 事件触发配置& [+ ]- n3 J" N& W
    // 每三次事件发生产生中断
* H- s, ~0 m/ U7 ^' b; f. c5 G    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
! U/ B) N( q% [+ J  H# S! d    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件# y7 x+ ~$ n$ u4 z/ K5 ^- A& z
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
$ j3 w0 M+ B& J& j6 g2 Y    // 使能中断6 M5 R: B. n% `: d) U+ G1 g% ]
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);: B. {1 M. g+ R0 P2 v5 w
1 J. D( i$ E7 K. m+ m
    // 禁用高精度子模块3 \; l: ~" K0 S- \; ~
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);1 g$ A1 P' t. }

- |7 ~9 p* m$ n3 w& B3 F# @3 M8 `    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);7 Z" x4 w) M$ x: U+ X$ [
}& H' z# z( }' |/ ?- y, s5 c

# ^% y& T. X: H) @; ^' s/ @void ChopperWaveform(void)
. w3 d. c- C) m, W9 |{
/ ^) f! N4 l; H+ Y    // 50% 占空比$ l% y+ c5 h2 R  ~9 T
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);4 I3 G" h# R) I  {' j
    // 4 分频( u3 Y2 j$ u; j4 a6 ?( {
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
% t8 f  j& Q% o# M. ~+ _    // 单个脉冲宽度
/ c! A8 W: v6 b5 f0 ]8 ~0 \    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
7 w: Z8 M4 [( Y8 o) L# H    // 使能斩波子模块
+ E+ ?3 `$ \# {8 J/ v/ p, A1 t    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
( a6 I4 w) a% I$ z9 q  }" ~, L2 k}' d3 j' H; D8 Y  }$ d& w4 v
4 I3 u% o7 G+ V1 F
/****************************************************************************/
* W+ Q% g5 g- p; I: @0 a/*                                                                          */3 a5 b, _; k; e. P
/*              PWM 中断初始化                                              */4 _# m; W  n& u* z: h6 H! v
/*                                                                          */
4 h1 t, \; o* u. K* }( W3 P/****************************************************************************/7 h& I& O& ~& j1 G6 `) [
void PWMInterruptInit(void)
4 @; ~8 V9 H( O* o{7 i7 |8 W4 `. I" y3 x* W! W6 \
        // 注册中断服务函数  `$ y) i, x/ ^3 h; e# L% _
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);, y* m, o4 c% w' _
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);- i; s+ V; w( }$ t/ b- ~
! r0 V; N- s! j: [1 [5 p3 [, _
        // 映射中断  y7 G( C6 x2 O- _% a+ @1 ?
        IntChannelSet(SYS_INT_EHRPWM1, 2);- _6 R9 D) @) H* S1 O
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);2 m' A& Y/ f# z; ?9 c4 D

# m4 T( v- D5 ]1 V$ Q  q        // 使能中断
% I$ t8 b! u4 ^. f3 n- r! C3 o7 c        IntSystemEnable(SYS_INT_EHRPWM1);% o$ O6 X3 g& l
        IntSystemEnable(SYS_INT_EHRPWM1TZ);! g' G$ }+ ?2 I6 h4 ^  T
}
" V: O( ~1 A* z( d' u/ x4 t3 k
4 d" t# z, H2 F3 C8 o/****************************************************************************/7 g; J4 B  W% q
/*                                                                          */; z( j) _/ A" b. `
/*              ARM 中断初始化                                              */
) z9 T8 X2 ]7 B9 g  n: j. Q, P, h$ P/*                                                                          */
5 p3 |0 C0 v) c2 v2 w$ g9 c3 O7 d/****************************************************************************/1 b( d  B, y, B: e8 a- Q
void InterruptInit(void)
& W7 K1 o  I  n2 S$ M{9 k4 B6 o  \, K0 {% y: l
        // 初始化 ARM 中断控制器
+ A$ Y2 c) {% w2 A1 N        IntAINTCInit();, L7 q4 ~7 Y- r+ r6 x
2 _3 E( I9 N; k6 B' X
        // 使能 IRQ(CPSR)
7 ~3 [: u  C, \1 e% D# R2 q        IntMasterIRQEnable();
4 R6 `. e) n1 S, C) @  R4 ~% x% A( A- A# O* {6 W% y
        // 使能中断(AINTC GER)
* D7 K$ s& A& J7 J; o1 j        IntGlobalEnable();
6 ~, ^7 M* Z. [. f
* F1 }0 n! C( f, A" ^& y) p$ Z, x        // 使能中断(AINTC HIER)
. ~- T0 x# b' I) \" V; p" X- y        IntIRQEnable();9 v  E9 Q* q! f  H2 |
}
* Z; H( k. i! b$ s5 M/ b! ~0 N" ~" ]. R) ^# k) o
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
  \  p& d! @2 J' t/*                                                                          */* ?1 ?7 O) z/ ?6 G. R, C& o
/*              中断服务函数                                                */- ~& S  E3 A. n7 z+ I* C
/*                                                                          */
* [8 D. h" i9 X9 W/****************************************************************************/* V; |( J: m3 I3 R5 C, F
void PWMEventIsr(void)8 V9 ^1 D/ }) E) j1 e# e
{4 h* K+ f. T& j5 F
        IntSystemStatusClear(SYS_INT_EHRPWM1);
/ L. Z& E, r1 n
' y3 D0 E2 E( n9 r    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);/ }' J1 g4 h0 `: z
}( G! t5 v$ M5 j( [% ?

" q! F* k; y; F) xvoid PWMTZIsr(void)
1 P& h. {7 b$ l# p) {+ @8 g" X) L0 b5 _{, T; ?6 B" z# V  |
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
* m+ j8 T; z4 T; I+ N& i" V! g* Y: _' }( @: |2 N" O/ f
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);7 X; s# m$ u6 ~# S8 Q# L
}- ?- O* m' H- v& D

$ w$ n8 s% j6 k/****************************************************************************/
- X8 @" O* ~; |  V8 H# x, D/*                                                                          */" X! X/ D* X: k6 }. ?) R
/*              初始化捕获模块                                              */
4 I" K7 x7 @1 i. }# x7 v! ~  N. [/*                                                                          */
- T  j4 Q8 c& `5 b% ^/****************************************************************************/
) n8 K* F; L8 M& D5 X3 jvoid ECAPInit(void)9 F5 D* n7 e  W" ~
{7 t+ r8 |6 J! ^
        /*-----设置 ECCTL1-----*/. S* x" b5 N" c2 M7 g
        // 使能CAP寄存器装载5 g% ?1 B' l4 }( K2 Y, I5 \
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);1 y) @1 i& J+ ^: i# i4 h8 F
        // 设置预分频值.1 O5 `6 U' I5 X/ q" Z
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
/ ^/ _/ L0 s+ B) ^8 k        // 上升沿触发捕获事件. p/ q9 f" {( S$ \, _1 }+ u
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);( j) P- j" N2 L% B/ D- {
        // 输入捕获后重新装载计数器值.1 d# l+ ~) v9 e6 e( z
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);& f! y+ `- a0 P- x% _
' p6 E- @6 D: m  Q
        /*-----设置 ECCTL2-----*/1 r5 b" Q% B7 f1 k) E; Q* }# ~
        // 连续模式) |7 Q" I- u5 ]! K. p2 X
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
9 G. [$ n6 [9 H, r        // ECAP计数器TSCTR持续计数
9 f! ~/ h/ T& p2 _7 L        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
' l" \9 q% k* {7 B+ d5 R9 ]        // 禁用同步输出和同步输入
, j1 F& g7 V1 Y. \' k2 V4 y* K: d        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
1 r4 ]# Z0 e' O5 s) J        // 配置 ECAP 2 为 CAPTURE 模式: q& ]1 V$ U% E( F! H
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);/ y) q' _. |' [* J' S; q
# h; j, ~$ z6 m  o& A; S
        // 使能中断
2 N, k- N7 C; j- r9 A8 f, P) W. W9 W//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);$ {) \  U+ O0 B. z0 `: o
}. j6 n8 n/ ?. Q, I0 z; a5 h

1 E0 j: p/ i  l* b. W/****************************************************************************/
1 y, m, E6 c" d2 }& @: }8 ]1 w/*                                                                          */2 G' o9 g1 {. m! h
/*              取得捕获结果                                                */% @! D/ \4 Q+ L3 b# x/ u
/*                                                                          */% f' Z$ B. W0 V" c$ C
/****************************************************************************/
) a: A/ P1 D( R/ M: U, Uunsigned int ECAPRead(void)6 h8 L5 j. V* q, `1 f" N( U
{; S1 K+ ?; W+ n  S+ l
        unsigned int capvalue;' E! ^/ O* Q) b& y: {, l
        unsigned long frequency;
9 F- _- }) r; j- j# W% O- F/ l7 |* v  M2 A
        // Event1 中断标志2 T9 e! S0 X+ F& g
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))- w  G4 a" k% k# d$ R! |
        {
+ r& Y2 ?$ f6 ?; [3 q2 N4 C/ A) n                // 取得捕获计数
& B3 c8 f' P4 s2 Y; B; N# j                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);) l. s$ [! }1 Z8 G% R( s% H1 F
                capvalue = ECAPResult.cap1;" z! i- T' y2 R# W! ]; o3 d* r
5 k3 M$ {% }" K& X4 M
                // CAPTRUE 模块 228M 时钟主频
7 @6 y! G% H( g! k                frequency  =  228000000/capvalue;
$ i  a" U; l, M# L) p                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);. t' X/ E) t" O6 \1 ^
4 ?) n  {; l* [/ Z  W
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
! S1 F# ]! n; c: y//                IntEventClear(SYS_INT_ECAP2);5 ?  y2 j3 H* p9 B2 V! |7 k
        }4 s) x& H" N. p6 |+ ?  p3 ^4 ~- A
        return frequency;
9 E6 @( u: \5 x1 {' Z% k}
, N' }7 G9 A2 V9 z
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
$ W* f% P4 `9 c6 j7 @* c3 L

本帖子中包含更多资源

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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