嵌入式开发者社区

标题: 请问一下怎么产生PWM波 [打印本页]

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
4 V9 r* p$ r$ M) S' e
作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/3 R* ^9 Y6 g1 H- j* x/ u# [7 I0 f
/*                                                                          */
3 f/ g$ a- M% H/ Q/*              宏定义                                                      */
* f0 a+ L4 @! p4 s6 q8 O8 J- R/*                                                                          */
' D! l+ L- j( ^. O+ h# y/****************************************************************************/
0 {" ^( G" C) a8 t6 E& D// 软件断点
6 w3 e0 d6 `2 |9 u& w, S#define SW_BREAKPOINT     asm(" SWBP 0 ");
" H* |, x' h/ i7 H( c% f8 R# ~# R7 m7 y! f: A  c% ^3 X6 ?7 c- h& m
// 时钟分频4 e  l$ b/ F* i3 [4 y4 _
#define CLOCK_DIV_VAL     2281 c, g; F2 [/ R2 R) n

1 X$ T2 ~9 E% M# d2 d, `; X# r: Z% Y/****************************************************************************/& x+ H/ P1 Y  F
/*                                                                          */
3 T# b3 z( a2 t2 x3 O6 g9 E( k6 [/*              全局变量                                                    */
. k" N4 O* n( q' ?, D) G: s/*                                                                          */
1 g$ V( q6 l- |" B; G* E/****************************************************************************/
1 T$ z2 y6 S5 d4 U# }  D. G0 NECAPCONTEXT ECAPResult;
, l1 j. f/ j; K/ c" ^! `7 [- W7 x
! U$ t8 f) }" \- ~# n* w/****************************************************************************/2 F5 V) t$ e! H* u5 y! m
/*                                                                          */! \" ]0 Z7 q* n( @
/*              函数声明                                                    */  x' m& h- s3 p, u/ Z) |
/*                                                                          */, [$ P. O2 N' R, G" B) N
/****************************************************************************/6 y/ A, p8 a5 j# ^
// 外设使能配置: O: t% H% N8 J1 u( q2 @
void PSCInit(void);3 g4 h4 X4 {; |6 f

6 D8 Z, ^0 v" G# m- O1 I// GPIO 管脚复用配置
- i1 B# I4 k/ ^# {; ~/ L, M  t! Dvoid GPIOBankPinMuxSet();5 ]. q) W, Q; N* @8 ~) O$ ^
7 u- O  m1 }& M; c4 m& B! B1 P
// 产生波形
' N7 B% |. I3 Pvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
: v3 T; C. |; x/ pvoid ChopperWaveform(void);
! S, ^$ _* e  V) z2 B9 H
' ^* D7 o( ~# C3 F6 d// ECAP初始化和读函数
8 M! _1 Q1 s& \void ECAPInit(void);
$ ~+ P- b6 P) g5 |& D8 E+ a) E% _unsigned int ECAPRead(void);
* M) a& {  |$ ]
/ O) j: M) I- e4 A5 k//ARM 中断初始化3 C1 b- Z) Z0 b) J  E) s
void InterruptInit(void);
$ e: z. q) m4 U+ Z$ V, a3 M
7 ?8 n- g) O* @2 d// PWM 中断初始化2 |0 o+ E" s% P7 B1 ~
void PWMInterruptInit(void);- @: @/ K1 G1 l
// 中断服务函数
# z6 B, r8 ?* `% Q) o// PWM 事件
0 f& Z1 _1 f2 I, \void PWMEventIsr(void);
: {. `3 c7 u4 P; G" o* A// PWM 错误控制事件# p1 j, }) c/ F& j* |" q8 F
void PWMTZIsr(void);
/ {! T; f* {# T8 G
* _' [1 U, f3 _2 a, i2 F8 }8 k/****************************************************************************/
) k$ u. B2 _( [3 B% {" y/*                                                                          */
6 }1 ~0 I  t! B* g4 Z4 n2 H% C/*              主函数                                                      */; }! u- I' R- _  c9 S4 w; C
/*                                                                          */
; I9 e$ o/ u! @/****************************************************************************/
, {: w% U9 @/ W  X$ A$ Oint main(void)- G5 X+ ^( u" |  V4 {
{
2 |' O$ s0 D2 s5 j        // 外设使能配置( W' l# ~8 v  ]1 n2 }
        PSCInit();
, R! W) M4 X3 {
* m% E6 i9 k: j$ Q7 E        // 初始化串口终端 使用串口21 S: a8 {$ H6 D5 N& N+ _
        UARTStdioInit();
( X5 ~' ~2 P2 |" _% G       
: @* q2 a. ?9 u7 N4 C4 `        // GPIO 管脚复用配置
! S3 s' e  }! E3 x        GPIOBankPinMuxSet();. m# ?7 A# x+ `/ a9 |) V/ X

4 q: X) \9 f& c! a: x7 S        // ARM 中断初始化
, N) X" B/ v7 p8 N/ U0 Z, l        InterruptInit();. U- n8 Y! s! F

" J% j- H: B- X7 C& D1 K, h1 @  \        // PWM 中断初始化
, F, h5 y; p4 |# F1 t( ^        PWMInterruptInit();
, f* ?" P- G9 o$ J1 s6 q
' ~+ J- h+ {$ Y! U        unsigned char i;9 l1 p4 p( b/ N0 ^
        unsigned int j;
& g0 _  _, S/ E: p3 O+ b( S" {  l6 k/ O9 ~1 F0 U0 M( H
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
8 d( G  x. e$ \' o: Y& i        UARTPuts("------------------------------------------------------------\r\n", -1);
: h3 Y) W: x; f; A7 a7 N. }        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
; Y; w& T8 V6 _0 P( Z& X6 C        // 产生波形
8 S, {4 K" P. I        PWM1ABasic(25000,50);
- ]0 w% v1 k0 A
4 P* d' o6 U7 Z        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);1 v/ \& g; Q$ k! u' Y- Q! }
        UARTPuts("------------------------------------------------------------\r\n", -1);
7 e1 X& S# q( ?& e2 ?, l# u, u% U  ?9 d5 V( ^3 V5 E
3 Q. u6 K! t+ h/ j; K: d5 e

$ X4 D$ x  `, C6 F0 h        UARTPuts("------------------------------------------------------------\r\n", -1);" X, D$ t+ ~/ e) |' Y$ V
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
# L) N6 j% w& j        // ECAP 捕获初始化
1 o  S" U. R# V- R) l$ r        ECAPInit();
5 I/ f1 s; O( ^2 W0 V        UARTPuts("Initialize ECAP.......\r\n",-1);$ }. T( K' l# F6 ~! c  z
        for(i=0;i<5;i++)/ L. W+ m- J$ f8 ]
        {: R4 {6 W  y/ _) R/ S0 c
                    for(j=0x00FFFFFF;j>0;j--);            // 延时% e+ O+ t9 l9 q$ {0 J( H& I
                    ECAPRead();
1 {& S/ G, c& \$ X* E8 s# p        }/ e( N* x% L3 M0 D  l. O: E: h
        UARTPuts("\r\n",-1);
6 w; e" S% @) `4 b- d        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
; E. r; M2 M6 o# M! [0 E        UARTPuts("------------------------------------------------------------\r\n", -1);$ p2 r. e6 ^' q! I9 \" l
$ Q' i4 _+ C3 b6 z
        // 主循环0 j. v; I; O) X, ?% v; h# Z& x7 X) e4 J) {
        for(;;)  f' z4 V- g0 W9 }1 X5 r
        {9 ]" V. x, R9 O& a; F

  }7 l5 e8 B& b1 d3 C0 Y& \/ ]        }, T! }  g: N  U/ ?" y& e+ }& ^
}2 ], h, h! i- e

& Z* L2 T- l8 }2 j  }# z( s2 i/****************************************************************************/, L2 o- r0 C. J  p& {
/*                                                                          */
# T. _" }$ O4 M/*              PSC 初始化                                                  */
# D+ k! _: Z8 U1 p/*                                                                          */
' G! r* y' [. j! g4 A; m6 B8 l" M/****************************************************************************/
' y8 J4 ?- D. Q4 _void PSCInit(void)
+ n; D: L; G( ~2 h{6 D) {( ^. I' Z+ Q. h3 ]
        // 使能  EHRPWM 和 ECAP 模块
4 J) v6 Y. X2 b  x; s        // 对相应外设模块的使能也可以在 BootLoader 中完成
+ ]4 Q, U& N& o' i+ O    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);* r% a5 h( u1 s, m
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  T' u; ~( A/ [9 n9 X
}
7 i" H5 r. l+ _. r% m
$ T0 @( f, T; r* ^2 {' C: P/****************************************************************************/
5 z; B  v& l1 L9 u  @  J/*                                                                          */
/ r) a# v% \& x# u; I/*              GPIO 管脚复用配置                                           */
, O& \7 [8 e* f7 J+ O7 h  E8 t, D/*                                                                          */
5 {  m  {$ A0 L1 J2 ]; Y/****************************************************************************/
7 \  l6 w, U2 r9 @0 Hvoid GPIOBankPinMuxSet(void)+ {4 B+ r4 F6 G& U1 ]% {
{
/ o! j/ \  k, U& B        EHRPWM1PinMuxSetup();$ e; I7 ~' J( U4 \8 A

, O; l% i9 \0 c! {8 Y        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
- h" C+ u- ~( S: G! t  ]2 y; x        // 作为捕获功能时管脚方向为输入8 d) P5 A" w# ^$ [
        // 作为辅助脉宽调制时管脚方向为输出
3 H5 Y8 \8 a2 M8 q8 O7 o% W. F    // ECAP2 / APWM2- I; C. I, h) c) d7 a8 ?* ]9 J
        ECAPPinMuxSetup(2);. c1 U6 n, v6 r$ L2 ]+ p% x
7 c8 q/ i1 n, h/ l- k6 X
        // ECAP2 / APWM2方向设置为输入% g  M  |: G  B0 y5 L7 ]: Z
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]% {1 Q7 }4 I  u! V
}
1 F# l4 r4 m* H) D4 s) D) t  {, ^  ]
/****************************************************************************/
3 N- n$ s2 `2 ]/ p; m2 W' ^" h! \/*                                                                          */$ c- w: h/ e' {; d' V( S
/*              PWM 输出波形                                                */
' A8 `  L" ^3 x, [0 M/ q6 c6 T/*                                                                          */
! `9 f* Z! y5 s+ L) F. W/****************************************************************************/% `& j8 I1 ]9 \% p2 N
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
7 i+ j2 g; R. K) G3 |{
9 L: h; L1 q" X( {) H    // 时间基准配置0 J4 D4 S. K6 g' D1 l8 L
    // 时钟配置
( L" ^+ t7 X: }6 H8 `    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
1 Y+ y" u5 y+ Z
& {+ `& e5 {' L9 y# n! d( d    // 配置周期9 }: K" [1 N* X3 h; Q
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,) @/ s: i) u" d! ~7 x
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);, e; O; C; ]. Y" Q/ g$ j
" H# A- [, f* d( y: o7 y+ [6 d7 u: d% x
    // 禁用输入同步信号5 r! m" K" m  V& L5 U
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
+ ^$ T  ]/ R7 I
$ d% {! K9 L( r! z  l# ]# h  b) j    // 禁用输出同步信号; C/ F5 }% E' A, M0 C+ Z* z
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
4 t0 _% b8 `: m3 S2 {4 F% S4 O4 `5 ^* j# i
    // 仿真(DEBUG)模式行为配置0 D' e8 o; ~% I) |  h( C5 T1 E
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
: t8 |" f9 w; X6 \6 s$ I3 g) ]( v' `$ x  P7 e
    // 配置计数比较器子模块/ y2 H8 M  a1 T6 l- f
    // 加载比较器 A 值
  C3 c+ q. }* J( a$ y+ {' M    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
- L) G  v' `4 n, R2 M$ s5 z' V8 g                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' P8 B8 U2 _3 }% m, A' c" h" T7 ]; {: r; x+ x" C; M
    // 加载比较器 B 值* T5 g  k* q7 d
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
: v  R6 A) |% t8 M/ j                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
( i; b5 G* g& l" _1 T3 l. p5 T4 g- ~7 f, E" O' ^
    // 功能限定配置(输出引脚触发方式设定)0 l& S$ ?% l' w% T
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出4 Z  M7 Z9 Q! ~) I
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,4 L" w8 C: u  w8 m, p
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,9 t' k2 u+ O+ H7 B2 ^1 Q1 f: v. S/ D
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
- n* L1 y* i% z/ z  r& I/ a) H/ |7 g
% W6 k  y' ]- j! H; Q, A4 F    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
2 X! A; M6 K" v- _# C8 R3 B! z4 e    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
+ ~4 Z8 }5 b/ I  o1 ]4 D( n) C& d; i5 T( s
    // 禁用斩波子模块: E& F+ G6 s1 f' S  v5 V# `
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);! q* \) C/ X% L8 X
; m2 ?% v! E. [* l( f8 K
    // 禁用错误控制事件
2 i) O9 i& J. J9 {    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
! e5 c5 p6 H) m4 S) s% h, O    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
' J4 q  R8 a1 ~* |' t2 @! s$ c6 s
% h  w2 f" Q2 |    // 事件触发配置
) ?0 q; H3 ?) i- r% Z    // 每三次事件发生产生中断
2 B/ ?; k0 H5 w% H, P    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- T/ G* t8 P; }" z. u0 u    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
$ Y( Y, ?" \! @- J5 ?8 P/ Z& g; _    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
: q; ^" O8 R! L    // 使能中断
. m: H4 H6 G$ O7 s9 m6 U    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
  c- w( _. y: A8 o, `" _( L7 {
: S! u) [% Y$ G+ f6 \5 i3 P  A    // 禁用高精度子模块
) D$ i4 k; i* U" _/ Q    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
; j# _. O) w0 x8 I& R$ {2 X
& d! s9 ]) Z! W! s7 L    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
% F+ {$ j, C! d- ?}
7 `; ?+ g& d# \1 {' m
0 A: R* w  o1 U; c$ R0 L* Z% @void ChopperWaveform(void)" d3 T; i. r, ?7 y- c: V8 @
{
5 T3 W, s- U  h    // 50% 占空比" E! h3 [6 _- X) P& S
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);. k+ Q4 f# v1 g
    // 4 分频
! O! z1 v/ d8 b3 G8 q    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
: j' `/ i% s. u3 y! Z    // 单个脉冲宽度1 }3 o( j, [" w0 s0 M1 v
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
9 E: @$ e/ d' @( r! u1 z    // 使能斩波子模块
2 {0 [! f& v% C0 X# z' f, e" I$ \$ R    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
% R' Z9 E$ }7 T7 q; P}; p3 \+ N6 a6 C3 v8 ^

8 v6 P+ P, c: j  M* ^; m$ H2 U/****************************************************************************/
1 _4 j, r0 a! B' H* Y/*                                                                          */
; u- S9 a1 J9 N  q% L/*              PWM 中断初始化                                              */+ l; q" ?. n$ Z$ ]' b4 _
/*                                                                          */
; A& ]% n5 M/ |. O/****************************************************************************/
# i4 F& K; D& j! ~void PWMInterruptInit(void)
0 B. b& r& O( l* d/ S{6 g! b: h# F  v
        // 注册中断服务函数
) ^5 Q9 h' m$ }  Z8 C$ r        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
0 g  T' ?+ x  d        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
$ L% w, j9 s, P5 h
& D: t9 w$ c: V; g; [* w        // 映射中断
, K3 @2 b7 ?7 ?1 Q% ~: O, b        IntChannelSet(SYS_INT_EHRPWM1, 2);
. s5 N8 L) l7 M4 e        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
& W1 T% O1 ?# g' p- g" V/ k
5 X! @7 U5 z$ [+ T        // 使能中断% p4 \( }2 I5 ~1 p0 q" d5 [
        IntSystemEnable(SYS_INT_EHRPWM1);
& J- e; b+ L, r& j4 Z9 g9 S        IntSystemEnable(SYS_INT_EHRPWM1TZ);
& J7 g, i! E1 Z) _) }0 G}. m/ W9 p* }5 f( U" [

4 q8 d7 j2 o  d# m0 y8 L- a/****************************************************************************/
  n! Y2 f7 k4 L. i1 t/*                                                                          */# p- L. F+ |+ f; u
/*              ARM 中断初始化                                              */
% Z, X  [% C& O, T2 r/*                                                                          */
' R; O4 }4 g6 Q* X/****************************************************************************/
& `2 Q, k% x, u3 k7 u) W. ^void InterruptInit(void)
4 Y1 a3 c( C6 D2 ~{2 B7 b7 G- Q6 O
        // 初始化 ARM 中断控制器
4 d) q8 K! `, ]& }6 i5 ^4 u        IntAINTCInit();
$ o9 A7 `& p3 Z) b/ R9 Q% {* J6 R4 L) k& B" [
        // 使能 IRQ(CPSR)
" t  q+ g; W# e0 J# B; h+ {        IntMasterIRQEnable();
5 k2 Y- L6 ?" P
0 ^) }7 @6 A; p        // 使能中断(AINTC GER)+ K' g' V  u' K' L: k
        IntGlobalEnable();" Y. y; @; {  Z7 V- p
  ]- ^+ T* o' @  w* J
        // 使能中断(AINTC HIER)
- b0 r. b& z5 P! x; O        IntIRQEnable();4 Y! O( I* i1 F7 x  f7 }
}
1 s" ?$ c5 p  P9 i/ W  B- j) w
* H! i# `: O& y  d( \; K. v+ q
作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/6 L) \7 |$ d* L# P. W+ E5 S
/*                                                                          */* i  v, x1 r# [9 r, ]6 d7 m
/*              中断服务函数                                                */
9 y4 s7 r5 v7 z9 Q; f/*                                                                          */5 x, T+ @/ r4 b+ ?' q
/****************************************************************************/
- J0 P+ L& T' r) g1 x; hvoid PWMEventIsr(void)) z$ K' z$ E0 N0 p% a
{1 R' z" w2 ?' i
        IntSystemStatusClear(SYS_INT_EHRPWM1);5 R' q% ^  X. O8 g( x5 E6 G1 R, s

( k! [7 i( H  C4 ~" j/ ^. L    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
- r+ e6 S6 }. u}
4 q2 P) \: y/ [; c: z7 l
+ n- M5 i' y0 ivoid PWMTZIsr(void)! x* p% y. A- U% c: L$ x
{
' E+ L/ w( f3 ^! M% f( V        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
/ C' a; U' T$ B  f: u" e8 e; R$ ~0 I) \& o& y
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);2 e7 _" E, W, X" K' k$ m) P: _
}
, C0 o# r" [1 m6 A5 k" g, U, Y1 R+ t" M5 z
/****************************************************************************/" G+ Q$ \' v% U0 D9 H3 d
/*                                                                          */
! n% C. X6 |' k: m/*              初始化捕获模块                                              */
7 Q: A' q; u: T$ [' Y/*                                                                          */; K* @1 R; j2 m9 }% V4 ~
/****************************************************************************/- S# @1 G, |& W' i% |. R
void ECAPInit(void)- ?. K( ]7 `/ I9 x( s1 _3 r
{
2 p8 U, n% n4 J, V% C8 I        /*-----设置 ECCTL1-----*/9 N9 n8 V( `3 a5 H/ t. ~/ T- }
        // 使能CAP寄存器装载* Z3 p  I: M/ U; }6 s2 i+ u. P
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);& n  U( L3 a: s, k: _
        // 设置预分频值.
* D8 X: ?) b4 p5 K) I$ n% a% w        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);' P" o9 `+ d8 \
        // 上升沿触发捕获事件% W/ z1 g! t- w* r% ~  q7 @. }8 h! W
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
" u( t% z+ w7 {  r8 q        // 输入捕获后重新装载计数器值.- b# ]! Q: Z8 \$ s1 L" ~% _# W+ J
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);- D' K0 o3 T& |. G- z) L
) O) d, i% H$ S7 {( c
        /*-----设置 ECCTL2-----*/, {  X7 K" A' j: H) H6 z
        // 连续模式& H2 @0 _$ ^9 }  G$ ?% E9 V
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);3 D! t7 J' g' H0 ?3 g: F4 r% }& `
        // ECAP计数器TSCTR持续计数: F1 e! V2 k6 d& j0 F# k6 [
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);. |) |3 m. q+ H. v( I
        // 禁用同步输出和同步输入" y+ r3 l$ R2 l9 z( D. {  W* E
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
. ?" ]/ s' ?& r1 D) K' a& R1 w+ I        // 配置 ECAP 2 为 CAPTURE 模式* _2 {; f% A7 Y& A
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
& Z2 L/ [3 ]* H" M, L1 n
, ~9 A( T1 a, b/ P- y) C        // 使能中断6 N) O1 i" T6 U' `
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
/ q9 _* _. Q# L1 Y: M9 k}
) o; p0 ^" B. C  u1 x. o, h3 A" N$ u& e. D
/****************************************************************************/
7 e6 P' \2 I+ q) t, f# X" |4 ^9 F2 X; L/*                                                                          */+ u8 ~( M9 d" a. q: I
/*              取得捕获结果                                                */
: O1 A7 p' G; J; \; h. l: R/*                                                                          */) s* D! y/ k1 b8 a
/****************************************************************************/. p2 {4 t- T. T* g# z4 c
unsigned int ECAPRead(void): W3 K% ?$ _- H% k' A* D) H
{
2 O# M2 ]9 }+ P* Q9 B: `" {        unsigned int capvalue;
5 J- l: C' A8 Z: l        unsigned long frequency;) V' z8 H* J6 J+ H, m0 j% L

$ H* ^6 b' z: A0 K$ p; q' n        // Event1 中断标志0 c- B! W6 t  A% N% }
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))9 h, N+ Q+ c2 G% f6 A2 L
        {
( m7 t  P1 L5 p- a5 ^" p) B                // 取得捕获计数' w4 r0 F$ R( t! ^5 v) r
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);& {4 |8 e$ h( F* e
                capvalue = ECAPResult.cap1;
8 K2 Y/ t3 Z7 J/ H: f2 _( l' \. r( h: n) o' l' G0 m8 g
                // CAPTRUE 模块 228M 时钟主频
0 @8 S% P# S1 S                frequency  =  228000000/capvalue;2 g+ q1 ?+ J8 c& w- l
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);& t' R* J# ?9 ^' E6 i+ w" p# x
7 O: t$ r3 u  n$ k
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
" _" i5 I0 z/ X; ~" G; D/ b//                IntEventClear(SYS_INT_ECAP2);
: ]. i( A" b" u        }& g/ y7 p4 ?0 ~+ P! {& I
        return frequency;8 w% a4 ~1 H! T$ j/ N2 A+ o
}2 i! e, \0 y  A( G8 h8 i  m

作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。4 G; c# z8 A# t! T4 \! g% e, E+ I
[attach]4202[/attach]
作者: 浙江第一帅    时间: 2018-11-1 21:27
可以给我发一份吗
作者: 广州创龙莫工    时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4