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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/2 T4 o& C# k% M% p
/*                                                                          */
! r9 Z$ Q6 ]% A% B$ o/*              宏定义                                                      */
  G9 d8 d, w) c, C/*                                                                          */
2 }* x' n) g" ^8 }' f/****************************************************************************/
: ]; k  Q, ]5 t0 b3 C3 I) o4 R0 n// 软件断点1 M( V/ ^" x) P
#define SW_BREAKPOINT     asm(" SWBP 0 ");/ k3 N8 r: H# q1 {! y6 F
  }; @" C  b( ^, _
// 时钟分频8 ^! M' H$ ~- V" s% w
#define CLOCK_DIV_VAL     2284 M% c8 f0 D8 e8 D3 X: V

' F( r! H  j( q) o# g( `, g  N/****************************************************************************/  g9 d. j! m  b8 B0 G6 A
/*                                                                          */
8 i6 d; s, z& e8 b/*              全局变量                                                    */
; _0 x' m# t1 X3 h. \; K% O/*                                                                          */
" x4 w9 p; A) h/ M- \* }/****************************************************************************/
# _2 o4 @4 C' r% v( |0 Q# `8 @" CECAPCONTEXT ECAPResult;7 W; L- }5 o5 M

$ d5 ?* h& l( O$ C$ u/****************************************************************************/
4 l4 x, \% N! p/*                                                                          */
8 a. O8 ^$ o( G: x; w) V/*              函数声明                                                    */
5 j8 c: s  P5 w' g) R1 A, ^/*                                                                          */
( O, ^2 v3 U# r- s$ f/****************************************************************************/
6 O1 r2 a. q8 R( I8 ~$ z! r4 _// 外设使能配置; A3 |  q0 t3 U5 p8 P  S& `
void PSCInit(void);
0 ^" ]. i5 L4 Z+ a$ R: |
0 ~, [! w9 L9 l& B4 l// GPIO 管脚复用配置
  N8 K0 j5 T4 E0 |5 gvoid GPIOBankPinMuxSet();
- I3 s/ Z5 d- I( W
* n  e6 k$ z1 k' m- K% K// 产生波形4 Y0 d* H6 q8 a. a
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);9 W7 o/ s% e$ y% c: b
void ChopperWaveform(void);9 G1 d/ h. d) E/ O4 @; }6 Y

2 f% t4 T- F" F3 b5 f+ ~- i// ECAP初始化和读函数8 ]! a/ i8 e3 n7 q$ ~
void ECAPInit(void);, q6 k6 l; g1 _
unsigned int ECAPRead(void);' m0 e' K# ~! C6 `
) o* v% W1 k; ~) J+ Y
//ARM 中断初始化
# o' Y4 I; T* y# Kvoid InterruptInit(void);6 k% a4 Y" M) k3 n' f
5 h& C" W3 `( }3 e" N8 S, J
// PWM 中断初始化
6 R, D! y3 D5 j( v# P0 Y7 t; a" e: ~void PWMInterruptInit(void);( L: ^+ l% @& ^0 }. R
// 中断服务函数
' u, i3 Z1 j+ A+ l# n// PWM 事件
  ^' m( t' N$ _' b, Jvoid PWMEventIsr(void);3 u* N( k3 c, q- l+ h4 e6 y
// PWM 错误控制事件
& o. }' u. W. f+ |5 Z2 I4 |% Pvoid PWMTZIsr(void);; w  Y; B( \" n* N4 [0 s1 s6 L7 x2 i/ ^

8 z( q# i2 w: V3 ^! w1 d1 o/****************************************************************************/2 R- ^  h7 Y% V
/*                                                                          */
  \3 y. O1 Q, D; A8 A( x/*              主函数                                                      */
) M8 P% d( i* p! P3 r/*                                                                          */
( a0 J3 l( Y- k/****************************************************************************/
  I- f- J) ^8 k& m) [int main(void)
. E* N9 L7 B0 B# T; B{
0 R4 x$ }. z8 J, F; u. p" u1 s) P        // 外设使能配置, W7 {5 ^) I% l1 L+ A8 q* d) z7 \4 ~
        PSCInit();
/ G/ O! N- R* d3 i" p' X: O3 a
4 X( T9 v9 e7 p, y2 P        // 初始化串口终端 使用串口2
% H- i$ V3 p4 }# M+ {' S        UARTStdioInit();, G* V" ~8 ~3 O# y  t2 F% e
        6 k$ @. A0 {' K1 H$ T4 U; U
        // GPIO 管脚复用配置
8 `# D* N, \" _$ `4 U( T8 J. \; Y7 S# m        GPIOBankPinMuxSet();
2 s- g( n: g' c  g  _1 r, y9 E3 ~, D9 h% o& |3 P
        // ARM 中断初始化2 e1 G: I1 i1 O
        InterruptInit();* J0 F$ [8 Q0 f7 T

& `- }+ l& r) M2 g1 s# R        // PWM 中断初始化$ O) [7 Q5 _+ G$ ]! y
        PWMInterruptInit();: ^3 O: N9 I6 `) S5 X
. D$ w4 t0 Y' r; Q- q7 b" v8 A
        unsigned char i;
; M7 z  D2 f$ j+ t5 F% B/ N% h4 k        unsigned int j;
2 N: G) [& ^& F3 S4 }7 i5 c2 m3 ~9 {6 c" X! I9 g
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);5 ^4 `' R8 `! J
        UARTPuts("------------------------------------------------------------\r\n", -1);
* p/ _8 T" E) V- w        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);1 n: x. ^7 J- i- Z9 L& W) R4 K
        // 产生波形
( m# D( o4 N2 P/ {1 r$ k        PWM1ABasic(25000,50);8 c7 l* E7 w% R, ?" c) X

$ F! m$ k  |) @& H& x8 h* p        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
8 t  n8 M3 @; t' S/ Q; s        UARTPuts("------------------------------------------------------------\r\n", -1);3 I" \" B* [; ?2 \, f

9 l& r1 o! A' ]( w- t* V
' _9 [- M" J. i# d
9 d! T- }  b4 w8 g+ i        UARTPuts("------------------------------------------------------------\r\n", -1);
0 _  ^/ k: ^: g        UARTPuts("                    C6748 ECAP Test\r\n", -1);" T7 R: t; f5 z" w* p& h
        // ECAP 捕获初始化
3 @+ A/ e+ H+ K! W, Q        ECAPInit();
8 D9 o6 F5 b5 m- {. z        UARTPuts("Initialize ECAP.......\r\n",-1);6 D$ Y1 f" E2 P: u9 v7 x( i
        for(i=0;i<5;i++)
8 }* o- p3 g3 Q- ?        {
+ ^1 {# T0 B+ W5 ~! V                    for(j=0x00FFFFFF;j>0;j--);            // 延时
  G: T2 X: m. t" Y1 Z5 q' z2 l/ t% U                    ECAPRead();  I# F  X& v9 N! K- v
        }* M4 M, g9 @2 a
        UARTPuts("\r\n",-1);
8 U& k# H3 c8 `' g: \( v8 j        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);+ D6 Y/ V1 l) l# v
        UARTPuts("------------------------------------------------------------\r\n", -1);* I  ^( O# I4 i  m; Q

2 L5 [. F( I: U        // 主循环
4 I: f9 ~4 W2 \        for(;;)
, k0 Y2 k7 g  J) b4 b7 I        {" ~5 }# B! A. ~1 h

& g3 S; C3 C: h        }5 S3 f0 }4 P. _) _* a& U! T
}
, P5 H- |- h. D: D; N5 X$ G0 ^+ _2 g# ^' g7 e
/****************************************************************************/) M5 X6 r" i6 f
/*                                                                          */7 y: M( O/ K' S& j$ O7 l7 x
/*              PSC 初始化                                                  */
# o4 k; C- T; \% \# T/*                                                                          */1 ^- f4 F5 w) c* T
/****************************************************************************/
1 i# U9 O5 z4 n  E( I# Evoid PSCInit(void)
4 d: K- e  \$ J! q{
6 i! H' B: U/ m" p        // 使能  EHRPWM 和 ECAP 模块
# a8 k' e& ]# X$ J8 p: N        // 对相应外设模块的使能也可以在 BootLoader 中完成
1 s) T$ O& n- l8 {8 {: ]. @    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);5 E) w8 u6 b9 ^6 X2 x# e# }
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% E7 S; I; @' ^3 J5 y
}
9 A& c  m6 I- @" g+ U) e: d0 L; ]  e1 e% P# s  }) u( P
/****************************************************************************/
# e: C/ T2 Z. m' [6 u# G/*                                                                          */
& U; d- i6 w2 Z: v; B; ?/*              GPIO 管脚复用配置                                           */
3 h. F6 J& \( F( x/ J6 C1 E/*                                                                          */
  a$ s4 ^9 [0 H8 e5 Z/****************************************************************************/
0 V  d& o5 m4 r% kvoid GPIOBankPinMuxSet(void)/ p/ B+ z# L) m% X
{  Y: F  K- b- y1 p
        EHRPWM1PinMuxSetup();
) e5 L: P  S& G: a6 M$ S
& W2 W% m9 f! J$ W        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)2 I/ P( U$ W- c( _( H; K9 \+ F
        // 作为捕获功能时管脚方向为输入
1 j" F3 Y' a+ H) u2 q        // 作为辅助脉宽调制时管脚方向为输出' v) W7 I% p4 v) t! a5 T( n+ _
    // ECAP2 / APWM2$ o5 b6 q+ {9 W* H! C3 L, c, J- B: v% s& p
        ECAPPinMuxSetup(2);
5 \, F7 o" q2 E' F. Q, A  i- u
  r6 s; ?6 l# {: K        // ECAP2 / APWM2方向设置为输入
6 B; k- i: p( V9 ?, G6 V        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
/ _' Y# S7 W% i* H/ W$ \5 Y  P}( F! H+ w; b% V
6 J4 a7 {8 F  [1 r- [! N7 X
/****************************************************************************/
8 M. M  M" |% R! M" g( X/*                                                                          */  T. X6 w* r* @# R3 b8 Y* i
/*              PWM 输出波形                                                */
% L- \7 h  w9 \6 @/ _) I- `/*                                                                          */$ }' s. c" Q$ @8 C9 U
/****************************************************************************/4 L- r: f$ j/ d8 a' w2 u
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)  q0 }8 v7 \- G2 h) [4 t6 ]
{9 C0 @* E( C8 y& g
    // 时间基准配置
0 h4 E2 L8 K4 ^8 q# ]    // 时钟配置
* [7 s6 r' S; e! `    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
/ T9 `5 Z- P. w- b  S: N5 g6 {) r- e; q
    // 配置周期
1 e3 y" D! V- q9 H0 `/ E& f; }    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
! H( L) p$ g/ x2 J4 f! _: Z                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
  l' _5 [' U9 E" }  c
  X& b' a. U* \$ R( ~    // 禁用输入同步信号& Q5 |( H' L" I2 d. |2 m% A
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
) H; ^- j* S8 t, Q# P5 Y
3 s( D- Z" e/ o5 h8 R0 l! _1 k/ q, D/ l    // 禁用输出同步信号2 n7 H# o) O  [/ u- i
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);; C  ~: s& n1 U# I. h3 {

/ o. [* m& z9 I# N$ z! ]1 G    // 仿真(DEBUG)模式行为配置: u. B# ?3 g8 I: w0 M
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);/ N1 K2 W7 A, K

/ i1 k$ m5 [5 j0 F    // 配置计数比较器子模块: R% D& m% I4 c
    // 加载比较器 A 值
. D4 K5 y  @0 U) R& \6 e    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
1 u. V1 E: B1 V. V6 k2 o                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 @% _$ V; Q2 O2 o

( w( q- g3 f9 j9 H/ }& K" Q    // 加载比较器 B 值( P" n, w2 B6 s$ \' W7 O- s: F2 _" j
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,5 o3 e$ M& F" L7 _% j2 K
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' m1 A' W  U' z; f) d9 I4 }6 a
" |  B2 g- g  s% ^    // 功能限定配置(输出引脚触发方式设定)" A. l# ~9 u$ A  z9 m$ [! w
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
* T4 _+ ?3 `1 l4 ?/ D* j7 L  f    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,' [! O; g. A( K" O0 I- L
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,- U  H3 O; [$ t
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);# L8 S* V7 D  ^
5 t; u  D2 m: T& P' L% z
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块" T9 w  {  E% H% k8 W8 n
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);$ V. U# f! y5 H! `1 X
- x  x1 \& g3 U$ C) E2 J
    // 禁用斩波子模块
: L) k3 |7 T$ L$ s' _    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);/ V) z  r5 n/ B

8 |9 c: n4 d: ?' v- p1 |% P8 e7 `! {9 a    // 禁用错误控制事件
& e7 s/ Z2 B: I3 O8 f8 Y2 l    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);2 [3 i, u2 I3 k: T
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
& i+ U9 W% z: p2 P7 s6 ~/ L7 @% ?" M+ ^2 v/ E
    // 事件触发配置
3 X5 F2 R1 Y# M    // 每三次事件发生产生中断
6 z$ v9 k  c' e) G9 I. @3 C+ x    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);8 I3 `; V6 N' w# M1 U
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件  J2 p& |$ [  ?# i7 b4 f4 Y3 Y# q
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);. d' e1 A4 |3 t
    // 使能中断2 v- a# d: R9 b: J! n& Y
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
, V/ _8 Y7 G) [: S" Y8 ]
1 E/ h& z. P; R    // 禁用高精度子模块
. ]7 e) O$ E+ z# y    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);2 F$ ?4 I& }0 C/ ^

: [4 i' c$ U& a- u% W* l5 Q    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);! B. \- p- x3 P, e9 a5 Z+ e% G! X
}" n8 J2 i8 ~6 r" k

% B& _8 c$ W4 t- K& t, w4 F3 t# w3 U. W1 [void ChopperWaveform(void)0 ~5 W- W  u9 s8 N- m
{
4 k6 f% u4 ^2 s' @! M( u# n! G; k    // 50% 占空比
& g* ^1 O1 S2 F) V    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
( s* N5 {) N  g8 |: c) Z    // 4 分频; ^4 J/ Z: f: s1 V
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
: Q( {1 l" q5 ^3 Q0 q6 X2 E    // 单个脉冲宽度' y0 ^' l: b1 D) Q/ d- a. w8 B
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
6 h$ |# r% A3 w: J4 l: M    // 使能斩波子模块
7 C& \7 f3 Y# r. S3 ^! e    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
% E, [# A7 |8 Y% Q2 Z8 e* o}. N$ M+ @* x9 ]# s" f

( N  N" }# }; X/****************************************************************************/& d/ p" N0 N( T2 l* Q% c
/*                                                                          */0 {2 L& U: @8 z/ F; z
/*              PWM 中断初始化                                              */. K! R. q/ ?4 m! K
/*                                                                          */0 a2 ]/ G+ D' |3 @. d( A$ W
/****************************************************************************/5 J- `( N, c/ q1 ?( W5 m, j
void PWMInterruptInit(void)
: l1 o$ z, E, Z! B( Q& I{, H' V; N- W) g, [3 @
        // 注册中断服务函数
% T7 Z. `9 z' F) P: m% o' u        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
) Y' i- g7 d* b/ R        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);, v) \% o! k9 f( Q' Q  f# a
) c3 O; B) x0 t% ]
        // 映射中断
2 W% d" c" p4 E1 U6 M9 @3 z        IntChannelSet(SYS_INT_EHRPWM1, 2);1 N- E+ U' z0 u
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 N! S; J. e) C3 D1 c7 V2 x* u/ M5 }6 V' y6 `
        // 使能中断  n6 R# S9 G3 ]/ W
        IntSystemEnable(SYS_INT_EHRPWM1);0 x9 @: C' c, ~& N# i, d
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
% \+ v5 ~  Z: b' M* Z$ V& C4 h}1 N3 `: T) D4 y' F( c+ _+ d/ Q
! X- P% G; A$ P! _0 `( w; t' f
/****************************************************************************/
8 `0 t" @6 ?2 B, E) y/*                                                                          */
! _! x+ o( ~2 S$ |/*              ARM 中断初始化                                              */
* K* T7 O$ |- C1 E* u9 b3 Y/*                                                                          */
0 S% P0 m# S! U0 s! U. A/****************************************************************************/8 p! F# C3 C6 L, K; M
void InterruptInit(void)
0 L5 ?- C! r0 P& L{
* @% J$ y3 D+ d9 R0 c5 Y' E        // 初始化 ARM 中断控制器
# D1 w' i& J$ u2 I6 g, A        IntAINTCInit();. H6 o/ o0 r0 ]" [9 o! h
/ Y  I) p2 I4 R4 X; M4 C2 @- U' [4 t- F
        // 使能 IRQ(CPSR)) }" n% @" b% l
        IntMasterIRQEnable();+ [  m2 U3 W( {+ [' a& K% j6 o, p
; K5 w7 R0 k  c# z3 g& W
        // 使能中断(AINTC GER)
( S# b! j/ ?6 V1 K        IntGlobalEnable();
9 V& Y. F/ z8 ]! O; K. W' }
, R* G" w% _8 r, F, t0 c/ [4 I        // 使能中断(AINTC HIER)4 H% o  @+ t# K' }  C4 L9 n
        IntIRQEnable();
; D9 \5 E: |; b1 j* F$ ^) b}
9 m! b) r$ \- s# E  o9 o, U# z' l' T3 n' p6 x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/3 `% X4 M6 Y  y5 C
/*                                                                          */% x. b7 b* {  ]
/*              中断服务函数                                                */
. H, ~) W, f9 U  G/*                                                                          */
! ~9 v9 ]) ~- S& K5 x% s# f! ~0 _/****************************************************************************/
. J( S: y3 n, s% `/ bvoid PWMEventIsr(void)! M8 g9 T8 ?1 c( x! p/ z9 A) E
{4 ~6 g8 F  b$ b( _
        IntSystemStatusClear(SYS_INT_EHRPWM1);
  M- L; }" q0 e. |* r  Y' C# q# O; W' ^% `' E, i  Q
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
2 O5 O  C* T1 I: R) |}
: l0 H8 Z; e2 A/ @% u! ^  _$ `% \- E4 `
void PWMTZIsr(void). G% X$ J4 R+ P$ a) ~
{
$ w5 h+ @, b  ~3 M4 ~        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);9 p+ l3 x, L! A6 C: f& F

& T  E7 `0 ]% _# N    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);) W% R) R9 {- v
}
9 s8 a! O) S/ a- L2 e9 o4 T, o" j1 ~$ i# p
/****************************************************************************/
' G# F3 n( m* J# x! Q( }/*                                                                          */
/ T3 a, X5 l  `/*              初始化捕获模块                                              */
5 v6 }& ?& r8 i3 _7 G) G6 T/*                                                                          */& f+ F, b" e! F
/****************************************************************************/
9 X6 d# G: k/ ?% ?5 J) uvoid ECAPInit(void)8 e5 K; b2 S" f1 K7 Y' ]2 A
{
4 G  J+ M, L0 F- G# P9 b        /*-----设置 ECCTL1-----*/
) u  t3 M. n# Y        // 使能CAP寄存器装载
( \/ h" q; E: o  ~3 B$ ?; x6 i. g8 r        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
$ F2 \- b$ z6 n$ g        // 设置预分频值.% |" O& `7 a2 q1 X9 F
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);. i9 T0 X: {6 y' e/ W" A& ~9 f  w
        // 上升沿触发捕获事件' A. r  |6 D% z: ?* k) T% Q
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
( \. R- M* _8 v- {( C+ C        // 输入捕获后重新装载计数器值.
0 O2 h. d# L) r        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
3 v& `: N( d4 \, I8 c1 o: q: o$ v+ L" j, [& u1 B9 J5 s
        /*-----设置 ECCTL2-----*/
# I' @, Z) S/ I: L9 p) I        // 连续模式' E, r! G7 {2 M
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);+ a9 m  ]) w$ z2 X8 Z, S! o- b9 l7 ]
        // ECAP计数器TSCTR持续计数# i' p% w% P$ B/ }# [6 X" N' y+ T  s
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);5 ]& g& v; k/ O0 ^
        // 禁用同步输出和同步输入
7 j) N6 F# S+ B) {( n$ @5 D$ j        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
7 M" X8 O2 P  h7 P4 O; H9 T        // 配置 ECAP 2 为 CAPTURE 模式
* {' D* Z9 b: C9 k7 z! U        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
: C* `) K! ]6 F7 w- `
( B! v9 ~  k+ I( K        // 使能中断! B* R* k8 z: \# {6 t
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);- o/ F. |6 O5 K7 M: q
}
8 x3 p5 D% _* E. K1 i
; P& @+ S: U6 {/ w0 i5 H3 N/****************************************************************************/
+ C! N) Q% p! j+ V/*                                                                          */* l3 k0 T/ f1 I# n
/*              取得捕获结果                                                */
+ L' q. T& {- V( A- f2 b1 K/*                                                                          */
) i" q/ U" Y- f& T& {9 f7 u5 o/****************************************************************************/
/ Z: f( g+ s; ^unsigned int ECAPRead(void)
" o9 U6 |* r# l* U1 l3 P0 l{- w1 k% H8 N7 E$ ?4 y  ^2 A% \) P( b. z
        unsigned int capvalue;
+ s1 |6 P/ ]+ w/ Y2 d        unsigned long frequency;
, p2 Y4 I( S- G( u2 s
' s2 V3 p9 e/ ]        // Event1 中断标志
' n5 q$ `- Q( q        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))' F7 _$ [6 X9 f
        {
2 L: v( h2 f$ ?% ?. [                // 取得捕获计数
6 s8 `5 a$ A8 l+ g1 {                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);& i4 y1 x/ w7 V5 J. h6 g
                capvalue = ECAPResult.cap1;& c5 G/ i5 f6 \8 i

$ Y4 T* N/ v* H2 ~) C3 L3 @+ Y; n                // CAPTRUE 模块 228M 时钟主频# u# O$ g& [( F
                frequency  =  228000000/capvalue;
$ J8 I6 U8 W( a0 Q                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: _$ V# u' a  d/ v

1 B8 C4 H2 F5 T6 D                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
& d- K2 U+ g3 O4 @" S+ C1 m//                IntEventClear(SYS_INT_ECAP2);6 z4 W+ P" u: y& L3 C% z2 b. R
        }
: F3 W  ?/ R( G& M, H        return frequency;7 q& k- b  M9 O( e% _
}# B( A9 L* \" O9 k
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。' c: q* V+ \; ]$ Y1 d2 o* S

本帖子中包含更多资源

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

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-6 21:15 , Processed in 0.053779 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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