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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/  N0 z8 ?8 m* q
/*                                                                          */
, m' t: B7 z$ Y( S- E  [+ S. V/*              宏定义                                                      */
) a, a5 ~  f# {8 C% R/*                                                                          */
4 V3 Z% e' F9 L& o/****************************************************************************/
0 a; w* e/ k7 q// 软件断点
: H) a* l6 r: ?+ i& ?#define SW_BREAKPOINT     asm(" SWBP 0 ");
8 k! q- Z$ m% [: b$ C
% a0 Z! I( l* i- f- P: |// 时钟分频
$ i8 \9 Y4 |3 }$ |4 k% {6 v#define CLOCK_DIV_VAL     2282 W' l* }. l6 T, n- s* p/ r

8 H# u& f! e, O% z  ^+ [/****************************************************************************/
- w4 Z" q( R' z/ g& A/ D/*                                                                          */
! c2 L% P& T% p9 q7 s& ~/*              全局变量                                                    */* J& r  K0 H8 `0 F, X( J0 }% M0 j
/*                                                                          */
6 Z3 J3 L1 ^  l. ^: s/****************************************************************************/
) d% {' x. r5 |2 ]5 GECAPCONTEXT ECAPResult;
- g0 Y- }( [, C
. X1 B0 j5 }0 G% o" y, v$ i8 N/****************************************************************************/- g' i: S" R& C9 e# i
/*                                                                          */# X6 {4 A+ L" }- v: v
/*              函数声明                                                    */# J0 O0 n% q; o  F$ E; F
/*                                                                          */3 j5 z/ Z) ^5 X! Y
/****************************************************************************/
2 m9 ?, q5 L  P+ @. _// 外设使能配置! |! D" H, S% H5 \" J
void PSCInit(void);, \9 h) P, w& }

8 z4 x' q7 i( |8 v0 O// GPIO 管脚复用配置4 e1 I5 T$ g! t
void GPIOBankPinMuxSet();
* h- Z9 G4 a% {8 a! n' {& ~9 w4 b) ]$ X/ g. {; R2 D
// 产生波形; O, X/ t* y+ X0 g& x4 F
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
+ R2 B/ O: {+ l& T. X( z- z1 u' uvoid ChopperWaveform(void);
. C! [1 L; }9 U4 a; x
9 N5 q4 C* J. l" x% S1 T// ECAP初始化和读函数
0 T- m* V) H: I8 j; Dvoid ECAPInit(void);
# @2 U  S! c9 [' g3 t: Wunsigned int ECAPRead(void);$ p+ r% `& I1 z. C4 Z- Q

2 C" ^" K7 P  ^% a" ?- V//ARM 中断初始化. P3 Q! i, I  N; y0 d% l7 T
void InterruptInit(void);# B* Y& R5 |  y! _; Z; g* L
7 o: c4 _) [6 l# N. l! j
// PWM 中断初始化
! E. d! K; d3 u8 @3 Vvoid PWMInterruptInit(void);  B, o+ \  e$ V* v0 D& R
// 中断服务函数, V/ E3 \# u6 n( }0 j; B8 |5 u) V
// PWM 事件
# d; |% r# ]6 W0 O3 x7 J( X: ivoid PWMEventIsr(void);5 E# ]0 ?6 ?. s5 h& |0 C
// PWM 错误控制事件
6 a) z9 S  e% R% ?- }void PWMTZIsr(void);7 O( K+ \& |1 m8 X2 J  c8 G

, ?$ C; r) V( v% I/****************************************************************************/; L; D5 t; R  G+ X8 p/ C- X
/*                                                                          */+ }. t1 {9 i$ K2 b  v
/*              主函数                                                      */2 `, K  P* y: i* ?
/*                                                                          */
4 e0 ^2 g  m+ O- w, U* g/****************************************************************************/9 M0 |5 I# n8 s) W0 U" @- Q3 c) O
int main(void)
- ^& o& N" q9 G/ {! k* ~1 H{8 x+ k5 `: \& Y9 `' N) L3 j
        // 外设使能配置
9 R8 X( i8 S' ?. v        PSCInit();
- x9 b) I* ?! j" n  K  N0 |( D6 E6 M8 `; l" G! `3 m8 e
        // 初始化串口终端 使用串口2
( {9 Z, Z2 b/ c: ~" |        UARTStdioInit();
6 y5 y) U" K, o. l, {        5 N2 D/ M$ Y8 L* I
        // GPIO 管脚复用配置5 H$ ~; p& v5 _! Y8 {# s
        GPIOBankPinMuxSet();
8 `; c$ q3 s: }6 ?9 x" d0 ~" P! L  e4 W! s2 Z& r9 p
        // ARM 中断初始化& [' B$ l! h2 g5 l$ `3 {
        InterruptInit();
6 T9 Z* l5 e9 ?' H4 G; Q8 b2 {. Q1 h$ Z) E, j) z$ _; H/ t, Z& u1 ?$ o
        // PWM 中断初始化5 M+ s6 n8 `4 r4 N' f! D
        PWMInterruptInit();
- `- f1 N) s& x! [2 \' _4 A
7 j& W* D- F, c6 E+ Y5 b" z  U+ |3 i        unsigned char i;
, ^- ^  i4 K. [% _        unsigned int j;: U* E, o, p& o3 ?9 v- I7 |6 p

& p4 z6 b9 w. r) [9 F        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);! F9 a; i3 z1 g+ u& }7 K
        UARTPuts("------------------------------------------------------------\r\n", -1);
6 `1 V. p5 S- e& b  G        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
6 t/ M4 X) W8 h( J, M- T1 |        // 产生波形
* X4 g/ B" ~$ T: ]' {: _        PWM1ABasic(25000,50);- x- i; L% t; z" |7 m! m. Q. Q# \
5 l0 C  @) _) G& }/ s' b" ]
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);, A( Y: C8 T9 ~  Y* [
        UARTPuts("------------------------------------------------------------\r\n", -1);
  e! L; z2 f' L: \4 l( [- h1 I; }9 E8 z3 f1 t+ A" A' a$ f/ _: H  b  ^
! Y+ S, L3 o" ?8 a
' a) H3 t$ `! E' n& y+ i
        UARTPuts("------------------------------------------------------------\r\n", -1);. Z8 j, n& P8 ~, {1 c
        UARTPuts("                    C6748 ECAP Test\r\n", -1);/ q& Y! T; \2 J( M$ h9 j' {( @
        // ECAP 捕获初始化2 Q$ y" {9 ]2 h9 a+ {
        ECAPInit();
" m9 o. X; E% q& f# u  [; {, ^        UARTPuts("Initialize ECAP.......\r\n",-1);
  D; R' q7 y5 P0 K        for(i=0;i<5;i++)2 m+ _9 q7 O) X; N# G" R
        {
" Y7 H% g& D! u                    for(j=0x00FFFFFF;j>0;j--);            // 延时+ ]$ H/ r2 I( m- `+ `  f6 f3 T
                    ECAPRead();' t' w- O7 `4 G# s
        }
9 t& N8 l1 ?) N* D! p& d        UARTPuts("\r\n",-1);
* W: e' e; X) n$ ]0 n6 T- y7 v4 {        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
* o: L( ~3 {' T% y& }1 e        UARTPuts("------------------------------------------------------------\r\n", -1);
4 s/ I' [3 m' v- k  ?" N5 g: V
& @3 a- o, L; K1 r        // 主循环6 q# B% [7 \! g7 }2 w
        for(;;)
5 n  |" Q8 d( h( k/ \+ q, j' o        {, @: n' G* v: O6 T8 `% b) k
2 {5 _# @$ b2 X6 {  G# g. P
        }+ b4 P! H' b  ^& E
}
& G, f* ~7 ]; B( f! a0 n; d. ]& R. ?
/****************************************************************************/+ c  X+ ]# {5 u! n' u# ^
/*                                                                          */
( I( c+ q; R; b- ~4 e/*              PSC 初始化                                                  */* Z) g4 e9 s* z$ [
/*                                                                          */# S& z: @, N7 M  a
/****************************************************************************/1 y; H$ G: Y4 N" z" ?4 Z5 `2 B, a
void PSCInit(void)2 r; V# N# Y& E) i& V
{' |* Y4 R5 r" K3 o- P; n$ w$ O
        // 使能  EHRPWM 和 ECAP 模块8 v* K0 b/ A$ ~. z  K- Q; z
        // 对相应外设模块的使能也可以在 BootLoader 中完成9 ]: V" e6 J5 F9 h
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);9 p  a$ u4 s, A( D: d( s. F
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);4 G( w' M# v8 S( j* K. K. q
}
) v/ ~( p+ A5 z" q
, `  u# o! n3 o" T* B/****************************************************************************/
" o4 @% Z2 ]4 i; _/*                                                                          */
/ P; I! ^% w* ~8 p/*              GPIO 管脚复用配置                                           */
5 w% q% o4 E* u2 ?; ^( H/*                                                                          */
$ S  y5 E) o. S0 h- h/****************************************************************************/
! r- X6 B2 X$ T) }( hvoid GPIOBankPinMuxSet(void). |% c" V; N' B0 [
{0 p" S- l( T, }5 K" ~* R% g
        EHRPWM1PinMuxSetup();, W0 T9 I/ Z9 U- ]3 ^- `) f

2 [2 Q5 @) B8 w0 N6 D/ ]        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)" P6 a4 |  m' K5 B. X) s' @: O
        // 作为捕获功能时管脚方向为输入
: N' R- g' V. D4 ^        // 作为辅助脉宽调制时管脚方向为输出3 k! A$ b) a. @: a7 O9 q- b+ ?1 A
    // ECAP2 / APWM2
* {4 I' p# F0 t( P1 X8 ?5 K        ECAPPinMuxSetup(2);
3 ~# o! t( u" D' z5 Q8 P; O  P$ n: i0 U4 q9 D: p% b# R+ N
        // ECAP2 / APWM2方向设置为输入
) F/ M% D+ F5 n( u0 l        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
3 k5 x' G7 |! t' A}
$ k6 [: A" n/ N: j% t" _
2 y8 w( m1 U) ]: I5 `/****************************************************************************/
4 G0 F5 {, ?. x9 ~) I! c+ n/*                                                                          */
/ R  f$ R; ~3 z' q) h  f7 v/*              PWM 输出波形                                                */
. @+ T* D" z3 I7 N/*                                                                          */
# w" p: K% A6 S" u3 H. \, }: |/****************************************************************************/+ B* b3 s% C0 b, V; X' z3 A7 o: R
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)5 E5 R/ B" r1 C4 Y5 Q  b0 [6 x. |
{4 s0 y/ y! B" G  h( _4 K' P% |( a
    // 时间基准配置
& a3 m% {; r0 Z& n    // 时钟配置+ ?0 [- g2 U; {) f' P9 X' c# a
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);5 I$ n3 `, D% {0 s( ]

) l* m2 D% H7 k2 z5 x$ m7 e    // 配置周期
0 D8 G! h" n  D9 I    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
/ f# L7 t- n6 k                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
" r" _- b  J: X+ o9 y8 B
1 w1 I1 z; F: F! j2 d9 u    // 禁用输入同步信号
6 w& B8 [$ J9 M. I2 ~    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);& u& |* Q. Y; V5 z0 V9 R9 E# b# P6 M
4 o& J5 \) b) `: u* }* \8 F
    // 禁用输出同步信号3 u: _6 w5 P+ M
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
5 ~) {$ A/ X1 k5 N3 N6 W5 {! T% |0 F$ J& ]) x
    // 仿真(DEBUG)模式行为配置
3 l# U1 G4 @6 B& O    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);! r. a. I+ s) G6 c# ]$ _" D- Z/ |
# O2 `7 r' A' }/ {$ f! H# M
    // 配置计数比较器子模块
# [/ s8 f( u7 G; I. y& V3 t    // 加载比较器 A 值
0 S% V4 s8 Z. }" Y  H    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
+ w3 a7 W/ p- ?6 Z' q                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
# K( o/ B9 w. c; D
) d* b2 ~6 }4 \; J( Q/ `    // 加载比较器 B 值$ ~) S4 u3 X; J* t2 b
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,6 n; ^  \4 o0 W5 S8 Y2 W5 H6 ]
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) C+ u; x+ z- b8 }+ f

6 |9 j: `) s3 i$ }    // 功能限定配置(输出引脚触发方式设定)
- p% K! O; w$ v4 G; b    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
; ?* T; C7 ^0 V% ]    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
. E1 _" ]$ v' L8 C2 }0 s                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
8 f  v2 h9 W5 v0 a                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);$ G! Y  N2 }5 M3 w0 K# L1 z& Y6 D
# c4 X; L( }' |- t0 w+ F
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
. d2 d. Q4 r) t/ b5 W    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
5 E- Y) Z! h& X. }
5 g% l; o7 b$ `7 }8 T. J+ z    // 禁用斩波子模块3 {; W3 }3 {3 O3 M) c
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);) h1 Z% Z9 W& `+ c& W8 H* K% e; T

. E4 f% u# U5 Z: p$ Y    // 禁用错误控制事件, `/ g: p9 k% n8 f% N3 K
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);0 W# F3 ^2 b( O; v: o1 P
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);3 ^- F+ u) O+ a8 F: l0 C: {, k
1 F7 E* i' `5 I" B. J4 t, v/ }3 p
    // 事件触发配置
6 {6 J0 |" k/ W    // 每三次事件发生产生中断2 H2 N) \4 W6 y3 V
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
, q* p4 _9 [" O# g    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件0 p! e* H6 t% k; J4 q
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);, |5 Z7 J* ^  T. U* E) ~; |
    // 使能中断
0 B& ?* E6 Y+ x5 I/ C    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);7 N- a& g) D/ |
0 H4 `5 ?+ y' {5 }, H
    // 禁用高精度子模块2 G' I# S+ X4 M
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
" v% {' u0 o( O# p0 r' k7 b: s* n5 m* [
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);! c  J+ }5 ^+ H4 e# M. I( m) O
}2 K8 t/ `- f, Q

& u! p7 H  |# W$ `) d$ A! q+ tvoid ChopperWaveform(void)+ O7 O& {# d. D/ `5 ]! u" j% ~
{
$ i3 o/ H9 I9 n% f    // 50% 占空比
2 o5 N3 x0 M8 z% B    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);, t( I- `( E2 o! U7 N
    // 4 分频
' |! `9 k( w- x+ t1 M1 O    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
2 ^; \! O' E* T! U' l    // 单个脉冲宽度
# }4 T2 b% C) _# s2 ~  C- p    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);$ g: m) e5 P. g) H' `
    // 使能斩波子模块5 S* ~- V$ z( e2 \
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 t# q) m; {& W- I8 |}
3 u1 k9 M2 O, }; k0 P0 |( c" R3 v3 d" |3 p+ A
/****************************************************************************/
1 _& _! m0 ]" l% i2 V/*                                                                          */
. Y# I1 C7 r- s9 B/*              PWM 中断初始化                                              */( e  k, ]. x2 O/ a5 K0 M& t
/*                                                                          */
% ^' j5 O! I( Y0 l8 D7 `! ]" @/****************************************************************************/5 t: r' d* C- a; h% t
void PWMInterruptInit(void)9 U0 c: [  P" x1 u0 {) x4 g# X
{
1 C6 n" Y2 l) {4 V        // 注册中断服务函数- r+ W$ v/ E7 c
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
; h0 [3 m$ p) H        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);8 A# f/ e# k# p* n! j. v

3 X- {: }( d, O2 i) N        // 映射中断$ m3 @% O! {# n: a% \% ~
        IntChannelSet(SYS_INT_EHRPWM1, 2);; H) U0 @: R8 Z, b" M1 p
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);2 i1 `( T9 Y8 G* g7 ~0 A

0 w! b/ h) T4 U2 d& l* w        // 使能中断) t: Q/ @! O2 C( [1 ?9 C/ i8 P
        IntSystemEnable(SYS_INT_EHRPWM1);
/ K9 P1 u/ u( B        IntSystemEnable(SYS_INT_EHRPWM1TZ);
" G2 I" @1 x8 t8 U6 R# X}: s. f5 {* {' w  ?1 V. s% M+ j: t

3 y2 V" q; P7 }/****************************************************************************/
1 p2 x' q" G; T% {/ A0 k/*                                                                          *// t$ c$ f2 w2 n+ C  i
/*              ARM 中断初始化                                              */
1 `9 `6 v8 V* K% e/*                                                                          */
0 o# `8 m! k) R( h9 W# c4 X; E4 `/****************************************************************************/
* ]0 V% N! Z- b5 |void InterruptInit(void)" h( S6 y, w, W: y& |/ I$ x' ~" U
{8 M/ l7 Y2 B6 u' y$ O$ |
        // 初始化 ARM 中断控制器
. |* ?3 [- N: ^1 [& @# N% W, |        IntAINTCInit();+ G7 R# B6 D" H& \* j- X" Y

& J- @3 n/ a  F  @2 P! E        // 使能 IRQ(CPSR)# |0 v4 O, U- L( w& U
        IntMasterIRQEnable();
1 I3 z4 c: H' y- F. |1 G3 l7 s7 E/ i! z& A) d# q/ T
        // 使能中断(AINTC GER)
, ]3 y2 `# P# {& _. v! N5 C- u& y        IntGlobalEnable();
9 w9 }: I, R& Y
& \  W& ]  [* E. n. X7 k        // 使能中断(AINTC HIER)" y' K8 E: J1 K" _' o& B- Z4 h* F
        IntIRQEnable();. j7 J# X- Z' L# P* x
}
5 {. x) y: P; d; k' r4 X$ h
) h; _  X  ~. h( b0 ~7 H( c( r
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
$ F$ j* U7 b+ r; a4 v/*                                                                          */
  `* }; e2 j3 ?1 k3 c& K0 |/*              中断服务函数                                                */" _0 i1 m+ G9 P/ P; W4 H/ Z
/*                                                                          */
3 C/ s% {3 U% a" n. }2 Z% N+ ?/****************************************************************************/
# _) R2 v" k, I: E6 x7 Jvoid PWMEventIsr(void)- R$ O* Y) k% }
{/ y+ D# w8 v# o- m8 ], ~* f. M
        IntSystemStatusClear(SYS_INT_EHRPWM1);
4 k! r& s3 W. y% F. F0 P; F; ]/ u, Z% n7 m" Y+ a7 X
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);  ?5 E5 Z6 o# V/ k, ]% n: n$ s
}
: I$ H9 z- |& N& ?. e. h: a
! ~& u7 V7 t3 l- R$ Hvoid PWMTZIsr(void)
" ?6 O' A  J% I! A; u/ J# k$ _{
1 s0 U$ i, p' l. k; x6 j, ]9 l0 l        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);, q  _( w6 C+ q, h
  n. R% b4 w& k. W1 ^
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);2 Y. Y8 F) X& r) g) F
}# f5 L+ f/ r+ E1 {8 J/ u4 y
! m% q! |& B1 \: [8 O' A/ e+ q
/****************************************************************************/
" |3 [8 Y; S8 \8 s/*                                                                          */1 _4 `  z+ H% @
/*              初始化捕获模块                                              */" ]) F5 x, t1 [- V, C& ~! U
/*                                                                          */; y! D9 L( X# a7 j- g( |. B$ f# r
/****************************************************************************/! u1 N( \! t0 x: H7 i
void ECAPInit(void)
1 G* _; D5 ]: o) N{
5 @& [$ G% Y/ b: o  O( }7 r, n        /*-----设置 ECCTL1-----*/
- C4 m5 R4 H" E- i/ ^2 y$ b        // 使能CAP寄存器装载
5 r9 C6 q0 c, x! l        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
  u& P9 T8 I+ j& A# G- b8 F: w        // 设置预分频值.! d4 F  H: g5 R
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);1 L" D2 l4 E. Y. p, E( ?  c, u  p: n
        // 上升沿触发捕获事件
) S: l6 [) ~, W" F; b3 g  J        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);3 e( p% X3 u; m: L
        // 输入捕获后重新装载计数器值.3 I/ X6 a) }. g+ e% U! L
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
- k2 X+ J6 k! w# k
+ j7 ]1 V4 I1 r* c, W# G        /*-----设置 ECCTL2-----*/
% }# o7 s; z( F6 u' }* v        // 连续模式
8 ~/ K* t1 r8 ?/ M        ECAPContinousModeConfig(SOC_ECAP_2_REGS);$ M  E. F$ R, j! g
        // ECAP计数器TSCTR持续计数6 ]8 u, @  O: U1 \& D! y+ P+ P
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
6 _( q; s# m# G: C        // 禁用同步输出和同步输入9 ^7 K* b9 w* U. L. D
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);' M1 O! _! ~1 Y0 T
        // 配置 ECAP 2 为 CAPTURE 模式
8 N( v+ M6 A# }& r. ]9 ]- g* T+ O        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; x! o  S3 V' R/ H" ~  h# m% ^0 p# }) a1 x1 ~
        // 使能中断
1 P3 N# Z7 _% K: X; K+ _* W//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);% Y9 }/ H2 e0 z% J& a7 q
}
# ]+ \/ V, U) d4 V; s+ ^& J( g5 v' ^9 b
/****************************************************************************/
- |, }) m$ {4 B9 S- O, w/ l6 t/*                                                                          */
2 [6 U" S2 I  ^( k$ t/*              取得捕获结果                                                */& ], @/ L) y2 C9 H# w/ p! {, @
/*                                                                          */
8 Q' I  p. B4 U0 W4 j3 f/****************************************************************************/
3 H' z- C6 E6 Wunsigned int ECAPRead(void)
9 j+ X* N, \1 M) r) N! e{/ Q* D/ m: \+ X4 t# A5 \. p# j: u
        unsigned int capvalue;
5 ^* B) W$ v; a4 W        unsigned long frequency;: F6 R% A7 ^. m  O: }' ?% p9 s6 j  T
' ], s, u, W1 [- _' o5 `2 W; a
        // Event1 中断标志' W$ _' p4 \8 H, z' Z
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))! Z) S, r9 j/ x; H" S7 K, h
        {
9 r5 p! [. R+ V4 t* @# q0 \                // 取得捕获计数
) x8 o" F7 I) x  ?  a, @                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
" l. `% ]5 J% s% u; F6 l                capvalue = ECAPResult.cap1;
6 u( m- k- L" o# Z
: L9 h, U5 }8 V! y                // CAPTRUE 模块 228M 时钟主频# Q3 p5 a9 h( g* W7 l8 O( w
                frequency  =  228000000/capvalue;# V$ R5 }* g* F$ U; s$ @" q6 u
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);4 ^9 C, x% `9 @- f; D% H7 p

6 ^; W  l' U- d- z1 d' C. O                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);3 G& y4 i2 ]2 o+ Q
//                IntEventClear(SYS_INT_ECAP2);& R) ^" {' F4 g! d. J+ F* F# M
        }( o) G: F! I# x* g) g3 X) x
        return frequency;6 Q: S7 `2 ?% Y  @& U3 d- x
}
4 x8 o- b  ~! O4 t
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
* @, N7 x) i0 j$ U

本帖子中包含更多资源

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

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-9-17 00:20 , Processed in 0.047774 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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