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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
7 x6 ]. W! @% l% h+ y5 Q/*                                                                          */7 b# s0 d+ p7 h' }. A- p
/*              宏定义                                                      */
4 c  H  N6 _3 Y3 q" K/*                                                                          */
- Q" |3 c+ A3 \* L6 e2 ]/****************************************************************************/+ O6 r. h6 h+ C+ r( `
// 软件断点  a2 K$ p. ~, D2 E  p" ]: \6 A
#define SW_BREAKPOINT     asm(" SWBP 0 ");, m4 q6 B& M: }' M5 e
) U8 \  s) X; L
// 时钟分频
, ~, s- D$ s2 |5 {, u9 l- H6 x#define CLOCK_DIV_VAL     228
0 v! Z' R+ ~8 S6 \
, p2 X" V# ]7 E; G/****************************************************************************/
+ A! Q* @, t" V1 q: U( V, k/*                                                                          */
- d# b# `) o! ?0 x/*              全局变量                                                    */9 J2 ~7 ~$ V# F: U$ G$ e
/*                                                                          */7 P2 P& D: T0 ]: c0 [7 [. r
/****************************************************************************/
$ J& C" C: a( D5 k9 J3 H8 ?ECAPCONTEXT ECAPResult;
/ |) C( ?$ t0 \' T5 h' \4 ]+ Z6 ^4 ^) s3 D) g
/****************************************************************************/$ w1 T" M" i* R2 i$ K
/*                                                                          */8 n. I+ _" b  E8 u! Q: W8 @
/*              函数声明                                                    */  Q0 Q4 c! ~" u. f5 @1 o. g
/*                                                                          */
2 i; @2 N  D' G/****************************************************************************/
0 o- B0 f, a; x( s/ T$ l2 ~) T// 外设使能配置
6 E4 o+ Q6 C% R$ x8 ?+ V% j- ]% K9 Qvoid PSCInit(void);5 ?! v6 a" }" O

. h. A! A( @, R1 i4 W// GPIO 管脚复用配置
1 H7 a4 W. u& G! H( t' l. Svoid GPIOBankPinMuxSet();
) i& U. k, {4 ^# M3 u, N
- S) g* V$ f+ n! B. P6 w0 A' y, _( j// 产生波形8 @. x( H+ B8 U$ y* J: d
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# w, r4 v4 U& D$ ~void ChopperWaveform(void);/ E, z/ m* d6 O, x  o! Y

. e5 K+ s) h4 X// ECAP初始化和读函数
  k9 j# k% Q. Y0 o# H5 _; F6 a3 nvoid ECAPInit(void);
8 ^. G2 ^3 ^; ]* Kunsigned int ECAPRead(void);
0 |/ b  [+ P2 `- Y% m" E9 R( Y+ ?- t+ ?5 G7 a
//ARM 中断初始化
5 ?9 B+ X# d' p2 c& U- f4 wvoid InterruptInit(void);
0 o+ W3 ~0 o7 s7 |- o
2 H9 Y" S) R/ j" J' ~// PWM 中断初始化
6 b. z) l3 @5 ?+ Nvoid PWMInterruptInit(void);
! y" b& s7 c2 A7 z/ D# f// 中断服务函数
8 s9 ]5 J( s1 u) B# r! _0 ]/ w  F5 I// PWM 事件( g) J& t2 Q! X* G" e8 W) H
void PWMEventIsr(void);4 q" c% v: }; n; X
// PWM 错误控制事件
5 G* k" }. Q1 W7 ]void PWMTZIsr(void);/ W) O) A$ _, {0 q; u

: O  c- m+ Y% _: E' i/****************************************************************************/1 b2 }9 f. l/ K% S/ n& l
/*                                                                          */, x4 K/ x5 e/ G. u' H& d0 l, P
/*              主函数                                                      */; O- A; l2 x- p3 H6 J4 O7 T5 ~
/*                                                                          */
3 X, Z0 e3 S+ f4 K0 Q# U6 [/****************************************************************************/
( |# q. ?! b2 m/ L2 _4 j3 sint main(void)- O. n" R+ ~+ `  Q3 M) Q% }. k8 ?
{5 f1 e0 q" z# w+ H. W. d, O+ e! B
        // 外设使能配置' l/ l! C6 ^8 u$ Y/ Z0 I
        PSCInit();7 a* g4 u# r- J8 P% P) t6 i$ R
3 B' Z, ^8 k* A  N
        // 初始化串口终端 使用串口2! O9 M. e5 ~# b
        UARTStdioInit();
! @) A& t: Z+ _" F' {0 V4 X       
7 J9 Z: N  \: @( I- L        // GPIO 管脚复用配置
9 P& |+ e) r3 j9 K* u; H        GPIOBankPinMuxSet();' u) b$ A# k$ S# [* p3 }6 K
/ G! {8 p) X! `0 e* S( m. ^
        // ARM 中断初始化
# s8 r( f9 {( |        InterruptInit();
# t, l* |) n* q* `: K# P9 j% `
/ E) q" w; }: N2 s+ E        // PWM 中断初始化
9 H4 Q6 t/ P6 z- x# C        PWMInterruptInit();. f2 l7 s# z3 S  K8 g

) l' ~" k4 ?$ o# H        unsigned char i;
- M4 U# O" b, a( G* a4 c        unsigned int j;
$ F" n- `: M7 M7 U
) `7 S  N# f7 Y- b        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
: [9 k' n0 O7 }  F- f        UARTPuts("------------------------------------------------------------\r\n", -1);
0 f4 u0 g8 u# K# `0 {  j        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);  y, D& W5 g7 ]' R
        // 产生波形' W/ U7 R  @- u
        PWM1ABasic(25000,50);5 J8 L3 n. w, x) y" b2 k

* ~2 C1 u" n: ]        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
9 Z0 `" I/ X: U' f0 d3 M8 R5 W- y        UARTPuts("------------------------------------------------------------\r\n", -1);
5 L: X2 ]8 O" m/ s5 z1 W8 N1 l! v
: v, I2 M  Y; J6 c! S
5 T; x% v* \9 S% ~3 g; y* D" y5 e. ~+ u% i& _) ~8 O, Z3 D
        UARTPuts("------------------------------------------------------------\r\n", -1);. i7 D; z! l. N( F9 V& X
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
& Y/ p/ I  v  W6 ?4 u' g% `/ J* _2 y        // ECAP 捕获初始化3 v8 b5 j2 S0 X3 [9 t" u) D
        ECAPInit();9 [' x1 N7 x' \2 G. }2 f$ Q
        UARTPuts("Initialize ECAP.......\r\n",-1);" L: V- U( m5 B' z; \# J1 [$ C
        for(i=0;i<5;i++)
5 ~& |) o4 g8 i) v; n8 c        {
: N; n+ `9 A* v4 f7 ?- y7 l& h                    for(j=0x00FFFFFF;j>0;j--);            // 延时
% ?3 u: N- Z/ ~( m  L                    ECAPRead();$ O: Z7 m0 a2 i& Y+ u/ @# D, \8 p
        }
5 \  d2 o2 z( g  l, \# i6 ~        UARTPuts("\r\n",-1);
+ [9 ~* j! O$ H+ U1 h8 l        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);- r4 q+ ~* O& x% K3 ?3 h
        UARTPuts("------------------------------------------------------------\r\n", -1);
$ I, S8 F1 o/ v( f" d# L. Q! G; ?+ d
        // 主循环
5 ^; T) o  z' g" X        for(;;)- J5 |9 R! ?, Z% q1 h6 b6 C
        {
  N. g: W8 c+ S( |- \, `
& r! n( z1 |5 ^1 h8 Y1 r2 Y$ W! z        }! e& ]; A  w: D' E: d
}
& W0 W' t( T! v/ e0 `& ~" W9 |# s8 j5 T" Z
/****************************************************************************/
. a5 P) J& \$ D" \# l& j4 j/*                                                                          */
' Y' C# f% G! N6 v5 m+ r8 V/*              PSC 初始化                                                  */
  d* x+ e- a9 v2 f: B/*                                                                          */" C2 }- o0 {' p2 _' k1 x$ v% c  g+ V
/****************************************************************************/
" z2 v" e: X' |+ I; B4 A2 Avoid PSCInit(void)
5 v6 C$ M; u9 c$ P* H! C{
3 N: \( l" [  T        // 使能  EHRPWM 和 ECAP 模块
: {4 Q" m7 [# D# e8 D8 u        // 对相应外设模块的使能也可以在 BootLoader 中完成
8 Q$ r* ?/ \6 Y3 V, A    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
( W5 X1 U0 j& T4 C/ U+ i/ }    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3 ^7 G7 I9 A0 `& u" e' t( M}+ ?9 y' {9 O0 B$ b; A
4 q0 b2 V6 D) T* n
/****************************************************************************/- C* H* e. @4 [* ~% k) O; S
/*                                                                          */
* _: r) i1 N. r9 U, K8 b/*              GPIO 管脚复用配置                                           */
$ E- F, v, o  \1 R# H0 S1 s5 I/*                                                                          */  G7 b  K3 g0 b4 A1 Z
/****************************************************************************/' C' H$ X( R8 f
void GPIOBankPinMuxSet(void)+ H" v) X$ E3 E# G
{
; P) L: P- x9 s7 T/ W' t        EHRPWM1PinMuxSetup();
; A7 J, v6 F/ R2 Q8 [8 T: g/ C
, A+ \7 }# M8 u" ~9 d1 g        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)) M& S/ J$ m) ?. z3 G
        // 作为捕获功能时管脚方向为输入! v, h5 I" Y0 f( C2 l+ }" _+ a
        // 作为辅助脉宽调制时管脚方向为输出* d9 D9 R, I* ]% y
    // ECAP2 / APWM2, t9 Z+ j6 I. B4 H# d. C2 A' t5 ~8 p8 {
        ECAPPinMuxSetup(2);' v- T6 U1 Z' p. g5 j
% U. R. `7 @  ~. _. ?
        // ECAP2 / APWM2方向设置为输入
8 @- A7 `2 h; O% X        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
1 `% H9 j% M& F* c7 s5 K: S, ^" s}
# V6 o# t2 e- W: l9 z/ Z' D
3 Z1 W' n$ p4 w, N9 l1 E0 W/****************************************************************************/5 G. N9 F3 l1 V/ M0 O
/*                                                                          */
. q4 r7 i( c" S* P- i/*              PWM 输出波形                                                */
$ ~7 F. V$ U% S: U* y9 L* s( y/*                                                                          */
1 ^0 N: L: f2 F- C, U9 H/****************************************************************************/
% |& P  P3 M' [# L8 \void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
% |9 j/ O: y/ T. r{) d8 K1 w% R" H0 V( {9 i/ N
    // 时间基准配置
: g( l' H; I0 d. [4 P    // 时钟配置
6 t; [! l& V( ?& e* t8 y    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
" k% d: H# l* N' H4 E* T9 z
! ]# [. l# C& N    // 配置周期6 Q1 Q4 l: U& n7 `$ f/ f3 _8 G) E$ ]
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
6 R. y. r7 Y( o- ~$ w                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
) j! L! V' O; Z; `0 v) e
. F3 E2 ~* w* ^/ i    // 禁用输入同步信号
; l# X* b5 y6 `) t9 j2 M1 A    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);8 O1 @1 M; M  y. q

7 w& t: L9 h4 c8 g# y' j& h    // 禁用输出同步信号
2 i$ P1 T$ U. X; e  l    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);( C% ^3 H& t8 w) s/ j4 V

+ L, Y6 O  X* F  `+ W7 }0 h    // 仿真(DEBUG)模式行为配置2 V5 I( ]6 ^3 m' d' J8 D/ i
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);& N5 T0 F9 m5 _  \
0 H5 _/ H. D9 L* N
    // 配置计数比较器子模块' W) T+ w# l7 x
    // 加载比较器 A 值( f4 j* Y7 U1 U6 y9 j
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
+ Z5 L- }4 `9 B# n                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);. y1 d5 i: e1 t! N3 X$ m  T# e

& j: i/ \9 _% k3 v    // 加载比较器 B 值
4 _( F$ _$ h0 o3 k% K9 O, p    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,. e' ~1 {4 `  ]% f& h/ i
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);8 G- W" x& c$ b9 Y: s0 |5 K# `* @

+ j3 _' l7 P  @9 t8 O- y    // 功能限定配置(输出引脚触发方式设定)
) C' F' x/ r# s0 {$ x! a    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
* L  J$ X. X- Q; i, x/ G    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
5 x: d$ T5 X3 S  N) B                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
: r3 F# d* T8 f) [3 {                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
+ N0 ^+ l6 `+ d4 G. I; Y! W3 {& Z2 o4 ]: t/ E3 W  m: W1 ^
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块, t9 a+ b& ?( ^8 Z! Z7 r
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
7 @/ W" ~# _% `7 ?' Z' I5 l$ h2 O" J; Y
    // 禁用斩波子模块8 ~! ~. Q6 R( n( Y4 S2 A+ {
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);( i1 p2 }% \6 f+ o

" a- u8 |( R! \0 p+ _    // 禁用错误控制事件
- T" v& L- R1 S- O+ P3 t) O    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);- ]1 i# ?3 B3 `, b
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);5 m) F. ~! p6 P. M8 L5 a

1 c; Y+ {( Z3 [8 X) l! j0 K) R    // 事件触发配置" p! x: o( A, D  k6 {
    // 每三次事件发生产生中断9 }3 Y( U1 o3 [1 ?- _
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
1 x2 i4 {6 @$ \& M    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
- o! _) T) E7 I5 \8 {" h: |    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
1 S' G; s( e- h( }( T) N    // 使能中断
3 z; ^8 `$ Z" c# a    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
/ K( R/ f9 \" G2 g, m0 Q
! O5 P0 w4 _( H    // 禁用高精度子模块. g4 X0 h& r2 |( B
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);! D: j0 C1 @  T' |8 z1 ]
' S' B2 q9 X1 z% b& k
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
& v" i1 z" o' J+ a2 z; k6 {2 [}0 o7 a% v" `" [% W1 u' a# I/ S

1 f0 ]3 d, D' tvoid ChopperWaveform(void)
$ R# F5 z* z% H# k{
7 n& G) V- ?1 R; {' C    // 50% 占空比
, i2 o. I! n* w# S    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
! V+ _: o9 c' I6 o/ l    // 4 分频- P3 T3 B( O/ ?  g% V& R2 r4 m, o* f- o
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
5 Y* F# B8 {& m6 b6 h! w8 z0 g" G    // 单个脉冲宽度
5 o( Z- P; S1 x3 i) D7 x    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);  m4 w' |8 T+ l5 r( C0 Q
    // 使能斩波子模块
& Q) e9 r7 _5 _! A( L& I    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);, N. `# q% V8 V
}. m/ P, P2 j( `9 K, ]) B2 I

+ M' ~! S4 \+ ]1 e' a. `2 ~& K/****************************************************************************/! J) H# l. G: y, y& N$ a6 ?
/*                                                                          */
+ _7 e$ H5 @8 V# K/*              PWM 中断初始化                                              */( |/ b1 u. \3 I
/*                                                                          */5 O0 w2 B6 h& e  \8 i. J
/****************************************************************************/3 u5 {2 |- v: B* J3 j, d! N  F! |
void PWMInterruptInit(void)/ l$ W1 w1 A/ w7 P( i6 c9 Z
{
$ U) w- T1 K3 X) e        // 注册中断服务函数1 q8 D. l. q  ~2 {
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
8 x- r9 d' V  N' u+ {/ f' u) A2 g        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
. d# p0 b, k8 `2 w# ~9 w* s0 {2 x% @6 k' h9 i
        // 映射中断; @$ X8 D$ Z+ v' ~6 v* w
        IntChannelSet(SYS_INT_EHRPWM1, 2);  j' `+ t4 S8 _3 A1 _. [3 X
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);  Q8 u8 |1 o% N. h7 ~8 p1 j" A, w& T' P

% H& q/ @5 j; L' _) S        // 使能中断$ f' E5 i# h+ W
        IntSystemEnable(SYS_INT_EHRPWM1);  R% \- t4 f# ^: l
        IntSystemEnable(SYS_INT_EHRPWM1TZ);- t8 G: K9 r4 C
}4 i' k. t) K9 p
$ y0 D, u9 ]9 t& t
/****************************************************************************/( x% h, e- Y3 ~) G" x, e' m
/*                                                                          */) G" |4 f6 ~+ L
/*              ARM 中断初始化                                              */1 U5 o; s: k( k2 s0 _' L
/*                                                                          */
- i& `) z) z, X7 n" [5 Q1 R' X/****************************************************************************/
; W3 ^+ b% [0 [) g& M0 O" Uvoid InterruptInit(void)
7 N2 ?: b1 `- V6 v  [9 K" \{# L0 j+ P& I& e2 `
        // 初始化 ARM 中断控制器) |8 N# S7 F7 }: Q! w
        IntAINTCInit();
: B. l1 O7 H! ^/ a- G2 w( S  n
4 x. T6 W9 ?% i' v' o' v        // 使能 IRQ(CPSR)
/ W  G+ x- \% M1 E        IntMasterIRQEnable();- c! v6 E8 U% U) t9 |3 D' L4 Y1 S" H
- B& Y2 o- F7 O0 ^& I) h
        // 使能中断(AINTC GER)- d+ M' H# c2 ]1 S+ V
        IntGlobalEnable();
2 E0 x# J# U! R# {5 J; \$ P$ J* c3 F" @5 v5 V5 @8 n+ k
        // 使能中断(AINTC HIER)
9 G, S. N, ?. v3 @- |        IntIRQEnable();
$ w- ]( @  a% v) n* M}" }, P& H# {5 p9 ~  J8 C

% D- w% b9 c3 Z7 N
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/3 t9 j6 A- l0 h. Y, q0 ]
/*                                                                          */! @1 I) d1 Y3 D( m# D
/*              中断服务函数                                                */  c; Q$ o/ O, ^! ~
/*                                                                          */
5 i9 e/ {. Y: F6 ^+ l/****************************************************************************/
0 b, G6 q5 ^$ b3 n7 P0 Mvoid PWMEventIsr(void)8 X8 G' v& z, Q
{& x8 K- Z- o: a- S- `; \" {5 K: R
        IntSystemStatusClear(SYS_INT_EHRPWM1);+ H/ N, Q$ l! T4 C7 }9 B
' K" F; N( a' X- P: R
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);7 [4 H. P. Q" h$ G/ s% v
}& y' y7 E2 D9 j5 R
- Y' M/ e; ?; _% k: }" B* f
void PWMTZIsr(void)
9 c, q( ]6 `) s# {' _: q{' r' Q+ |; t' L, k: p1 ]
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
  o) S+ c& |/ r: K, D4 y$ Y0 T/ n" F" }- c8 v
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);, k% ~" y/ H9 p/ }0 e& t, M* G
}, o) Q% B5 {2 n9 E, x: Q8 s

+ Z, x2 w! Z4 x/****************************************************************************/
$ f; u+ u3 p' |, |, H/ q/ T; _' y/*                                                                          */
7 K4 p9 U( y4 S/*              初始化捕获模块                                              */
. [# ]% @* B" z9 J/*                                                                          */8 d. @5 {, v) Q6 e
/****************************************************************************/
" h! u, z4 Y/ D/ Xvoid ECAPInit(void)* E5 C& m0 i3 S( s
{
* ]2 Z; d7 \% R! U        /*-----设置 ECCTL1-----*/
# Z6 _4 d* Z/ ?( Y+ Z        // 使能CAP寄存器装载! x( r# i* m& \. j5 y) E4 ?* M3 b% q
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
' k% P. E% }! \% W! s) R5 l. H        // 设置预分频值.: d5 @& }) k0 a% m' Y
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
, K& K* X% p4 J6 W( O" k+ g: X, d8 V        // 上升沿触发捕获事件
2 u* h1 o( z% T        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);8 C$ e4 _7 @, v7 d4 {$ c
        // 输入捕获后重新装载计数器值.
( M0 {$ w" [, z& }1 Y6 U        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);1 J1 v- R4 O& m" y& r

; d$ c! h8 o% p- m        /*-----设置 ECCTL2-----*/
! [0 u* O+ b" v        // 连续模式# O% ?: O2 s7 \, c' [
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);, N$ R$ k7 B0 q9 I  @
        // ECAP计数器TSCTR持续计数
) R7 u6 a5 A4 R( l1 f* ~! ~        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);" u6 c$ x& T+ ?5 X  D* q
        // 禁用同步输出和同步输入6 d. R. Y% f# o( S2 p
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
( y; I, b- \( t$ x3 I! z        // 配置 ECAP 2 为 CAPTURE 模式
/ a  p6 y- b1 \% T5 L        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
# n/ I& F& ^5 f+ V5 M2 Y. T( s" p7 I( W* D
        // 使能中断
# f, a4 O0 g2 _, R9 H4 g6 [1 v//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
( z% F! O/ e, v9 m8 V/ T3 l}
, K+ O/ b0 h( o/ ^. n0 F6 V  f' H2 N
, }, o# M) z) {% n3 Y1 W* Z) y/****************************************************************************/
4 e: I; ?/ W* ^/ K9 Y/*                                                                          */
5 P" }/ B+ _5 Y+ l" H/*              取得捕获结果                                                */2 G: s( x2 M4 ?/ ?* l
/*                                                                          */1 U: c0 [& o! u% z9 b
/****************************************************************************/7 m$ k8 S" y2 s; X  V
unsigned int ECAPRead(void)
9 d/ T: d; o+ j+ F{6 _0 T: ?7 V/ G
        unsigned int capvalue;
- r4 ]) r  V( J9 Z+ \        unsigned long frequency;+ m/ }0 ~9 E. i0 R3 W; @% V

& M8 ]1 E5 g2 u* S        // Event1 中断标志
' b- B* d% R9 Q) X3 Z: W, H        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
& ~( f; ~+ h0 i1 g        {) E$ B* A. i. x/ f
                // 取得捕获计数! w: f7 m0 \) C' b% v6 ?$ |
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);% o' p( G  i3 ~7 ^3 [4 K
                capvalue = ECAPResult.cap1;
* u* o. Y3 v3 V- x$ P( `) ]. i
% U* J& s' X. n* Y. L% O' K, @( k" ?                // CAPTRUE 模块 228M 时钟主频
$ |9 O. f! S" o% a8 g0 J                frequency  =  228000000/capvalue;& f0 L% K* r! e
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);/ a  [) E4 H3 @9 W) [4 b3 ~
; J% o! m8 m0 Z/ T0 S  f9 ?* ?
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
  G8 [$ s) r: [  X% g* D- ?; ]% h//                IntEventClear(SYS_INT_ECAP2);  d  `2 k% k4 D5 B5 t/ u% d" ]1 m
        }
9 o" b7 u; P6 |( R, w) T        return frequency;% ~3 _0 ~) T& m) Q
}0 d' v: _1 {! ~( y1 f
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。- P7 s  }/ B* z  H' j: v

本帖子中包含更多资源

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

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-29 09:41 , Processed in 0.044879 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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