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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
+ F4 f) Q( e( O  Q3 q$ z/*                                                                          */9 |4 W) I7 ?+ q6 W" |" o
/*              宏定义                                                      */
; {9 l$ M& ?+ Z( I; I: C3 ~0 d/*                                                                          */8 e6 P. u$ b) ?9 w% ^; I
/****************************************************************************/4 m) T1 N. Z6 [4 K/ j: v7 l
// 软件断点" D: _6 u$ C, x# M. S! b4 S6 Y
#define SW_BREAKPOINT     asm(" SWBP 0 ");
5 Z. P' ~; V% a7 m* s! b; H4 p- S6 p+ e! q8 L) O) J8 {
// 时钟分频) C5 g; [$ U% Y0 o
#define CLOCK_DIV_VAL     228% l1 J9 d  D+ ~

* ~: |$ \7 K2 o% C  l/****************************************************************************/1 x  p! T) V! K* i8 ?1 `8 X- G3 c
/*                                                                          */! a! B0 h. H8 e' c
/*              全局变量                                                    */
+ `  o7 M. I9 Z5 W/*                                                                          */
; _: A% d9 n7 q* K" c% J/****************************************************************************/
7 A! U7 f6 O; a  S- r; ?ECAPCONTEXT ECAPResult;$ u' _/ r, _: p

9 C9 L9 B5 ?; h# y/****************************************************************************/' f+ p2 @; H/ S9 S3 u
/*                                                                          */
% I7 V& C: c! C4 s. F7 f3 j5 J/*              函数声明                                                    */
6 Y( D9 G- f7 ^7 t9 y/*                                                                          */. W8 R5 }! W7 H! ^% x4 W! _
/****************************************************************************/9 U( p) t/ g* X7 b% L' @
// 外设使能配置* O* J8 l, n$ D. I% y( b
void PSCInit(void);# f* ]' N2 y4 g3 q. l* ?/ _- ^
3 ^- o& e# W. M9 I4 }" u' V
// GPIO 管脚复用配置
8 C, j7 A: r# |0 t) fvoid GPIOBankPinMuxSet();
! C7 |" Q* L6 q4 ^' }$ m) \$ I" ]- K1 i
// 产生波形
$ c9 x8 z4 d4 Kvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);* _/ c% u3 j8 M
void ChopperWaveform(void);
( F! s4 ]3 H; `' i6 p
1 u9 O, r1 y% x- n* k, h# K  f// ECAP初始化和读函数
- H, |2 _% E5 ]2 r6 }+ ^void ECAPInit(void);$ C. f0 {+ p2 r4 O1 R
unsigned int ECAPRead(void);0 N' t" e' m6 _. a
: Y! Y9 b6 Q2 w) _9 n
//ARM 中断初始化7 F( W9 J' I- v8 o) ?1 F
void InterruptInit(void);' F8 k! v1 U6 b$ N5 t# q; R$ d- e
3 G% {# y* d% }, u0 h9 }' D' U, T
// PWM 中断初始化# X$ ^* z, n/ M% P0 {
void PWMInterruptInit(void);
% x& Q' p9 W) v" D5 Y// 中断服务函数
$ |4 f& J* N* \) U. z% X// PWM 事件/ p$ b2 M; \' [$ `
void PWMEventIsr(void);
7 k: g4 y5 u. F// PWM 错误控制事件; `( j  d: M; C
void PWMTZIsr(void);
8 W7 e' M4 @; K6 s) \: ]4 D: C4 D( X, l. W& S
/****************************************************************************/* G; z/ l1 {% O3 ~: @6 W& B# A2 w
/*                                                                          */, r; s, E" E  t6 k, a: O
/*              主函数                                                      */  U5 ]( P2 w  b0 e6 B& U
/*                                                                          */
" A3 v: u5 K  _/****************************************************************************/
# V' v* v1 d! r- T- Nint main(void)
+ u$ V! b5 e6 q. s- S1 g; t1 h{2 J1 N# g& h% G: y+ p! ]
        // 外设使能配置
7 t' q. `/ f$ p- V- i        PSCInit();# J0 w# ?1 p$ V( R9 K
! u& F0 p' E% s4 l, q) [5 D) T
        // 初始化串口终端 使用串口2/ d( p" N; |0 C5 ]$ }" |- L. F
        UARTStdioInit();5 ?9 j4 ]9 k4 a2 M; e
       
" |( h0 _$ g. g/ ]0 l        // GPIO 管脚复用配置" A2 J  K( Z  T) i
        GPIOBankPinMuxSet();. m2 x6 {& A" r/ E
2 n2 o/ j8 W5 ?$ b
        // ARM 中断初始化6 ^  z5 T# D. m( T9 n7 D
        InterruptInit();
% f# }9 D, }1 _/ H2 Q1 f" [& w& k; n; D1 \! ]; D
        // PWM 中断初始化* V1 P, W% ]  H: B5 p( l- D
        PWMInterruptInit();
: j2 V) I7 E; O1 A  B8 u  Y7 L# e" z+ F, ?) N* {, ~
        unsigned char i;
4 ~3 V# r% \4 u" B- G6 K$ M& F: a        unsigned int j;7 Q5 E0 G1 X: p6 \( G

7 W/ n+ m( c0 D+ F  `  g        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);' B' V5 m! ?( }
        UARTPuts("------------------------------------------------------------\r\n", -1);8 @1 N' {3 V. S6 @4 T
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
8 [! d9 Q; o3 ]/ [7 b4 O        // 产生波形7 V! p( O  D0 R) D3 h1 m
        PWM1ABasic(25000,50);
, p! u% k) Q( k3 j; F4 f. }+ m
: }! {3 w5 H/ _/ s1 _; e3 _        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
$ b' f1 o: ^/ O. e        UARTPuts("------------------------------------------------------------\r\n", -1);& ]% \7 z$ b& I6 L+ _+ N
3 I  g4 A/ _) @0 x2 d# c5 q  ?) A
! a5 H5 H% t( x7 e! K
" |. W6 Z5 Z3 Q+ Y6 P
        UARTPuts("------------------------------------------------------------\r\n", -1);# L$ I9 c- a* V4 B
        UARTPuts("                    C6748 ECAP Test\r\n", -1);  l# r5 \$ E# j( t! Z  ~; x
        // ECAP 捕获初始化
$ b$ Y1 o# \) ?0 t( N& J        ECAPInit();" ]  u( d' ^: t/ v! R
        UARTPuts("Initialize ECAP.......\r\n",-1);  E1 _6 A% s4 W1 z
        for(i=0;i<5;i++)
/ P5 [4 v$ a' C/ _; m4 s. K" b        {$ Y3 k( h/ Y  u% R* d: x5 y
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
! n3 d8 P/ t* n                    ECAPRead();4 A7 _* G, w: i; z" u" z
        }
! n- @. R2 G1 E. r! U        UARTPuts("\r\n",-1);
  m1 c9 V8 K$ \( d6 h6 s' ]  X        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
: B' w% B" H; h+ }  X4 a/ [        UARTPuts("------------------------------------------------------------\r\n", -1);- ~) P. N5 T- b  S# e- v5 L

4 R+ }( h1 h1 v* S/ c* ]8 R        // 主循环
. `* x6 I2 k: L        for(;;)7 X6 u, \# c3 ^8 k  M; x- C3 M. N0 k
        {
0 B" s9 a# x9 f; k9 Z% a! @% j
, j1 V  T$ O4 o; }3 N        }$ `7 m2 C3 O* y9 \, S; e( ]
}) _) F. `. [7 x

% \/ B! Y& Y/ ^$ h$ Z) h6 ]/****************************************************************************/5 @5 ?/ a8 H3 j% s& G
/*                                                                          */
* P6 C  ^$ [. V- n/*              PSC 初始化                                                  */
* N2 q. R; _, _! \, v- j/*                                                                          */
, q+ c  H9 u, {/ l/****************************************************************************/! t* P# _7 s' w' I
void PSCInit(void)
( [1 G  W9 L5 E  R  Q{
1 E; b. ?# _3 h- K        // 使能  EHRPWM 和 ECAP 模块
+ T* a& Q) h7 i2 ]" M" A, q        // 对相应外设模块的使能也可以在 BootLoader 中完成
) ]) p8 t) z' h4 i8 R0 q    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
  S. g$ p6 E0 P' S5 B    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
7 n6 {9 i/ C4 r, Y5 ]. B9 [2 W6 q}
" z3 M' p. q) J+ H! E8 P
; ^- @) ]3 L- F! N2 e/****************************************************************************/
$ u( H, m1 K; m  ]$ E- O+ W/*                                                                          */! S( H6 W0 C% A' a3 O
/*              GPIO 管脚复用配置                                           */
" Z) l% u! I2 T6 g8 A1 S- w3 W0 F/*                                                                          */5 M0 F: O: E; W$ A) l
/****************************************************************************/
+ j. R) C! s  t' U) b" G& pvoid GPIOBankPinMuxSet(void)' E0 F7 N6 A' [! e( {
{
  @" S8 G; c7 B% o6 z7 s        EHRPWM1PinMuxSetup();
" e; [6 P1 E4 d1 X6 C0 p' R$ z& Q3 v* {5 y/ y; P% b
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
5 M. z) K: R5 r6 k+ y$ Y        // 作为捕获功能时管脚方向为输入9 d+ O) f, J" R8 h, g4 W
        // 作为辅助脉宽调制时管脚方向为输出4 t9 I' g) E8 l
    // ECAP2 / APWM20 Y! G) H4 _- h% o8 ^
        ECAPPinMuxSetup(2);2 ^( H) U$ O2 x2 B. A& q% m
# l! O  j, N& E+ j' E; ?+ k) Q
        // ECAP2 / APWM2方向设置为输入
' J- @+ N: E/ e7 A- C7 z! W        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
) X3 `" l8 E: k1 x}; A8 U( _! A9 O) S

/ X! x/ x/ a0 O3 b+ ]2 ^: V) M/****************************************************************************/  X% i" }# Z# z5 k
/*                                                                          */0 U0 K/ [: g6 S$ q2 O* a4 o* g$ Q
/*              PWM 输出波形                                                */
( B8 a; u8 d1 r- s' M( |& ?% L/ T/*                                                                          */- C7 W- L8 F6 U. t$ U
/****************************************************************************/
  W% T* [9 B  ~+ X) p+ R& d# yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)  D* l# H7 J3 I  B: t2 N
{
3 e6 e" H+ Q' ~0 }7 Q  v! G" n) k    // 时间基准配置8 l6 @# d  X) G1 _4 }
    // 时钟配置
- K! j' ]6 y5 h  N) d. X3 E% F. V    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
8 Q( x6 h. ?3 \7 o" J  _4 ~" q2 B$ H, |& z
    // 配置周期
! R( h3 l3 q8 p: d0 L0 I    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL," S; y% }  M; r# E
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
0 K, M6 d1 K, n1 a' o4 W8 w3 r7 H/ y
    // 禁用输入同步信号
% ~8 u- M7 [2 s; ?! }    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
' G4 n; M; P! k' Q2 S
- |6 s" p. u# C- |1 Z* ?8 L    // 禁用输出同步信号
& R7 E3 r% g. h5 w* _7 A2 s    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);% B+ l* b9 D( F+ p

! h* G, E8 u2 R    // 仿真(DEBUG)模式行为配置& f6 e3 e! s! x# T" s4 G
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
( v1 X2 X6 ]& T+ U9 X! A% m0 R' l0 u
, `* k  c9 V( F! S7 p- J    // 配置计数比较器子模块
) Z& D# t8 W7 ~1 {" M, T' w9 k3 V    // 加载比较器 A 值
! B+ W) ~) T) i# b    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,/ h7 j+ e1 M/ \2 Y* P
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) x* t$ z6 [1 ?+ {' E: C) M# m8 K5 J. p
    // 加载比较器 B 值3 v1 ^; Y  m5 e1 M7 `) Z5 Y/ D+ j6 o
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
4 r, d( b+ U/ N$ i: V1 V                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
# d$ D: e* M' D$ B/ [3 j- U3 r- M9 m& `- Z# w2 z/ G
    // 功能限定配置(输出引脚触发方式设定)0 A* V; d6 U. G# n0 F- w7 @0 }" w
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
$ F' K# y* D! F4 g8 q    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
$ X5 R+ ~, z1 F" w$ e, M" ?' K                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
! y  V( D- e4 l6 Y3 j                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
3 Z, G' X+ f1 |
0 N2 E  k) Q% ~% x, M    // 禁用(旁路,信号直接输出到斩波子模块)死区模块0 [+ b( ?; G4 B5 {$ B! B3 A
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);7 T5 j/ M6 f* x9 k. m
+ H8 E3 ?5 q# C
    // 禁用斩波子模块5 u( _5 w3 R  u
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
1 k4 Q, |- y  x* s, ^3 a* @6 k. H1 N0 M
    // 禁用错误控制事件
# G+ \  ?. L% `4 ~+ k2 I    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
/ l3 d7 x) F2 Z4 c    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);! `8 z) ?8 M6 ]+ s! I7 g. ?4 f- l

4 Y, c, C& U$ b& s2 ?4 e4 o    // 事件触发配置
  m: u. P  ~8 m* \3 L    // 每三次事件发生产生中断, q0 l1 Q0 g( y4 x8 j0 N3 C
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
. c3 M( m, G/ d! D3 ]2 c    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
. }% l5 d' u8 I+ d+ S  y2 y    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);( ?1 ]3 t0 C$ P5 }$ \! R
    // 使能中断2 ]3 c  c5 d6 s" J1 v
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
2 f0 Q4 n5 |8 U2 S9 m, P5 ^  w! V. D1 L7 K
    // 禁用高精度子模块
# T$ U* ^3 \, g- i5 u    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);, S8 J$ C. Q, i& s) R
  m* t+ d# U% p: @
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
) n' R! b/ P* M0 F& O}
* d6 t/ [/ U7 @1 t0 o; K! G0 M8 c# q) d; G9 h+ C4 w7 o
void ChopperWaveform(void); h( }" _- _- x9 w
{# v0 f8 c0 Q: h8 H6 P! s8 p. H
    // 50% 占空比
7 K: ~2 j, c1 U" ?% w; Y8 Z% @1 q    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);' K1 R4 M9 {* F4 R; F
    // 4 分频
* P- `' p# r' n, ]    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
! j  R2 d7 p8 E% D! _2 r    // 单个脉冲宽度
/ }6 I' C* s" d8 Z% }+ {    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
5 E; ^9 V5 G; L2 w# c! m, L) T    // 使能斩波子模块
1 w- ?0 W* V2 a- \    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
" W- e# m1 a5 G}7 f. y# z' }6 v9 d6 ^5 U* G
1 J3 P5 I" |4 B. C
/****************************************************************************/
* a( b; `- ^1 X5 C: w" g1 s1 g/*                                                                          */7 e* t8 c7 Z5 f. Z# T7 [5 X
/*              PWM 中断初始化                                              */8 G& R) P9 @, l6 I* p, c" d
/*                                                                          */
& q( u1 z3 j7 x4 S% R: a6 D/****************************************************************************/
: W( K/ G* h' o( j5 avoid PWMInterruptInit(void)9 E3 t& K2 b3 Z. N; Q7 L
{# m; d- I1 G/ f
        // 注册中断服务函数- o: V; q; B6 p# Z
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
- c: F7 z& [8 f' O) t  @! h) }        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);9 _4 E% e- T1 C) j
2 V8 d! X3 \! J& J: @& E2 ?
        // 映射中断
  Y, U" R5 i9 Z        IntChannelSet(SYS_INT_EHRPWM1, 2);
" l% \+ k2 {: K' A$ S6 q# P        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);) [3 g- q6 c1 M) T: a0 @

5 p' B0 H) C) N7 F; z        // 使能中断
' n3 X. h% K8 O7 i        IntSystemEnable(SYS_INT_EHRPWM1);
' ^7 L4 M5 A+ @7 x1 q7 v+ u        IntSystemEnable(SYS_INT_EHRPWM1TZ);9 l* y  W$ R1 p
}% L# u8 t8 ?- T) L  ^9 c8 m* Q
: \9 x; [4 D& l$ R; c( R; U
/****************************************************************************/0 ]+ S+ I, m' c; b2 G, g& G
/*                                                                          */
+ F) w$ K' w9 g  l' M( X) g/*              ARM 中断初始化                                              */9 ~4 W: ~+ B6 I# p; y" X
/*                                                                          */9 f& P7 v; X% P, g" C  p
/****************************************************************************/
7 r. p5 m+ @1 Yvoid InterruptInit(void)9 u7 `5 z8 m& K2 m) E# V$ ?
{
8 \% Y' t) P  n6 o  i        // 初始化 ARM 中断控制器$ v9 _# X/ p0 Z  ]
        IntAINTCInit();5 w! H1 t: k. Q& R
) a! z1 \( W5 H  ^
        // 使能 IRQ(CPSR)) t' @- d7 M) P$ ~  t( U8 l
        IntMasterIRQEnable();
/ {  e$ c4 y9 {4 V1 B  |+ c5 G9 Y" g% q( {" ?; D6 P* J
        // 使能中断(AINTC GER)
0 \& e3 p. d# `7 ?        IntGlobalEnable();3 d% h: ~. ]9 U: `+ ^! |1 S

, I7 r3 ~5 O) P) V. K4 f# |) M3 W4 c        // 使能中断(AINTC HIER)
( Z7 ^$ C8 E% G: J        IntIRQEnable();, p6 y5 U/ r: K4 X2 b
}3 V5 Z) D" U2 l6 ~) T' T

: _& U+ e( c3 k# g  t5 g
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/3 ~* `! Y: B& y0 o: f
/*                                                                          */# L& u- a/ \' m* h" ?
/*              中断服务函数                                                */. a5 Q2 M$ M1 _8 n
/*                                                                          */0 d. g- [7 f2 w. k$ u
/****************************************************************************/& k% L" _8 C2 l" Q5 G  z" d+ v
void PWMEventIsr(void)
# I+ K2 _( L0 ~, k{- z2 C4 m  u& t- A8 s( k+ W
        IntSystemStatusClear(SYS_INT_EHRPWM1);
) N! n9 L5 }9 J& `0 c% O' D5 k! c% |; m( {
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
1 S. u& D0 h4 z! L5 B}
7 N/ i' c4 E% w3 @" X/ A! V2 B) z2 ^$ b
void PWMTZIsr(void)- X' w" X. W" D
{; L+ |9 @* t& f8 V! G3 m
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
* J! d8 L( l! [# ^
7 I; A# H7 X/ F, _$ ?    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
1 y% @7 W- j# `$ l% [}
9 {& V/ w/ s& _/ T5 ]! n+ y$ N! j4 P0 E* k! K6 P2 F& V
/****************************************************************************/
- f3 o5 X6 [) P: l1 p9 X/*                                                                          */
. L" A( m3 U& M" P/*              初始化捕获模块                                              */
* e+ w# a+ b7 M9 s8 v/*                                                                          */5 m  ^4 |4 `/ A; B4 L
/****************************************************************************/5 I# G! W# ~4 ]0 |3 t7 g# J+ t
void ECAPInit(void)8 C# b& D9 ^, q+ z$ r( a8 I  e
{
9 i$ K$ {9 u1 k* D, E        /*-----设置 ECCTL1-----*/* T# f' |! @2 S0 W4 D
        // 使能CAP寄存器装载0 R% u& D" e' Y
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);" V  ~; U6 a  x% V& y/ q# W1 d
        // 设置预分频值.
+ k; [4 k" r1 Q        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
: r4 {: L, t) j        // 上升沿触发捕获事件
& x2 @/ P# d- R% b        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
  [2 V( i/ m) {. r        // 输入捕获后重新装载计数器值.: `/ c6 Z8 ?' m) {" K7 [
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);; L) Q, N, A( l! L% e$ }& T
& @' V: Y0 ~0 }
        /*-----设置 ECCTL2-----*/
( V) p8 i8 y" q7 t8 t6 P        // 连续模式, R4 P% J2 d. S8 V* |& i
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);& p8 P8 t) l* p  Q6 g
        // ECAP计数器TSCTR持续计数  i+ f6 F8 g$ d  I$ |/ N# p
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);. ?! R. u! l3 z, m! ?+ Y
        // 禁用同步输出和同步输入
  {3 Y9 `3 F! g! H7 f$ ?+ N        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);: i* {8 d# ^0 S% H
        // 配置 ECAP 2 为 CAPTURE 模式% s; u) B1 y( W. \7 y
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
6 `2 m/ D: U0 |5 }/ g" E
9 e& @$ H0 u8 S7 E% d) y( t        // 使能中断
0 |3 h: o  O; K5 Z//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);/ ?. m) \$ ~: N$ |9 E
}+ ~6 l8 G4 d1 m2 C& x0 ~! u% H6 {

! S# r; b) F# ], u/****************************************************************************/
  Z! g. Z  e8 }9 q0 N/*                                                                          */
# q* O  u; P" Z9 D! L. Q/*              取得捕获结果                                                */
- i# ?0 _# A& z  J/*                                                                          */
, p* e6 x/ j, @7 a# Z0 {/****************************************************************************/
) v5 s( f% ]8 M  d% O2 J: k: munsigned int ECAPRead(void)
& [$ O$ _' B& \$ D5 n6 ^5 _{/ Y+ }' T* s! }/ ]
        unsigned int capvalue;
1 p2 {, d, S$ W6 |2 H0 ]$ X# U        unsigned long frequency;9 |5 p# u1 N( t) a7 g0 W6 {* U
1 k  O+ \& K8 B( |2 c( Y- w* x7 ^& Z
        // Event1 中断标志/ ]7 Q8 J* o8 r: J8 v
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
2 L; Y6 N* ?7 e* R8 ~6 `1 B        {
: I$ x9 m# p4 R7 ]- W                // 取得捕获计数
: }2 e& J* v0 j1 A1 [                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);6 }2 R* A* k. A& _& Z% q
                capvalue = ECAPResult.cap1;( s- t- S7 _9 b' ~" I' x& T
) F( i7 b/ ]) ]7 W2 j
                // CAPTRUE 模块 228M 时钟主频5 V7 x9 c- R: ?6 @' M$ q
                frequency  =  228000000/capvalue;' c$ W/ _0 V3 j
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
; d6 C9 L# m" h  x5 e& i' ^* Z8 A
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);- y1 Y# g9 L* F0 O# w/ l
//                IntEventClear(SYS_INT_ECAP2);: E/ M: z' D' c( d% |
        }
, |2 U. ^& U3 Q; f# o        return frequency;
! h8 L; C% N- w" j9 q: B+ O* W1 w}
0 i0 w5 d" t. ^* r6 [* |
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。$ X, k% I% _) Q/ S/ [

本帖子中包含更多资源

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

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-7-3 18:33 , Processed in 0.047270 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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