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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
, R7 U! F9 e6 T3 c/*                                                                          */8 Y0 t$ I: d7 u( C2 W: D4 G* ~
/*              宏定义                                                      */
* }2 c( c! {* q" r6 F/*                                                                          */( g* d  Y% ~  T- N5 e
/****************************************************************************/
/ m- K, i( F2 p; {// 软件断点
/ j& x. L, z, Y0 n#define SW_BREAKPOINT     asm(" SWBP 0 ");6 x8 O" k7 v3 Y, l: @

3 P. c$ Q2 q8 I3 n. P// 时钟分频
+ o( k8 V; C7 g5 E' o5 X#define CLOCK_DIV_VAL     228# s+ I6 G0 Y; t) N' m( L$ h9 T

9 ], Z0 @7 `4 I( V9 S2 A/****************************************************************************/
4 B) D0 b, T+ j9 w! \3 C2 ?/*                                                                          */+ s/ Q1 D: h( L3 @! S. v
/*              全局变量                                                    */& W' B% m  x/ C" u+ }4 {9 l' ~
/*                                                                          */
& V9 ~$ S" {% C2 @/****************************************************************************/* C+ O( `6 [" K. m. O9 G) C2 a
ECAPCONTEXT ECAPResult;8 [+ P, x7 ~- Z7 ?! Q6 A3 T/ E

% X) c9 |6 L/ Z5 ~! z3 n3 u' \( U/****************************************************************************/
8 T0 _9 n/ o) R/*                                                                          */5 g. h7 W7 \& n# }; |
/*              函数声明                                                    */  d8 n! G6 C4 x- `
/*                                                                          */
2 B0 Y1 `4 C, u0 E) \( j/****************************************************************************/) v3 O- G( Y1 i, f
// 外设使能配置2 X# p$ ~( U4 Z) x% @7 [
void PSCInit(void);
* \1 m7 U3 S$ o, v" K- z% h' r1 E/ d) E
// GPIO 管脚复用配置
: U- b( x/ ]( s# E" Bvoid GPIOBankPinMuxSet();
% ~  f4 u2 s6 i6 u! ~% P% h" \9 C( g. a. y$ M  L1 I
// 产生波形
# ~  l# ~) `  K: @+ C  a4 C2 I! Kvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
6 M- S( s( j  W1 H9 Tvoid ChopperWaveform(void);
/ g+ K1 r$ b3 M+ Z  L0 d$ ]- O6 o/ Q* l7 @. L4 P! y4 Q
// ECAP初始化和读函数
: f9 R4 Z1 q) C# B1 ^; @- zvoid ECAPInit(void);) i' C- I. w3 I0 b0 H5 Q7 ]" p$ G* v
unsigned int ECAPRead(void);
6 X3 n# p) F$ S, L, T& F. s" ?, M  D
//ARM 中断初始化2 w/ C+ M( e) R/ R4 F( L
void InterruptInit(void);" X5 H& `/ U$ x& D0 B  v

" y  F# k4 {2 k- A2 q8 H// PWM 中断初始化
. b% K* L" P: }' ?$ N+ S; [9 Cvoid PWMInterruptInit(void);# q, E8 O$ Y; ]; g3 e) j+ _
// 中断服务函数
. B; a# X0 p4 p/ n# }7 t& j// PWM 事件
, S& M7 F! w% g7 z, evoid PWMEventIsr(void);8 K; x; D; Z' [0 B& a$ y' m
// PWM 错误控制事件
7 o4 J% G2 _# o8 svoid PWMTZIsr(void);
; f6 \0 P, l/ F- X6 d
8 b. S9 P5 i9 Y8 d" T, G/****************************************************************************/
9 R. U! {, L" W- @( y/*                                                                          */( F% M5 c; Z- Z" l. N- g! T3 W5 ?
/*              主函数                                                      */' R5 H/ c# S/ Y* u9 q7 u0 V4 b
/*                                                                          */- D% m- K  K; ^4 O1 v
/****************************************************************************/
6 n+ P( s8 U* ^5 J' [; Uint main(void)
) o3 Q3 v. L8 R{& n5 l. @# Y& Y5 ^4 X- y
        // 外设使能配置6 s; a* s- _8 J) q! D" f; w
        PSCInit();  B: W9 U  ]5 R- Y& Z
$ \5 a1 h, k# r, x2 m7 `0 S
        // 初始化串口终端 使用串口2
9 k/ j5 V- P3 j2 g5 A* k. `        UARTStdioInit();+ y6 x+ O& R2 n( F& H0 o: I
       
$ C4 P( L7 k( @2 f0 _        // GPIO 管脚复用配置
  a1 K/ I7 X9 j* u( B        GPIOBankPinMuxSet();- B  s2 B/ w" T
4 G4 B4 S0 K8 b+ R
        // ARM 中断初始化
+ o$ @  n# T/ k8 ^        InterruptInit();: o9 O9 Q5 U) t! N5 R
$ V# h8 f6 x6 c
        // PWM 中断初始化
: ^! H, ~" x8 c, n' o2 j$ |        PWMInterruptInit();
" J6 C+ Q. K: D4 e* l  m9 f& O/ }, [2 l9 l$ I' a
        unsigned char i;
) F. s' r* L; W; c+ X        unsigned int j;) v) _/ \0 e/ K) N9 i5 b- s
: @: s/ P% N0 s6 B: ]5 G
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);" l. p$ ~8 i) I8 h! ^
        UARTPuts("------------------------------------------------------------\r\n", -1);" p- ]4 z% d0 A$ B1 Z) i) O
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
. g; B# a' P: p) b8 g) H        // 产生波形  V) p% m. x% J. `$ e
        PWM1ABasic(25000,50);
5 T5 V: M4 c( V: u
: g: D( d( P  x  S, D0 ~! F        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
  o! p5 K; b+ l% c4 J% h        UARTPuts("------------------------------------------------------------\r\n", -1);% D* I! {3 i( m8 D5 o  v/ w; y  ]  A8 D* ~
8 R% x+ E6 U  d8 g! j

, L) r1 H& q& }, ^4 P( L8 ^# h5 S' w1 B; G% `& {( `; D
        UARTPuts("------------------------------------------------------------\r\n", -1);
3 e. ?" N* R" N) E) G        UARTPuts("                    C6748 ECAP Test\r\n", -1);
$ R) h6 T; L" |0 f        // ECAP 捕获初始化
) V8 y: V+ m+ j6 ~/ y        ECAPInit();
# ]$ t0 Q# H$ R* u# p$ T# K0 U( \3 O        UARTPuts("Initialize ECAP.......\r\n",-1);% _- B3 X# |/ P5 t
        for(i=0;i<5;i++)
7 D! t" u8 V/ ?* {2 o        {
0 o7 C; _! ]# ^                    for(j=0x00FFFFFF;j>0;j--);            // 延时
' I1 M$ I: C% A" r+ \                    ECAPRead();5 j  J# T/ s' a5 e6 o% ^
        }
- ]# J# l& @2 ]5 i; A        UARTPuts("\r\n",-1);, d* \' D' ^" i6 T) m% a5 Z
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
1 K6 t" W( E9 t. ^9 ~  ]$ x( x1 Z        UARTPuts("------------------------------------------------------------\r\n", -1);
% _0 U6 Y5 o8 m  a9 p6 ^& O; _8 O6 A0 D3 p7 P
        // 主循环
$ n0 X2 c. W& c1 e        for(;;)  K- O" ^6 U4 E( V
        {
8 M+ c6 g% |8 @2 A
0 r- K$ z! J' r        }
/ ?; l1 P* Y, \4 x}! a; g, {4 P' o$ U: i3 u. X5 [

; ^0 D+ j7 v9 `+ `8 @' D/****************************************************************************/6 I$ J- H. w  C  b# b% H% b
/*                                                                          */
  k8 ~1 a) ?7 F5 L/*              PSC 初始化                                                  */7 F1 K- p$ o) h2 v/ A# Z* s& N
/*                                                                          */( ?& |; v7 `. U) a' {
/****************************************************************************/7 ~6 v: `) K( V0 H, a% v
void PSCInit(void)! J  ]( ?$ s8 l: {
{
! I) y' Y! o) o: N( ~        // 使能  EHRPWM 和 ECAP 模块0 Z! N  V/ e, P- I0 t4 Y, T
        // 对相应外设模块的使能也可以在 BootLoader 中完成
# S4 g0 u: |  O& R' j0 w, {# \+ ~    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
9 R! ^6 a; W. B$ b. _0 L    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% w: u: s8 l2 U1 |; Q# y) s}
" X  E+ h. K# J8 x* a' J% w" R/ e) A  y9 W4 l
/****************************************************************************/1 D) A" d' S1 S" x4 r4 u; _
/*                                                                          */$ P1 p" O0 p* n* f% F
/*              GPIO 管脚复用配置                                           */
9 ^. w, U# K9 A; L/*                                                                          */1 n; w. }* D: \1 ]
/****************************************************************************/
4 e5 H2 i/ y: \* g6 u) Jvoid GPIOBankPinMuxSet(void)( i6 R& Q* c: M5 t
{
5 \5 u$ g* i- M$ L        EHRPWM1PinMuxSetup();6 T  Q* w4 @. F. N

# }1 i& b, G8 }' Q% h        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
+ r' v+ X9 \0 i) o) Z        // 作为捕获功能时管脚方向为输入) F. z. Z/ }5 @' v1 O
        // 作为辅助脉宽调制时管脚方向为输出
8 H$ {# B* ?" S, @. ~: g; G2 M% w    // ECAP2 / APWM2
- P- N! o9 b6 U2 X% {! b/ q( Q        ECAPPinMuxSetup(2);
5 l' j, y7 A  d5 v! K9 e) a: x1 h6 H- e( x/ }: h: q/ r% M
        // ECAP2 / APWM2方向设置为输入- K" C, @) G" X. E* I
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]  E8 [* x0 w" S3 v5 J
}5 r8 i+ f$ ?$ H* L2 H! t  F& ~

- o7 s  ^  w% [; S. w/****************************************************************************/: T, g" \7 P5 I( ^/ o
/*                                                                          */
3 W: u8 J% A1 ?5 ~4 E/*              PWM 输出波形                                                */# Z9 n+ @1 _7 v, q: J3 S# c
/*                                                                          */' b1 s- A7 u8 `* h8 |! k( D: G4 s
/****************************************************************************/
- k# K) C+ x- G% H2 Ivoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)8 ^0 s6 G6 R1 s: h
{, f  Y- a! _# i' E7 o, e
    // 时间基准配置
- ~# {2 n) D0 t    // 时钟配置6 Q+ A, x, G+ V! H
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
7 u: y- U# b7 R0 h2 `
- F- \3 p) q" {* {8 e    // 配置周期& i3 |  i7 m+ X) X8 A: h, a
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
4 h0 C* Q- `) j9 ?! b' K                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);) J  n% x1 C8 o" v! F% _. A
: j# }, F' j3 \( i) b8 ~
    // 禁用输入同步信号
+ B8 H7 k1 o4 J" D/ E3 }    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);4 L; Y9 d6 E& T2 i

) f* _" O$ A( k2 ]3 Q    // 禁用输出同步信号" {) o- v: ~- E. K7 a; D' W
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
- V# {" l* V' O+ ?) U! K2 Z% I& s$ A: Q: m0 I: L& e7 q: W! z
    // 仿真(DEBUG)模式行为配置
- U0 z2 _3 _5 n$ }% T/ ^3 p    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
+ Q$ M( o/ v0 `- p5 k' v! s8 w- H2 h# z- S3 ~' u! O
    // 配置计数比较器子模块% h! C% F% @7 S
    // 加载比较器 A 值
, l: Z4 v' \8 j# G! U    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
+ A: D6 J- x0 p- a3 D; z9 |  v                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 [- Y+ k! Y) \2 V' \  d  r
' b: R, ?5 S3 f: K    // 加载比较器 B 值
2 m# T/ U) K/ ~+ @    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
2 W: l/ w9 d- z" z& @5 l                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
9 h# x3 S& E, ?: ]  ~7 U  p/ h
# `# m- v" P9 K    // 功能限定配置(输出引脚触发方式设定): S7 l/ k* [) O+ _( Z
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出6 Y9 O8 A) |+ Z  Q% Y4 I4 N
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
5 {" b' p; I5 d, s: u# D                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
+ T* @/ b0 G  _: _                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
5 _; R+ y' \$ H2 n8 v* b2 W/ E% @- c; Y" F3 ~: a
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块6 S9 M4 u' I$ x" W8 Z; A6 n5 [
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
2 s9 p' N3 ]& E0 s& X; h5 E
$ Z4 c9 G$ X3 b/ z4 c    // 禁用斩波子模块# x7 H& J# g& y$ n5 |8 d
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);% F) M9 B4 a: U% X( B
& A: ], Q9 r3 v5 Q. b0 K# S; W
    // 禁用错误控制事件
( ]. K; z" R& N3 V    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);& n7 u: l& L* N9 x: b
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
; v3 G& P" [6 f) I% h5 ^" m1 Y2 f
2 T! m' n" g  O" `6 x  k5 E    // 事件触发配置) ]6 u- ^/ M) p* p
    // 每三次事件发生产生中断
1 Y: a- o' t8 O$ Y    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);) u- I3 y9 W+ N- N; a, D" [5 f
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# \+ \0 z  o0 u$ \% ~% h. z    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);8 o! b# V1 v& {6 p$ z/ s
    // 使能中断; w% m# T; T/ X3 c9 Q, y. U/ O
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
* h3 O9 P# A# c5 U4 Q  K! S4 u7 Q6 H' B! O2 ~8 ~
    // 禁用高精度子模块
+ H! j! |( k* t, |/ e# n    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
! e# z0 b5 Y3 Q$ z
2 C5 X: L  P) A. \( t    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
) Z( s9 s, F" h% q/ B5 H}* j6 ~5 W: y% B' z+ c' [

3 ~% M& ^  E# x0 w1 c7 G# Kvoid ChopperWaveform(void), N) P: z+ F  O* c$ D) _
{
1 Z) _) [9 [+ i. S5 I# x5 P' y    // 50% 占空比
, g6 b6 y+ K$ S5 W3 D' W" }/ Q5 }! l    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
0 {4 [, |" s) i/ W+ ?    // 4 分频
( a0 K5 f6 Q& o5 g% U    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);, o4 }3 B- a) a. J) ~, F
    // 单个脉冲宽度
  `5 Q7 }& [; f/ `2 c4 G6 b    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);' Y6 B" m4 U2 T: a# I: C. M
    // 使能斩波子模块  Z1 A0 ^! s- ]8 X
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);( H2 z; A' N' d& H) V
}
  r! o( H3 ~$ P1 K* A  C1 ^9 k4 e# Q( b% _2 g- ~
/****************************************************************************/
& u; J" y. R* t7 J) J/*                                                                          */; t5 Y% a9 c: ?$ R8 {9 w  U
/*              PWM 中断初始化                                              */
6 s4 \, E8 I/ X* y/*                                                                          */
% Y5 x( w, ]' \" {$ Y/****************************************************************************/8 B6 \* R* I6 o8 s* f( G
void PWMInterruptInit(void)& k8 ?* w2 x$ K, c8 ?
{3 i$ N( a- `7 U% {+ B1 ^$ g
        // 注册中断服务函数
7 ~8 t- E4 G4 V' l, J        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);9 \. L9 @6 G5 b, j
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
% B# A' H: }  j2 f9 _: r5 A7 |3 g
        // 映射中断
8 f$ ]2 O$ y0 }2 N        IntChannelSet(SYS_INT_EHRPWM1, 2);
+ |1 ]/ i" z: K) U, }* @% w0 M! d        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
+ n/ u1 _# G; x( F1 Y; r$ z: i
& C9 `( H$ p; r) a) l+ w        // 使能中断
# O5 a$ }+ D, a. b2 c        IntSystemEnable(SYS_INT_EHRPWM1);
" g# I& J0 c: r( G4 x3 s# D        IntSystemEnable(SYS_INT_EHRPWM1TZ);( b/ M7 k6 n3 ]8 b1 H1 \8 J
}
+ V- }8 F! J0 B" i1 W4 r2 M7 X) X' Y5 f; c" U9 Q
/****************************************************************************/
8 q9 l% I( S: `$ X& M/*                                                                          */6 o$ K! z  s; Y0 y( d. z
/*              ARM 中断初始化                                              */
: R( ^$ p. D* ]* y$ s+ L/*                                                                          */
) q5 s* R" X7 ~2 O* a7 D  t/****************************************************************************/
. ~8 P* Z5 F0 @9 n$ j) jvoid InterruptInit(void): Z- K2 R4 s5 C) [! J# j  c7 ?
{  q9 j. Y2 x; |! A2 S4 D. C+ b  u
        // 初始化 ARM 中断控制器
3 Q: I9 ^" y8 ]; J, N/ \$ }        IntAINTCInit();
# R8 d6 t4 F0 p0 N/ X/ b. @* `2 b- P6 T; {7 z) o- V- A
        // 使能 IRQ(CPSR)7 |' |6 T  B; R! G) G8 v
        IntMasterIRQEnable();
2 u# E5 v. D3 c
2 m6 i" ?) Q7 W# k. Y  t; u        // 使能中断(AINTC GER)
9 |- G3 o# E. [6 r  ]% Q        IntGlobalEnable();
% y* v% ~1 A: e0 i' B8 x0 a( m+ i' ?  `" x
        // 使能中断(AINTC HIER)
- d* b& ^% r3 l0 K( b        IntIRQEnable();
1 S; X& y! P6 ?- E# H3 ^* n}# ]6 ]$ b1 z3 n% Q  R% f- d

* {# O: R" \1 C) ^) \( g( P4 M
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
4 F+ y& P' B2 {# Z- i: b2 h/*                                                                          */- r; t$ K3 C8 }- K3 y
/*              中断服务函数                                                */
4 s9 A5 U/ G  u0 D5 c* R/*                                                                          */+ o. q. A- u  S9 Y0 n
/****************************************************************************/
0 [" f$ _) d1 f$ I; F0 J9 Xvoid PWMEventIsr(void)* M, ]9 Y1 }5 F5 R
{
2 S& P  j" }0 |        IntSystemStatusClear(SYS_INT_EHRPWM1);
3 s6 Z. [& h( p: T6 s+ O7 _2 U* s. i/ k
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);- o( J9 R+ e1 X! Z  |  |2 w( D- W
}  G* F8 c* S; _/ x, P. p* E
5 F& H, J6 F* U& r+ s
void PWMTZIsr(void)
+ e  f6 A5 |# J6 d7 g. x/ A/ R3 _{
2 q" |0 A+ \9 i1 Z        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);+ e2 \! G1 d' B
5 Z; c# m& f: a
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);2 p( y/ x8 l) L+ N! G/ K
}
$ h# |- N2 ]3 @; t
- `1 J9 n: m8 j' U/****************************************************************************/
$ I' }# ~% j- l, R9 \/*                                                                          */
3 U( ~0 D& L) F. d; J/*              初始化捕获模块                                              */  S3 h7 V' a) x, c5 O$ F
/*                                                                          */* \. d$ Y1 g# ]/ _7 z
/****************************************************************************/: `6 v  W6 L+ G1 C
void ECAPInit(void)7 Y, T% Q1 g: w# v* C, e( E
{
' I& L" F$ e" t- @, V7 h        /*-----设置 ECCTL1-----*/
4 E! N. T- c0 @6 F" O* l/ V8 M0 O        // 使能CAP寄存器装载
9 ~1 M* o4 p4 S0 t; n3 w        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
: Q- x( {; H. O" D1 [        // 设置预分频值.
$ a' x# C& E: o7 G8 A        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);' B5 ?6 Q3 ^5 r" y% Q
        // 上升沿触发捕获事件
$ W* j4 V1 j/ B9 [2 w: R3 H: q        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
/ b" p: F& v9 C! {: p        // 输入捕获后重新装载计数器值.
4 `1 L, \  d1 k. {" ~5 m        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
2 g# S4 \' v. E- q8 S$ m
: ]. t* t. X, G: @# u* V4 K8 B        /*-----设置 ECCTL2-----*/
) y. a- m# d2 R: o& }) H( _9 D7 A        // 连续模式( o4 I9 \* l) L
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);) @  ?2 V) B! e
        // ECAP计数器TSCTR持续计数
8 B9 i- z  b9 o5 f        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
5 l) {; K3 r1 u6 S+ _        // 禁用同步输出和同步输入3 E- X5 Q: D1 i( ]+ ^
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);% M7 C# \7 q+ j5 |3 j2 x& g/ I9 X
        // 配置 ECAP 2 为 CAPTURE 模式& e, K: R2 c% h. O
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);0 o* X% ^; f- q8 x3 C8 j; _
5 \1 C. }) l1 D9 O& ^& L
        // 使能中断$ h& N" ^0 M0 Q. v
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);- d7 O3 @% B0 I1 l
}( L4 E& m( ]( l3 N) z/ o$ m

4 F- p/ L2 m) u4 O6 T/****************************************************************************/
5 I% {& J$ U' w9 ^! _& U$ E/*                                                                          */
/ d6 o: {: n) ~4 ~7 I( ]/*              取得捕获结果                                                */6 W+ Z6 r/ Q- n/ S% \$ b5 F4 r( _; C
/*                                                                          */( q. T4 M4 _' m7 X& O( w. V; H
/****************************************************************************/- J2 A9 ]$ d0 y8 Q1 O4 ?
unsigned int ECAPRead(void)
6 k. M5 C( M3 t, [1 j! j% G6 l, n( h{
; t+ Y) q9 d3 m3 W! @) R; X, F        unsigned int capvalue;
2 ~: S! j" f2 {, Z: @8 Q        unsigned long frequency;. c/ O) f/ D* J" X2 o
8 @/ \1 i% r* d
        // Event1 中断标志
1 Y0 m& W) d: T- z4 H        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
/ ^$ D& X5 F, h4 \# v) M$ t        {
  ~1 l& F+ A& i- c1 x  r0 D                // 取得捕获计数. o4 v, ~( V- t6 j. [* T
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
  U3 a1 E  k5 H4 o/ }2 L7 o1 u                capvalue = ECAPResult.cap1;
& O4 I' g2 ^9 ]4 ~+ H; N' Q& }
: K6 M% c4 e- V3 A                // CAPTRUE 模块 228M 时钟主频9 `0 v9 R* o5 A" [* u0 w. y
                frequency  =  228000000/capvalue;  |- T0 ?4 B1 Q1 P) N3 J/ e/ Q1 Q6 h
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);$ k+ P. Z, y4 Q6 N1 l- J

- L% {# Z" l, t; O                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
. T4 U7 L' t" S' r5 N7 h//                IntEventClear(SYS_INT_ECAP2);$ m% h* {  J4 m9 b+ g; @7 `! J( s
        }
4 F+ Z7 {% K4 R* d        return frequency;1 e# t' f) u/ z/ W0 O
}
" G) O( w- B# y; 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波。我们有相关例程,请参考。
1 v4 z' F: w* x( b! y

本帖子中包含更多资源

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

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-4-28 07:35 , Processed in 0.047007 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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