嵌入式开发者社区

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

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
3 M7 R: f) `+ O2 T, T) Z- Z
作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/
$ g2 D+ ~  [: i/*                                                                          */
/ u6 `& I! y: M/*              宏定义                                                      */' J" d1 `: D& n
/*                                                                          */8 Y: r4 |5 J8 Q" y' q% M5 [
/****************************************************************************/
( z5 g. A4 P, B( c$ w9 [// 软件断点* p7 D" g5 J5 d9 K4 N, z
#define SW_BREAKPOINT     asm(" SWBP 0 ");4 ~7 j4 b' m8 s/ A# Y  n$ H
% g8 l& R" A0 q; q+ |# r" M
// 时钟分频
5 B) ~, `2 d) S. m: ~2 j#define CLOCK_DIV_VAL     228
( x; ~: ]0 y; C* M
8 E3 x7 d) \( H- F/****************************************************************************/
+ i. m2 V2 I% ^$ K- H/ G1 g/*                                                                          */
) `3 @7 p7 `! j' l0 e/*              全局变量                                                    */; N% n' p; ?0 o+ T& _1 L
/*                                                                          */
% }: Y: P0 J  T9 \" v% k/****************************************************************************/
# w: m0 I# ]3 C: iECAPCONTEXT ECAPResult;+ v) u3 U. P- Q0 m
$ D2 |0 d. r: S4 Z6 P
/****************************************************************************/9 w6 F5 s7 j& `0 V; B
/*                                                                          */+ b+ h* N# m" K7 j
/*              函数声明                                                    */( Q" A' L: g: M' m0 P, A* |9 N
/*                                                                          */
6 w9 j9 I3 A% c. }4 z6 v/****************************************************************************/* Z" t) m- @; K& T) `
// 外设使能配置
' t2 k. f) o6 x1 _void PSCInit(void);
* e) @5 w9 ^6 [8 I6 j% O9 K3 f
* ?* L7 a9 ^5 ]5 l! p// GPIO 管脚复用配置' J5 |9 b7 M( u' y6 d
void GPIOBankPinMuxSet();
/ C) D4 C+ [, ^0 \
# ?. `1 ^4 P4 Y' N: V4 t// 产生波形1 _( N% D. c3 C. x# D
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);" R0 z* Q" S# f0 F9 O
void ChopperWaveform(void);
( m8 v2 c  i$ d, C& o' G! d: H
6 E  O) m3 D- D4 ]// ECAP初始化和读函数
% }  |, I1 Z7 qvoid ECAPInit(void);" @& B8 T5 G  m/ Y: ^5 p5 S+ q
unsigned int ECAPRead(void);
5 _2 t1 t8 P2 w  N! M* P5 ^! ]' H: ?  B
//ARM 中断初始化
0 F; }2 p! K& }: a5 e, R% \( z6 ^void InterruptInit(void);! ]8 s6 o1 c/ e  [" ?
3 z8 H! E; ?. }) }5 n) F$ W
// PWM 中断初始化& S( I1 y8 N7 [. }" i0 C
void PWMInterruptInit(void);
& y8 V5 ~" a9 c0 t// 中断服务函数3 T$ {. o) i! q+ G. o2 D4 ]' X! h
// PWM 事件
# r7 X+ {# o2 U3 z! i2 }void PWMEventIsr(void);4 m+ m* v$ h& u. i) f4 v: ~
// PWM 错误控制事件
3 D& O! Q2 s. o: T3 l; v) gvoid PWMTZIsr(void);
$ Y6 C- `2 X* H: D- ^6 k2 Y+ C6 d2 J  L+ _
/****************************************************************************/1 }- r+ {1 \8 k" v: W% Q" T0 |
/*                                                                          */
( X) T4 N5 u- y/ P* m5 D/*              主函数                                                      */0 A3 N+ B) m+ u. d: |" L" _. M/ J
/*                                                                          */3 {: b! a- _* V
/****************************************************************************/' ^( H) b& ]2 t+ B' X. G% g. X
int main(void)
( z1 J" }5 \( T' W7 k{
8 N7 P- o+ P4 M! X; N  o        // 外设使能配置: x- o. T1 F- M, A* I0 _4 B0 c
        PSCInit();
% O" w2 W! {+ o$ W3 z
" }& D! v7 z/ }. y; A9 T: t% V        // 初始化串口终端 使用串口2
& u2 a9 d$ Z4 r6 J        UARTStdioInit();
6 b$ X- w! [; V        6 F( x+ q, ^; r8 }3 S" G* b; [" c
        // GPIO 管脚复用配置2 t! V. A7 d8 P
        GPIOBankPinMuxSet();4 \6 y9 f- [# g: D3 |
: z% I) W4 T9 o% U& E! k
        // ARM 中断初始化
  I( Y: R/ Q. W6 p        InterruptInit();* d8 L- b$ E9 P' m% H
! y( Y0 h$ I: D( C7 `$ f
        // PWM 中断初始化1 M) e- X- z4 q
        PWMInterruptInit();
; P& f$ o# {. G( r6 h7 g) ?% m3 G1 `5 D) b* g! ^+ h' w
        unsigned char i;
6 I, C8 ~7 k3 A+ [  G7 \3 N" S+ E        unsigned int j;
# i6 B) l, V/ P; }
& c' x, }( l1 x. C: j8 t$ F        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 Y5 k# A: T' w" g6 K        UARTPuts("------------------------------------------------------------\r\n", -1);% [  o# ]( [7 x4 {4 G, `- y2 u
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);: T7 U! k+ C! V. B! c' z$ N0 a; ~" C
        // 产生波形& i! F7 V& ^2 e9 @8 p! P
        PWM1ABasic(25000,50);; Y( z' b- g: m% W
& y6 j( l  G! h6 F! _
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);& l5 a( B* h! @* T- c4 e. l7 k# E
        UARTPuts("------------------------------------------------------------\r\n", -1);
% W+ a2 ?2 D& E, L2 h
) \7 u5 o5 z  \& C& Q/ N4 {# j) I2 V; |4 `4 c, @: [% e4 q7 S
1 q: A. w2 W: g* U8 |) e
        UARTPuts("------------------------------------------------------------\r\n", -1);
) z9 l' J0 k$ u& Q6 [: S7 i        UARTPuts("                    C6748 ECAP Test\r\n", -1);9 |) F- m% R9 C1 F, O
        // ECAP 捕获初始化! J. B% `: ]1 p/ A8 |" q. e
        ECAPInit();0 ]1 }% K1 b1 Y& h2 K" ]
        UARTPuts("Initialize ECAP.......\r\n",-1);2 P4 r' T+ h  Y3 ?7 x0 [
        for(i=0;i<5;i++)
; G" Z2 ]) r" s) d$ c        {
5 k9 S5 f8 l5 X3 p% ~$ c                    for(j=0x00FFFFFF;j>0;j--);            // 延时7 R: ?, I1 E2 F( q( L1 G7 ~- a  {
                    ECAPRead();
0 Q) F) G& }  n5 O- X% ^6 x& b( Q- l        }3 e3 l- X! I0 ~! x
        UARTPuts("\r\n",-1);
% J( @9 u: `8 Z# b2 _; R        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
; D1 M6 b. V/ M* R2 C6 W8 l7 z        UARTPuts("------------------------------------------------------------\r\n", -1);# a  t  s4 E( [

4 ?+ o, k8 c2 R- b  T$ \        // 主循环- Q1 _* v8 ~' r' C& u
        for(;;)# [( _0 ^" o9 Q; l9 K
        {. t0 r/ U* r- I$ n2 k9 z1 Z& O

2 }5 S+ O" |0 i6 z' t        }
  A$ a5 W9 b; x, C8 m7 d9 s}
7 O4 `/ ^, Q- t3 P1 d6 A4 d
/ n% y9 `- {9 g8 F4 N& P* j/****************************************************************************/
6 A  @9 a( Q' G' J  b0 E# N6 X/*                                                                          */
* B: W$ ~0 H. E+ r8 R# d/*              PSC 初始化                                                  */
* I1 u5 a9 T3 S1 r# M- f/*                                                                          *// h* B" d: s4 ~. p6 \
/****************************************************************************/
2 o, T. F3 V8 V2 gvoid PSCInit(void)
- V7 T6 W0 K8 s* J{% t: T% H. \1 s4 }3 D: q' z
        // 使能  EHRPWM 和 ECAP 模块
; n  G1 c: L5 ~; L* D3 q        // 对相应外设模块的使能也可以在 BootLoader 中完成% _* d) ~/ C! [) g3 U
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);* {# c6 X) m% b* \' V4 L
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);* D/ ~; {1 k4 O8 [5 H/ M
}* C! c' ]5 B/ c1 I

) O! ~6 n7 x: i: {1 N; V1 u2 U/****************************************************************************/, q7 s. N, a! S; Z+ L2 ~$ b* U
/*                                                                          */
* W+ o* U( r" q2 o3 j; ?, S/*              GPIO 管脚复用配置                                           */
- E8 }/ }9 ?; F0 @/*                                                                          */0 h9 S) w' C, k
/****************************************************************************/
1 j2 P( s' s9 v: {* v) H" Vvoid GPIOBankPinMuxSet(void)
8 }, R, S" z9 b( |% ~7 J{3 R. b2 E/ [( a1 {& ~
        EHRPWM1PinMuxSetup();
' A4 p  x4 G* k1 x: m$ R5 g6 `) d7 t, C: x: T
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
- V3 A: s% t* s! K* D        // 作为捕获功能时管脚方向为输入" F% \7 a% v4 s
        // 作为辅助脉宽调制时管脚方向为输出
  ^' n" f; m- r    // ECAP2 / APWM2
& w2 ~; ^; t1 \$ G% `        ECAPPinMuxSetup(2);
# n7 [1 u) Y" \) y
3 L; G$ o1 ^. _9 M7 C  @$ R7 v! b        // ECAP2 / APWM2方向设置为输入. e; g- }' L6 P& w4 S
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
- G- `6 }: y, z7 w, M) S}
% Z' t, `; i8 M8 Q6 n  C
( V; {8 |8 e0 J/ c( m) ^/****************************************************************************/
" q' i# e% J( ^2 I/ t1 y/*                                                                          */
0 d7 p2 g# ?' O# D# l- a1 V% R/*              PWM 输出波形                                                */
' t( [- }) e& T" o  T. H2 C/*                                                                          */
6 X: I1 t- r( y$ h, i: ^/****************************************************************************/  m6 x  Q6 t, T% Z
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)  f1 g9 G/ V# U3 s+ n# n
{) F8 Q8 h' K2 C/ J" r9 F
    // 时间基准配置
" @5 k1 w6 V( l9 ]    // 时钟配置
# c% i' `- [; m' T2 n    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);7 y1 c4 h( _! v4 L& }
: G* I: X! E2 }' C: R! T
    // 配置周期$ ]7 K7 C) ^& E% R. A
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
3 |6 w# ^. }7 j# x* v+ W9 d7 y                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);: l* p& x# a% R2 o# F. ~6 j' m

9 `0 P+ [  H# A! l" q" a" a    // 禁用输入同步信号, W' A/ h' }7 N4 I3 |1 d
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
0 K7 D4 H+ u( c# D5 r7 _% d
* f) U( G: B  S! V( W1 D+ d    // 禁用输出同步信号$ m; `& I* d6 l
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
* k4 B7 v) B7 }  N4 L3 M' q2 M" K) V2 |$ b; ]  R# \
    // 仿真(DEBUG)模式行为配置" U7 f) M1 q7 q2 R
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);1 i6 L# ~( t; |

; ]: b$ Y; i: f5 d3 b( O* H0 `    // 配置计数比较器子模块
  E: u+ N5 O8 D/ Y    // 加载比较器 A 值
3 E. c* B$ ~7 g9 j& g    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
, f6 P0 u! Y' @1 k) {  u' {1 O" k8 L/ l                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) r/ z4 k+ P$ ^0 U4 K4 E2 G
- F3 N/ ?  ^5 q9 s* Y0 u5 m    // 加载比较器 B 值
0 g  p1 H3 q' o    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
3 s6 }: u' h1 ~6 v6 U* O1 P                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);" ?) l% W: s% g- w; y$ L

( p& [/ V( m7 s# |& ?    // 功能限定配置(输出引脚触发方式设定)) ?8 ^/ o0 F; g* N$ g
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
+ r, \/ w. L1 k) P3 I$ w# m, ^    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,2 r& i0 M. F. L8 z; p% B
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,2 ~: D% g6 P1 R8 S
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);& ]; }6 g( n. y: \$ Y* \% @5 ^; ~, K
8 p% S' {1 A3 {
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块+ K% F5 `! \7 s8 G
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
1 A$ q: t9 \9 e
* f: {1 e7 l$ |9 W* a) L    // 禁用斩波子模块
9 J* s  I2 y2 s0 L# ?! @+ B    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);4 ]5 L- S6 D. m% W9 K& W
& E. C& Z/ o/ N  E$ Z* f
    // 禁用错误控制事件. k2 {5 f: m& Q% ?! f
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 g& d! L- e. Q' R# l
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
- |6 H! h2 w( |/ H) ]+ S0 q8 C
/ T' C1 U* L# N8 I" q# x    // 事件触发配置2 I7 K! K4 i  }- d0 w4 i: S  h) G' q
    // 每三次事件发生产生中断8 j! C& A8 E8 V, i1 L
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);! M/ r, D$ R& M
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
7 k; V% M' M( A. H* ^8 e+ w9 g, w    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
3 `8 z7 Q( l: ~4 n7 p1 t& o    // 使能中断
) L& Z8 A$ Q. J" i/ t    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
7 O' S  W& g' E' \' S7 i7 ?" o; n" C! {7 @; r' s
    // 禁用高精度子模块2 l) X3 P0 D9 T  j5 R
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
" Q5 F0 T! u# J  i/ F) W3 V- i( \2 c0 B/ L7 I) [% }
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
* [( h2 i2 v, M) z}! M4 h0 K1 G, C5 a
; K' ]/ t+ t( l
void ChopperWaveform(void)
) r1 o" I, ?; q  e: Q3 [{( Q7 H: S% W+ c- }  S& {
    // 50% 占空比
( M  e; y7 o; B" ?' n3 w    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);1 D3 m% p$ ]7 O1 |
    // 4 分频
2 Y' q4 B2 U5 r# G% }# P+ y" H, u    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
! B# X+ D% z! n+ L' O. Q! Z    // 单个脉冲宽度0 h+ a/ l4 ?! c7 p
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);  T5 c' T- _  \6 w
    // 使能斩波子模块
* X* b: J8 E+ Z: E% j$ a    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);- H/ f, x, J; Y/ i8 \& n! @3 N
}* T$ q( F: x: S# Z+ ~+ T2 Y
, I  Y1 m7 ^$ x  R7 ~
/****************************************************************************/
, Y* A4 O' W- j$ @! c: l/ F$ f8 U/*                                                                          */
  o$ A/ \2 d* ]  V. u0 A# C  I+ Y; n/*              PWM 中断初始化                                              */( V$ }( R# V) w
/*                                                                          */
1 H8 c1 Y$ \# w4 J/****************************************************************************/7 X$ z8 P% e5 a/ w
void PWMInterruptInit(void)6 E3 h" N5 q* Q  h$ N: O
{0 v* L' e8 `# e; F$ U
        // 注册中断服务函数, N% i! P, B+ H/ B9 q0 m/ C$ r
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);  k5 Z' b# C! s" ^, W2 Z
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
$ x. v- K2 g0 x; m
& T5 i2 ?* }1 X, v: e& d1 \% V        // 映射中断5 Q5 y* g. E7 ~9 u' s/ b' Q. m
        IntChannelSet(SYS_INT_EHRPWM1, 2);# m7 j9 r" |9 x1 U6 N: h
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);+ m2 l' d& ?5 Q( Z# h

6 x6 X9 D7 _, D4 R        // 使能中断4 d6 D1 K7 y& t' s1 P0 |6 b
        IntSystemEnable(SYS_INT_EHRPWM1);1 D0 T1 h5 Z5 R7 E: x3 z
        IntSystemEnable(SYS_INT_EHRPWM1TZ);6 W9 X  e- i( e  R
}$ J7 H3 Q- v  k/ ~

  j- ]. N$ o$ {4 R% X0 h0 D/****************************************************************************/
( K  P" p- l( R4 M+ }/*                                                                          */
! y- N: ]# p- q4 R( v, J/*              ARM 中断初始化                                              */
7 t4 |4 }/ b( U0 H7 G' j4 f/*                                                                          */
' y; }$ O0 N2 p$ T8 M/****************************************************************************/
- B& V! s$ d* a4 tvoid InterruptInit(void)& _. s  y& |) b7 w+ m: @0 b
{# m' X2 d& |% _8 T! [
        // 初始化 ARM 中断控制器
$ q- n6 R/ r! Q* O/ q        IntAINTCInit();
* e: q2 W4 c4 W' t# e7 c% [) f! Y$ v2 K' G, B7 N* q
        // 使能 IRQ(CPSR)
% }$ x7 {1 |5 G5 f  l, ~& [* N' J: N        IntMasterIRQEnable();3 \  L, t8 f9 a& T
# R* a3 j9 x& U" x5 q9 l$ V
        // 使能中断(AINTC GER)
: I: t" }7 }1 A7 m        IntGlobalEnable();* }3 x  ?" e, Q6 {( o
+ g4 l% b3 a  |# D; R
        // 使能中断(AINTC HIER)
& S  l% q0 j& h        IntIRQEnable();
0 P0 M5 G9 \8 q7 |( F2 |8 [}  F' D6 c+ W% M  B! W
  J; ?  ]2 D+ P8 i

作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/
( L! R! D! }! k% E3 `( R* e/*                                                                          */
3 {. o! H& f, ~# }1 z/*              中断服务函数                                                */. |  p  I# l4 l  T
/*                                                                          */
& z% Z6 ^" j7 h$ {/****************************************************************************/. G  K, `7 o: v' k% q
void PWMEventIsr(void)( U+ B5 \/ G+ I) J6 t! ^7 \+ X
{" W, {( [( T, a* e) w- f
        IntSystemStatusClear(SYS_INT_EHRPWM1);$ @$ M( w9 C: j* F8 O$ I" Y( q
& \) s# Q$ R' u) m( G! W& b
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
% s" d. w' y4 S& Y6 R}
0 n# {$ P/ ~) H" U( h7 L
2 P8 t' H4 V" d8 @' d7 ?% Mvoid PWMTZIsr(void)( d2 E. \: k3 \
{$ S, n: Q! ^/ X3 [9 A  s
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);! S) l& I7 Y: Z3 Q4 p9 o1 B( _
+ q4 h# ^( l( Z- ?1 F! Y
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
: D  U9 I# b  y4 q/ U}# z; ?# h5 m2 x* b1 B

! g* w, C% S+ Z& G' |7 W/****************************************************************************/* Q& e2 I% w) ~( y
/*                                                                          */
2 S' h! t- X- Y" U/*              初始化捕获模块                                              */* ]2 G0 X0 G" R- J
/*                                                                          */
; Q" |7 O0 n/ E& F6 c4 O/****************************************************************************/
  K/ l# A* ~1 O! `void ECAPInit(void)- }! q8 _6 N* q) p4 F; [2 V
{
& e6 A2 ], H# g- ]  o2 F1 B5 t        /*-----设置 ECCTL1-----*/
2 A$ D) u: N7 d# c0 D        // 使能CAP寄存器装载
; S  w# Q8 {& @3 F% n8 ^0 R        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);% S( ^: S6 X& ~
        // 设置预分频值.; {: h( {4 d$ H, W
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);& ?  g, H# R# L- F1 l3 d: H8 z7 s
        // 上升沿触发捕获事件
( T! E# \/ c  J        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);% b% |, k7 t: R" n, J2 v
        // 输入捕获后重新装载计数器值.
& X$ J% c9 c" q. Y        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);/ Q# i" L: d# |/ r  b% a
* f5 `# Y  B% ^5 y1 P
        /*-----设置 ECCTL2-----*/
* Y4 }6 L3 R8 T% J        // 连续模式
2 X  g% I0 l) u        ECAPContinousModeConfig(SOC_ECAP_2_REGS);  S6 N, f* v! @3 C$ D
        // ECAP计数器TSCTR持续计数
: {6 [% Z8 A3 s+ b* q        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
6 Z' c+ C) a, W, M4 {        // 禁用同步输出和同步输入
- h. v( M+ q, ]' }: O. a9 }& q& r6 i9 b7 d        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);8 S: o  k7 d% q/ O  e* E. E
        // 配置 ECAP 2 为 CAPTURE 模式# e' h# f, b- `; K
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);# `5 P4 h0 P( Y- d$ Q% [
* r5 V! G" E( K- S% x9 B0 s( c
        // 使能中断
& a7 M: s7 Y6 a: W3 U& ^: G//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);2 P9 [/ G) x$ q& c( F; J% s
}
! s$ @3 ?" ?/ D7 ], b1 b, |( _% J7 h1 w6 `0 `
/****************************************************************************/. t0 V0 J4 V  L  F. f
/*                                                                          */* A: Y' w9 I3 f1 u* K. v9 z
/*              取得捕获结果                                                */  i8 e& p9 S  J( o, _  X
/*                                                                          */
) S* J, ]' h# p  Z3 H! j1 @/****************************************************************************/
: ?% j0 |$ o7 ?$ k! M. U8 c" \+ Sunsigned int ECAPRead(void)
/ r9 c: f+ s% t/ Z2 i2 A{
% K! l  z* [+ N0 j  O# \$ m% I        unsigned int capvalue;
5 m: o" |9 H+ I- v; I3 V6 W% e2 L        unsigned long frequency;  b4 V4 \  L0 P' A! U
( H5 l$ g8 M4 Z) Y3 I
        // Event1 中断标志9 j) B9 i+ z6 ^! b; W6 Z
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))2 u1 u  m1 L* ^/ X' [  F
        {0 Y1 t& |- W! [
                // 取得捕获计数/ M* e2 t' e* M9 R
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
( A2 \% ], s) Y8 R5 y0 |                capvalue = ECAPResult.cap1;
+ T7 j1 D% {( `8 z/ ?4 d7 E$ C, c9 V, _: }% j
                // CAPTRUE 模块 228M 时钟主频" Q, [8 o( O7 y) a1 B
                frequency  =  228000000/capvalue;
' ^$ w0 ~) u4 S                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);" I- M; R; Y  b# ?& X# ]3 J: ]5 u

7 B; }9 R. C# O" M/ J6 a                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);6 `$ G1 p0 H5 {9 W
//                IntEventClear(SYS_INT_ECAP2);
' t2 N& c) p4 V& k6 Y& f' Y. M( \        }
+ d7 [' B" S1 {% n        return frequency;/ e/ d6 r8 l. S, `) B- |5 _) y
}
# M1 L6 |* b4 i! o7 _- h- I( {
作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。% V0 j! \1 k+ I0 l' l( {6 R  N0 w
[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