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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************// G1 W# D/ g( C: M8 ]$ i: _1 x
/*                                                                          */
, s0 g$ J+ H: x% m/ Y/*              宏定义                                                      */: I& k1 \; X1 R2 v' P6 W" r9 n/ o
/*                                                                          */6 v1 Q8 Z0 P0 C" S7 n5 n
/****************************************************************************/3 X! @: n: ]9 V
// 软件断点0 d5 X1 l$ h  f, Y
#define SW_BREAKPOINT     asm(" SWBP 0 ");) A' a, n: c1 j
- C" a' v* d& `( t
// 时钟分频( Q5 W, C7 g* f2 j7 h
#define CLOCK_DIV_VAL     2289 t& O' f' R# X4 p; M5 [7 l& k! h

5 F5 c8 F: Z* B$ U! R/ `/****************************************************************************/
: _5 b/ E" R2 e! ^/*                                                                          */
1 d% h% ?: y  I0 M' |# R, V/*              全局变量                                                    */3 y  w8 l! Y/ d& _
/*                                                                          */: [: `6 w0 g1 Y
/****************************************************************************/5 v. b/ J# r* F# t* g& c3 C
ECAPCONTEXT ECAPResult;& p! U) a. Q/ T( O+ |

( M  N8 o# V* o* i' N6 O; @/****************************************************************************/
  ~6 H8 r1 U7 H1 c/*                                                                          */
8 C) Q* n% v0 h" `/*              函数声明                                                    */
6 d6 D( e! T6 z! t/*                                                                          */. Q% Q' F4 \" Q7 }+ O
/****************************************************************************/
9 i) c) x) l3 v( M  u// 外设使能配置: V* K- L. ^9 |7 W3 R( k4 L6 ^
void PSCInit(void);" ~$ N! ], |) q. c3 E
+ ^& \! t0 x" L8 Z& K: |& H( _9 d$ t1 d
// GPIO 管脚复用配置" j/ {& i0 l9 v( {# [( y
void GPIOBankPinMuxSet();
  k: ]* c/ E0 v
& I" y, |9 t6 w3 u2 A. V// 产生波形' h/ m: j5 h6 N' z
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);4 X* l" r1 T. e1 l& M
void ChopperWaveform(void);- d0 c7 ]- Y  S5 u

+ b. a) a2 a! }( C// ECAP初始化和读函数
3 K  O: s5 Y9 B+ y% c( _void ECAPInit(void);
, w( w; @+ d: O; C* nunsigned int ECAPRead(void);7 k% ^) o- T2 e  O
- i2 V* K  }8 F; {3 s! k
//ARM 中断初始化8 m  ^2 ^9 [3 ^) W1 u" q& y! P
void InterruptInit(void);
; a4 l% y: _' T7 c8 Q, J, Q0 F# T* m  }+ B
// PWM 中断初始化* n2 V4 V5 Q; w
void PWMInterruptInit(void);
, X5 E' m) u! s9 D// 中断服务函数( P1 e# R% A2 }% E6 T6 @! d
// PWM 事件$ [; Y3 p% }+ i, s
void PWMEventIsr(void);# a  y' Q. e) g3 w& g1 \) O/ Q
// PWM 错误控制事件4 }% J; x6 d6 c# |; L7 K
void PWMTZIsr(void);
5 x+ Z* \( l9 @' ]
8 A1 p# q" ^& P0 g/ E+ }/****************************************************************************/
& m2 W0 s# T! w+ s+ u4 \/*                                                                          */
" Y* J* ?6 ^' w% U/*              主函数                                                      */5 k' E8 i) K0 b0 W
/*                                                                          */
% {+ p* [" D; t1 R/****************************************************************************/$ ]. r) s+ k+ m% f4 w% M, B! W5 [
int main(void)
- K! v4 H% h* j3 a. }. C{. g8 c8 z- n9 H: _
        // 外设使能配置
) d+ q& T; x9 Z( w; _1 y        PSCInit();; I0 Q; `' U0 a- P) l2 L$ n0 g; q' j

/ R. {7 u7 I2 h& g        // 初始化串口终端 使用串口2: Y( [& Y4 D2 a6 x2 }# y; ~
        UARTStdioInit();
+ d4 ?8 n7 u1 z+ u" y" h* N* e       
$ z$ i" L6 U$ T: T$ q7 K  }/ M        // GPIO 管脚复用配置
# ^2 T2 t2 O3 J- [        GPIOBankPinMuxSet();+ q9 w: j0 j7 T, Q) u9 ~
4 H1 B9 i3 V- v% b6 l, S8 M6 R
        // ARM 中断初始化
& f! x7 ?$ `; }, x" y9 l7 @' h, p$ X$ J        InterruptInit();" V, o* ^7 H, k8 J0 J& v3 R" ?
! l+ k1 c) t+ X2 [
        // PWM 中断初始化% c2 f) M$ H. Q% F
        PWMInterruptInit();
1 N9 a4 A4 A; |. |. f, {
9 W) t  A; \: {  f- v1 s        unsigned char i;- x/ v* W8 A1 @8 v5 l: a3 d- Q. a
        unsigned int j;, E8 {  @, O9 o7 j, D
* P) n6 {9 _8 G. [0 d; ^9 _
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
' I% X- K0 G% R5 V: ?        UARTPuts("------------------------------------------------------------\r\n", -1);4 c5 }& ]/ g- l( c3 @6 P6 ]5 f" r
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
2 a6 X4 {) y9 r6 n, E        // 产生波形# m; V' O& Q% |3 A
        PWM1ABasic(25000,50);
4 E. ^! W" I7 [3 F$ V" w4 N4 r8 V% e: S/ H/ a9 y
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);, ]! j5 E5 j! a$ j* a& {" j
        UARTPuts("------------------------------------------------------------\r\n", -1);
# H' |! X+ }( U, Q. R. H% _% H- X% B# e
3 S  f$ k' {/ X! j# ?, K3 c  @" D
  ^) }3 T1 ]# x/ J& H! L0 s5 A
        UARTPuts("------------------------------------------------------------\r\n", -1);$ V  t. I* J2 o2 d2 w
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
  v1 u& f% J7 R" _. G. r        // ECAP 捕获初始化
, o/ b9 \0 o8 r# u- Y( c, b6 _% g        ECAPInit();  ]( P: D, s" u$ ~; I8 G. W
        UARTPuts("Initialize ECAP.......\r\n",-1);* K- G: o2 ]2 @" M  E( e% Y" \, j
        for(i=0;i<5;i++)
0 |& m5 h1 I; v9 N. K        {$ o& B7 `: t' d+ G. B1 L) z
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
" t$ J/ K; ^/ Q6 g                    ECAPRead();( Q/ ?. ?! M; J8 }
        }0 N: S3 T; Q- |3 f4 g5 o
        UARTPuts("\r\n",-1);1 W9 L, m% G$ e. J$ n$ o7 N
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
- R6 b& x$ B7 p        UARTPuts("------------------------------------------------------------\r\n", -1);7 R+ k. W6 S0 ~  _: A. z* w, J& F

: A9 l* D; L- I+ a        // 主循环( J; k/ t# A+ I/ y
        for(;;)3 ^9 s( ]' r' o6 ~) T; ^- `
        {/ S: A; c$ I3 \& r
4 W* G0 r4 U  \
        }: S; f' k& U( t3 D( M9 T- d
}9 K0 [5 _: h) h9 ^

5 x" ~& e, q% P  F0 X2 P/ Z/****************************************************************************/
! v7 c! b' \; u) D6 S/*                                                                          */
/ T, j; ]3 P! O' D4 t; Q# a! m; `2 E: ?/*              PSC 初始化                                                  */
, B6 R  ~4 b+ Z8 z/*                                                                          */
& [6 e/ e( w& U5 i4 |. a4 L/****************************************************************************/  X7 U$ {: n  D% c2 G
void PSCInit(void)
. k. ~. R" [; c6 u# h' Q{
" m# Z' B2 k# D0 l) P$ P  j: ^        // 使能  EHRPWM 和 ECAP 模块/ r3 x9 s/ F$ r/ f
        // 对相应外设模块的使能也可以在 BootLoader 中完成
* p7 W: U+ b) \" q8 F    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);/ w( @, u/ H1 m% k5 q
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);7 {4 z( J! [, q. j/ N- G7 e1 L
}6 ?% q/ w! g4 J) L% c' [
$ j- B  X6 g, ^9 j
/****************************************************************************/
) ]; e3 \: g- I8 Z( B: H/*                                                                          */
* Y4 n1 `; J2 c+ x+ q/*              GPIO 管脚复用配置                                           */5 ~9 J# y6 m# d2 a) t
/*                                                                          */
$ X) x/ K  X5 a' N& ]: c0 [/****************************************************************************/) ^" [. Y4 }% [3 D, k
void GPIOBankPinMuxSet(void)" |) t3 x8 Y% S& P9 E. ]
{
+ o& U3 j% @. d/ C1 B* ]+ R. [" F        EHRPWM1PinMuxSetup();$ c4 P  E/ h; Q8 J3 ^+ a
; X5 f( P$ x5 e( o7 z8 I
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
3 E. E4 R+ k7 ~0 Y" f8 @3 h        // 作为捕获功能时管脚方向为输入& o8 y% Y' O- s6 S+ ~
        // 作为辅助脉宽调制时管脚方向为输出* `9 z. I5 [) w5 {# v
    // ECAP2 / APWM2
2 M9 X% X  D1 ?% j  k: `        ECAPPinMuxSetup(2);- c# k8 K2 E2 ]4 ]0 Y

! N9 m. ^9 M+ Q' q1 o( t" J4 ?- U        // ECAP2 / APWM2方向设置为输入
4 A) ^/ T, y6 `8 k        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
* Q2 d- X$ c) f8 f8 p}& G7 Z9 q* c5 Y2 q/ L/ ]9 i. a7 i5 t
9 K( b) a( d5 d
/****************************************************************************/2 c) Q4 r. x  |7 G1 I" n* I* z% h
/*                                                                          */
9 i1 m2 t4 z' @% a! m8 G% t/*              PWM 输出波形                                                */
- l0 @- G0 P2 ^& x: A! Q/*                                                                          */
+ M; l7 v; e, G$ n, i! _/****************************************************************************/5 W$ q% h1 H3 p5 a/ |' ]$ F2 ]+ u, N
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
% i! _9 e' @0 y" ~& L{* b: y* w$ e8 R4 A
    // 时间基准配置& ]+ S  B' n+ {  d( r
    // 时钟配置, O* w* f+ ?% ?/ D6 m
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);8 o( X) I0 s" M: H' ]

: x) F- a; H1 T3 [3 ^    // 配置周期! p. b2 C1 G7 J; ^- i
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,4 N- A' _' [6 `
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);; ]2 m8 T9 S* v3 Q0 [

5 t0 i3 i0 I# h) P; A. ~& i    // 禁用输入同步信号
5 s$ s- A$ h# b' w' b0 {) S    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
' g* I9 k/ r/ x9 R8 Q9 G$ T' j( `! Y' j- i* `5 M  \/ E
    // 禁用输出同步信号
% h& [$ K) [( o1 n, |3 R: E    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
( q, {/ B; w7 s5 L9 A4 q" r' h# D! U$ D5 y& k4 h
    // 仿真(DEBUG)模式行为配置
$ d2 j+ x* B" _5 p5 h: w( B) a    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);- A% }6 s. n; R

7 z; ~4 U- Q+ N( V! z$ |0 g: [    // 配置计数比较器子模块' K2 b/ l0 w( q0 C' d0 \
    // 加载比较器 A 值  F5 s* `) _) ~: R+ u# L$ k& u+ g
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,7 O. H6 e3 u0 N7 \' k$ E
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' D" \3 x  }# Z
7 V7 h+ B( t7 a5 {4 \* [    // 加载比较器 B 值
. L% x6 M/ w# P$ I    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
1 C: K/ T8 v* f: l                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 t+ E+ o* H' U6 s% s
- b" T1 i# z* y8 m2 c
    // 功能限定配置(输出引脚触发方式设定)
0 l  S/ A/ t# |6 ?; e    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出2 j6 d# h; A' }. G" H
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
+ S& v( f7 C7 a9 R1 C                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,7 V  O( l8 s, N
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);5 {- b  I7 f: A/ n( L% g  V3 B

! v/ T. T' ^6 S" n8 f% H    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
2 C5 H2 I; \4 r+ b0 o5 K, F& n  ]    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);4 e1 `  Q4 b  v) y% D

+ \1 j. F0 X6 r    // 禁用斩波子模块+ o+ x0 b7 `1 N- v& n. w
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);- a! ]: W5 d" y0 F/ M

9 f& O, s+ O/ A: F& j! o/ {8 a1 y* Z    // 禁用错误控制事件
* ]1 B- `  t% ?0 e    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
( z: ^* n6 a, C' h    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
( u& J; c( m9 U- M- x+ y3 y5 y
4 _7 \3 X8 P, L7 B* j    // 事件触发配置0 s) r8 W8 A. {+ X6 `
    // 每三次事件发生产生中断. P( @) s7 _: V. w# O, d# S
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);. ?# A: P7 ~$ s& e& B; Q9 K5 N+ R
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
  l9 `% t8 {: b$ Y. P$ {    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
" B$ f' I4 e( }# l- g+ Y) J! w" L    // 使能中断
7 m' [0 S" K9 Z& ^, R5 E: ~+ z' H    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
$ f; @3 a, ^7 w: p& [. b, L
( z/ @& `1 x1 {' T2 G    // 禁用高精度子模块
# c! x. I0 l1 G. u0 X    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
& `- B& L( U1 t
7 [$ o8 _" Y8 h1 z# W! t2 g    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
1 ?/ {$ U6 j8 N6 D& R- V$ J5 }}
3 u# q+ @/ R9 p# [- X- n4 T5 K/ O% Z2 |5 [1 O. @
void ChopperWaveform(void)
( F# o2 T: {# C/ ]+ A{
, U7 I; a( c. X" S  K1 t, R    // 50% 占空比% n6 W+ G- v+ O7 a7 ?" W
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
4 C* m6 w. t$ N/ D( A+ j. P( [    // 4 分频- G  L( ?5 U; K" T) D% G6 r
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);2 \" ]) ~* Z& x% q2 W
    // 单个脉冲宽度
- ?1 }* X5 q  t, G' r9 h! a    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);& b4 c- `) s* F0 o* G
    // 使能斩波子模块! Z7 t0 _; E6 u9 {& q1 t
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
$ M! ^. _- \6 \1 T4 D}% S! J3 q! {8 w1 S
3 s: N# N; T8 c0 B6 }' @
/****************************************************************************/' B8 `6 J& O# _2 I5 y% k
/*                                                                          */
  m; {5 ?3 i6 X) p/*              PWM 中断初始化                                              */' {+ U* I. k  L3 P
/*                                                                          */1 x! H, c2 B5 {
/****************************************************************************/
% n* F, `: a7 q2 }* cvoid PWMInterruptInit(void)7 L8 }6 j8 U2 n* y) `6 e- ~  S
{% ~$ G- q. [9 Z1 Q/ Q
        // 注册中断服务函数
9 \' B9 V8 \% O* B  W* ^        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
- G; Z8 y! W# L) S3 M% [        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);+ H, Q( s5 C1 r! @8 \, S  M2 U
" w2 @% _: ~" v1 L4 E2 {
        // 映射中断# N  w/ U! [+ D( }( m7 i
        IntChannelSet(SYS_INT_EHRPWM1, 2);0 l, ^) q+ m) x2 C! M
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
  `6 U' M+ Z$ X& V" W& ?2 \7 ~
8 v4 G6 ]2 d9 w, E( H        // 使能中断
1 N8 ^/ s3 z, s( A; Z        IntSystemEnable(SYS_INT_EHRPWM1);
4 A) n' s: x0 c6 ?$ ?% o        IntSystemEnable(SYS_INT_EHRPWM1TZ);
- U6 z/ H9 r; _9 A" M, N0 a( `3 z}
: d# O. F# r8 ^) _
: y' @+ X0 l7 \& ~+ O  u/****************************************************************************/
+ `$ C, i3 F! c! B( v) ]9 I! p4 x6 w/*                                                                          */
: E/ s) [6 G* h, t! O! d) ?4 T6 G/*              ARM 中断初始化                                              */, h5 d5 o* a9 f7 [* z( Z, {# D
/*                                                                          */5 M, g: T% D1 ~& Q2 O
/****************************************************************************/4 g) a( \* o5 E" h3 x2 P- k
void InterruptInit(void)
5 E# {- c3 {; V2 a/ I6 C+ c7 V9 j{8 I- s% e- W; D% d9 i* \3 X
        // 初始化 ARM 中断控制器
# S" J0 \0 C+ U" ]: \& Q3 t! x' W        IntAINTCInit();0 r8 G. F8 h4 e

6 ]$ \1 }4 ]/ k6 d# L$ b+ b        // 使能 IRQ(CPSR)
' B" S+ y2 g( c' w: d6 _        IntMasterIRQEnable();
& u1 F" g. q$ I4 {1 `1 O  ^% M3 O  }) t# E  C
        // 使能中断(AINTC GER)
' H; z8 N# ~5 P# v& t% l        IntGlobalEnable();
) Z! n& c3 L  I( j( h. p7 k
' |  W, _2 J- m# f( }$ k        // 使能中断(AINTC HIER)$ U# s# j6 s8 y8 C8 W8 v5 f8 q
        IntIRQEnable();; ]$ {# x. l& H% X3 ]7 [) S
}
" _$ l  M' q# X& ^# N" r" w3 a$ Q; z- [9 o! {1 s
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
, u5 J9 {8 c$ x  r% J3 @/*                                                                          */
4 w: f* v% Y* u! \7 [4 z/*              中断服务函数                                                */. i+ K$ a. ]. M3 |9 n- R
/*                                                                          */' l  A4 I$ O8 T0 b6 [) }
/****************************************************************************/
6 I& Z5 P. D, u1 P; N5 d/ O. Vvoid PWMEventIsr(void)/ M" k( R6 |  W- c$ v
{4 u* _# d, f1 B7 }$ M; t! K
        IntSystemStatusClear(SYS_INT_EHRPWM1);
4 s/ c+ V# P, e% m0 j8 T5 L! L6 M9 w" Y
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);" U' Y+ r, p5 |9 K' h! \) j, v! p
}& g' O' h% ]+ o3 r2 v6 }$ O

) X, B) y  s) \void PWMTZIsr(void)% m3 n: i. }) a# i( I- P5 {( \* L
{: A2 |, A) H0 y+ f
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
1 }# Q7 K( s1 `" G! \% |) H7 E/ w+ a3 r
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
$ g% c9 t% G6 b) |9 l}
7 H! w+ S+ f+ ]; G4 b" h! A3 |. \- h; K' ]& z  f
/****************************************************************************/
( C: x2 d- }# v- n- b3 z5 ^/*                                                                          */
0 F0 L7 K" ^5 D' I" ?/*              初始化捕获模块                                              */  q1 Q2 z. w+ P1 I1 E5 R
/*                                                                          */
! ?: X/ x. ~9 ]9 a/****************************************************************************/
! t7 D. H6 J3 Uvoid ECAPInit(void)+ q7 f, M/ m5 y6 ?9 A; V  E: [
{1 G) Q8 [- N+ `8 c$ c) X
        /*-----设置 ECCTL1-----*/: q3 J% X; `8 o3 @
        // 使能CAP寄存器装载
0 u( r7 T1 Q! F. {+ [5 M8 S        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);2 G6 F3 m1 }  w9 Z
        // 设置预分频值.9 t3 N7 u! Y# X4 T( ~* A
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);# j) Y. A2 s& V6 P4 d6 t8 \* K
        // 上升沿触发捕获事件( Y; t; y5 _/ c! \9 M: X
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
* i2 ]0 e9 J' D% p        // 输入捕获后重新装载计数器值.
0 U# C' s/ \0 `/ y! x) B# C        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);7 x. j$ n+ w- o; t( Z
+ n$ F+ J9 @5 G9 W
        /*-----设置 ECCTL2-----*/: {3 X* o' W$ z' C, g
        // 连续模式. p/ T5 ]7 m" _0 ]3 \# a1 Y+ ~
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
& r# c- \, {/ b+ r4 c" `' Y        // ECAP计数器TSCTR持续计数
; H/ c7 p- q3 x. |( f        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);" W% D3 u1 [" v3 d$ X1 v9 s' T
        // 禁用同步输出和同步输入8 s# F) d1 a4 O: z/ v
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);5 l  _' c. s4 f1 T5 O6 R- h
        // 配置 ECAP 2 为 CAPTURE 模式
1 Z# L% y: w  _, ]        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);6 X- }2 c# J0 A

( }8 J+ A" @& w9 t# i5 N        // 使能中断
. p9 L2 k% ]6 w5 J//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);! ]5 M! s0 d! O
}2 ?' d1 V5 X4 l
+ Y9 A0 l5 [, b+ u: ?
/****************************************************************************/
* n0 H" R8 X2 ^1 P; Z+ Y/*                                                                          */
9 Y6 Y; v. C8 B. G/*              取得捕获结果                                                */
( Y. G. c1 k4 b5 f/*                                                                          */  ~- d: O, h0 v. N  e2 O& v! V4 U
/****************************************************************************/
. O, w) i1 L% E6 m; ~% }4 m* Gunsigned int ECAPRead(void)
; @1 E" Z* ]0 Q1 v# L( h, }{+ B; A) E2 C! J, n
        unsigned int capvalue;
" \4 O( h* v: h        unsigned long frequency;
8 f- k2 }. C% \" c3 T9 L( u: X4 H5 K* V; K: ]
        // Event1 中断标志
/ I6 r0 e/ O! x        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))/ b6 }0 R. Z' v3 I8 H( i9 e  p- @
        {: I( _# |6 O& ?$ ~  A2 \" H9 z5 ~
                // 取得捕获计数& d1 R, I5 e9 l) f4 r1 R
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);2 x# K* h0 P! I7 f
                capvalue = ECAPResult.cap1;7 _0 y5 P. h4 D# V  G
+ Q! G0 r' p5 ^0 s
                // CAPTRUE 模块 228M 时钟主频- W# e' P' }2 ~  z
                frequency  =  228000000/capvalue;
& @2 A8 A8 V8 t                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);" w, C+ J1 V/ [' R% l9 f
6 F0 t) I8 n# ]2 a1 j/ M: M
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
* `1 t0 O/ ]& F" n  q//                IntEventClear(SYS_INT_ECAP2);/ R6 U5 a" f0 ^. O8 J4 L
        }
( W* w7 E1 y' {' ]1 g' @        return frequency;4 }" s1 Z! K! a. n/ Y8 g
}! e" Z4 e" g$ 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波。我们有相关例程,请参考。3 Q* R. E  e  V' d& w# Q0 u

本帖子中包含更多资源

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

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-4-26 13:38 , Processed in 0.046402 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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