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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/' Y+ W# \- f' [* H( P+ u3 p
/*                                                                          */9 P& P4 h) \9 A3 n8 q/ g1 M
/*              宏定义                                                      */- q6 d; S+ X. A! D+ |( Q8 Y: X
/*                                                                          */; D3 Z6 O7 s+ ]3 `1 z6 k* k
/****************************************************************************/" T8 a, n4 \5 p3 @
// 软件断点' M$ X$ b0 d% _, n& U% V
#define SW_BREAKPOINT     asm(" SWBP 0 ");* [  j" G; m7 a5 h

4 U/ c5 }+ J3 y// 时钟分频4 ~9 G0 x& _' {) e7 F
#define CLOCK_DIV_VAL     228& X. r/ [6 c0 D0 H  U# r+ x6 v
' q9 b" y1 K2 B6 H7 L0 }. V
/****************************************************************************/7 N' K1 i' e1 i" P$ B- X% V0 b+ B
/*                                                                          */7 X  P6 C9 t) }  R7 U2 U6 P
/*              全局变量                                                    */7 j# Q" }* A  @2 R* J9 x
/*                                                                          */- Y5 o. O( V# s
/****************************************************************************/
4 Q; a- r$ y& J9 l  IECAPCONTEXT ECAPResult;, Z% ]; S2 A3 E. p0 Z
! Y( \; U$ O0 T5 _" G8 q
/****************************************************************************/! h5 ]& A2 o1 ]# i3 U
/*                                                                          */" @" @& m2 A( n
/*              函数声明                                                    */& c7 S! J  |1 N5 Y) z
/*                                                                          */+ y: @% H! q1 @- {+ i* y, W/ ^
/****************************************************************************/( J0 B: ^7 r7 q/ i
// 外设使能配置
2 ?0 N: f) q$ K, r9 `2 g& vvoid PSCInit(void);/ n" f  e# p$ \0 ~

" r. L3 [+ D! Q// GPIO 管脚复用配置
9 v# }( r1 X* v7 Hvoid GPIOBankPinMuxSet();
/ f1 K% }- B( H, ^" D. ]" D1 e, |1 a3 C2 U0 s$ s
// 产生波形
+ L2 T+ B6 G) R& z. l, B8 {' D1 h# gvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);* k; Y3 t+ F5 z6 a
void ChopperWaveform(void);- _- q/ F6 S0 k4 H( X/ r# B5 I
+ {( p) L1 d  E' U" u: ?
// ECAP初始化和读函数
) A1 S9 Y5 ?* hvoid ECAPInit(void);9 A" k+ t! N8 j, u: w
unsigned int ECAPRead(void);
1 M+ ^4 z3 h5 Q8 \* j5 ^
. F2 w7 p1 B- z! V//ARM 中断初始化
$ D  s. A7 z( `  t+ Wvoid InterruptInit(void);( T' V& N: c$ F1 P- q0 o+ Z% j

1 E# d" }( m4 J0 F1 a// PWM 中断初始化  n# p' l, e* c/ Z
void PWMInterruptInit(void);
" d$ i# r  h0 D) G  Q: I  W// 中断服务函数) b4 N2 q5 y: y% X  m8 C, }! t1 T# {
// PWM 事件
2 \- \' D5 Y3 l6 c0 `1 tvoid PWMEventIsr(void);+ n. o- [9 K2 _$ A7 D2 x7 k
// PWM 错误控制事件! l  Q/ z9 T7 e
void PWMTZIsr(void);6 w3 ~4 Z. [% j, J" G5 ]! d7 r
: m, |# Q  O( W) F* v3 v9 u- S
/****************************************************************************/+ E  F5 b5 z8 S/ N) G
/*                                                                          */
+ R3 }% T, `1 h9 y/*              主函数                                                      */
* w8 E# f& l& _* G& Z9 l" r3 X! T/*                                                                          */
( o# Q! r' N+ @, E* V/****************************************************************************/+ O4 a* i  s% B6 c) j
int main(void)
% ^  M  t: y- g, N" D  @2 d{4 T# z1 K+ \$ O5 _' g
        // 外设使能配置8 Q# H0 J' H* ?$ e( A4 m: t7 m
        PSCInit();
1 E6 }/ J; R& Y, e0 e4 ^5 }6 N' H
        // 初始化串口终端 使用串口2
/ V- J9 b1 C$ R1 E' e        UARTStdioInit();
8 `$ C7 B3 h6 e! }: r4 F& {       
, P, E" T6 c2 t/ j* h        // GPIO 管脚复用配置  B4 ?& W4 H  I9 Z$ s
        GPIOBankPinMuxSet();
$ L: A5 |7 l7 _& |7 H! J
2 a9 w1 D# G# W# j' K0 [        // ARM 中断初始化2 F$ w' [+ t  C7 }) \
        InterruptInit();4 b7 M9 ^6 V) p
1 u! X. z4 C% c3 \' {) {- y% z
        // PWM 中断初始化; F. C2 J: A2 n+ E: G0 z/ o' a0 W
        PWMInterruptInit();% R' l% w- j) ?: V
# ^) h( M4 r( v! }/ [5 r6 K
        unsigned char i;! f6 [7 Q8 B& {1 y
        unsigned int j;. x8 M* w% \* H: R+ l' R3 q) t: y+ j
' R8 w3 b& I9 u5 c$ H! D
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);* h& b- }, E' `3 m
        UARTPuts("------------------------------------------------------------\r\n", -1);8 v' @% M) b- R' U! Y  t5 T
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
% M5 h3 r8 d; v  {- k0 b; }$ ]        // 产生波形! n* E# t/ b9 w- G9 {
        PWM1ABasic(25000,50);3 ]1 m" \  J9 R
* ~; \: @: J) \* Y8 T% d
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);% h4 q+ k: Q3 G5 F, v
        UARTPuts("------------------------------------------------------------\r\n", -1);, ]  K" u- Y, k/ E* j) b* L2 e5 o
$ d! e& k9 T: ?6 w2 \$ f

# F% F, P# X7 `8 q) f5 @5 E: _/ C' z
        UARTPuts("------------------------------------------------------------\r\n", -1);+ N; b) ?8 r9 b* Q9 X2 X
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
: E* B# a6 R7 }( c+ e7 ?  k1 R7 Z        // ECAP 捕获初始化# X( G; P9 j2 f6 t( p
        ECAPInit();1 N  N# N- Y  t4 [, A
        UARTPuts("Initialize ECAP.......\r\n",-1);. P. ^* g! w0 r. S) G
        for(i=0;i<5;i++)" u" g1 h# f' r4 E3 @
        {
' k% y3 ?* Z5 B" r: Z                    for(j=0x00FFFFFF;j>0;j--);            // 延时
% m2 g) L# a; l5 p" t$ v7 w                    ECAPRead();" F/ E; {' d2 c- c
        }, s6 |: v* A1 b; _) \; h" n. q' H
        UARTPuts("\r\n",-1);
& H+ R9 j) \3 ]3 ~% G/ O        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
$ ^5 R: v! Q8 h) Q- u" U8 [        UARTPuts("------------------------------------------------------------\r\n", -1);
, T" |$ a' v  A" X, J
8 G/ H8 Y1 d" F' t        // 主循环6 `/ r' G# m% w$ Q
        for(;;)
' N. T- j" U+ R! ~; L8 u  R$ g        {" `3 N. D" Y* R8 B/ M: m& v

) f# ^/ G1 c& M$ a        }
& [9 s3 I, b8 i$ ~}
0 S1 s: `, I8 v9 s) [! g# }* b& G% k1 X" K: j8 [0 x5 @
/****************************************************************************/
5 e9 X* Q6 t4 h3 b# [* v/*                                                                          */
9 f2 J5 Q) E! }1 D! M/*              PSC 初始化                                                  */1 _* ?! {& e! A7 _* m$ ], d
/*                                                                          */7 ?' P# U, X2 ^4 R
/****************************************************************************/( j, @: C; U! A3 z7 F& ~. r
void PSCInit(void)  `+ Y5 l; l: W. h9 Q
{
6 Z$ M2 p/ V" J9 R        // 使能  EHRPWM 和 ECAP 模块
  v7 M) f5 p# a3 i# W2 l        // 对相应外设模块的使能也可以在 BootLoader 中完成5 `- O" H' V# N* o6 E, I0 X
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);' ]6 ~) U" Q( s8 Y, G3 Y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
7 k2 n3 b- H! l8 Y, M0 R3 v! {}
% q* U# g  Q* O9 u& x
1 g. |2 N+ s# [* h1 x  ]' |. F/****************************************************************************/# Z5 Z2 b4 q! ?1 T- y+ ?
/*                                                                          */
2 V8 a& h4 Z6 z: `8 z7 o* k: N/*              GPIO 管脚复用配置                                           */( p" @( d* O+ W: ?' w0 K4 ^
/*                                                                          */
% C+ Y2 c3 A, `8 R- J- k/****************************************************************************/
: f2 f' s5 S& q- f( S' Ivoid GPIOBankPinMuxSet(void)8 d6 s( \4 {1 L& U! M1 X
{
+ x$ n/ I+ k' l' j: H9 w6 i        EHRPWM1PinMuxSetup();
- N9 m6 d6 K9 }. i) O; F1 }0 W$ L( w% U& o' w- D2 l
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)1 F9 g9 q" H9 ~- u6 e/ D" M
        // 作为捕获功能时管脚方向为输入
, ~- A, F! ]  s8 C+ H        // 作为辅助脉宽调制时管脚方向为输出
3 p$ X% s  m0 C    // ECAP2 / APWM2
2 f# V, p% X" ]        ECAPPinMuxSetup(2);
; \' t! n9 \( ]; r$ ?& ^. m
/ z8 q8 ?( g- u# c/ g        // ECAP2 / APWM2方向设置为输入. z& V% Q/ R; L" N4 V$ e1 Y$ J
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
% A1 L9 x2 ]0 ~}/ j5 K# {' V, L1 n  w
5 b' k: E, L# f; l. N, Z2 M
/****************************************************************************/
) p9 J& t1 L. {4 [, p7 X/*                                                                          */
$ f$ k8 ~' x3 ~, p! p6 }6 \/*              PWM 输出波形                                                */" K9 E/ ]* B3 u+ ^& D
/*                                                                          */" r* P+ @  u% L* ~" r0 H- M
/****************************************************************************/: m" r; @6 Y% m$ ]+ k1 f
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)- _# v: `, r" f3 @  `4 [4 \
{
0 ?5 |; F! Q" l) h: W, T4 I    // 时间基准配置4 a% u: C& v' |  E/ r/ ?
    // 时钟配置" F" z5 U, \8 W
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
4 _5 t5 z8 O  h8 V$ `: l
. K; J+ [" ~" \) k6 u  y- x    // 配置周期3 x# k% U- O  g- }0 ]' F
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,0 I' H7 u1 b% K9 \! G3 S( l0 @2 s
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);4 Y  a9 i, q' {6 F1 L( @' U
6 k, h% _: k0 H
    // 禁用输入同步信号5 D! E8 _* h' M% P$ X
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);, o) K  T$ Z; {* @' e
9 y0 Z; j$ S, Y1 \, s
    // 禁用输出同步信号
9 n' U3 M% U$ U! Q) {+ \$ O3 m    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);; L0 D( Y$ _* B" Z3 r
- w3 ~; b  l; L/ X7 C9 g
    // 仿真(DEBUG)模式行为配置
. G/ Q7 S& f- ]& J* U    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
8 o( S# ~; R) D4 V8 ~) U9 b
& k- n: }: g& m& D7 s2 s7 P    // 配置计数比较器子模块
9 R6 ?& f# `$ ]0 x5 P! C0 v    // 加载比较器 A 值
7 Q' _) f7 v8 v3 o    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
( j- v' T: Q* l1 \                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);/ `8 X5 s' f8 u9 f0 ?( `1 X5 B

& O  W* Y9 L+ I& j9 t" V    // 加载比较器 B 值, J' K  S/ G  F  S6 I9 H5 U
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,8 X( h5 `" g! z# S1 G2 I1 ]
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);; r: {4 ^9 `0 Y5 l

3 t; m+ o7 C6 z. f$ D$ J( E    // 功能限定配置(输出引脚触发方式设定)
( ~9 T( N/ d; l+ ?+ Z    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
  p! c6 H/ }: {" L    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
! _- s5 V  y. [                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
) o& L5 j4 S2 p. q# K7 m                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
7 F8 {' s4 n4 H% W4 X2 h' f! o' G! n0 H
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
! n2 o) M6 ^& o+ g3 H    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
, v: A7 f1 r4 c; y9 Y) K! U
* x( r. W6 }$ E7 E3 [6 Q9 Q5 L    // 禁用斩波子模块7 y  `; h! B3 n. j3 Z
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);# p' J/ q* H) g

" Z3 y! m7 m( ?. |6 B- h    // 禁用错误控制事件5 {8 H7 Q" w; P, D* w
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
% O6 S7 \& x. i- _    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
1 e$ u6 s* G  C3 @% l9 `9 o3 ~! J# r; J
& o( E0 x9 w0 W; F& s' h. |. J    // 事件触发配置- a1 Y, ~; h, j1 q# h
    // 每三次事件发生产生中断
; Q2 T  K' r; S% a) E    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
" P$ `! R7 [2 S# `; q    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# {: s- U0 w& F  w$ K    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
! f# n0 ^! R! g5 _. s3 b    // 使能中断: N1 M) \# b8 Q( e5 f
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);9 S! O7 `/ }$ B' G; p
. x6 [) b- l6 H, `; H
    // 禁用高精度子模块
2 C6 H1 x2 H7 a( D3 R    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);, e4 n: H2 _: c2 z& W7 O& Q% t2 d
- b3 l  c; F% N
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
1 h0 N5 E. h& S. k8 w3 h( Y( X}
! O2 B0 B" C, Z) Z1 W3 V8 }; B3 q/ e3 A. O
void ChopperWaveform(void)  i: Q5 G) s1 l6 Z
{
% }! \4 S% J* n$ \9 A% j8 ?% {    // 50% 占空比$ q, X- l% Q' f9 |
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
" g3 ~5 Z7 t. h    // 4 分频. s* _+ c5 y; ^
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);) e. M& D0 l4 O% }
    // 单个脉冲宽度
* y) \+ T3 g. l    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);; S7 n. o+ n; i) v+ W
    // 使能斩波子模块( W* q9 q: D: E, w
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);) Z8 V# Q, ]) c& a9 e  w. s
}
1 O. g  o! }2 d: _6 h6 @& J, s( T! z, ?; }7 B2 }
/****************************************************************************/
0 s' u( c) \& E- R8 \1 \/*                                                                          */2 n3 n0 m" ^6 k: o4 _! Q
/*              PWM 中断初始化                                              */
/ d* s8 I% s! [/*                                                                          */
1 J( ?, O8 C8 R: I/****************************************************************************/
0 Q- J/ v7 h$ B) Ivoid PWMInterruptInit(void)
* s* }/ J0 g* ^; Z{
  g* M6 N3 p8 z1 t" u' W5 W        // 注册中断服务函数. p1 E: R2 j: n
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
3 }5 H/ j" _; z6 q/ V) v9 N        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
3 i4 r" b1 [4 q  D  X% t6 m* l
8 X4 b* K+ r) B8 G        // 映射中断
. J4 f/ T: F' A- E8 w  x% o        IntChannelSet(SYS_INT_EHRPWM1, 2);3 i2 }% u* r& f
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
/ Y* T( \5 Q% K; I
9 y9 A! P& a2 I# U+ ~        // 使能中断; o7 T2 h2 D( |. y$ y5 D. B0 z; n9 |
        IntSystemEnable(SYS_INT_EHRPWM1);* |1 J+ n9 l) \
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
3 v  O' A8 f& i8 x}
! q  E4 X( ?3 E+ V4 [
% m* I9 O2 W+ |: P! `/****************************************************************************/
8 ?3 f0 Q( Y8 D/*                                                                          */& v. h1 F. D: t- h
/*              ARM 中断初始化                                              */
! d) A- o0 G6 T  O6 A) R5 s/*                                                                          */) L9 p* g% W$ P* x4 v! R! t
/****************************************************************************/1 }0 p% E6 J  ?' g4 x* K
void InterruptInit(void)
# \) k' y2 x; T9 x" i: h{
; t: l2 O! o7 X: B8 A* z        // 初始化 ARM 中断控制器
8 h. U; _4 s# M/ f$ c# {! t- @9 p9 T        IntAINTCInit();
, O( B; L7 C  t) ^3 Y# D4 Z1 h; d9 ?( [- _8 [2 X& w* K
        // 使能 IRQ(CPSR)0 }: P) U: _2 N4 w7 Z- T
        IntMasterIRQEnable();
" W( t; F& w2 n' d& w# j) M  l
8 v' C& L' \8 w  ^* a* Q, H0 N# ~/ `        // 使能中断(AINTC GER)4 Z2 Q- S$ t9 g# M
        IntGlobalEnable();
4 t" e! K; y4 a2 h- K
4 ^4 `. L3 t' [& e. i        // 使能中断(AINTC HIER)
- w/ q. ?9 ^6 Q: Y6 @) F+ u        IntIRQEnable();
2 o! ^" ^& w0 V% t( M4 X& l$ `}5 _) o, V  L3 A. Q! `8 B, Q% H- b; L
5 H% D6 c+ I4 p9 B0 ^
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
0 X' h9 V( C) n& {4 j& |! u/*                                                                          */
* @, _8 A, |; @( `3 N# x/*              中断服务函数                                                */
5 \" f8 ?1 E; [) L6 o! I/*                                                                          */
) |9 U4 E' X9 x/ h0 F: z& N% ]9 U/****************************************************************************/
6 ^0 @5 J# X+ }$ @4 [void PWMEventIsr(void), S0 U2 {( ?3 |2 @$ D6 u
{
* E7 O. F$ S* q$ x% T4 l0 e/ K        IntSystemStatusClear(SYS_INT_EHRPWM1);
# E. R, k; s+ d" C. {( M# k3 g# G' `/ H' G8 P' n
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);9 ]9 b5 p2 `* a( {% _  L
}
( U8 ~" M" c8 e& j$ U( z9 @$ B9 H( Y1 k* J
void PWMTZIsr(void)
4 l: L9 l, x# }, }! B. A' P' z{
0 v# }: ~# o$ [        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);" r+ x1 K" u, ]5 [4 x$ ?1 R
8 o0 i; z* g. h& }5 A: p" l& L
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
& l5 F. K0 v, f; B% i4 g}) R, A$ n# `; t  z! Q7 l

& S  @. W, ]9 c/ v/****************************************************************************/
% g, V. |4 {" I* X* I/*                                                                          */0 F* x0 k# |5 E
/*              初始化捕获模块                                              */
# O5 c$ D6 I8 T/ K6 \( d/*                                                                          */- \+ p  O9 e" c# r) C5 I( n
/****************************************************************************/
6 a& K: Z+ g+ d/ o4 J& o2 n! J( g% P  Dvoid ECAPInit(void)
+ b. j  O: A( j/ `1 p. X% a{
. r1 d  g- i" D0 U$ v) e4 f; C( }        /*-----设置 ECCTL1-----*/
- L: h( l. D* ^) O        // 使能CAP寄存器装载5 Y' U0 k4 K! [: r/ ^1 W
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
1 i5 \8 g3 z* e8 ?0 _        // 设置预分频值.( h  M$ b* ?) |( n
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);& I9 d5 q, t* d
        // 上升沿触发捕获事件
: W9 J7 H# a( ?! ~/ w4 T( k, a        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
4 q5 g6 g8 D& g1 ^6 S        // 输入捕获后重新装载计数器值.$ J  Z9 T9 q8 e! ^0 K$ g
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);  I/ u$ F3 X6 l( P0 v( o4 v
& i8 b" F  A' O1 l* Z) r
        /*-----设置 ECCTL2-----*/% o2 T0 e5 Y9 C% S& M, f  E
        // 连续模式! P- E. H( z9 k9 E
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);- s4 S% J2 ?- S. K
        // ECAP计数器TSCTR持续计数" Q3 D' r4 t( Z! ^
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
. V7 `8 O+ G& L# y        // 禁用同步输出和同步输入
* T: c3 m: p% x- B2 B! t" M7 W        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
5 t, l& ?5 X3 T) I, e+ b% u3 L        // 配置 ECAP 2 为 CAPTURE 模式2 t( k- [7 z, U& Q* c* g/ m
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
$ T$ Q0 S8 F3 j; P, w: m( K9 o1 o9 T* x+ M8 ~
        // 使能中断8 t0 F2 x4 \. |9 m8 @, J7 e
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);( o8 B4 V0 X$ s% H3 f! A8 D1 f8 l
}
2 s* |: u* K6 I' m1 S+ ]& ~
' \; U( \2 ^# P6 h/****************************************************************************/
% E$ o' Q) P& J: y' y$ |/*                                                                          */9 S5 k1 w+ {! F, d9 I. c
/*              取得捕获结果                                                */: S& |, x6 ]6 S
/*                                                                          */
1 O6 v6 W- e4 J) ?$ W: ~* \" u/****************************************************************************/
: b! f2 h$ |$ B9 \4 y1 R" `( junsigned int ECAPRead(void)* q1 z" y! T6 W- d- q+ {" y. G
{
( N! I4 a, n& S- @' v; h/ \! E        unsigned int capvalue;% o; X) w0 V+ r: s. G* s7 u
        unsigned long frequency;0 K1 r, e6 l2 Z7 X+ f( s, R
9 N/ B( j: |: D7 y2 J. e/ w
        // Event1 中断标志0 g+ z# m; I9 ^
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
& c7 j: @, `. k1 c8 n7 P, h        {
7 W( D: O) Q# y( C5 o3 z                // 取得捕获计数5 C( v0 S" ^, |6 D8 Z& p
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
% N2 I4 d' T- ~+ @9 w+ i& N                capvalue = ECAPResult.cap1;
4 h% `. d# P0 n/ m
. Q5 H) l1 m8 J/ v5 ^4 Q; Y                // CAPTRUE 模块 228M 时钟主频
5 S! K  k9 e7 d% L% c9 ?                frequency  =  228000000/capvalue;& v" e) X3 _: k' o# J) G
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
5 H8 \2 E! \- @$ j/ D7 g( ^5 D
. [0 K' V  q: i, ?9 L; i) P8 ]                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);1 w, O9 K- d; w  }, C7 J3 I. N
//                IntEventClear(SYS_INT_ECAP2);
% Y$ N, _2 i  ]2 m        }
8 e/ A& z7 M+ Q! r7 f& l. u6 E        return frequency;0 e' @: [* s, X
}2 S, G0 G0 n( E% Z
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。  ^: l/ H% K! {, d$ Z

本帖子中包含更多资源

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

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-7-19 06:58 , Processed in 0.046929 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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