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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
4 b% t- A) b1 R5 d8 y+ O/ f6 l! I/*                                                                          */3 l7 P# X1 p: c1 d8 q8 R
/*              宏定义                                                      */1 ?  A6 v' G" u- H9 R8 c' ~
/*                                                                          */
/ \/ C4 E. f5 P8 x+ w' y. A+ n/****************************************************************************/
8 s0 }( b% X) N& @2 d, T+ |// 软件断点
) D( d& b0 ~6 l) E7 i8 X! x5 ?#define SW_BREAKPOINT     asm(" SWBP 0 ");
4 n9 K" W: w% M! B3 Z: d$ Y. N9 |: U) {3 E0 F% y
// 时钟分频
2 Q5 X5 E* a, s& Z#define CLOCK_DIV_VAL     228
3 A& b) ^  a. d% q0 j( \, `6 r  y  ^1 k) h2 a( J/ i
/****************************************************************************/  B7 F( G& `5 D3 L  J+ Q# h) d) F
/*                                                                          */
  s, A# `( Q1 A5 {/*              全局变量                                                    */
& Q6 @7 w9 R, k  k( O4 x/*                                                                          */
# o& m1 \. I! ~( u/ F/****************************************************************************/
1 k& C: w, {! S2 YECAPCONTEXT ECAPResult;- W6 Y" z$ V% m& L. }/ V
) ]( e& H+ L! f* a! X
/****************************************************************************/( F% C- p+ a- k# n3 C5 e
/*                                                                          */4 _8 h& Z8 c* D! e: C
/*              函数声明                                                    */
8 r/ h, A5 w# K0 s0 v+ K# e/*                                                                          */: ?; T& p* q! K' g
/****************************************************************************/
) H" O- ?( [% W" r. {// 外设使能配置
  [) h2 W$ h) D+ @void PSCInit(void);& c3 D; g* P- ]( v/ [: l0 b

' g- Q' a& m7 J* g! i  k9 z& D// GPIO 管脚复用配置0 G3 W, ~( W5 J
void GPIOBankPinMuxSet();4 t' {4 e* l% g9 r# U5 h# f

; o/ i% S- h$ a7 \' k, W// 产生波形0 i( K% f# C% f
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);+ c9 ]5 U2 W: Y, k5 ?3 p" `
void ChopperWaveform(void);. `5 G4 J. n: K4 U% G3 S

9 E) H6 r  L+ E" r- W3 F* ^% }// ECAP初始化和读函数: p) S8 {7 @7 _  f! @
void ECAPInit(void);: F0 Y5 S4 W+ _+ X7 Z- g- _' q
unsigned int ECAPRead(void);
! d1 |  V) f  `( Q# y
% D( A8 Q$ y$ U; j& A//ARM 中断初始化
" f* ~; h$ F' o, _void InterruptInit(void);
/ M$ r6 I+ L( }0 K' [, T; q/ u- E6 \: o2 C3 ^; v* r. X7 ~& n
// PWM 中断初始化
# B& f6 h- F, [* j" d% Mvoid PWMInterruptInit(void);
" j' e+ }: F8 v// 中断服务函数
) ]6 z  F: r# `8 o6 r# R// PWM 事件
4 d8 A: \) d. a3 J+ zvoid PWMEventIsr(void);
) U% _* m- n* n// PWM 错误控制事件
) y6 _/ b8 |; {void PWMTZIsr(void);
. _( ]" x/ \1 K& t; q5 C) @" @$ W: J! Y
/****************************************************************************/
# m* B' W$ h, Y$ G/*                                                                          */: w, k6 h; z& t7 c. J9 y3 S
/*              主函数                                                      */$ P4 |4 T5 B0 r3 {  V) N
/*                                                                          */2 Y( S) W" P5 C; W
/****************************************************************************/# @+ _5 J, t4 \8 b
int main(void)! N. d: U: _- l2 x, l
{8 U% ^0 j) |: j' e6 H
        // 外设使能配置
4 r& H' V! Y* X( }        PSCInit();$ s& S' v- \5 ]! D

7 R0 V. F. N6 g$ r+ s/ q7 V        // 初始化串口终端 使用串口2
7 n: a) b& @: x0 o        UARTStdioInit();0 n/ A7 l: X- y7 j9 B' G/ ~
        8 d# B' {2 ?6 P, ^% M3 t( w
        // GPIO 管脚复用配置0 x+ \2 e9 _  w0 K6 L2 @
        GPIOBankPinMuxSet();
5 U: A5 G. S4 U5 q% U# |' r$ y7 ~% c
        // ARM 中断初始化
1 R) u- {* {+ f. W* A; `        InterruptInit();
, K+ s0 ~' Z+ L2 @7 F
) P& c$ ?* a, H  `  M        // PWM 中断初始化
8 Z" J; p) r/ x  h8 Q9 p2 x        PWMInterruptInit();4 x1 q! ]: C5 \2 S5 A( Z0 ^  z

9 N0 r* u5 u3 i) e7 N        unsigned char i;
. i- d3 y% b- ~, p4 W* w4 h        unsigned int j;
0 D9 ?- y9 I2 ^2 j" \/ f. R: m# S. S  G. ~2 ]4 |! Q) d2 e
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);% l9 T# X3 y# j7 |" p0 j' Y9 e  L
        UARTPuts("------------------------------------------------------------\r\n", -1);8 V7 _- [$ E% w
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);( e6 _3 @6 \$ }- I2 Y4 a
        // 产生波形
$ Y% Y+ f& D  D; e4 O        PWM1ABasic(25000,50);" M: W+ ?' M% _: x# }: e
# X6 m3 o1 i, [& A( H
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
% H0 p9 `! u; a! p1 H        UARTPuts("------------------------------------------------------------\r\n", -1);; a* _, j: S& p- S& j* I
/ E$ a( v, i1 T, k
3 }" C2 A8 I* H

0 Z& \' x) @' B5 w- E9 y        UARTPuts("------------------------------------------------------------\r\n", -1);
) o/ L- ?' u9 n. u        UARTPuts("                    C6748 ECAP Test\r\n", -1);
& O9 X, u5 [" l2 E' J        // ECAP 捕获初始化( M, K5 L( s; V/ E+ ]
        ECAPInit();. s0 {; Z/ g4 z! K4 l9 l
        UARTPuts("Initialize ECAP.......\r\n",-1);
( Y+ a% v8 p1 z- _" U- [, @7 v5 y' ~, S        for(i=0;i<5;i++)
. G5 J5 y. y0 y        {& Z5 K+ u* l) L5 G  Z8 X+ ^
                    for(j=0x00FFFFFF;j>0;j--);            // 延时/ W& p; h. P5 p: {! o8 J
                    ECAPRead();4 H: X3 H' H  O/ ~  I0 x
        }! M! ^1 k" E4 B6 S, Q9 }
        UARTPuts("\r\n",-1);
# R9 @( M# n% U  D. y1 K        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
. y: A; W8 Y+ s' H' D& l5 f        UARTPuts("------------------------------------------------------------\r\n", -1);, {2 U' ]" R, Q. G, d( ?( O" I
) l' Z. e) T2 ^9 X) k7 x. `
        // 主循环
! i, e6 j. B4 w: @6 z        for(;;)
  [/ h; b/ [1 A. T5 q) u4 R+ s        {1 H& j! Z3 I6 v/ z) C- L- F

6 i  _' T" }- {0 R. @8 j        }& [" F+ R3 V3 O% \' k
}
) B! V, [8 m) f9 z( ?3 L; n) ]% l$ f, _
/****************************************************************************/: X8 |, L! H  S8 P1 s: m2 B
/*                                                                          */
4 a, Z) a; p7 z4 c; B4 Q/*              PSC 初始化                                                  */' y# W1 ^1 s+ S# ]6 A
/*                                                                          */4 z# z: u! M8 O, q. a
/****************************************************************************/: ?/ v) B2 Q$ T: S2 O$ T# T. N
void PSCInit(void)
* n- [; d9 c+ U7 `+ l{- z1 j1 E, e6 D# b$ Y
        // 使能  EHRPWM 和 ECAP 模块6 s$ h% V0 V, g( E4 C" r% e
        // 对相应外设模块的使能也可以在 BootLoader 中完成, |5 X) N1 Z: o8 c. \- \+ ?& t! Y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# T/ s- B6 r  F  J: ?$ I, X' K
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  P2 u  t& }/ Z2 q6 |% E
}- r8 A8 s0 @/ z# x- E0 b

/ @/ j; O; V! z0 a4 U/****************************************************************************/: q0 y2 U9 p) F, n& N" t
/*                                                                          */8 a' e- r6 k( @* r1 E
/*              GPIO 管脚复用配置                                           */
* c1 E  ^, z1 m7 t2 d/*                                                                          */
) p4 j* u8 }+ \9 u1 _" H/****************************************************************************/
& ?0 L4 y% A, X8 k  s! r( dvoid GPIOBankPinMuxSet(void)
$ @+ P0 P4 U* {9 W4 W* V' E) P5 c{
9 L7 Y- l( P+ r, t0 _- p        EHRPWM1PinMuxSetup();
- n2 o& g$ X1 y- f. K/ I' ]$ ~2 d6 S
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)- S# r) l5 H  y
        // 作为捕获功能时管脚方向为输入
3 q% _3 N0 x2 d& R! W9 v( N        // 作为辅助脉宽调制时管脚方向为输出
( }) n6 |% B; s. g; b7 F    // ECAP2 / APWM2; O  K; A8 s- Q1 e8 u% [
        ECAPPinMuxSetup(2);. E* s- g  t# F

6 ?+ o0 V, s) `        // ECAP2 / APWM2方向设置为输入5 K& ?  n% E8 t4 v0 C. g8 @8 d6 X
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]6 m! i/ Y0 E4 |5 T8 P
}
& ~3 `( E* c* o) D. Y$ @+ q4 H4 D# o' A# Y; K$ X0 H4 G
/****************************************************************************/
* `& C1 r+ I' \/*                                                                          */
9 G8 e7 Q$ g4 Z/*              PWM 输出波形                                                */2 H  ^% Z, h6 k5 W, z
/*                                                                          */
/ M9 V0 g6 p+ R! R  z/****************************************************************************/
' C9 E* A5 ]! ]  _$ Y8 Dvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
  N$ Z$ n* H2 a3 I4 c( A' h9 w8 j{
! `6 B; |2 k8 N# \2 y' m4 A    // 时间基准配置
- S/ L! o6 p) ^    // 时钟配置
% p3 H! V- G& K    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
" ?/ M$ |3 Z/ E5 c, M7 Y8 ]
" {( a( R, q" T! L8 i/ s3 b9 l    // 配置周期
& C6 j8 ~/ l- F$ [: a    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
1 M$ M* V# U' p5 x                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);+ y9 |- Y4 e: D7 a

* [! d' E. N6 Y. \    // 禁用输入同步信号$ B) o  t; Y+ W4 v4 B' o
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
" A: G3 s. l+ N) J
1 @* j7 |/ ^0 \/ T4 n9 h/ u    // 禁用输出同步信号3 x9 q7 W1 U& O- D7 U/ ^( m5 R6 m
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);. f( h4 K& S- R/ K

3 X+ y8 h/ l$ O$ ?/ s0 d    // 仿真(DEBUG)模式行为配置4 M$ X6 [! k! p! _# a
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
' u$ e; o1 D% @. ~& F9 U5 p2 q' e- M( U' _7 u0 s
    // 配置计数比较器子模块) D0 _6 R6 S% j- B9 F) }. u- X
    // 加载比较器 A 值
4 Y8 d7 h" I7 k' |8 v    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,' Z$ I# t# M$ _) B+ A- s
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& O! ]: _: X% {& V9 n0 N% @3 v: P2 e% A- `) I4 p
    // 加载比较器 B 值4 q" X+ [: }+ h/ Q; U3 ?
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
% h% P6 F+ o4 C                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);4 m  ?# _: ~; M6 r

0 L8 G  S- _# D3 y    // 功能限定配置(输出引脚触发方式设定)
3 v# I& q8 D8 W    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出- {8 T* J8 n, g6 ]' I4 j
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," g( q0 r# B* m: v' f
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
% R7 N- _2 Q1 h# r                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ A# z/ F6 B( F& Q
. k) h: P- {9 N    // 禁用(旁路,信号直接输出到斩波子模块)死区模块; a$ b  n8 D' v  d2 g- j+ N1 G
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
2 E& ?, h  B2 R- x4 M5 R0 w) q! \8 q9 D) [  x" ~
    // 禁用斩波子模块4 a& E1 H9 ]/ I+ D. |
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
9 z2 Y; z  e# A1 k3 |
% \. E, U$ d: \$ z7 D    // 禁用错误控制事件
' y* u3 f8 D% {2 Z9 G& I    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);, p! N& F4 }9 S" I6 u. a5 a
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);% R3 i! N3 ^% O/ l! q
* g$ R' b4 z; e6 E5 j1 c+ W9 {' N
    // 事件触发配置8 V1 Y. T/ f( f  x$ Q
    // 每三次事件发生产生中断
0 K& t) E; c- J6 o+ d& n6 P    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
# A: L7 Y4 `  F" ]3 m, g. y    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件. {( h+ ^' c' b2 O! A
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
1 a+ y; `0 b4 G$ N" Q    // 使能中断
5 F1 `/ v( b( w    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);3 X4 @5 E) g4 ^6 r5 {

. X1 t* b" H) w# \5 b    // 禁用高精度子模块2 h! K+ `0 _; G2 h9 s1 D
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);3 f5 O1 g3 G# F& S

; Y2 t7 Q- Y; p8 Z$ _    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);( H7 C) O! C8 b3 g& Z
}/ F/ s( x; \9 L0 o9 M2 s
% G  q9 Y; a  Y; s# P
void ChopperWaveform(void)
6 J, o( Y& y' q' B{( o3 f3 B$ \+ Z& U7 _& s% \
    // 50% 占空比
8 V6 W) Z4 k$ S, J: s+ S9 a; B    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);# {9 U9 e3 g+ {/ W% A! E
    // 4 分频
5 o8 d+ J  {4 P9 X1 n! m; \5 Z8 N6 b    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
! z$ S# Y- c, S0 ^$ f' t1 e    // 单个脉冲宽度- F/ b* u( q: F$ _
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
% Q2 N& w! _4 G- X# x$ C    // 使能斩波子模块
. v+ z. B, Q: d. o    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);5 x* A- u& f$ z0 t1 G
}2 k' B4 Q" n; E6 a
$ e" s4 Y5 S9 Y2 C+ G8 `$ U
/****************************************************************************/% i/ J5 l  P8 ?. o" b( D. u  F
/*                                                                          */- {  J7 o( F5 R3 h3 E# B# G; z
/*              PWM 中断初始化                                              */
, q0 L, E/ I) K4 [7 _8 @* n/*                                                                          */% V1 ]0 Y, V) ^- f: L% F, B
/****************************************************************************/
/ E# }) n+ z! n% ^' r+ x6 i  ivoid PWMInterruptInit(void)0 S" c9 O* t& W% u' Z8 Q
{
4 C2 f1 V5 p) h; G9 D        // 注册中断服务函数
  z; C% e! x2 q5 ^7 C" U& I$ h2 d, r        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);4 A! z# w3 D6 @5 @
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
1 P) R5 g- w+ z% ~/ C0 G6 `0 @4 k
7 a$ J. C3 S# f        // 映射中断
  D- p; N9 c  B! C: ~* w! ?        IntChannelSet(SYS_INT_EHRPWM1, 2);1 `9 Z6 P) J) i) v! q4 h
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);* t* u. B2 J5 e4 s0 f
* O) s: s. Y* h( J8 J: D9 l* R* y# g
        // 使能中断
8 H' @4 x" Z3 y  u8 j) U( T. ~        IntSystemEnable(SYS_INT_EHRPWM1);$ C! A2 R2 P% b  \, B7 o  f
        IntSystemEnable(SYS_INT_EHRPWM1TZ);" F& C0 h  G* R1 h& V0 u
}  R5 S0 D) _3 q6 |! b
6 G' R# U* E3 x8 p% k* T0 B
/****************************************************************************/
9 Y2 _( P$ o) p# g0 ?/*                                                                          */  \& F1 W, I2 F' E. r2 B' {! K
/*              ARM 中断初始化                                              */  A* U$ M& r2 E( j
/*                                                                          */
4 c. `0 W% f/ F  d- I/****************************************************************************/+ B8 p+ P" Q! p0 d
void InterruptInit(void)
9 ~$ E, z" d# f8 X{
& \) |& h9 U$ ?% R! c9 @4 C        // 初始化 ARM 中断控制器
2 }- ]. q$ J% _0 i) r* l: r        IntAINTCInit();: k. _& ?( A5 U( G
# D/ U7 r0 k5 b4 x
        // 使能 IRQ(CPSR)
5 D! J9 {' l6 W        IntMasterIRQEnable();! G$ V2 p8 @  Y' v$ A& e. N# A1 G
! o+ w6 w. ^) k9 T- @( U/ u  ]
        // 使能中断(AINTC GER)
, X$ ?- ?' ]! n" ]4 t" h        IntGlobalEnable();1 W/ h  y& K7 f# O
) z1 x- @/ p# g7 t5 g
        // 使能中断(AINTC HIER)
2 i4 ~! o8 U" m        IntIRQEnable();
* e+ N' m; b& U2 Q}) n9 S9 l) J0 p4 h% D/ c

. m; ~) @. K& \3 y
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/9 c4 F4 e: {( ~8 F6 u4 ~( c7 w
/*                                                                          */
, k) u0 `% R# Z# ^  O. [2 X% V8 m/*              中断服务函数                                                */
& M: S! s% A$ y! [/*                                                                          */
" r3 |! {/ `* T6 k6 R/****************************************************************************/
" r* ~$ K8 n" `void PWMEventIsr(void)
" p' _1 l/ B7 O& |- k{
0 `# y) ^/ O2 b        IntSystemStatusClear(SYS_INT_EHRPWM1);
6 {. b9 e$ |# j; w* {
7 N, O2 a% X. _    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
8 Q* }+ `& _9 m* c) n}7 _0 S" N, T- B/ ~6 C

( d8 e2 V" j5 w! ^) r" Kvoid PWMTZIsr(void)$ Z6 a4 r% L7 \& q) d7 `; e
{- L. t! O6 j) E! ~8 x: c0 H% T
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
/ k5 w& L. t, J  J' F* c6 _5 \1 W, h' S& E' m1 N
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);7 u  Z; ^& g! i
}+ h1 a6 c, t0 R" D9 s
( I+ y2 J: M' H7 f/ X8 D# i3 _/ x
/****************************************************************************/0 l% C# l8 [0 x
/*                                                                          */
1 n4 @  s8 F% P3 n8 [/*              初始化捕获模块                                              */
: i, d# s' f& R4 n  C7 K* `/*                                                                          */7 w" A; k& Q, `% ]
/****************************************************************************/
' n& |1 ~- g3 h+ v  S, hvoid ECAPInit(void)
. [$ W4 w2 c" V7 ~{4 C0 R: h. S- N
        /*-----设置 ECCTL1-----*/! K. [+ x1 |6 T# K/ I( j
        // 使能CAP寄存器装载
4 M' Z! o% \. z        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
) \0 Q( g3 N/ d2 S9 X% P4 l        // 设置预分频值.* w% f# `9 {( a' x, M
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);( `6 @1 m1 j8 R0 M3 @9 t# K
        // 上升沿触发捕获事件9 C3 ]0 [2 k; L& t
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);8 ]% e* W5 G; G0 ^3 E7 e0 n
        // 输入捕获后重新装载计数器值.$ Y5 g" E, X7 }, k9 V8 P3 ~
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);: q, y# y& l$ o" K

( \! R% H7 t+ u        /*-----设置 ECCTL2-----*/
$ K6 D" S* U+ u. ]        // 连续模式( ~* v  D- }3 u% `* c
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);6 [, }: c5 l8 e, D
        // ECAP计数器TSCTR持续计数
. e% Q2 ~& Q! R" ^: T. B" Z        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);$ J6 d* u2 L* ?+ z6 y
        // 禁用同步输出和同步输入
' X2 F# C1 H% O7 O        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
5 ?0 t: V2 O9 q9 M        // 配置 ECAP 2 为 CAPTURE 模式2 @4 D3 x% V# r' E9 A" l# ^
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);, m1 m5 U6 t' a4 D( [* q
! j1 u, g# F% H' {# w: s
        // 使能中断3 D7 S7 Q+ m* ?
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
5 g8 l% m, V- `4 O3 B9 n5 ]}9 [. N/ ^1 P/ g1 V  V

5 k4 j- C9 [' U9 j/****************************************************************************/
9 O6 k0 q& Z) `( r4 f/*                                                                          */
/ i5 e% U+ `3 }1 h2 H/*              取得捕获结果                                                */6 }+ M1 ?4 o" }7 J% u% ?
/*                                                                          */
$ x: W4 H# z4 R9 Q9 P/****************************************************************************/
( T# o% P- W0 J# x% j4 p3 qunsigned int ECAPRead(void)
' `0 X4 L+ X+ V6 t+ _- l{
, ?% D  Y9 b8 F6 v        unsigned int capvalue;
2 L2 N7 R( p- C" F6 v, w2 E$ u        unsigned long frequency;
4 g, u' V( F/ g' L0 B" F# b! v* Q# J3 s6 l6 v4 O
        // Event1 中断标志0 n+ H9 x! L' h, \
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
: G! Q- z) m' O, N: _9 [5 x6 ]: Y5 S        {+ t; m5 W& X$ c0 y+ @$ D; g1 K
                // 取得捕获计数+ |$ Q8 ~. D* e% Y  Z" s
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);( Z. j3 t2 Y; k5 N. L
                capvalue = ECAPResult.cap1;6 F! ?7 R/ P  N3 @, r: m* s
- h, W% y: p9 j/ M. \/ F; \1 R
                // CAPTRUE 模块 228M 时钟主频
6 m1 j& }" a+ [  R# Z1 h3 X: i                frequency  =  228000000/capvalue;# U# C! w+ x3 S8 }. a, z2 P
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: o8 ?3 K  C! s' D$ W

! G- h/ S3 F* ?% g+ b                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);: H4 u$ ~! l- [3 ]
//                IntEventClear(SYS_INT_ECAP2);
- e+ o8 ~3 R0 o1 m6 g6 W        }
/ R: l8 K+ c) g# }, `! p        return frequency;& a1 `7 @1 E/ d" p" F
}; l1 j+ ^0 B; x% M( U
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
! f, I, J) p0 C: u1 }& 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-5 13:30 , Processed in 0.044630 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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