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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/, z& E) F% q4 }4 W* e
/*                                                                          */( e0 r0 ^( p/ A! o2 Y" T$ {+ C5 h+ g+ y
/*              宏定义                                                      */! v& ~7 [8 q, T/ l3 p1 d
/*                                                                          */
' K2 V& x2 f9 B/****************************************************************************/$ I/ C' d7 M# |
// 软件断点( r3 J* a. L9 i$ Z" L2 H
#define SW_BREAKPOINT     asm(" SWBP 0 ");
' ?5 j8 r: y  B6 R7 |
% C' [8 d- [9 @( }7 X// 时钟分频
0 i# r! T4 b! h  E* ?#define CLOCK_DIV_VAL     228" K6 U& C3 {- e
" _9 S. |7 Q' H# v; ^. b4 h
/****************************************************************************/
- j4 G. e! j1 {, k% F) J& }/*                                                                          */2 f; M( }! a# q0 W3 V, E- R
/*              全局变量                                                    */
* G/ H$ f1 u+ t2 f' Z  \/*                                                                          */
& B+ s# [3 D6 s; t3 V2 x# x. X% Z& l5 C/****************************************************************************/
! P" O; k8 ?" [' K* w+ rECAPCONTEXT ECAPResult;
( r6 T6 C5 K* T5 c$ V1 R' g8 d
0 e' a9 o1 i6 C/****************************************************************************/: S4 m2 H' ?! F. L- _# f. D7 c
/*                                                                          */' h9 x: Q& U- t, S' S
/*              函数声明                                                    */1 \& ?" t4 ]) ?* V7 t1 p
/*                                                                          */
: [: G! Y* J7 ^  C/****************************************************************************/  ^6 v% Y  Y! K: u: c
// 外设使能配置# N+ X2 Z& \* A& y% O' V$ _
void PSCInit(void);! ^( \% t3 S6 N6 Q9 c

$ w! |( t5 S8 K$ h  `; J// GPIO 管脚复用配置
' H. _6 F$ Q. k  \* [8 A" Lvoid GPIOBankPinMuxSet();  {( v. o! Y8 U9 @2 _

% i. R( K$ |: n( A2 {  p// 产生波形
$ i2 B& F% L. z4 u7 H( _  Hvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
9 a% f- V  p- k. n  Nvoid ChopperWaveform(void);
) Z: V' k6 U% k9 n. O9 m
% S! l& b8 Y  k9 e( q5 }8 ^// ECAP初始化和读函数
3 X% K  p6 J9 h2 e  W, ivoid ECAPInit(void);) i) ]6 ?5 @9 i! c% a6 Y1 m: J
unsigned int ECAPRead(void);  E- _' e2 l, @: _/ Y9 n, p2 q3 [/ m

# N7 U, W  Z5 k" Q3 N& y( ^//ARM 中断初始化! F; \5 e; a# t; W: [1 K2 B8 n6 w
void InterruptInit(void);
0 i0 e* X+ `% V9 p
5 ^7 B1 \& q8 o0 c3 C  J6 S3 n// PWM 中断初始化, J6 I7 `/ ]% E1 ^4 a3 R) F
void PWMInterruptInit(void);
; ]# j% H  }) U* w) y// 中断服务函数
& E2 P: Z: N0 F4 ]: N. ?5 P// PWM 事件
% R/ k1 e8 F1 w. z" B; e) pvoid PWMEventIsr(void);: ?) M& c7 b* I( T4 j. Q
// PWM 错误控制事件
) [# b/ r* I: ^' evoid PWMTZIsr(void);& j+ ^- w: e* V8 C

/ F* {+ [  r. Q* I' d, J/****************************************************************************/, r# Y1 {0 D/ g& H1 j
/*                                                                          */
2 ]+ a$ h5 ^' g" I/*              主函数                                                      */9 J5 y$ N; s9 F) K
/*                                                                          */
3 X# ]8 n' }! o6 L" z/****************************************************************************/6 b9 ~4 E8 v6 O" T3 O6 P' u5 O) _
int main(void)
4 R# {! a8 v+ `" k6 r3 Z) q5 \6 H{
: P7 h3 s" \3 W* n" E( F0 U: b        // 外设使能配置
/ G5 b$ ^# j/ U! v4 S; f/ Z1 n* N        PSCInit();
9 e( T! f# }4 Y! N0 K
* o1 J$ p: o  s# r3 g# K+ U: X9 e        // 初始化串口终端 使用串口2
( a1 _$ G2 K% j7 N+ b        UARTStdioInit();
( ^& q$ Q9 F4 T6 r) ?( C1 E       
! I5 D4 l7 M9 o7 L$ p8 p# @* c- b& }        // GPIO 管脚复用配置! @" u' Y' {5 W, z* ^' t4 m
        GPIOBankPinMuxSet();4 x5 w  c+ E' k: A5 e2 n2 Z

: d" a4 d  r: P        // ARM 中断初始化$ m# C; V$ j+ T! S& i. [2 L
        InterruptInit();
- Y" F( f9 \% V+ U, q0 ?( M: `( n( e8 L  O5 K4 i
        // PWM 中断初始化: q# ?7 c6 o) }
        PWMInterruptInit();% R' d# N+ ^, S; `
) M$ P# u4 C7 b5 E7 B
        unsigned char i;, {  a3 p+ A' E7 C" L/ c' Y
        unsigned int j;
0 u4 I+ X  i( }4 V2 A5 E- p/ Q; [) c" M: Y& k3 P
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);5 g' b6 D8 L5 t) [5 q
        UARTPuts("------------------------------------------------------------\r\n", -1);
9 g+ @, W3 H+ m4 v' E7 i! F$ l7 F! k        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);  L7 u3 e0 Y9 C$ J  |
        // 产生波形
# O' R- Q& H* U( E$ z( w        PWM1ABasic(25000,50);
, u# q  i+ C$ Q( j/ ]) l" \. c6 k
+ c# H$ o9 C9 h1 U" y% V5 [        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);0 w! P: ^9 Y0 K" C0 b1 Z
        UARTPuts("------------------------------------------------------------\r\n", -1);# m) F) v7 p  m. K

* u4 O: q! X% g+ E4 ~: c
* L0 D- t, |5 f: k1 V' t/ w' n" p* O& y
        UARTPuts("------------------------------------------------------------\r\n", -1);
* O. T/ \( A. \4 ]9 h8 y% ?4 o' ?        UARTPuts("                    C6748 ECAP Test\r\n", -1);
& o: k: t. u9 o        // ECAP 捕获初始化
% w* h( L$ h4 ?; n; w( ]" P        ECAPInit();
' l) k6 `/ _2 t' u6 S/ z/ r! t" X        UARTPuts("Initialize ECAP.......\r\n",-1);
. d) j! \( ~7 y' H        for(i=0;i<5;i++)) h0 J3 H8 g1 w8 F5 N
        {
* ?- D1 r# D, d! N# w1 f                    for(j=0x00FFFFFF;j>0;j--);            // 延时
+ c2 l5 l$ h. ?& N                    ECAPRead();
7 ~, {% X  F9 J( o2 i/ W# F5 a% W        }
. r/ y6 q$ Q! @5 [, V        UARTPuts("\r\n",-1);
/ i  v% ]% z* g4 o        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
7 |/ S( ?9 D7 B) |2 p. o3 U        UARTPuts("------------------------------------------------------------\r\n", -1);
; Q0 E7 r( `7 }8 c7 R! y5 l$ G0 F( J9 t  ?1 m1 I
        // 主循环# D. ~' B) J3 b) @1 [: Q$ V3 W
        for(;;)( Q. I: C, a# u" y
        {) [1 m1 O% Y; |( B3 ~

/ t0 g" }: J# `! @6 d8 I        }8 ^# R8 _; h) v, y) S2 n; t
}
1 x. f) \+ j$ P5 ~
& w  {- l5 f1 g1 u2 l/****************************************************************************/
$ e" b8 v/ i5 f4 t: o- a8 J/*                                                                          */
# C( `  l' ~8 I( J/*              PSC 初始化                                                  */8 b- w& f7 E+ T( o% P
/*                                                                          */0 z, _' l' P+ s5 p
/****************************************************************************/
# R0 B+ |: r# L* [3 q* y( Cvoid PSCInit(void)1 [8 p' V' @5 X, f/ H+ o2 H
{
3 l  j+ Q& e2 @0 N9 Z        // 使能  EHRPWM 和 ECAP 模块
8 x- r1 t3 U4 W- I1 S3 f        // 对相应外设模块的使能也可以在 BootLoader 中完成0 r: }; e/ l( E0 ?  S9 S- c3 u1 V( @$ T
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);2 B7 b7 @) ?, v. u3 w
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);: q% |& A5 z" B* w
}2 Y- `, n4 S" U

: \% l& U- {$ O  V- m/****************************************************************************/
- P: x  }  V' b! n8 L8 r/*                                                                          */" l; P6 L% h! A3 x' D! Q% `
/*              GPIO 管脚复用配置                                           */
1 y: X& N/ v, G  g) J: a/*                                                                          */9 E, K7 F, p' r7 G; e6 b
/****************************************************************************/  m2 Y# q: f2 l- B8 j, E
void GPIOBankPinMuxSet(void)
! ?5 O! G( D0 Y2 D/ b9 Y0 X4 b{
  K- r4 N6 f( }2 l, q        EHRPWM1PinMuxSetup();8 X1 G, X0 X- v7 ^( d  h/ V

4 O* g3 r, S6 s/ b; U* Q: s        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)# T# W  p6 j0 @" i1 [
        // 作为捕获功能时管脚方向为输入; P. P3 V1 }, G1 {1 D
        // 作为辅助脉宽调制时管脚方向为输出
- n! J+ E; s8 f% X) e9 i" O    // ECAP2 / APWM2# w5 m- {2 b1 E) v4 v' W
        ECAPPinMuxSetup(2);
, N+ `. V9 M7 R- o" S; \' F& T) i0 P5 r
        // ECAP2 / APWM2方向设置为输入0 G8 y$ I- k9 ~5 C2 I4 \( X* Y
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]* Y% h# Q9 X3 W, M1 b) f# x
}& R" \# S2 ]7 A  J& I% V/ i

8 @0 T* s: F  g0 G8 T- c/****************************************************************************/
2 `; u9 a  ~  w( n5 t: r7 [/*                                                                          */
! K; h+ N" i$ f5 m& a" b, u$ _3 y/*              PWM 输出波形                                                */
0 H6 V6 j. Y! a, [5 M/*                                                                          *// B: n# G8 E' Z
/****************************************************************************/
; s/ e: J# C) u) F# v5 N6 y* lvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)# B) u* {6 F- k( P# i) Y7 r
{
  a3 m$ n& q$ g' F2 Z    // 时间基准配置
) i3 T5 S# d5 ^, |    // 时钟配置  ~" |- d2 b' l8 @
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
( Z. i( X! \/ J9 G7 I& ^: S" v( M& G' z) @: ]; A
    // 配置周期+ I' E* j8 e4 L9 o2 L
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
4 S" z7 h; s& k/ b7 Y, s                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
$ v* M7 u$ u2 j9 ?1 G0 P# s% Y# x. h1 C- g2 O; g* ?4 ?
    // 禁用输入同步信号# `. {$ Z. [" w/ b" ~
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
; T$ E+ V% \( v. X' N) j
+ a, V2 P& G' y, S; h% F    // 禁用输出同步信号4 {) [3 Y3 s) ?- J- m2 ]) N: e
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);# x) X, \! e. h! i" ^# h# A

5 ~! Z5 L9 z/ x8 B    // 仿真(DEBUG)模式行为配置
' F) N* w; [; `/ f4 c" Q    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);( @! z* R- K5 U8 m2 C

/ U8 ^9 h: w( O    // 配置计数比较器子模块$ L- Q! a4 `% v6 t
    // 加载比较器 A 值
4 J* o/ T1 c* M/ w- y) a% N- H+ o( [    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
# t' O0 m, E5 ]4 w- \. F0 K3 y/ L                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
* v, p$ B) ~% z+ P  R' @% f- D
) `2 p& y( G1 T* V5 v* P    // 加载比较器 B 值
& b( U: n& x( O' x    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,, }1 W. e% v( Q% r- f+ k9 y
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);; ^8 G+ t& j* z8 T: W: R" k
# ]/ F) b' {* J$ H! M
    // 功能限定配置(输出引脚触发方式设定)
/ B; B0 Z7 s3 d, j7 D% r8 @& ?0 O    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出6 v; x# b% x- P7 f! O% T
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
* \& c8 f7 a: l) i/ B# F' S2 ~                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,8 Q- }5 R; J+ S6 X' R4 \- O: ^
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
/ R. Z" |- M' K3 l6 H/ b3 O; W) M9 q( U/ }) Y3 H9 l( f
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
8 v" R0 V# q* [( H$ @3 t% E; T* e& a    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);9 {2 [2 D8 {. e- q

3 D1 X7 J" x, t' L+ a8 l    // 禁用斩波子模块
6 `% t, A' Z* B8 y; t# `+ `( w    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
- U! O3 K' x/ e3 q- @# F
1 [. K$ |- v( K    // 禁用错误控制事件$ Q2 C; ?. R/ A! {6 l7 U
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 L4 l' P) _. V8 Q4 y5 o* C- m
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);3 n, y! Q: p3 d" n! }  V( _& A

- L4 O' M7 k0 l- J: N    // 事件触发配置) @( k3 A$ T$ }
    // 每三次事件发生产生中断
: P9 H% n/ q! d7 O7 N( A3 ]    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
1 w: W% A& E% W* M( K    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件' D- F, g% S# J2 _' G& C; ^0 d
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);% X# v* t6 i, n  L6 p  |4 \! t
    // 使能中断4 l) N/ |# F; g' e* J; T+ w4 l
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);7 Q% @" w+ i% j7 ^/ ^
7 J9 Y( i" R! v1 m5 E
    // 禁用高精度子模块
* o9 S) k, }% h; N3 A3 ]    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
1 t# s. S( ]% a7 ^; O! O. d* l; G
% b0 Y+ W1 _0 R! v  n8 K    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 L; ]1 a4 p3 b0 v}3 ]$ x3 N) l4 n8 b, Z

+ T( q2 v, G0 mvoid ChopperWaveform(void)
* c- N- c7 ?, v8 m- H{
9 d( Y: V8 g+ [  k  |7 i    // 50% 占空比/ n( ~) M4 M) ]- J. k
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);3 n) u5 Z8 @6 j3 h4 C' M8 O
    // 4 分频
* R! J4 f: ?- ?    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
- T. u8 x1 j; Z1 E4 M# R' s# E5 F  T    // 单个脉冲宽度4 S) J: t0 Y7 I6 F; R! C$ R- e( J$ q
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);! b. W1 f% [+ ?5 L% E- c; b+ R0 y
    // 使能斩波子模块& h8 g# M" I/ n6 w
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);7 \8 j$ N- `! ]! Y
}
* @' p8 E/ W5 U  Q& z% [4 G! R  U& V- p* j$ ~0 X
/****************************************************************************/
' A2 e: ]  n8 ?. m/*                                                                          */5 J9 v5 [7 W/ a( ~9 C  }: Z5 n
/*              PWM 中断初始化                                              */" c* a. \) w5 f! E0 d
/*                                                                          */) _2 Z, p4 e3 I* f( [* s
/****************************************************************************/
7 D  S2 r# ]. Pvoid PWMInterruptInit(void)4 S/ V/ U& P$ w+ A' j/ i% J
{
' J: M, A8 v, I% S% {        // 注册中断服务函数. M% i# X/ ~  g3 x
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);" n0 E8 Y/ ]- c7 r3 b1 I6 c* \
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
. C8 {5 N% F; l. n6 }, t* }% |6 E: R/ @' {) \$ o5 s5 f" F
        // 映射中断
1 h5 X! i6 E( n' |! c% B        IntChannelSet(SYS_INT_EHRPWM1, 2);: A2 S# E* I# b8 [# P$ Z7 U
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);6 ~+ g. E3 }% B; A" w$ s% S# x2 N

% l7 a1 m1 @" H7 b        // 使能中断- P3 D( Q* }' Y5 o! D; @: P& z
        IntSystemEnable(SYS_INT_EHRPWM1);
+ N0 R; @7 k& S! O: w+ R        IntSystemEnable(SYS_INT_EHRPWM1TZ);! o  h+ }" D( o! F6 Y* r; G
}4 y9 a) @9 G  c1 n" E2 s
$ C, @8 ~4 _4 R' j
/****************************************************************************/' R9 E+ F5 B5 h/ G7 s
/*                                                                          */
, e! y9 C$ [  Y* A- j. _/*              ARM 中断初始化                                              */  U1 x0 P. V+ y5 n8 B; k
/*                                                                          */
" C: h: c8 N" I8 ^* ~4 E4 t/****************************************************************************/+ S  a4 ~) T6 o1 e+ Y
void InterruptInit(void)8 W1 }  X: Q2 E) B" G: ?* `. g
{
* r. }" F3 z0 Q1 M" S& W. Y        // 初始化 ARM 中断控制器8 Y" }3 H' i. V
        IntAINTCInit();. C3 y" z% s8 [7 Y7 I

: h3 P$ ^2 a3 N( m        // 使能 IRQ(CPSR)5 Z3 z, H( j! p- R  u' c# x4 A+ r; o/ _
        IntMasterIRQEnable();' _. K* e+ b9 ~

4 B9 G# j4 ]% g0 [0 d$ v        // 使能中断(AINTC GER)
& I4 A1 g; Z1 c0 e0 d        IntGlobalEnable();5 x- S. I4 ]4 ^
/ N2 j6 H3 W0 l  P
        // 使能中断(AINTC HIER)' u: b! o  p1 C0 [9 Y% f- {* J& J
        IntIRQEnable();- A# O3 }' n) f9 E1 a$ b
}
5 ^$ I  B( N7 l4 g3 t& i7 h
. Y/ I; [* f6 E% S2 D
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
  h0 p" J7 K5 @8 C  Q7 o/*                                                                          */& F( Z5 U, e% x5 z4 x
/*              中断服务函数                                                */
) N) C$ y4 q# C! T/*                                                                          */
, A1 R4 C$ Z2 M4 ~6 j# n/****************************************************************************/
% {' S' i. @( V6 b+ V! J0 k3 Ivoid PWMEventIsr(void)0 q  m# R% f, }5 }, J. N6 b
{
' a  B8 I6 Q$ W: B2 n" }        IntSystemStatusClear(SYS_INT_EHRPWM1);( L+ ?2 T# ~: N6 |: S& Z  m: Z6 z6 W

- G1 K# }& q& F" W# l; O    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
* ]1 B  `1 _: i  s}; ~  b% @0 ~, Y. X8 i9 N/ W& a

: L, h8 v* w4 W5 \+ [) bvoid PWMTZIsr(void)
- Q, E; m+ U" P) J+ h{: G' }- w* |9 w( [, q
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
( ^, J( g, `" y3 L# Q5 F
  ~1 }, W* d. i8 c; g6 b    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);: h, x3 q- ?7 t& ~9 X
}0 ]# g" d/ P# {

2 F! P# ~  P- ?' n( _: n/****************************************************************************/# F* H& u. w. s" P
/*                                                                          */! R* |' q( L3 A  v
/*              初始化捕获模块                                              */
1 F3 Y- [/ n1 r/*                                                                          */0 b: M3 P9 E! U3 F
/****************************************************************************/
3 w9 |5 K' o' O+ s" x, x6 Vvoid ECAPInit(void)
0 }2 I) ^- |' _6 ?' f{
8 m5 @# _- h3 F0 v' s" i# |# k+ t6 y        /*-----设置 ECCTL1-----*/" _8 Q0 a8 ~6 Q* k8 v% F
        // 使能CAP寄存器装载: {# O; Q' i+ G. r' Q
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
6 r, `7 X8 ?0 j0 z+ P' T        // 设置预分频值.* w6 `; S" A3 f9 w3 m# ^
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);5 M$ {4 S. Z! }4 |1 n4 x
        // 上升沿触发捕获事件6 {9 W- `6 f& `/ {$ q! M: V9 ]" U
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
4 D+ d6 d0 J) d6 E7 T        // 输入捕获后重新装载计数器值.
7 p2 Z1 o' N, x7 u% s+ D8 L* c        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);1 k& y9 o# m; @' L
. Z# B1 R0 ~; ~8 B" y
        /*-----设置 ECCTL2-----*/
& N& \0 |3 F% _% S9 U4 n7 T        // 连续模式
2 ?( l+ |2 y4 |" Z. D% H( i; n1 G, I        ECAPContinousModeConfig(SOC_ECAP_2_REGS);3 d* }% y: c5 S7 B  C
        // ECAP计数器TSCTR持续计数
( |4 f5 {6 {8 Q* m( T  [8 O        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);% A7 n+ Q$ o3 N) Q( ]$ {
        // 禁用同步输出和同步输入3 w% x3 z+ T% s4 F3 p
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);" C: Q0 ~  k& |+ }5 D1 B1 M
        // 配置 ECAP 2 为 CAPTURE 模式1 w/ e# O' X9 e! I; m
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);4 k0 ?: Y) x6 d
; Y6 E4 M" A/ k$ d! z- h: y# X7 }
        // 使能中断& e, Y2 }. y6 `) `! L
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
3 H, C$ k( C* F  w# M) ^" U" C}
4 F' ]7 a: m$ K% C0 v1 O' G/ J0 ]% X) e5 u3 y
/****************************************************************************/- M3 y9 A% D- A
/*                                                                          */
2 w) J! r: `4 W  j* e, \/*              取得捕获结果                                                */
+ M* G; _$ T% D) l/*                                                                          */+ ?( |7 n9 L5 X4 U; J7 ?; m  t* `
/****************************************************************************/- X; _& l* T  T3 `9 J4 A9 Z% @
unsigned int ECAPRead(void)
3 U0 ?0 c6 h- I5 p6 }4 s5 H{! H! l, v9 Z3 L, s9 \; u- i
        unsigned int capvalue;
) S3 V* a: R, W! r! c        unsigned long frequency;
8 N1 b( U3 V0 @9 G
! J+ M! |# B. p7 k) o/ K# W2 A        // Event1 中断标志
+ L1 _$ ^8 v; ~5 z5 k        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
# Z( K: @, B2 Y! B; W' p        {
1 z' P" ~; }0 G2 ]7 ?+ i                // 取得捕获计数
6 h; Q* K7 D5 c5 v                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);7 N. q1 y" c* Z: e- C/ K2 V
                capvalue = ECAPResult.cap1;
. }0 Y& B+ A' c: K  Z1 R
. j1 ]$ Z7 x# t' A2 [/ D& B                // CAPTRUE 模块 228M 时钟主频2 }; T2 v, y' s/ q$ X- p: U# R1 U
                frequency  =  228000000/capvalue;
5 g" `' I, B: S4 ]( O* q7 ?( z                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);) R2 T. `. \9 L
" F# S2 L' G5 l/ G% M9 U0 I+ ]
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);6 A2 [8 S1 a$ h- k( m' B& X& p, z
//                IntEventClear(SYS_INT_ECAP2);
' n7 D. `. S, t. n        }6 S! r& k4 a9 \6 l4 n- q! Z! z/ o
        return frequency;* n2 K' x1 m2 ^
}
- ~' g+ y1 P' r9 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波。我们有相关例程,请参考。
- b3 I4 ^* _( k+ X

本帖子中包含更多资源

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

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-12-15 16:28 , Processed in 0.046751 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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