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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
4 U% q% Q! |& `0 Z4 R/*                                                                          */
/ z) A9 Y5 i. y5 L/*              宏定义                                                      */
0 D2 \: ^8 V/ w; }- H1 z: P8 q4 A/*                                                                          */3 P' D9 W* q- B
/****************************************************************************/
- \- u% \7 k8 T/ S// 软件断点  v* `( Q6 v0 f( X: i# e  L
#define SW_BREAKPOINT     asm(" SWBP 0 ");$ i2 D1 a& v# o. Z* A3 i. e: I
" w2 G0 B2 C* Z9 m' G3 t: L
// 时钟分频
3 c, R; ?5 N/ }9 _  |2 _4 i#define CLOCK_DIV_VAL     228
& f& r" D' N+ @0 t, X5 j
& [# F. K- s6 @; S& p6 k/****************************************************************************/
% t9 G. k' a7 |( u2 w/*                                                                          *// ?1 v* y1 V8 Y, I( @4 ~" q4 \
/*              全局变量                                                    */9 }8 `/ R& a% C% ]' o% K
/*                                                                          */
, y$ a# Z7 Q7 Y' S/****************************************************************************/
0 v% G6 |- @( l4 f7 K$ mECAPCONTEXT ECAPResult;* [5 T$ N1 K1 U# ]- N$ z# y- R

1 k: I' R4 e, @) Q# [6 b$ g/****************************************************************************/
8 r. D; E! Y7 O6 K2 s3 W( c/*                                                                          */
, u9 P. Z+ j# @1 Z% J+ i: j- R/*              函数声明                                                    */
2 Y* u2 H7 F! w' S/ _% H/*                                                                          */- r' X6 @4 K4 p" V, Q/ D/ D8 L& K
/****************************************************************************/3 a) T5 a5 F6 o* O3 v/ C
// 外设使能配置
' W& {$ J  E. t* |2 jvoid PSCInit(void);$ a6 b: x" @' N$ L8 H% e5 x& M
9 W+ O. g$ J2 o
// GPIO 管脚复用配置5 E* F6 h) b# J% l" W3 d
void GPIOBankPinMuxSet();, M% ~9 V/ n8 R$ [3 m2 s# ~

% T, r" g2 F3 ~8 j1 r( r// 产生波形
- v8 j& e9 Z4 _3 T& g% Z. Svoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# L8 T% }$ s6 cvoid ChopperWaveform(void);
: f  q. v4 j6 s. x, \1 t5 E
& K) B6 h0 F( }0 C( X3 v+ d// ECAP初始化和读函数4 d3 C) z" N" ~, z1 w
void ECAPInit(void);: c) u5 q( d0 u8 |7 U: z( e, U
unsigned int ECAPRead(void);/ x5 k9 A; S" V. y- o* t

* x( U/ D0 B' e' |0 _//ARM 中断初始化6 _0 r4 P' i. {$ J  a( m3 b8 v
void InterruptInit(void);; K7 h: {' ^1 _

% n4 }8 K& S, e$ y# U// PWM 中断初始化% {: e5 w5 |# C6 V+ y, f5 S
void PWMInterruptInit(void);! M& G& T. H& {
// 中断服务函数
; }4 f0 [3 L; J1 g// PWM 事件- N  U7 h# Z2 `
void PWMEventIsr(void);) z0 l6 }- Q% N4 i, R6 ?$ [
// PWM 错误控制事件( f1 f3 l( @$ }  R  O
void PWMTZIsr(void);/ y$ U) ^* W' y7 [; K* K: p/ ^
/ ~9 Q/ I2 c4 {) `1 J
/****************************************************************************/$ ?5 B" ?: x3 h3 a7 p
/*                                                                          */; m9 d# K4 C+ n. ^3 \6 S
/*              主函数                                                      */
7 ]. M7 p0 t1 N8 H" v7 m/*                                                                          */
* Z7 ^8 n5 Q9 p, g/****************************************************************************/
( e8 x: X; t4 i+ }9 tint main(void)
! U/ n' K  M6 m6 W6 [{# R% _2 o6 p  p6 i
        // 外设使能配置
% b# j' t5 {, [  v" K( e        PSCInit();
; D$ x2 j, h- r/ r! R( ?; {  ^3 A* I1 M
        // 初始化串口终端 使用串口2& N" `& [$ N, V& D$ D8 j7 Y% v/ H
        UARTStdioInit();
: Q- a9 x( U' p4 S* Y$ [* p) C       
3 P# j0 u+ a6 a" |5 h        // GPIO 管脚复用配置- t; i: V0 T4 H! x7 R
        GPIOBankPinMuxSet();; p' Q# n$ t3 n; P6 p& G
5 f  ~% r* y; O
        // ARM 中断初始化7 t9 ?. n+ t7 P/ `
        InterruptInit();
0 u+ j/ R. X; G5 H" {( f( E) D8 N/ ~" p
        // PWM 中断初始化
. E# s" x: z2 W* M; p/ r6 C        PWMInterruptInit();
4 [! L2 s' I6 V* {! x6 ^/ F' g7 g% f. _7 r9 N1 x) ?% l8 G* G
        unsigned char i;
3 @! U( Y0 l; R+ a9 n/ X7 W$ N        unsigned int j;& \6 F0 U  k8 l4 z
6 ?/ A5 S) u6 _$ U8 j- Z, `% H
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
' B$ N7 g, z# I        UARTPuts("------------------------------------------------------------\r\n", -1);
* ~; X5 O) G1 M' E9 c+ S% M6 y        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
6 W5 l3 X, ?5 f' q        // 产生波形
5 [: D# |2 q, t: ]        PWM1ABasic(25000,50);0 Z0 b) |" J% ~4 p9 G# t1 k. k

3 t6 T1 J( F$ v8 P        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
& d' O, B* `/ _  J* m! N        UARTPuts("------------------------------------------------------------\r\n", -1);5 Y! a8 z+ G9 ~4 C
6 p2 |2 {  k* R- |
. Z/ a0 ~' }! j: ?) ~+ b
3 C, \6 P2 F: i' \+ U* Q# `
        UARTPuts("------------------------------------------------------------\r\n", -1);
/ t* Z3 @1 i: E% X: |1 ^        UARTPuts("                    C6748 ECAP Test\r\n", -1);( [( s$ ^+ r: h. j# B' x
        // ECAP 捕获初始化
! N8 v% F% o; h        ECAPInit();9 w9 L' H/ c8 d8 w! x2 T
        UARTPuts("Initialize ECAP.......\r\n",-1);
/ ~9 S" a3 D7 Z% q0 N        for(i=0;i<5;i++)6 e: \! D# d8 h$ o# ~# S; @' ?
        {
' L  }7 n, c" h1 \                    for(j=0x00FFFFFF;j>0;j--);            // 延时
* q# T; u/ T! Z% {                    ECAPRead();
- k. A- P" s; y: ^" _        }8 w' X! R) N$ [- x2 R
        UARTPuts("\r\n",-1);8 N% T) z+ D4 z- U) |) c3 ^& z+ W
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);7 A8 y: a! }5 ]2 x" O5 \% K
        UARTPuts("------------------------------------------------------------\r\n", -1);
8 ]( A* `' R6 R4 y1 [* W
3 a. e1 u" \' o+ `. u  e        // 主循环$ l; e) l/ c8 O+ I
        for(;;)' P  z7 B- x  I) f/ O5 j
        {
  d5 ?$ F+ ^8 A/ @6 T' R2 W
" t, b0 o/ x& ]" m0 y+ Q& n: h        }3 ], {( B# h7 Q; |4 |7 z# X5 M
}
' b+ k8 Z3 ~3 G* j1 d! I1 c
; E8 u1 R' C' y6 u/ K/****************************************************************************/8 q, j( R( A5 h6 v+ o! F3 V7 Z& J
/*                                                                          */! l$ D) u. p9 Y
/*              PSC 初始化                                                  */
) N7 P8 q, Y$ d/*                                                                          */
/ i7 P, F- L6 _  M% j/****************************************************************************/+ m; ~3 R/ T% H
void PSCInit(void)
/ h7 D0 t% O" Y{
6 `7 x+ u' U/ |2 l! s) H% o* t        // 使能  EHRPWM 和 ECAP 模块# g4 b4 {% ^: e$ m/ P* _4 m; C5 M
        // 对相应外设模块的使能也可以在 BootLoader 中完成- D  p: E! O  Z$ x4 G* W3 i
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
! e7 _/ Z& o0 c4 ~1 i1 A# R; s3 N; ~    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);. l2 z. P, }& ?) o8 T+ q9 r
}
) K6 r2 N" j; L& a2 e4 E9 |5 r' h; y! s! k5 X+ s5 W2 w1 C& l* Z
/****************************************************************************/
. Z3 i- U2 {! |3 x! Y; m/*                                                                          */
7 l: R! o  O9 r6 c1 b' K) e/*              GPIO 管脚复用配置                                           */
0 |( v5 _0 t/ b$ n4 q' B/*                                                                          */
$ {1 k, A1 U6 l2 ]: }/****************************************************************************// w$ b6 p: k* `8 Y1 g
void GPIOBankPinMuxSet(void), Q/ O9 q9 P; B
{
" C1 i% N2 q1 i: L% G5 B* M        EHRPWM1PinMuxSetup();
$ v+ F7 ?5 R/ @. [0 |. B
1 ~2 N& [. {* j! {; I0 @  _: G        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)/ M* w. |& X  ^7 s
        // 作为捕获功能时管脚方向为输入6 {% p8 i+ C! W% U
        // 作为辅助脉宽调制时管脚方向为输出$ U" w3 q, l) r+ ], ?
    // ECAP2 / APWM2' X# [4 T" O6 E) t
        ECAPPinMuxSetup(2);
8 e" A  ^$ g. j2 M9 N
7 h! u& J9 l% p( s0 P        // ECAP2 / APWM2方向设置为输入5 u  _3 e& P( p! x
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
& \* J1 o5 G5 U2 x8 {# x6 E" h7 P}4 S8 V5 e/ {! G* y$ K2 q

: a. q' F6 X7 [/****************************************************************************/4 x' ]" C% X' @; H! l
/*                                                                          */0 [0 W- L( f0 B0 L% a9 s
/*              PWM 输出波形                                                */
* Q! P$ T3 E# e  B, Y2 ~* w& J/*                                                                          */1 A* F! X, y& X7 \6 ?
/****************************************************************************/& i* g! V$ L9 F1 E8 y7 X
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)+ ~8 x/ l4 U- f- Q' K
{. [' y6 O, c" X% w) e3 ^
    // 时间基准配置
3 m4 h1 V  G6 P) p# L& q    // 时钟配置
2 X) g  S! V1 A6 K1 u' G1 F    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);. F6 d5 N: q) F' b' K9 O* i
1 C' _0 G0 R% q7 ~* B- c
    // 配置周期6 L) p' A1 O2 x; x4 z) N
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
4 l' v. `* m4 \  O                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
, Q# k: {( U4 c/ ]) d
0 k; }) p) F4 T; f  V    // 禁用输入同步信号( Q  s2 o2 m; }4 U& @
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);  D( \* f: d  K" a" a/ r3 H! l8 `8 N

3 T! ~0 g. R, X) _2 }    // 禁用输出同步信号8 q% T- @( Z8 F! W+ W5 O
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
4 W, x0 d5 L1 p3 r7 I
, ?3 p  W- X- v# u" W! N6 |    // 仿真(DEBUG)模式行为配置
8 h# s+ A  e: l0 V    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);4 d5 l6 N) u9 f( ], U0 F
8 p% l) E, Y6 o! d6 I7 u& B
    // 配置计数比较器子模块
/ `! A- r* d# V6 l3 G    // 加载比较器 A 值
8 k$ K8 i8 ?' ^, ?& E1 ~  o    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
  C& I% E% P, i' Z* [1 D* J                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
  A  c* M: Y& ^" M4 j1 K6 u
6 T/ z" K0 w. Y$ Y  a6 i4 m- t    // 加载比较器 B 值
7 D5 ^7 ^% q" X- n% P4 k    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,7 v% \5 Z# D4 X* l
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' Y; s+ r, q2 c. b- a3 }
1 }: `$ a; S; h' A: W7 b, n; t+ @% Y    // 功能限定配置(输出引脚触发方式设定), h9 ?: ^" @+ y+ Y8 ]8 N
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
* b! d! R$ y: N    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
+ \1 a, h6 q, u( x4 b- G, g                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,4 k. [& z5 u3 ]+ H9 \
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
6 Z0 h) p, G2 w" b. M" I
+ e4 O* E; ?1 W% j9 ^! ?    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
9 X8 U# P$ _/ P! W* k    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);; B3 R9 v1 b$ n  @* V- L

0 V( G9 L* [. Q    // 禁用斩波子模块
! b0 H  `* i  A    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);! {4 ?9 N! A8 K' K- c: q. m/ q4 F
9 p, [! _0 [; R+ t5 l+ M5 B
    // 禁用错误控制事件
3 M0 s! n) B$ ~8 x    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
' j% n4 D( r0 p4 r3 S. G- d; J$ ^+ |5 x    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
$ n0 n+ I3 X* t0 ^& c; D( y% g7 }( g, X5 e: f" ~
    // 事件触发配置
( ^( `" W: z! u6 x    // 每三次事件发生产生中断
5 Y# h( N/ W. f( F$ N: e    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);! o, e& d* p; {9 N% a
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件* W6 Q8 k8 ^% M
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);; q+ M8 h( r3 t2 k% V: Y
    // 使能中断4 e: g" N  ?. \
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
0 x8 d. u  {4 V9 p8 M  a, S
9 w, n9 t% o* ^+ H    // 禁用高精度子模块9 u: n* q- b) l
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
) b4 s: w8 X9 z' X; l
" R" B! _9 J/ ~. a: j+ P( M+ h% l& f* a4 n    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);3 x7 @, H6 E+ |% c0 ]9 E, v- ^& y1 s5 I
}' f: C* l4 x) }9 Z+ j" y

6 y7 @8 U6 b# e  t3 x" I) }7 qvoid ChopperWaveform(void)( v" w/ C( @8 T2 i' r( e: W& ?2 |
{5 i1 o$ F. }# j- T/ u7 K9 J% Q  m
    // 50% 占空比
. r5 k  W) h8 G: T    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
5 v: `9 Y) T% n    // 4 分频
( ]2 d  I+ t+ _, ]    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);, c/ v$ ^& y9 Y3 I! y* s# f
    // 单个脉冲宽度0 v6 Y; e% d- `( s
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
1 M4 _2 g. F( n" _, R; `    // 使能斩波子模块
) `/ B" J& b* ?( {1 [+ s    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
7 D" J! p0 G8 `}" F5 L9 _7 g; C9 w. q+ m  s. F
. @7 k: _2 W8 y! D, R
/****************************************************************************/9 t  x2 B& d% T) K9 r
/*                                                                          */
+ t$ _$ m( E& y, f/*              PWM 中断初始化                                              */
4 e# X- h( u8 y$ M/*                                                                          */
5 g* z, H, ]9 g/****************************************************************************/
5 j* t& q/ ^, {4 N7 Tvoid PWMInterruptInit(void): B9 v) g# g5 L
{
) h! C% G0 X- k+ O# Z        // 注册中断服务函数/ K0 q8 ~5 N9 X- F+ l% i3 F
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
. v  y/ a1 p! P" g1 b# v; {        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
$ n* @, D. b2 w. P/ |4 D& U$ E) Z7 ~
        // 映射中断- g  w/ l, q( \0 r; D8 c
        IntChannelSet(SYS_INT_EHRPWM1, 2);3 u7 a$ V% }+ V
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);& Y5 q4 ]# u8 n; m0 d; _% ~+ [! y( a

- y7 [# F. Z: R3 i        // 使能中断
& }/ s! f! p) E0 u/ g" k        IntSystemEnable(SYS_INT_EHRPWM1);) g+ {$ M: x# l1 h& \3 |
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
* M: O0 |) @7 x  }$ r, E}
9 Y, v' S- m5 j& U3 Q( Y( o' |% ?2 \7 p3 v& ]$ f+ O. d
/****************************************************************************/" N2 n8 m& f/ c+ s$ d
/*                                                                          */
' u# d8 j5 D) M; S% E/*              ARM 中断初始化                                              */
) n. n) c& H9 t4 d/*                                                                          */6 c/ g/ C5 L; s7 A1 t
/****************************************************************************/
  C$ w1 k1 d" ^: {void InterruptInit(void)" b. S5 T. W/ g1 W8 ?" O
{
' ~# \. i7 b. {+ m" n; x* {: X        // 初始化 ARM 中断控制器
7 P& R+ H# b  s0 j+ E7 f# S        IntAINTCInit();+ n5 I" }. a, [5 [( Y9 ~; Z

& ?  `' ]. [. s5 l5 ^7 j        // 使能 IRQ(CPSR)5 s3 C  G3 _( _7 ^2 X. @1 f
        IntMasterIRQEnable();7 c  p9 W$ M7 @' U' c% T, T" |) E

0 i& U. H5 `; O3 W; H        // 使能中断(AINTC GER)1 A6 N  d3 i  o) Z
        IntGlobalEnable();: @  M  J: t# [4 m/ U

; w7 B3 s% H4 W        // 使能中断(AINTC HIER)
0 Q+ j! ?1 O7 [$ u1 k( l5 I2 q        IntIRQEnable();/ d4 d1 m5 V2 n* J
}/ s0 a) x* a. l0 ?. i9 X
# K" m. ]7 J& ^  A
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
2 y% M. S6 i5 u. s+ C/*                                                                          */
7 W+ c! X+ ~( u/*              中断服务函数                                                */
, E3 N2 C$ C1 z% {* z3 g/*                                                                          */$ o" s7 m* \+ t# h/ M
/****************************************************************************/. J) ?7 I) ]) L" u% n  Y. Y8 g: O
void PWMEventIsr(void)
9 o  ~, O+ B. w$ N{7 [8 u% M: g' @" L8 r
        IntSystemStatusClear(SYS_INT_EHRPWM1);
7 U7 M% w$ R5 ~1 N% {$ w9 s+ r- _2 D' x; }
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);" y. w. Z6 ~- W9 Z0 U9 r
}
* [9 }2 U/ b; D: @, B. y% h" L( ]0 _( v) c- }  f4 K  ]3 X. x
void PWMTZIsr(void)$ k5 N5 D9 J! f7 ^) r
{& ~  m) s( ?" H
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
, Y: X  B/ u  A
* w& D+ U, e5 f4 q$ x    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);! b+ o, W2 n3 |0 j' s. s
}
# @2 `1 h7 ]* x" X& I% J/ i4 X) x2 m  l* \0 e
/****************************************************************************/) x4 F* B5 a* d, E2 }8 |- \
/*                                                                          */  o) N$ n' p6 T' p% k# U
/*              初始化捕获模块                                              */  J3 J, r! j) a$ L+ p/ W& m1 x
/*                                                                          */9 S& X3 e7 I" j, T3 I0 p% c
/****************************************************************************/
( b4 R" E8 Z( c9 i3 Zvoid ECAPInit(void); m3 f) N: Y/ t$ M% @# X$ p
{3 i/ B: r2 x+ l7 D- A
        /*-----设置 ECCTL1-----*/* Y# z* i+ b" p8 n
        // 使能CAP寄存器装载# D2 Z2 }0 C$ y+ G; i2 j+ B- s
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);! B" ^5 ~  w3 C4 \
        // 设置预分频值.8 w8 L/ f: M* C9 L6 l2 S; H
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);. W6 L4 U; q( B' Y7 H
        // 上升沿触发捕获事件& V& Z+ |3 f! {4 U5 U7 _+ Y- W& Y. N
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
( \) m+ |  g& K" y/ }" G1 r        // 输入捕获后重新装载计数器值.
( h# G- K# f; g, e" V; b        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
( S& p+ ?$ C3 L1 n6 m% S0 l8 P& K  m- @" l9 `
        /*-----设置 ECCTL2-----*/, C) ^4 p6 z% [1 u5 N8 A. t
        // 连续模式% R/ I5 P2 h  C
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
& ^0 V% F/ F+ H0 U7 a+ S6 g+ U        // ECAP计数器TSCTR持续计数
) S4 ?5 p* |3 n( {# L* n/ [. W  D: ?        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);: i1 i& N+ n' V" h
        // 禁用同步输出和同步输入
  Z( p; f3 `2 @: Q% ^0 O' Z+ x) Q, a        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
2 C) b( `) [* A3 t8 L+ _        // 配置 ECAP 2 为 CAPTURE 模式% z- o2 w4 D6 q+ p4 t5 i2 Y% x5 j
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);8 m  Q1 s7 R, X) M

& Q: d* ~6 Z) L! _4 y1 ?. r  T        // 使能中断; F" Q, i" B* G0 }2 p
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);3 ]+ y+ x4 S. k" Z, P2 _
}6 C( J$ s6 g$ ]# r9 u
6 L( r3 p8 X% Q. b6 Y4 Y
/****************************************************************************/' y6 O  C9 ?  p; k. m
/*                                                                          */8 Y9 D. C- c" F# W6 u' J
/*              取得捕获结果                                                */
* z3 i( V% P7 v7 ?5 @2 \/*                                                                          */
1 p6 {( e/ @; K2 r+ Y/****************************************************************************/* p& A: D" f) E8 |0 V
unsigned int ECAPRead(void)
0 ^" C+ |/ L% s% y; Z{' b8 G# K% I* n. U0 L5 i
        unsigned int capvalue;
* b8 F. U" K% X' }. o        unsigned long frequency;
4 L0 t4 y0 }0 }4 g; m- B7 h2 P' R7 }7 L- a& `
        // Event1 中断标志$ {5 X" L/ N* |: F
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))# o, F0 x" Z" m
        {
5 I0 D7 Y; n% i$ {" I  b                // 取得捕获计数
; d" e; a4 i8 n7 l( i% f                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
; y0 }/ `' r( A: P                capvalue = ECAPResult.cap1;
, N7 i/ q6 e# V" f$ F  o7 R% c5 s
                // CAPTRUE 模块 228M 时钟主频6 L" Q6 [+ O+ m( I. b: T
                frequency  =  228000000/capvalue;
1 M5 O  D# X9 [* A# h                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
: X+ t) [8 C5 g9 R
. E2 b+ F3 l9 A3 A' e                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
0 D) A2 O7 r- O% z6 ]//                IntEventClear(SYS_INT_ECAP2);
, P0 M$ [" Y: W) X" b  P        }$ z6 i) z9 a+ h! P7 M0 J% u3 j
        return frequency;
4 Z9 F! k% Z2 L0 T; B9 }' s}3 e% G) x" C9 |7 @9 P! X# p
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
+ w$ w: A; E0 i9 k

本帖子中包含更多资源

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

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, 2025-4-30 03:52 , Processed in 0.048579 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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