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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/5 z! r) a8 e! _* R" i3 ^
/*                                                                          */% L) N% N+ Y: x! _7 m5 U
/*              宏定义                                                      */
% P& c1 Z! Y6 N0 K+ L/*                                                                          */
& ]5 Q  f" v- u7 ]- g% h- t/ g/****************************************************************************/; Z$ m8 }  u* w" B9 {3 p  a
// 软件断点  [8 `) K% \- v  e& F
#define SW_BREAKPOINT     asm(" SWBP 0 ");
# c/ C3 h1 J+ H3 g  B
) `! P8 v8 J* p* p8 `  ~1 y2 U// 时钟分频
( G: T! J! o  L* j#define CLOCK_DIV_VAL     228  u/ z0 k6 F2 p1 x' D
" |8 y( _6 W3 @) R  \2 c
/****************************************************************************/
2 Y* s  n- o6 {. i) R3 }% Z  f/*                                                                          */; M! w% r. X, p: ^0 T' `' J5 r2 ?  F
/*              全局变量                                                    */
, L* a7 K+ L( N/*                                                                          */4 ^3 d% O# I1 J  L. m( `; @
/****************************************************************************/
( X: S4 Q" x' I6 fECAPCONTEXT ECAPResult;
! `; z/ G: F8 R8 u! ~# {
1 ?$ j* ?' ]/ A+ }( v8 _/****************************************************************************/
" I0 T4 i6 T' [+ @/*                                                                          */* [/ X% a$ J# o! V
/*              函数声明                                                    */2 O- {/ r3 U8 G. @( W  _# H
/*                                                                          */- }; I: T/ j1 c( x- o
/****************************************************************************/3 [9 x  s: z) Y. ~) O3 ~
// 外设使能配置
2 `% y, l6 T+ O9 z2 A1 j' |void PSCInit(void);4 _) q  W& o( U4 T5 [

5 V7 A$ M6 O1 e+ b// GPIO 管脚复用配置
+ G+ }# m9 Q; @) G* v3 ?void GPIOBankPinMuxSet();
8 N8 o5 h# |  O- u
9 e: E* t% A5 D4 m1 G  J// 产生波形
) X- z4 k& f: o" I) Svoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);( Z( Y. y, i1 x" C
void ChopperWaveform(void);
+ L% s! S( D. Q2 r, c- y0 c, n, e. k
// ECAP初始化和读函数
. N% @+ u% e5 S) r+ Dvoid ECAPInit(void);
# a4 }, V0 m& b+ D- yunsigned int ECAPRead(void);8 _+ T5 |* W6 Q1 e% a+ L9 |; \# S1 J

! W5 H: s& ]4 q& v: r/ f//ARM 中断初始化
( b. Q, s1 ^" o/ N7 P- @void InterruptInit(void);( Q- X- V  f* W+ g/ @* ]

9 |! }' t  W) @+ c// PWM 中断初始化
" k7 g# r2 W! u' r7 |void PWMInterruptInit(void);- j; [; H( `7 a2 ^& j( A7 V
// 中断服务函数, U* \/ V- K: [! f5 A
// PWM 事件
$ ^* x. Z9 g$ c: k- y4 gvoid PWMEventIsr(void);' U4 H  C+ }+ X& i1 Z
// PWM 错误控制事件# Q' u' M& G) ]( |; W4 [
void PWMTZIsr(void);
, n* b/ y7 ]* Y  s  c: S! Z! W% d, r$ m3 n- E
/****************************************************************************/2 k" {' t7 ]# h( f* k# S
/*                                                                          */' O! S, t6 [$ o* x1 M5 E
/*              主函数                                                      */
* K& J+ _+ x1 y/*                                                                          */
# P' s: n5 C# y, }/****************************************************************************/7 J# W+ s2 A2 l7 z0 B( t
int main(void)
; t" `3 z# x" L, B{- {8 O4 k) ]. j% Q2 D1 H
        // 外设使能配置
# O9 G9 F  q1 N9 ~7 [* b        PSCInit();/ ]6 p# I( Z7 ]" K' _
9 v& K+ R- w; f' j6 o
        // 初始化串口终端 使用串口2
( \, Q, Y1 D2 E0 x        UARTStdioInit();4 m5 y; @& A. m3 G6 f) U) S
        * N, o( W( w; N) V- [/ Z' J# l
        // GPIO 管脚复用配置1 O3 M4 f3 P8 t6 F+ Q: _" X
        GPIOBankPinMuxSet();
/ Z8 ^& l- v* F# X! {  v$ K/ W! X  v9 c3 B
        // ARM 中断初始化7 ~' C' w. `* B
        InterruptInit();3 ~! y, J1 m* t$ J
& T/ T8 P* ?9 E, G
        // PWM 中断初始化
* j2 g1 X0 y5 c( r2 x. F) ~        PWMInterruptInit();
' S8 O/ @: Z5 c# G0 A
" P5 `9 X9 y2 N5 `% R        unsigned char i;+ \& K* r" m: d/ X9 P
        unsigned int j;
8 v0 [& o; F% l( X" _! U' ]6 u; j2 \: M( e( z3 k
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);* a* v7 U7 b5 h- m( I) @
        UARTPuts("------------------------------------------------------------\r\n", -1);
. b9 `' A0 Y! ^2 l3 B5 e& ~        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
+ z5 _- S$ w3 m6 N1 B4 B/ ~        // 产生波形* j5 q; p, M* I7 l! w& ^$ e
        PWM1ABasic(25000,50);+ P, a) B2 J, f2 H5 S

$ I7 Q9 @2 p* g- ]: d, f3 I        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
% C; t* K3 u, ~. D; s. a        UARTPuts("------------------------------------------------------------\r\n", -1);
: ]' H9 V: k/ ^5 `' ^9 L$ D- _9 o. L; |, t9 }) t

0 H1 m+ K5 ~5 a1 V# T* Z# N* J8 C
3 Y! ^8 R& e$ c9 p" u8 u' U+ L- V        UARTPuts("------------------------------------------------------------\r\n", -1);
" r) `# i8 K, x* ]/ x9 z        UARTPuts("                    C6748 ECAP Test\r\n", -1);
. Z, y! }  n( U        // ECAP 捕获初始化; {' O! V8 g* x9 R. @
        ECAPInit();
4 x! o. m. L# k        UARTPuts("Initialize ECAP.......\r\n",-1);
" G1 Z; m. i/ _2 f+ I        for(i=0;i<5;i++)( h' F7 \4 E- C
        {
2 B; Q& w/ ~5 y. q7 ~' e                    for(j=0x00FFFFFF;j>0;j--);            // 延时4 b6 L& e. s, a1 J
                    ECAPRead();
- G8 J+ U! a9 K  E# h        }
; K( H, H9 z) @. a        UARTPuts("\r\n",-1);% [1 W0 Z' F7 g6 J0 P! M2 y
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
" s% o' S6 z$ \4 C. n* G- p        UARTPuts("------------------------------------------------------------\r\n", -1);+ V! A: x) }) H5 e  g: ^

) H2 p# F1 ?/ p2 A/ F3 w0 \8 x3 }6 ^: W7 Q        // 主循环
6 c7 X& Z0 a3 I2 e        for(;;)6 r* A1 I* N* S" ]" i
        {
+ P! d8 _' r/ a2 l: ]4 Z& m% C' U8 Z# u
        }
3 W. R3 ^- ?# |! h2 L}
( d6 a% y! i6 R" O  y, o* L" O4 U- C* S/ o2 e  X6 _3 Z
/****************************************************************************/
% w9 g5 F: L, M6 a: r/*                                                                          */
7 m# O' e! P) B: f) Y7 h0 l* F3 U/*              PSC 初始化                                                  *// U% h  f. l: }. }, V$ l
/*                                                                          */2 ^/ R1 r% Y2 u4 Z. s4 C# h
/****************************************************************************/- o: z1 A9 C6 S  C* t0 T, E
void PSCInit(void)
8 x7 H" h- g6 y. P. @{
9 R; ]9 g' j7 s0 y8 p        // 使能  EHRPWM 和 ECAP 模块
1 n! J  |6 x4 i; b  S* G7 e) X        // 对相应外设模块的使能也可以在 BootLoader 中完成8 F$ W: `1 ^% K: L3 {. H, F
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
, \5 p7 b9 {$ U9 t' [    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. v/ c- z! y$ f9 M+ X}
+ I/ M- Z$ W! K0 H7 U3 d
. t. G+ x# J2 O, M4 k3 z, F. w7 t0 y5 K/****************************************************************************// I7 k- Y4 L$ w! ?! l
/*                                                                          */9 B5 D' V& l/ V. |3 q5 O) f
/*              GPIO 管脚复用配置                                           */" u( r# G8 I0 o  f7 R' c: m, }
/*                                                                          */
0 C* _* L4 i; \7 V( B0 Y6 s/****************************************************************************/& ]) o/ Z" _' v
void GPIOBankPinMuxSet(void)! ?1 F) X' a( T( q
{0 U& D3 z! B( U7 k" r
        EHRPWM1PinMuxSetup();
, ?7 }1 v2 Q" l* R/ P+ `8 Z
5 i. i6 n& G, n# m$ c% H        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)9 A: a5 ^- X& ^' Z
        // 作为捕获功能时管脚方向为输入
6 i' R  P6 e# o) h9 U: w7 [1 @9 S        // 作为辅助脉宽调制时管脚方向为输出
; c- k+ s4 a9 i# L0 E    // ECAP2 / APWM2# H  N0 R4 {- C. A7 f; b
        ECAPPinMuxSetup(2);
0 u% {3 w! D" V. ]
* b  S6 G: A; H) R* l        // ECAP2 / APWM2方向设置为输入
  m/ M; P8 P+ v# r+ F1 V: Y        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]6 ~' b; a2 R( E
}
  \2 q, {: w8 ]$ c9 N7 ~5 |+ S, z  M0 _# F; ^& A
/****************************************************************************/8 |4 d' O8 X% m2 M
/*                                                                          */3 O* y1 ]' @# W, U5 B
/*              PWM 输出波形                                                */
0 A' V3 m3 c5 S% _5 a+ }/*                                                                          */
3 G7 S0 d& ]6 Z7 F1 v/****************************************************************************/
% b( c7 p8 Q% O/ L4 Mvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
) M3 X: E* o9 J. x9 V% {{' n) s/ [" Z+ j) W$ _" E, y2 N
    // 时间基准配置
* F" y% ?" O2 K$ ~+ |3 t    // 时钟配置( a+ [7 T3 z& ~- k
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
+ S- R4 {# G$ n/ I& b. Y6 o
' p/ \: x4 r  I    // 配置周期
. ?5 x) c& B! L+ {2 A3 S3 {    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,7 s6 Y, M0 S  i  A
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);& G8 |( {% Z  t2 T! S
( r& I% X& F4 v) T( M6 B
    // 禁用输入同步信号$ w/ i) |/ w, i2 E2 s3 e
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
; H- U# [# M4 }/ k8 Z% F6 Q- k& L
    // 禁用输出同步信号
2 b3 J" v4 D1 ?    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
8 s" A; f* X- P. T- M5 |5 j
: n9 @0 E% h" x" i7 a8 g1 C/ B    // 仿真(DEBUG)模式行为配置# B6 v1 P# S; y% i
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
1 W* `: @! Q* {% c/ z# s2 z: ^2 W  o
    // 配置计数比较器子模块+ S0 H. f* E. M) z' j  ]" I
    // 加载比较器 A 值- v4 S1 G6 J6 J; t5 |
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
) S. e  n! Y0 i5 D2 _7 h                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
0 ^8 [" A/ |: _, k" ^- Y+ Y# I& D0 }" ~2 o$ h/ ?
    // 加载比较器 B 值% j, c8 p9 F8 \
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,2 Q1 ~6 w& P7 A+ u5 V" @
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);( b' M  \) ]+ v; M2 e

" G8 ^7 ^1 s' l; c9 D3 Q( t! r% c    // 功能限定配置(输出引脚触发方式设定), m4 W; m" l, K. D0 ~: x; s9 a9 E
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出& M& Y0 [4 J, }" O0 q
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,7 }3 `9 c- M" H! x, |+ o
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,# w/ r" s- x! w: N+ {- r
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);6 |' [# D& Z* F+ K

1 k: c$ @3 z. D3 S) |6 V    // 禁用(旁路,信号直接输出到斩波子模块)死区模块& U3 o& `* z% _, `- W$ k
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
* Y! N" }2 F1 g" B  o7 y" `5 [0 ~' o9 A# l9 N
    // 禁用斩波子模块
# S7 K' }! `! L; H    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);. J( P# R4 k- n2 O" U' Y

7 T: B# g/ V5 L9 F9 y    // 禁用错误控制事件
" z% _  v3 Z$ {: q    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
0 \2 |4 f9 y) g8 \" ~( q    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);; z& o  X7 _/ |) y8 {7 D
8 w4 Y5 ^: g8 {7 p, }
    // 事件触发配置9 F1 R& K  a$ I3 i
    // 每三次事件发生产生中断% t; Z# P: ^) a4 i. v
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
( _+ {6 X6 K4 |5 e- |0 ^    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
) A, E2 x/ H7 A, U) z, O  U    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
  U) a; V  H* r3 R' V- x    // 使能中断- ^  \- r8 b, h8 Z, P9 P5 `
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);) D& m7 |* D9 x6 D

; c  k* m7 g+ ?6 ^8 m    // 禁用高精度子模块: N6 l% Q6 m$ a" E  o4 g+ ^' Z
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
% G8 m' c# s  l/ `" ^
. R- g/ ]1 i# _7 v+ L    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);4 W! A- `4 m- C, p0 }( Z  u* y
}3 Q2 P6 }% r* p4 `& S5 G

6 Y6 i) k& g5 S3 d3 [void ChopperWaveform(void); v. J; }7 @- {) N0 P
{
2 f4 x9 [* h7 u- `* R    // 50% 占空比
, q& `. D* p4 F: @2 L5 N0 C    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
4 d- ^3 W# t: \) l/ }: v9 e    // 4 分频- E- H7 z# m# |3 ?6 _  E) o: s' Z8 m
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
7 r" q8 i, E3 D0 A7 R! m) N6 J- S    // 单个脉冲宽度9 i. \# C# K) Q0 y1 q5 v
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
2 k% g: u" y/ T    // 使能斩波子模块
5 p/ c4 ]) R$ A; ?    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);' n8 D/ S( d. P% t* j* L
}
4 f9 e2 J" p; B4 N: ~5 ]3 ^/ U: G& {3 S1 q
/****************************************************************************/
7 L3 J4 r' k! J# j+ l4 T/*                                                                          */6 v  v  Y/ Z9 e( n) z8 w9 W) w/ E
/*              PWM 中断初始化                                              */' T' s; r) D, u7 g" a$ F4 Y- v
/*                                                                          */; ?. m5 N1 C8 p6 R9 `
/****************************************************************************/0 a/ i9 J, u4 V' O( O- o
void PWMInterruptInit(void)
  k4 W; e8 b+ ^, l{0 z5 [9 K; Y/ T0 b0 M
        // 注册中断服务函数/ }7 s3 w( {6 `4 c$ @: V
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);. b9 M) ?7 h" {! \: Q
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);9 i2 o! m# Z: H1 d

* Y* s! _6 R4 S) k" s2 a$ R& A        // 映射中断' y$ Y& J' j4 R7 t: ^+ a
        IntChannelSet(SYS_INT_EHRPWM1, 2);
$ s# t, S1 N. z& b& X        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);1 B+ e% K  U: p+ s/ a
& L9 j/ g  y- O6 B4 @, a$ h$ t
        // 使能中断3 s3 O8 p+ o8 F: l1 L
        IntSystemEnable(SYS_INT_EHRPWM1);
# H3 T5 Q, C% k" o        IntSystemEnable(SYS_INT_EHRPWM1TZ);
) V, A" _, K4 Z8 J2 W- y}. M. U/ c; r0 e4 Y1 q- S3 ~; R
) k8 _+ T, m/ x- k, M2 ?
/****************************************************************************/
/ d. x  E3 n& w. i/*                                                                          *// p# C& {9 t, _& S
/*              ARM 中断初始化                                              */
  C1 i$ `3 B7 F: ]8 K9 Q/*                                                                          */) R/ H! A% x3 S  }$ B3 w6 D4 @
/****************************************************************************/
$ n$ P) A5 C& y6 \# Z/ kvoid InterruptInit(void)
/ P& A1 X2 u) G6 K  `7 E{
+ ^- o+ l+ B) [; T/ V8 A) X        // 初始化 ARM 中断控制器3 J! J5 [- g& ?* d
        IntAINTCInit();
  M( L6 h1 F" h9 Q1 n% h
, ]/ q; A- n6 \* Q7 X( f  {        // 使能 IRQ(CPSR)4 `3 \1 S0 w, y1 c! N
        IntMasterIRQEnable();2 X3 @# p2 \" n! t1 `1 d8 D
' b6 [1 h  k# g* r
        // 使能中断(AINTC GER)
& ~: {! ~# Q( }; K" R        IntGlobalEnable();
/ U) l1 H) K6 d8 q5 }
# p, g/ ~5 K+ }3 {        // 使能中断(AINTC HIER)
1 Q' x! A6 Y7 N: k) A        IntIRQEnable();
( b" U" Z. s+ d, b. U}
8 p2 ^0 v9 T8 v2 h, t5 b% @
3 R( @7 H, S: u$ k8 d7 K2 B
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
& {# G+ q: K8 _2 S! s+ a/*                                                                          */
3 C* g1 u; q, R& _/*              中断服务函数                                                */
, ?+ R! F0 H5 @2 e/*                                                                          */
) o7 y. k, H4 l/ d. y/ e/****************************************************************************/
6 U1 X, n- Y5 i8 F( evoid PWMEventIsr(void)
. Y. F% G# O# k0 l$ R8 E/ z' V+ O{# t' ?1 q0 z1 J+ U2 N& [! r0 S# {
        IntSystemStatusClear(SYS_INT_EHRPWM1);
; Q& i4 ^5 O$ H- [" R
- d9 f; i6 @) I* N, a" A    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);: T% X7 {' J, \6 m, D
}4 v7 e9 }& l0 `2 d7 Q3 [

/ i" l: T: O( ~# r) Tvoid PWMTZIsr(void)7 S& Y) e  \2 V7 p5 x
{
0 V9 U2 L$ Z. ^* c% [1 Z; f9 P        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
3 S$ A. X( m* C: {' B
  _. ?3 B7 O9 n' A" `; K3 I    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
% R# |0 G. V0 S( ?) a: m+ |: v}
7 `$ k. C, W, R; B+ h% Z: v, F: m0 e" y
/****************************************************************************/
; v6 u! R4 D- B( n/*                                                                          */
. M, F" p% [6 W* g( \! M/*              初始化捕获模块                                              */0 S$ Y1 q/ A9 C, U  ]
/*                                                                          */
$ l8 s; j2 t( e1 \: [+ {( Q6 M+ G/****************************************************************************/* A$ H  q/ v( x& O0 ~  ]# m$ p
void ECAPInit(void)
% o$ b$ {# h% o2 z" a! S{
) _- R/ o; o' L6 s( J        /*-----设置 ECCTL1-----*// ^5 L* b$ b) @) q; |( I( V
        // 使能CAP寄存器装载6 v  x  `( w5 E8 c3 P4 _
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);7 d0 K3 t- d& L- S4 d5 J# q
        // 设置预分频值.
* x- q3 j0 i$ ]        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
" u/ E  b* Q/ N0 R* ]1 \+ S: s: @        // 上升沿触发捕获事件( U; H. t$ H( w
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);$ Z* Q4 M& b5 G- d, S8 B! _% w
        // 输入捕获后重新装载计数器值.9 p" A$ D: J: _- }, P2 u
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);' V9 m4 s4 O0 y7 w1 g$ V# @6 S
& T4 l8 i, Y, m# S
        /*-----设置 ECCTL2-----*/
+ J% C8 E7 G4 y        // 连续模式
, b& R% y( b0 F- H( U& j        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
2 A0 Y* D( I: p, o        // ECAP计数器TSCTR持续计数
* \9 ?2 j" u" y4 Q- N! K        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);* m4 W; A2 j% o
        // 禁用同步输出和同步输入
/ F/ ~# \! f8 u9 k, W        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
/ N* {- J4 p' W+ Y" D        // 配置 ECAP 2 为 CAPTURE 模式
8 Z- x- E2 w& m* c        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);) d- `; k* _+ y2 F

" a0 h$ |, }& E! l2 O% ~, t        // 使能中断6 u- L* o$ K1 x# }
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);: N% |: |. \( W# g4 I- D+ _
}7 v2 e* N& k) W% |

+ j5 ^7 f( i4 B, U* k/ D* L. _/****************************************************************************/
9 G3 F) w4 \- Q, m) z' q) p/*                                                                          */
" ]/ c: }2 K4 M! U3 _. C/*              取得捕获结果                                                */
9 f# Y5 Y( y  f2 F  f/ h/*                                                                          */6 M4 S$ g' d7 B" b& h; U
/****************************************************************************/! ~. c4 A3 m+ l0 r% q  h
unsigned int ECAPRead(void)
0 v9 E0 Y4 A# B{9 |: u' W% d* `* H& n/ J( p
        unsigned int capvalue;
$ h  M6 F' h% ]  @* R% v6 b2 n        unsigned long frequency;' K. k1 o- R7 i* ~8 x" J/ V+ W

4 W5 V9 _$ f- n; d# s$ f        // Event1 中断标志
! U8 ]! w8 v4 \; D) s        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
( u5 Z# C* t6 A" L+ @        {
  a8 H: I% K" a                // 取得捕获计数
9 h1 ~. k0 L% F8 Q                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);5 g: S/ K) L" ]' Y: ]8 Y5 n# ?
                capvalue = ECAPResult.cap1;! f  @3 ~% g, H' S3 V

; J2 c+ I& r+ x7 x( d                // CAPTRUE 模块 228M 时钟主频4 ?" G3 x! S, j5 r# j
                frequency  =  228000000/capvalue;
6 k4 Y$ V7 k4 D5 n  P, ?                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);/ @! [0 W. ^$ a* D# E

5 N5 e; U0 ^0 [" V6 a: \' f) k& [                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);9 A( Q3 v) i. R+ {# _" D4 @) z" {
//                IntEventClear(SYS_INT_ECAP2);$ O2 w' A  @5 ?0 ]- n9 v
        }
; o: x- X/ N* F. r+ K7 J9 a        return frequency;
" e* D/ b8 b3 g" W2 M4 v3 G}
2 s) I7 D6 L4 R; i
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
' p+ U7 h6 o$ \7 k1 Y5 i

本帖子中包含更多资源

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

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-11-16 19:43 , Processed in 0.052624 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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