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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
  S; N, T3 S6 [( O- s& V) I- J/*                                                                          */
! ^, k* X' T* k+ l1 h, I/*              宏定义                                                      */
8 `! z3 c9 E$ m% a5 b/*                                                                          */
- P9 d( r: S9 f9 y$ [' B( d/****************************************************************************/
- u0 d3 c) P+ z2 J# B# m9 O// 软件断点* M. J' K1 k* W6 m( p6 P% L0 @: h0 r
#define SW_BREAKPOINT     asm(" SWBP 0 ");
, C: o' ^1 b0 o2 s
6 a% W  ]+ z3 r: Q* s// 时钟分频9 o! E0 B, t2 ^! e. b0 }4 j
#define CLOCK_DIV_VAL     228
! C8 y! t+ W4 U: g* N7 S4 Z6 O: w
; Q7 N  K* f! I4 N/ H0 Q: C/****************************************************************************/
0 O: G2 K; O; E" R) v; i/*                                                                          */' T% T; i, ]! x# x1 V8 A2 G7 G
/*              全局变量                                                    */  H0 O" z" K2 X2 G% C* f
/*                                                                          */
( N; o$ \' d* N  q/****************************************************************************/
/ @# h+ f7 ~( S" a! ~6 F0 LECAPCONTEXT ECAPResult;! B3 A, a4 G% q- O3 `! S& E5 H7 K
9 [6 W% J9 Z! e+ x
/****************************************************************************/3 v; x* x0 F3 b
/*                                                                          */& w; z+ R& J" o* T6 X8 @
/*              函数声明                                                    */" [3 b% ^) h6 h" }7 t6 G: v, e' T5 y
/*                                                                          */$ o$ l3 z& S9 u! }* z. w6 A
/****************************************************************************/' w% |- h" _, ^- P0 i4 F- r4 Y
// 外设使能配置
# T7 l: K/ q- yvoid PSCInit(void);# g) x) o: E3 o- Z. o

1 a! J" t5 M9 c1 v6 N1 K// GPIO 管脚复用配置
( u/ ]3 \* _0 k: ]( evoid GPIOBankPinMuxSet();3 T. y' {2 E! w4 E  E0 g! ^

0 T% M4 ~0 F4 f: ?9 T- h; h// 产生波形6 C) i$ F, {3 Z8 I' [( O
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);" A& y/ \  q: p0 t) z) @& @5 R
void ChopperWaveform(void);; i7 o' S3 s6 ~

, Z) M; G$ G0 r// ECAP初始化和读函数
! d8 ?2 L9 Z9 J' g5 Q" fvoid ECAPInit(void);( B! S' f& N& j, L
unsigned int ECAPRead(void);9 A: [, V7 u9 Y! y3 X

8 z& p' Z+ n) g' P% d1 d0 o//ARM 中断初始化
3 X; N' `. r' l" W0 Y% `6 I& B8 `void InterruptInit(void);/ V& i" ?. ~- w2 d9 u) l. ~% S
# z1 ~; |( }9 R
// PWM 中断初始化
4 i) R1 A/ z0 V: jvoid PWMInterruptInit(void);
- o( ]) ~/ ]% C1 n3 j) F// 中断服务函数
5 v. H6 @9 d0 G// PWM 事件1 `. D7 V! ?0 U# I! T& Z+ }5 X
void PWMEventIsr(void);4 v5 N( [6 A/ x  @2 `" P; j
// PWM 错误控制事件
+ b  v3 n0 n! [void PWMTZIsr(void);
! Z1 |5 Q2 }4 x, D* a+ b
; g5 d5 V' m+ v" F9 I; b  c7 f, m2 z/****************************************************************************/( ^; p# e- ?. O  @
/*                                                                          */
; E/ M" Y" M/ O$ V" ~4 `; t/*              主函数                                                      */4 J$ D. `7 i! f
/*                                                                          */+ p" x* p% p3 p. C6 K
/****************************************************************************/- X  Y, z, F* D3 l/ S
int main(void)/ i  J% \7 P  s: {1 c
{7 r( G; l& R4 U/ a* `/ x# a- F' i
        // 外设使能配置, t1 e* ]  y4 b- B; g
        PSCInit();- W0 h: K/ G4 H5 E3 D
" T1 P( h" P+ f& W
        // 初始化串口终端 使用串口2
5 D- K$ F' N& V' i3 C        UARTStdioInit();
; Y, o3 |& Z4 o  L% ^' I       
% p- p6 N. z/ ~  j7 L8 j0 c        // GPIO 管脚复用配置& M7 \6 V5 c6 |
        GPIOBankPinMuxSet();+ Y4 k; l, y  U; X/ n: d# r

  ^; a+ |* q- y2 N# O. L" y        // ARM 中断初始化
9 g$ j! E2 c  F* P1 a5 I# I: @        InterruptInit();" r) P& K# }  h7 d- D9 R% J

4 v# {3 r# r! i, W2 K' o        // PWM 中断初始化( V7 g% t, D3 O1 {/ K
        PWMInterruptInit();
/ r5 T- w! I0 ]% \
3 z" ?$ h4 a* V9 s. }        unsigned char i;" U' ^% S, P: [
        unsigned int j;! f$ F$ \# `5 l9 b& J$ I/ G9 B
' A2 Y8 f; R5 G0 _% B* N$ d
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
" W+ A8 r  |- @: n8 X; ^5 B0 y        UARTPuts("------------------------------------------------------------\r\n", -1);
% M3 q& l- N8 Q        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
* W4 @1 `' t3 D* \        // 产生波形6 Y1 ^- A6 d8 g' ?/ g: V
        PWM1ABasic(25000,50);
$ V2 h6 h. g7 e5 c4 G3 ~$ `: ~* B
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);$ A; K- `9 b/ o& r0 g
        UARTPuts("------------------------------------------------------------\r\n", -1);6 {4 ~+ `2 s! L; C! J, U' C
  R( `- Q/ ^; Y! \
& D2 c- z6 }2 ]; q

4 P; e+ e4 ~. n2 j" u+ S1 T, E        UARTPuts("------------------------------------------------------------\r\n", -1);
/ ]  y2 I) k; ?) _- {        UARTPuts("                    C6748 ECAP Test\r\n", -1);
% V0 C$ Z& Z% a8 N1 {$ H        // ECAP 捕获初始化" Q% [1 b5 z4 |5 v5 q
        ECAPInit();8 y: B1 S/ m& W  X, I4 ~" p- ~
        UARTPuts("Initialize ECAP.......\r\n",-1);
! m7 }6 f! a. s- D* e  q        for(i=0;i<5;i++)
9 c1 M$ [  s! w, P  F+ R        {
3 [1 R3 C& h6 ^1 f" z                    for(j=0x00FFFFFF;j>0;j--);            // 延时
: Z; V9 W; k* r% O& [( _                    ECAPRead();
: ?  d# n5 [( J. E( |" r$ S) x) Y: ]        }
5 q2 l  s9 h) {$ A        UARTPuts("\r\n",-1);
8 Z: l5 k$ z  r! B+ i        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
" b" b! q' \+ @) T. X* A        UARTPuts("------------------------------------------------------------\r\n", -1);
, H2 J! M$ h1 z2 e1 X
+ s) C3 B# c, H6 L& j. d1 `6 @        // 主循环
, a0 C( z$ ?, ~! b, ?- I        for(;;)
0 ^4 w# N5 e6 t/ v        {
  e5 {& c0 `6 U" k" T2 X" l: i$ E
% B, A: b) [% |- c        }
. L; N8 e6 ^6 n3 t2 L}
- x1 ]' g( h+ n6 q2 i0 a$ Z  C6 }) w, a% Q
/****************************************************************************/
- E. d4 }3 ?1 h' L/*                                                                          *// y$ M* u* V" f$ R3 [6 i
/*              PSC 初始化                                                  */
$ b! x' D  Q1 l2 B/*                                                                          */1 b$ s1 u5 }+ D7 I1 M) F2 z
/****************************************************************************/
0 b0 s6 J0 E) Z' |void PSCInit(void)* Y  P4 t+ D+ Q+ t' Q
{) X' y4 c: S/ {: B# P6 ^' l/ o
        // 使能  EHRPWM 和 ECAP 模块6 j: \! `' ^$ u; B; l2 D
        // 对相应外设模块的使能也可以在 BootLoader 中完成
- [0 l" |. P! _. E  V    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);) y( R: I" q$ |% E/ T
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);, {  B( ?5 Q+ }6 ~$ E  ~1 u" y3 E
}: W' Z0 ]8 W8 Y5 V

. C' `; I4 W  B& A; Z/****************************************************************************/- T+ \4 W6 Q, V  G" \, C+ {
/*                                                                          */; n) p- J) z5 [" R/ w" J
/*              GPIO 管脚复用配置                                           */
0 {7 V1 q4 F: ?8 e) H- F+ b4 Q/*                                                                          */
9 {3 T: a. g8 _0 x: I' D8 ]/****************************************************************************/
, ?% o$ [0 f3 c, hvoid GPIOBankPinMuxSet(void)
% r6 y- @6 B1 ]9 E: c1 r{
: h8 H/ a8 t8 i7 t% ?3 x# G: ]        EHRPWM1PinMuxSetup();
6 L; V( Q/ V5 S& @/ q$ e
: W+ z' }8 ?) Y7 s6 b/ m" J. R8 |        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)6 u- L5 e: z9 G
        // 作为捕获功能时管脚方向为输入* l$ v' W0 B6 t) f" o7 Y+ L
        // 作为辅助脉宽调制时管脚方向为输出
7 J* E  Y2 q. H7 y+ D2 S    // ECAP2 / APWM2* W3 z  v) {7 c' y5 P! g: y
        ECAPPinMuxSetup(2);& M+ E( m0 `6 R7 ~9 K" s* E
* q4 m6 ^: F3 p3 a' L  z4 i2 D
        // ECAP2 / APWM2方向设置为输入  U( \  H$ |4 e" |. X* l
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]" V! p# ]& A" i: {9 S) q$ w9 X+ O9 d3 `
}
2 k1 v7 d+ p3 c9 @" c8 t* {9 j6 D3 \8 |
/****************************************************************************/
; Q# g% I3 u/ r( k/*                                                                          */
. e/ ?- X: q7 L9 t/*              PWM 输出波形                                                */+ [* u( _0 d3 M
/*                                                                          */! A$ F2 A, e8 V
/****************************************************************************/
' B/ ^/ W: a# {+ Ovoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
* ^; }; w9 {. C; I* s7 M{8 Z7 Q* ]$ x! ?4 Y4 a2 e% r
    // 时间基准配置! D( @, X" U5 }6 k; x& _: y6 ?/ l
    // 时钟配置
/ q0 [- X  n" w6 ]    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
- U/ Y& t; x( m' I6 e$ l$ a; J6 a  y; B( B' M
    // 配置周期7 Q1 b( E) Z% Q
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
  `" O0 l6 ?7 Y8 q                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);- I/ c. X, Q: Y: a( k3 `" @+ @0 }

7 |; g$ v3 D; Q3 D* Z+ U    // 禁用输入同步信号/ T& E  k; z" q: A5 x" p
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
) I  }% _- v: r. P' y+ G& m! m& D# N. n6 W4 E2 V
    // 禁用输出同步信号
2 I# p) @! P$ k7 i3 f! i- P    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);, X( W% e: K" {- r3 ^
# p5 r" d# C1 O% |3 B  A
    // 仿真(DEBUG)模式行为配置- m" X; \( F% \7 l/ T$ m
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);+ b& z% D- M; d. d
: o: C/ c7 V. ^
    // 配置计数比较器子模块8 q7 C' }& B: A% c% n) U
    // 加载比较器 A 值* \. U, Y4 S* V/ q
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
/ H9 V( X* x. h7 [5 I, I2 Q                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
% M! m8 t. u9 Y% P# I) n4 J, F
/ c1 L( u: k4 B    // 加载比较器 B 值
. p% Y' w3 n! m% K4 W0 P$ p    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,9 m5 X+ n% c  t+ ~: ?: `
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& ^- X% h3 P( k# A% ~$ q% K/ t- r) t9 C/ g" A. u
    // 功能限定配置(输出引脚触发方式设定)
+ R& L  E, y, V' Z& R! l    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出3 ]/ Y+ `! q' Y
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
6 u. c  }0 y9 a+ {( c. n9 ^4 I                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE," t* d8 i' t3 j' x% X3 G
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
/ R+ `5 Z) i' {& g* I  G, K8 b7 X9 E% K, U/ ?
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块: \1 W& N& _6 c
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
0 x' P1 P% p, r% d( o1 f
# [1 i& j# R+ {! r( L6 y    // 禁用斩波子模块2 V& B- R, V' p+ A( j  A& L8 K
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
  I: u( i, g; h# M$ B2 x& o
9 J5 {7 G2 p1 a    // 禁用错误控制事件0 D$ l, A, R3 U1 E8 K" Y( \, r- E
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
: E1 x% \, `. e    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);" e$ h3 Z- C7 ^& r, |& h( ~, I

# c6 }: G- P7 `# I6 \    // 事件触发配置
* D; {5 ^7 E# Y    // 每三次事件发生产生中断
) T7 P4 b! \9 X: a    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);. b8 J( C2 p7 @" P
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
$ Q* L: K* `8 n' c& r+ o3 m: Z7 o    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);. z; i7 ]2 Q3 Z; X
    // 使能中断: N( L. x' X# ^% `) M. Y& x
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);% d9 @+ @  r( E3 m2 X# h% e, A8 Q& c

% g$ M% `  J; b% B, ^( W! J    // 禁用高精度子模块
. l3 I0 D4 T- q8 o) P3 g" g    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
. Z9 ?  @9 A% M0 B* H" r
' g' _8 ~' `: i3 m  k    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
- L8 V+ ?1 ?4 _1 B( L5 v}
/ i+ P  O# t  `+ Y& `
0 A% D  N3 s9 f9 n' C+ s  avoid ChopperWaveform(void); O0 Z! @3 h, c4 l- y# v
{& E9 }8 [% w( Q0 a5 z( H; @) [
    // 50% 占空比
4 n9 z' a2 j' ^6 P4 d  A  ]    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
  A6 R' P  x) ?7 K    // 4 分频; U% g+ W3 l8 U7 w9 n2 w
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
/ t% f/ P) h0 c" u# y- f1 P) d    // 单个脉冲宽度
( [0 P; N0 }! `( E% M    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);" F6 d3 _% O2 _; c% R
    // 使能斩波子模块( @8 d. j! ?6 b- O9 K
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
8 {8 K) b! e$ o* T. n9 ]& ?}; P* C: a. |* G3 _3 p) L
; b0 p  y# U+ }7 `! m
/****************************************************************************/# Z9 @; c, z! z! S
/*                                                                          */8 @2 I2 x1 t5 ~) a# b
/*              PWM 中断初始化                                              */
% y4 Y; j5 k$ l/ K/*                                                                          */& H# c* |4 Z! Q5 I2 S
/****************************************************************************/# q- w* |# V* }4 [7 y# x
void PWMInterruptInit(void)( p0 d/ D6 g  l) e! u% ?
{, j* }& A8 e% f. ], R: X
        // 注册中断服务函数
4 |' w. V' b8 B8 g        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);1 ?  u5 B* G7 E3 _
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
3 r$ d9 q8 R0 b$ d6 t
6 x+ o1 I5 {( j1 N# @/ g" {        // 映射中断
! i" W* b) e0 ]$ A: Q' r& W        IntChannelSet(SYS_INT_EHRPWM1, 2);3 g' U- k; D/ e% y, r
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);2 v1 l( t! N% x& w; h) l
4 c( r) A3 U( y' o
        // 使能中断2 i) ^* c0 B+ D& d, h9 O% T
        IntSystemEnable(SYS_INT_EHRPWM1);# ]9 j4 |2 ^( z5 @
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
' Y0 i! |; E* c& p}
. S5 i  w* i/ D8 j6 L& s& x
% a# g! U& H" ]7 m6 `- k/****************************************************************************/# l0 [/ t3 I  b0 G
/*                                                                          */3 @$ H. C. }6 ^% M9 o" V6 L* {
/*              ARM 中断初始化                                              */) Z+ T/ q: L* B& }4 g
/*                                                                          */
6 h8 ]0 O. m. ?, H" X; m, q/****************************************************************************/
+ i1 |  d6 H/ q' t7 V+ q7 O/ ivoid InterruptInit(void)
& I/ |5 I7 B( |8 m+ x; h! W{
$ S" l- E! x- r        // 初始化 ARM 中断控制器- Q, z% v: Q3 t! ?4 j; [
        IntAINTCInit();
: N, P  S& c  f0 \* B, {. h- B6 \4 `/ \) L
        // 使能 IRQ(CPSR)
2 k# r8 l) m* O- O) W; E        IntMasterIRQEnable();3 V. B; n" H+ v, l9 y1 Y6 p
6 f1 g0 e5 z6 m- ~5 K8 [1 z0 F
        // 使能中断(AINTC GER)6 B0 U! v+ P- o# Y/ |& D0 N
        IntGlobalEnable();
5 _8 Y9 R9 ]9 d' d7 \; V' z- M* g; X% `4 m; N* k+ n
        // 使能中断(AINTC HIER); v0 O: @1 l$ _4 |$ Q! Z0 O* J
        IntIRQEnable();+ e8 }+ V0 j4 e8 S+ p
}. a( g/ a  S2 V+ o6 X
8 ?4 S6 B) w. O* @$ f3 J
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
2 i( {5 R' ~5 S/*                                                                          */
( {4 d+ u9 |8 Z3 c8 S/ |$ k  s: F/*              中断服务函数                                                */) ^/ W! ~3 `) N  v( E1 Z
/*                                                                          */
4 |. B+ V; G" B0 Y/****************************************************************************/
3 b- ?. j+ F: Y! f; ~1 `+ \& |void PWMEventIsr(void)
- ^. L9 A" y$ {  x3 z) ?8 {{
$ Y. d2 ^" d" g+ f6 o- g3 ^        IntSystemStatusClear(SYS_INT_EHRPWM1);
4 G8 ]  B# ?* I# n& x
8 r0 u1 R; M; M, H* ]4 [3 g) F    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
: g+ p$ V3 i- D, u# h) \( ?}- `9 u& h; s( R, [6 C

- T- h& Q& l2 F6 i: E5 y' bvoid PWMTZIsr(void)
9 N( {5 j) O, ^" d& b{
9 J0 u; R1 d6 F+ H- o        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);' e4 @- R/ @) {; C1 R- o, [

. a2 m- A8 {+ i; X, {! y4 R3 o    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
, c, E% D8 D7 ]4 N, G}
: n% Y% ]: O! r9 p, F% ~( X' r6 T
; B: O$ U: q/ u/****************************************************************************/( w' Z" ^0 V7 Q5 |4 Q
/*                                                                          *// F! [0 r  m+ k. ?9 u$ B
/*              初始化捕获模块                                              */
4 S* T2 n0 n5 C. }/*                                                                          */6 \2 n5 I0 i: R$ O5 R
/****************************************************************************/
: O- i6 P; `: @+ ~+ a+ R* x" z' ?void ECAPInit(void)# L) E1 z% ^' d( B. e# J
{, R( c3 |; w0 I2 p' Q
        /*-----设置 ECCTL1-----*/8 Z& s5 ]3 u5 A: U; x' _. m
        // 使能CAP寄存器装载
) r+ {% K8 J, D0 q0 Z        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
) W% v$ a9 N6 J! E9 A- A/ A' _        // 设置预分频值.
$ A# W* S; K* b$ j" ]# Z/ a) A9 G+ d        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
! ~, @2 U) [2 v4 l        // 上升沿触发捕获事件
; u/ t6 k$ `/ a" H$ f        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
8 ^9 O$ z  o7 P( S6 F; B        // 输入捕获后重新装载计数器值.. \, f2 P5 h) n
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
' Q; X8 K1 d- T# ]+ c% S/ J8 P3 q( _& a* `
        /*-----设置 ECCTL2-----*/
0 [+ f4 W7 F* X0 P* H- x        // 连续模式
) d9 f* y( N& @/ [        ECAPContinousModeConfig(SOC_ECAP_2_REGS);8 g  h8 G& i4 A! \, }& H) x) I
        // ECAP计数器TSCTR持续计数  d0 D! M, x+ g
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
' u6 F! h; ?* Q: l! i        // 禁用同步输出和同步输入( A5 g* p' m9 y% ?+ Q1 o  }! G7 c
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
1 k* x2 p4 t3 G        // 配置 ECAP 2 为 CAPTURE 模式3 d8 f% f8 W# M( o9 s
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
' X  P- f- r! J' I# o7 G+ R& H* }# e
        // 使能中断
' a' J% m5 _' ~! p) \1 f//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
/ r3 X& e. v6 G& e2 f6 M, K& f}
  U& g' k% O% q8 W* e
  k9 s' I' K, I$ _3 o/****************************************************************************/9 B0 j8 ~# ^$ X3 Z+ J6 |) z
/*                                                                          */: O1 y; V5 F# h& S% e' S
/*              取得捕获结果                                                */9 v9 b" T. z; |' ^3 H& m3 [1 d; s
/*                                                                          */7 H& D' i; L# ^4 ?+ b
/****************************************************************************/
2 T  d4 U3 m- @1 ounsigned int ECAPRead(void)2 x) \+ r3 G/ k4 ?3 X7 L+ j
{
- Q% E& ~8 l! Q        unsigned int capvalue;' `+ C# Q. N' {
        unsigned long frequency;
* ^+ ?' c. e* A1 f3 N9 T6 d9 ?& i# B6 y1 e, B2 d. o
        // Event1 中断标志0 \5 H% [2 F3 z  M) s" }
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))$ u3 p% }+ q- P( @- o
        {
( j/ s! e# K2 `2 V8 O% p                // 取得捕获计数( \* f3 W- ^7 ]# d5 i2 O
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
) D3 N% e+ T6 g                capvalue = ECAPResult.cap1;$ H% ?+ R1 j. V, j: ~( y: V3 J& d, d( a
1 s$ ^3 z8 e3 Q# v
                // CAPTRUE 模块 228M 时钟主频
8 M' k6 u& F4 j8 s                frequency  =  228000000/capvalue;
' h& y, R' F/ p                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);) \( p: V5 F( a$ X( H% l* r

9 e( k9 d5 u6 S) D) r: o3 {$ N                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);9 L" n" u. S' m$ `# D" m$ ^2 w
//                IntEventClear(SYS_INT_ECAP2);5 z1 {  i$ [* k, ?# z
        }
3 p+ u: J: s$ ~3 f8 [  @. V  q        return frequency;
# P2 y7 k; t& v6 S) d- D' g}$ J, |0 T  I. s7 H; r: J
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。' _7 z4 ?, W5 K/ h

本帖子中包含更多资源

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

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-6-17 18:58 , Processed in 0.048431 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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