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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/# l# x" a. I+ _2 H: g2 A! O
/*                                                                          */
* H8 |" w- L0 r/ V/*              宏定义                                                      */
5 b! B$ I* X# {* u: E7 ~5 [: K9 Z/*                                                                          */) E! P; J$ A1 c
/****************************************************************************/
# D! V6 K* ^$ ~. j// 软件断点
& w: [/ K) x. d#define SW_BREAKPOINT     asm(" SWBP 0 ");) L( v/ I' ]2 p8 ^+ ~' G+ }4 Z

0 |* J4 W; ]/ K7 t, Q// 时钟分频0 k! ^- l1 g) S) X) |) J; x
#define CLOCK_DIV_VAL     2286 s, |) ^, Y* D
' S! r4 s5 b' S! j, s$ G. @
/****************************************************************************/+ J) H* P: U$ P; L. {- C1 k
/*                                                                          */! x6 ?) Y1 p5 y+ e
/*              全局变量                                                    */
7 H" n' A- z/ H0 L9 o) x( l- D) Z/*                                                                          */& N: C1 X. r7 P, H  Q1 `/ K! Q
/****************************************************************************/
) r; p! z, k* D( O* B# P8 eECAPCONTEXT ECAPResult;: X% Z# Y* j+ ?0 T# ]! y
. {" t3 q1 N9 _7 B. x& t
/****************************************************************************/  t) _& c+ T+ N! Q
/*                                                                          */
: [0 ]" W1 k# j7 X$ S/*              函数声明                                                    */
) L/ m7 J8 G1 S* d/*                                                                          */
$ H9 F" O5 \, B; l) R2 L; f" X/****************************************************************************/. W  \- J. c! ]/ W% n
// 外设使能配置/ Y- X3 A- d0 j
void PSCInit(void);$ L6 b2 t: |2 t1 A, K- M

$ c8 H* ~* y$ [) S4 H// GPIO 管脚复用配置
% b, y: Y$ X3 D$ O: d$ qvoid GPIOBankPinMuxSet();7 m  T4 W0 r& ~9 g

+ S" x& f5 a! X9 `  r) I// 产生波形
9 L* n& q) Y' p  rvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);  Z# A: l4 }1 g3 \" E( \9 o
void ChopperWaveform(void);' p. n1 I" B. C% ~: D8 Y

# [: g7 T6 v+ i' X  M' _// ECAP初始化和读函数0 r; \: N; L# p7 w0 |9 ^6 G7 v
void ECAPInit(void);1 i  z5 j  o9 G( w8 C+ ]7 C) y; m
unsigned int ECAPRead(void);
' c) B7 ?7 Z3 c4 y0 b0 c5 w
9 H3 Q$ j/ K  ~6 u& h. Y* v//ARM 中断初始化
: Z0 W" F  h; Cvoid InterruptInit(void);  n* v9 n! I4 V

1 a/ d4 ^* U; U* t: [2 J. E// PWM 中断初始化
6 F9 N& Q$ H: n# H9 _void PWMInterruptInit(void);
+ Z" g" v5 v" t# @6 s// 中断服务函数
8 p! c# V2 v, Q/ }0 d+ b; Z// PWM 事件
6 d/ t! |1 l2 n$ ^4 L# Z) d; X; uvoid PWMEventIsr(void);
# C& N, W! ^  Q) Q// PWM 错误控制事件
/ l( l. p6 `4 F: Mvoid PWMTZIsr(void);1 h' r6 ?, i  @& i

& H& z. R; |& _: [( ]- s( T/****************************************************************************/
* ^  R, F- S) K4 ]0 q6 g! Z1 G/*                                                                          */6 h' w# [# R4 U$ o0 o
/*              主函数                                                      */; n9 s6 Q1 C1 a' B3 t
/*                                                                          */
: `% D2 b$ J. D' q( `8 L/****************************************************************************/
; b# O; K8 r( \$ ^( e6 [int main(void)( m# V) k5 e0 w
{
2 c" |! Z$ |' Q# H$ m: h        // 外设使能配置
, g0 \- h3 a# I0 w        PSCInit();
/ \. G; K2 B- H. m$ _+ ^3 d! J( W
        // 初始化串口终端 使用串口2$ R6 C6 `. H6 N4 i% b
        UARTStdioInit();
/ A+ @* g8 |+ H# ]# |       
; p, V8 {& w9 X4 W. y1 Z3 M        // GPIO 管脚复用配置
2 Z- O+ |! ?" k) C" G        GPIOBankPinMuxSet();
) `. v$ A: X& p& q3 a7 a& y$ F
        // ARM 中断初始化6 h4 J2 d/ k# Z# M1 @) k6 W
        InterruptInit();- l* J0 ^5 v* A
2 n: V# ^7 }0 E# D3 h
        // PWM 中断初始化
8 h: t/ v: w1 E# k5 W        PWMInterruptInit();
3 T. h1 e( A% n0 I
3 ~0 p/ s' o+ G' j        unsigned char i;
3 ~; ?2 g; q, J        unsigned int j;
/ p. X7 ^  Q9 `# A5 x9 M% Z* h* v9 G0 ?8 F) c/ j
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);. D& X- U6 x: d& X
        UARTPuts("------------------------------------------------------------\r\n", -1);2 v: P' Y! b% v; o( {
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
1 x( n; j: \. p" D; R$ [        // 产生波形- \" \7 N9 L7 i2 c
        PWM1ABasic(25000,50);
( S: k; _4 l" E" J+ |, a; d$ s) \) z- W8 e4 R
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);4 h: p# M3 K/ p+ V  ]8 J% ]
        UARTPuts("------------------------------------------------------------\r\n", -1);0 y3 o+ p) ~* \% ^/ I$ u) e  ]* G

0 D0 p* T6 }. `) W' G5 K
* \" r$ W& A0 W% b3 O  `. l
  z5 d) s0 {( A  f& E: q        UARTPuts("------------------------------------------------------------\r\n", -1);2 t1 D1 I# v5 v
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
( n2 ?4 m- J' q* [# ~2 T' K        // ECAP 捕获初始化( y1 B8 c7 X! Q3 K4 N1 ?
        ECAPInit();
! o  h& |3 c+ N2 I        UARTPuts("Initialize ECAP.......\r\n",-1);
/ Z! `2 l# P( Y1 q        for(i=0;i<5;i++)2 i/ d! ]: _4 a* ~8 Y
        {$ l! l. ~9 d: J" E$ P9 F/ p% @
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
& F% `5 ?: K7 v1 k6 N                    ECAPRead();  J6 b+ A; E. n3 r) C( z4 I
        }% u* U7 ?6 H# O/ U
        UARTPuts("\r\n",-1);# g$ K  w% n# Q9 B; l! Q8 T
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
5 ]6 p, T" j+ \9 e/ `1 @. A        UARTPuts("------------------------------------------------------------\r\n", -1);$ r  |: G! G: m8 G
, R& s2 p6 t1 g$ O4 F8 u5 D
        // 主循环
9 N" ]6 V' x4 J" Z        for(;;)- g# Y  ]( I/ v+ ~
        {# a8 ?# Y' L" E1 m/ K
8 s* a) `6 C, e& R0 ~8 v
        }* U- o' q; e8 i' L) e
}
4 V- f. Z) O: Y( O6 B" ~8 p! {  \1 i$ X) {
/****************************************************************************/) o: I( g8 }$ S* [( d! E/ U# U1 @
/*                                                                          */
0 @8 h( d* w- ^9 B: ^  W+ t/*              PSC 初始化                                                  */) M- A- P  m" S( r
/*                                                                          */; b* {# S. Q. h- l
/****************************************************************************/
: J! Y# b& f3 A0 C: R3 a+ yvoid PSCInit(void)% t9 C& G& N" J7 E. R
{! i* A0 l# T4 E; y4 m
        // 使能  EHRPWM 和 ECAP 模块" y5 I8 \0 w  ^0 r5 j
        // 对相应外设模块的使能也可以在 BootLoader 中完成
6 p/ b7 L& M! t: G8 y4 R6 n    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);/ \% k: D! h  b  \, q
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
( p$ |$ V7 D+ `& R  O}5 d) Y# n& z% Y& Z6 ^) w' Q

+ s$ \' N2 p7 A# B) N" q/****************************************************************************/  k6 b5 \. }# y* d4 {& G
/*                                                                          */% T  B$ Y  F: h( _# _
/*              GPIO 管脚复用配置                                           */) z- F5 t4 t- J) j$ h, ?! G
/*                                                                          *// ?- m: m' ?, `9 A- w6 J
/****************************************************************************/2 o6 j0 _% S; O7 _; `$ y; v
void GPIOBankPinMuxSet(void)4 g( Y; d/ m, E2 ?5 y9 N
{
% k( P" ^& T2 s& p) b$ Q, X! ]9 `        EHRPWM1PinMuxSetup();: ?; ?; M% x& z# g$ W+ N8 O
$ m) E4 w6 X- u& L6 q5 ~6 W0 y
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)$ R/ O1 @+ V# b
        // 作为捕获功能时管脚方向为输入
1 g2 B- F5 G: C; ~        // 作为辅助脉宽调制时管脚方向为输出
) n. \3 b# t  u    // ECAP2 / APWM2
- ]# p( z4 Q5 b( J: v) f        ECAPPinMuxSetup(2);
) |# b" [$ s( g, g" `  d7 }. S& {9 H( V0 g) q3 g
        // ECAP2 / APWM2方向设置为输入
8 k) U8 L/ c" |% f/ f        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
" a( y8 U1 J  x}
' K/ U" o6 x& z! L% q3 @) c
% n5 ^# n, D# l4 s% U* I8 Q/****************************************************************************/
4 m7 d& J! d! u6 d) F4 K4 K" C, `/*                                                                          */
+ @# o7 z! a' Q$ v7 n/*              PWM 输出波形                                                */4 C' K9 h4 \, L" R
/*                                                                          */6 O( ?  T2 o0 o3 Q! K
/****************************************************************************/
1 A% k( i# D1 f, A* fvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
) b* E0 F* {* ~- [{
) Y, X- q4 ~3 T) E' K    // 时间基准配置
6 v7 ]# F$ T; ^4 t3 R! `    // 时钟配置( J; l, ^; q8 d: [) {2 C2 S
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
! A% R9 ?# g! k3 V& c, ?, \% z
8 K" x* x- N& O7 o    // 配置周期- A9 q: D2 M% O, u" P5 v
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,' O' K* G6 n2 \8 Q; @0 q3 K! c
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
2 B0 G. a  Q* ~; c  `5 E6 v
& F! l2 A2 G* V! Q    // 禁用输入同步信号9 I2 P8 V, r7 N" b
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
& t7 M( I% ~: b/ M: P/ U: }  F9 J1 w& u3 r: e3 ]
    // 禁用输出同步信号
) ?% T6 H4 f  U* M3 W3 U    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);# ^. M9 _* O$ `9 {% \/ U; u7 W% ]) {  o4 M
* P$ B  ~/ y: n( i8 D: U
    // 仿真(DEBUG)模式行为配置$ A; f! ~% z9 A, n$ N( G
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);% F0 v% p, Z0 k2 G3 h' ^) s8 @' m0 T1 |

" k5 ~* {( N' F) j; Z( K- u    // 配置计数比较器子模块" e1 N3 A  O4 c' {4 u' s
    // 加载比较器 A 值
, }- N) w2 m1 |. V8 j: Z) F8 x0 f    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
; `: U% W4 F# C# a* x1 Y0 ~& `8 M3 N                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
; M3 j% |, ^5 \: h( B  \9 J( I# C! D
5 U  o1 w: I0 }* f( g9 D    // 加载比较器 B 值
4 n, X! t8 Z  y6 y5 a    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
3 `% P  R0 b; S- G- I+ d                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 _% F* y# D. r9 r7 y: V
7 c, H* r! K) t% z* W5 e- O    // 功能限定配置(输出引脚触发方式设定)
4 Q0 ?1 i8 v5 g! m    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出0 J3 L: y- \% x# N
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,4 w$ R+ `+ Q! |% `
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
$ u5 q% X) {" }. r                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);; q: N0 m1 S; g' x6 l
5 J9 P7 D5 ~. Z9 S4 J+ g5 ?
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
4 g& i6 M- n2 h0 d/ i, h  O    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
% x9 ^+ g8 X2 ?/ B. [% ?# u6 ?" v3 H7 X
    // 禁用斩波子模块) w9 i/ O. l- X
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);4 m# y9 @6 `2 a
/ @9 r2 _' Z! P! X
    // 禁用错误控制事件
0 P' V/ t, {8 p; D, A, N) G    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
9 |& }& ]- S9 I, ~/ R    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);6 s: ]; A6 D% M& N/ h& J
9 |- g9 }  P( M4 G4 d
    // 事件触发配置7 O* k+ f* m  t/ @: }
    // 每三次事件发生产生中断1 v1 _1 ~0 g5 y1 ]9 U
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
# W+ S" x. J- t    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
1 f4 J" L( c8 T4 S    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
) r* e$ J, R# d/ x' y- p    // 使能中断0 W  D+ x- U; a: x! {: T
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);- d$ l" p& V1 W- k
1 Y. l4 t1 z) T' L
    // 禁用高精度子模块& i8 K& g3 @" v+ ]/ ?
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
+ J8 G) [6 e4 H$ H9 i3 D2 z( d) Z- b$ O: B7 S, ^/ X
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
1 j" x0 D( d& `' X# e% S}
$ Z9 W3 x- H: D) L3 G* M# o" R! ?, I# s! f( x7 k
void ChopperWaveform(void)
' H8 }, k9 ^& s{
' q6 M7 F5 C4 W2 k7 ^; y/ T    // 50% 占空比
8 h6 I; p/ u& W7 p: u    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
1 C0 ^7 o# ?& p0 `; ~( j    // 4 分频% b, f  \& H4 U& u- G3 |
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);. \3 _; p) {5 ]$ c3 O  f: L, P
    // 单个脉冲宽度
! L: I4 R: |8 i3 q    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);% U. E9 ^3 E$ q% L
    // 使能斩波子模块
! g0 O! n. b2 g    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 w$ @/ G# d2 x7 O  g}: E- W+ H' e9 l" F9 m) I7 K
- o* D0 d1 I( u. `
/****************************************************************************/0 r. p  `9 J4 y
/*                                                                          */0 d7 ]1 O! Q6 Z/ C
/*              PWM 中断初始化                                              */$ R! T: ]! b9 ~3 _: Y4 C% v3 q& [
/*                                                                          *// q: M6 c) N+ y' h. o8 \) y; r( Z
/****************************************************************************/
( B. B$ Y+ {* c% h( Cvoid PWMInterruptInit(void)* j2 c7 w- m% |  b. y. Q$ @
{
, F/ e" t8 q+ m( v2 g4 x, x        // 注册中断服务函数4 S3 F* d9 x" F: n8 ~
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);2 s$ D/ \( o4 d9 W& c3 J. y* k2 m
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
5 b4 M" Q5 o& O  z
$ d+ R) d! b" i7 u/ L        // 映射中断
5 C: X$ k, |& b0 K        IntChannelSet(SYS_INT_EHRPWM1, 2);
5 H* N) Y/ F2 g1 q        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);( q( o, ~' j* O' Z' b9 P

; A* S, Q% J6 p0 k7 x        // 使能中断
. d6 s6 \$ f& }+ v* O8 N        IntSystemEnable(SYS_INT_EHRPWM1);
, W7 v. V2 Q' h2 ~6 j* U" B; g( F        IntSystemEnable(SYS_INT_EHRPWM1TZ);
+ u% w! Z0 ~4 s}
' q+ F! F9 G" i6 D6 Q! y
# }) E! B6 g' t; j. j0 N% q, d/****************************************************************************/
6 @0 s; `  {% q/*                                                                          */( ~  m! M. k7 S+ J
/*              ARM 中断初始化                                              */
% Z) r# ]0 ^% ^, z0 S/*                                                                          */) F# O/ G3 m" D3 c5 I+ ~  E
/****************************************************************************/
7 E5 i' e  v) K) \  Avoid InterruptInit(void)
, n5 _8 z2 @" Y/ I+ V: w7 j3 I# B5 H& K. E{6 y% X/ I$ O$ C% {
        // 初始化 ARM 中断控制器# ~4 X9 ~) e# T4 o
        IntAINTCInit();
4 `6 b) L! m" X/ Z4 M# H9 k0 L' e% X+ ^  [4 G/ ^
        // 使能 IRQ(CPSR)
, F9 e) {: m4 k# Z) X" M( ?        IntMasterIRQEnable();
# S* {( ]& @; H9 T; v: s
2 B6 `- o& s5 o" U; p; F& z        // 使能中断(AINTC GER)% s8 V- K7 |7 Y. a7 Y( |
        IntGlobalEnable();
) O  U* S; k' {9 N) B$ j' ]) F* `% F4 D
        // 使能中断(AINTC HIER)1 [! y- j  A! ~
        IntIRQEnable();9 t" f& {: c+ {" D
}# [  x: O. M9 V8 v1 Q3 w* _
# a2 t: o* `$ }
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
# E- l  s2 Z" R' ]2 E2 u( w/*                                                                          */8 w8 z$ X  M. d: A
/*              中断服务函数                                                */
7 ?8 `5 E( _# K/*                                                                          */
  B& G! @1 u9 L. z" }/****************************************************************************/
' L; C' \3 c  b: A) zvoid PWMEventIsr(void)
* c) t/ ]3 I0 G2 X4 U8 a{: ~' S& t; b" |4 T7 I
        IntSystemStatusClear(SYS_INT_EHRPWM1);
1 n5 w9 q2 k- V. I9 `. r' F, B! t$ h# H
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);7 m. W) K" d* u3 P% r
}/ f8 X: |+ e9 C8 T9 M

+ X/ i* d1 s# v* Rvoid PWMTZIsr(void)8 f2 A7 O3 i$ g: Q2 q) `
{3 a4 x& W# u7 U; Y* G
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
( e8 b( i/ y/ |# ?+ B
7 P6 P. @3 g7 O; E; d% h' Q6 G( j    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);/ Q, f: y$ L: m
}
) g# h2 G7 O$ R) E4 y# s4 k/ z( A$ E
/****************************************************************************/
& N, p! S4 @2 u. @) v8 n, [' ^; ^0 b: \/*                                                                          */
* c$ f0 @8 B2 _& ?( ^$ X8 ?/*              初始化捕获模块                                              */5 |* K) G2 Y8 Y& ~* i- I  n
/*                                                                          */
$ Y" D! W7 i: ~* j* V/****************************************************************************/
3 J0 p0 u& _- u7 K! dvoid ECAPInit(void)8 w2 m" \7 b8 f2 _$ j
{1 K3 ~1 a$ y2 E; N
        /*-----设置 ECCTL1-----*/
$ U: u& i7 [+ }. J( S. w: ]        // 使能CAP寄存器装载6 ^2 w* R# c$ U6 d8 U- F! g* ?
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);* _$ ~: w$ Q) h7 l5 X2 R" j' A$ j
        // 设置预分频值.% }' a% T1 f# d- k: _8 Q0 G
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);' \" ?1 l* B5 t5 _9 G9 X6 Q! ]3 z3 ~1 I
        // 上升沿触发捕获事件2 x. l' m1 `" ^! o2 {" Q. l' ]
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
  D8 x2 ]( R9 S) @$ C/ A        // 输入捕获后重新装载计数器值.! }( {9 W# U0 k" |2 Q$ o
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);: O3 y1 C* o0 ]4 ?) I! k+ \
7 R4 K: s% l* S
        /*-----设置 ECCTL2-----*/
/ y) c% j& @2 M& e1 B3 A0 l) l        // 连续模式) I8 y2 t) _' M) T9 d" F6 y4 y
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);  w  Z0 m$ M% S% J" c# j& J5 u
        // ECAP计数器TSCTR持续计数+ Z" b3 k6 Z; G1 [! z
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);  [$ t  k* N  H; d
        // 禁用同步输出和同步输入* U" F" I/ _5 J  D; U) O
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);: P, x  p8 b3 g1 ?) k
        // 配置 ECAP 2 为 CAPTURE 模式
9 Q' R/ t) B- E$ [5 |        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; o) {9 h3 p; C+ ]$ Z5 G: Z* W4 {% o4 M' z) s
        // 使能中断  ~2 y) g5 H- f+ ^. v1 L8 c, r
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& [! A* _1 t; d* H+ `}
, k6 A) o8 x! b
  u+ x2 y- z# T5 b9 j9 {/****************************************************************************/  d3 L% N2 a" R) B
/*                                                                          */! u: `$ }' f% ^7 Z' e& ~
/*              取得捕获结果                                                */
9 X# f4 k: I6 q& B0 U" E) h2 H/*                                                                          */
# [! {4 K/ ?; U# z% }8 g' O) G/****************************************************************************/$ }7 ~4 r1 O- v. T- V+ n
unsigned int ECAPRead(void)" S3 P0 ]) O; Z( p% H. Z
{
5 P$ g- }9 R  G# E5 L8 ?% p/ y        unsigned int capvalue;
% V3 T5 }3 I- c  S# i6 P, L5 |8 H        unsigned long frequency;: ~* C* ?* r( z* ?& h* n1 t" }
2 N! b& d3 l/ I5 T* Z! W, X( l
        // Event1 中断标志
6 i3 M+ f5 y' I        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))1 J" b# X" F2 M+ {
        {& ?) G( b: }4 t: E# T  p' Q
                // 取得捕获计数5 Z1 f7 ?9 ?' Q2 }7 x
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);, ]4 L$ B8 x+ R6 c
                capvalue = ECAPResult.cap1;  X2 \. P0 b, t8 r' }, c) f$ c
; k+ T* x+ Z0 _2 ?
                // CAPTRUE 模块 228M 时钟主频0 C% C) c4 y( c
                frequency  =  228000000/capvalue;2 c  o: e! h$ }$ T# F& k; i  i8 G6 t
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
: b$ U9 D9 b0 M4 Z1 V1 }
6 p0 l. ^/ c- h5 B- p                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
. y2 `3 d( F0 I//                IntEventClear(SYS_INT_ECAP2);. f( T/ ^% Z; O7 X& `
        }0 y( X1 n! H- s- ], Y+ t
        return frequency;
& w1 L, B7 {$ V}
" ?/ n, R: g6 q3 w2 C6 d* 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波。我们有相关例程,请参考。
1 ~7 {) X7 N4 O; H% ^- n

本帖子中包含更多资源

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

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-5-10 08:07 , Processed in 0.051878 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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