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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/) }9 M" _; C; F! O4 ~+ ^
/*                                                                          */
# a9 |1 M2 v9 d2 u( X/*              宏定义                                                      */( u; l, x7 {# \8 M
/*                                                                          */
6 Q5 z7 P. r; \+ |/****************************************************************************/
  Q9 Q3 N* v1 K" c" v// 软件断点
4 ?% f  T, S' W#define SW_BREAKPOINT     asm(" SWBP 0 ");
' o& a3 H+ S, p* ~2 A' v$ W' j) _: n% _4 n0 B
// 时钟分频  @0 O+ F- E4 y4 P
#define CLOCK_DIV_VAL     228- b5 a2 X- q7 j( h2 a+ W$ y
3 p: A% K5 }+ {: |3 }& g5 }* z/ y
/****************************************************************************/" f+ o" f/ c. g: o) ?  ^
/*                                                                          */
) l8 A0 C, c/ L  I$ n; V/*              全局变量                                                    */
# P% o% k* L2 ~$ R2 y) G! W/*                                                                          */
  [# H/ Z6 E  h: v6 t  Z/****************************************************************************/
" ]8 [5 C* _4 m/ s+ ]5 O/ k/ rECAPCONTEXT ECAPResult;
7 B9 ?: l" b) ?, O7 b  s' Z. j
% S, X3 ~$ Z5 h; G/****************************************************************************/
! M; z0 B3 w4 u6 r) r  F# `9 k( ?/*                                                                          */
) \3 F- L& Y1 [8 K, ~3 W1 O" p/ M/*              函数声明                                                    */5 e& {! Q7 @# ]8 [: [9 K  c
/*                                                                          */
+ F/ k- h6 h5 W' k) Q  q  A/****************************************************************************/
. s( G' y* [1 C9 U// 外设使能配置
6 w% q2 Z, l- z, ]8 p6 `9 uvoid PSCInit(void);
4 C2 C! F8 m) C* v2 Y
/ M5 t6 K' t3 a  S// GPIO 管脚复用配置
, C' M; F6 _% _) _, v6 l$ n" Q3 Mvoid GPIOBankPinMuxSet();
4 W4 i7 f9 i* q: `2 }  S& i$ u9 ?; x" ~
// 产生波形
$ f: O6 d4 r- Yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
5 ^$ f) A8 b$ Q1 l4 kvoid ChopperWaveform(void);
5 j. E9 T, V* R: V( d9 B& o9 m: U2 O9 _" ?
// ECAP初始化和读函数
& B* x: H" a% U% v# O. O5 S% o" tvoid ECAPInit(void);4 a! ~9 C  F5 C$ c. @# S2 ]( y
unsigned int ECAPRead(void);, K3 ?  t* u2 f) ^3 G
" c4 a8 C. _* g  U6 q- l
//ARM 中断初始化/ L# l2 c* Z% g8 A8 _- }0 x5 r
void InterruptInit(void);
  _( D% f8 c4 N) N3 P+ Z& T* I" O5 z' P
// PWM 中断初始化
) o3 z8 c' h* p. Y! cvoid PWMInterruptInit(void);
  q4 ^% k' g: y% X: [9 b/ A// 中断服务函数
5 {+ j' b+ c9 o* k/ Z, v, k// PWM 事件
7 S; h7 L& E! {1 e9 D- J/ Evoid PWMEventIsr(void);5 H/ m0 n$ z* `4 o4 T) c  E
// PWM 错误控制事件4 U( z+ q) K" p' e
void PWMTZIsr(void);# ^9 d& b+ d( B
6 n& ^' w2 ~( n8 S3 Q
/****************************************************************************/& R- t1 V& l( L
/*                                                                          */' {- r5 X# F& k# e1 P1 i: J: h
/*              主函数                                                      */
& i, b# x1 b, }/*                                                                          */
$ f, o1 x3 M& o3 b5 U* k2 n/****************************************************************************/. G( R- \5 [; i( t2 g
int main(void)
+ \2 j8 J6 B: r# _3 N{; h- T# u3 F( p) L& B7 }% t5 y
        // 外设使能配置9 D0 p6 ]* [# |  D0 {$ z
        PSCInit();* m6 |5 s) R) p9 ^! ~. G, E

. m; A6 w: G/ Z% G0 R' q        // 初始化串口终端 使用串口2' X& N! y  F) |" s6 V5 b, O
        UARTStdioInit();
+ ^1 F) d8 p. }2 U0 v' [, e       
; @$ c3 V* d8 |3 z7 ?8 z. Z        // GPIO 管脚复用配置1 ]2 C: S5 M$ N" J6 Q& P/ r* x
        GPIOBankPinMuxSet();, R6 M* q0 p( {* e; C

0 s: Y, d8 m0 s) L9 V! @        // ARM 中断初始化
) M' h7 l/ e7 i% ]  W        InterruptInit();
0 b1 j4 i' f. e' {) m8 b0 b' W9 X9 J. x) m" O7 i/ U: `5 h9 {
        // PWM 中断初始化
, E* [7 _. m: w) V+ I$ \" R) n        PWMInterruptInit();, J" Q  f1 ^4 e& {
) U# M! j: J& q
        unsigned char i;7 g4 y* F$ B4 ~8 t: m; j0 D
        unsigned int j;1 p* v, y/ ]$ k/ n& q1 G
8 L/ J  ~" @1 s$ z' B
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
* x% p0 a" |# l" T0 U" W        UARTPuts("------------------------------------------------------------\r\n", -1);
, D* ~$ x$ R: H5 x8 x& `% M        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
+ N& L" W. X& x% K$ p. s        // 产生波形+ N/ J- d: ^- T- F! J' }
        PWM1ABasic(25000,50);
6 X) |/ U5 Y2 u3 v6 {3 H! w, ]* z% y, {+ N( c" `7 y
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);3 j9 N. W& A/ u, {- ?  @# _
        UARTPuts("------------------------------------------------------------\r\n", -1);
' }4 _, T( u$ ^7 u
' r" l6 R, D7 E7 C" Z. P* w% c2 s$ f, q
$ L5 R; `  B9 \2 ^$ T, a
        UARTPuts("------------------------------------------------------------\r\n", -1);
% s# v9 l$ U$ L4 k        UARTPuts("                    C6748 ECAP Test\r\n", -1);
$ P5 q! ~- g# j        // ECAP 捕获初始化$ W5 r- N$ l$ I' G
        ECAPInit();8 _5 Q3 ~, a$ X, o
        UARTPuts("Initialize ECAP.......\r\n",-1);
5 v. g, t# o  }6 @$ w7 `6 Q3 Q8 B        for(i=0;i<5;i++)8 d: q/ U. b  U, F
        {3 L' J0 g8 v+ K9 C- d+ X5 P
                    for(j=0x00FFFFFF;j>0;j--);            // 延时: q" D. t( a3 \& U3 m0 [
                    ECAPRead();, X' g& x+ i6 M* Z9 D
        }
( v* E, ^6 ^# F1 x; B0 y        UARTPuts("\r\n",-1);7 W! A2 E/ l/ o1 `- S3 I- Z- M
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);1 ?" }+ Y  Z) J% v5 m9 F0 N3 H* X% N! o
        UARTPuts("------------------------------------------------------------\r\n", -1);
, Z+ }+ q3 s& H
/ |/ p6 O& F( h  \+ Y0 [        // 主循环: n! }/ A8 ^3 k; Q
        for(;;)
* u+ P6 ]; ~& X; A! v$ U        {( J# y$ k  N" O0 i
) ?" ^: e0 R* P: @# U; G
        }
8 I5 ^- L4 k/ b/ t) b0 d}
" i& ^9 |7 J; b4 [7 i* {4 |3 l4 V+ l( a1 J
/****************************************************************************/
' p' v- n/ U+ |/*                                                                          */
! o1 g5 P( j  E# H0 \1 x2 W/*              PSC 初始化                                                  */
/ W% ]8 D) z+ Y, n' S5 C9 ^7 G) t( _/*                                                                          */4 s9 G/ W2 G8 B0 a
/****************************************************************************/8 T# E* _( Q. X& a: [
void PSCInit(void)
- ?2 [) f3 @$ {; X{/ Y5 P. s. G" K5 G9 r
        // 使能  EHRPWM 和 ECAP 模块# f* ~1 r" G7 e- z0 @( N
        // 对相应外设模块的使能也可以在 BootLoader 中完成
4 A4 {  z9 r2 T    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ Z3 @1 q& @6 r$ i    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
5 @7 U- e) }6 E0 r4 H- q) j7 T}
2 l. r3 v1 F+ g& `
" w/ C) k9 B( {/****************************************************************************/8 U/ A1 _; w+ _7 A6 C
/*                                                                          */0 o5 u6 G4 Q8 c5 m5 d+ v7 U* G) I
/*              GPIO 管脚复用配置                                           */
% y) _& K5 e/ j/*                                                                          */# t: c4 l) h( }* C1 x" D
/****************************************************************************/6 S* U# m1 @0 A. z+ m
void GPIOBankPinMuxSet(void)* G" j' m3 C! K# B  K1 k
{* @7 o3 C4 |, n2 X* `- V
        EHRPWM1PinMuxSetup();0 m' X: |# M" O/ ^4 |

* u/ N8 H/ B% a) o( z        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
# A: n  U# Y1 @/ }        // 作为捕获功能时管脚方向为输入8 [# M, W* j4 s: k9 [& E
        // 作为辅助脉宽调制时管脚方向为输出! g  ]7 x. m  C. p8 z
    // ECAP2 / APWM2
; F7 d+ f/ |8 ]8 e        ECAPPinMuxSetup(2);
2 m; P2 [( z3 }' ]" z
& j3 z; ^  J3 M6 v        // ECAP2 / APWM2方向设置为输入6 G+ U4 W- d3 t5 M$ Y. T) u
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
  H; s1 d0 l+ G5 x3 R/ @}9 i/ m0 E( F# ]
3 ~. s& n0 r1 b  p7 m' r" k
/****************************************************************************/+ A% Q% Z" j1 s
/*                                                                          */
5 u* z5 Z) n- q% O& t* X  u/*              PWM 输出波形                                                */
( b$ X6 q' H& ~' q/*                                                                          */6 X: p( _; U" e: S, `9 D2 N3 Y9 J- `
/****************************************************************************/( R, {- O1 {6 a6 `
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)5 C* C6 o2 {: m1 f% j( V" Y& n
{
$ X0 A0 a6 Q) m; X# g* v* q    // 时间基准配置. ?) k0 t1 Y& J' p6 X3 q
    // 时钟配置
: V# I2 V& |5 z- I1 J8 y- d4 f* L    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);3 }- I1 E1 k* ?& n# s) M# c7 Z3 [

9 h( D1 W- C1 C    // 配置周期
/ X% p9 k" K+ n& Z9 x    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" p' v. W7 L( H& W% K' c, z                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
+ ^  v* x6 i5 B; j4 P! Z7 V; X+ K3 O! S6 M( R' Y
    // 禁用输入同步信号8 p" Z, o% z/ _/ F
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);% |  f# X2 ?, H
  Q7 Z. K7 _( f3 m0 h7 `* y% D7 x
    // 禁用输出同步信号
3 G* o% R+ x% `$ r1 J( M    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
  ^* v; g8 S5 k- k/ E- z3 ?5 n; x2 W7 C1 g. @" }
    // 仿真(DEBUG)模式行为配置
* A- w: v# n' G    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
0 f) M0 ^9 l4 A$ J' d- v& |2 S% u9 Y. M( q& m# t9 V
    // 配置计数比较器子模块) u! S- Z1 S" J; A) S
    // 加载比较器 A 值
9 h; t. U7 t/ C7 k# Z: D. E! k9 l    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,0 I" }% {! `* z; X9 ^1 E
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
+ D! l. q5 {/ Y/ e/ M5 z' Z7 V2 z
0 |5 [/ G$ a7 g. x0 N    // 加载比较器 B 值# T# h  ?: }7 `. b
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
: L* X* f) t: u4 E/ K                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
+ m$ X; o2 D" K  P% X- m
$ \4 R* S7 k$ w& H3 w0 q. j5 s    // 功能限定配置(输出引脚触发方式设定)0 e7 `, s# Y+ R! w/ c1 d
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
  R9 H6 Y& K' z7 j    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
7 t$ n; s2 E. T3 X0 P  f# k                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,/ T8 H% M( m% d1 s7 W
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);9 e  h1 q! y+ V  V8 u

0 r2 t  g5 S; S1 h1 @    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
5 J0 k1 ]1 n* ^  K4 ?4 H    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
; k* }$ P4 `9 U% b8 y
9 A$ {7 r% K  R! u9 A    // 禁用斩波子模块
& |+ K* l4 p. x; ~7 \    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
. l, r/ V. T: g" F
( t6 c( ?; s. m% l' X$ A' |8 @    // 禁用错误控制事件8 K$ d, y; a2 @; _
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);. |0 Q+ }: n2 r; c* l! t7 Q# R" B& c# |
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);" M& k' f2 \6 E: A  _$ Y. D

* D' B0 ]( L+ s0 |$ Z    // 事件触发配置
8 ~: r- V$ j8 L% j2 t) f* M' v    // 每三次事件发生产生中断  s3 s5 C" T; I9 \- z. B+ X
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
( ], k+ A+ F. Z$ I4 N& m    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# \) s) Z" t" H2 w: p$ }) v. r    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);1 [) O; G1 K% T% T0 q0 n
    // 使能中断
, }; M; M) G% }4 c7 g6 V! `    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
; m& o2 o3 J% b0 Y
. S6 S$ V3 p8 V; ]) J    // 禁用高精度子模块
9 y5 m: L/ }6 J& Z, y    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);' U% f, |( `$ x
. @. [) [( K1 M* u3 m9 W6 Z
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
( U; }3 L0 o* [6 ~- q}
7 ]* {( O8 b6 F6 F
& g) u  Y$ |& M: U4 v1 E5 Yvoid ChopperWaveform(void)1 {/ N. W* |: \# E8 g2 q
{4 j; G+ E7 S. i: t5 ^5 V
    // 50% 占空比
: l  J- r- b! J% A, s    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
8 _4 U. s2 `/ {" j- @    // 4 分频- z6 B) P6 ^1 [7 A) a: u
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
) n1 v' v" h6 P! W* `5 Q/ a3 u# y    // 单个脉冲宽度, [" U7 y  d  g( Q. U3 F5 Z1 U
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
0 o% N9 I7 d0 H# X    // 使能斩波子模块5 g5 i, @; ~& |3 }1 B8 m6 k
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);( E0 {! n  a5 ]* k; v+ l6 {5 p: b$ n
}* W0 f5 z2 F6 v1 X5 `1 q: ~& T

" O4 v! M  T& ~9 [: J/****************************************************************************/
* |; m! W! O) A- p/*                                                                          */1 i/ R  g$ C: W- V
/*              PWM 中断初始化                                              */+ j6 H6 M/ A/ F0 u% @
/*                                                                          */
9 ~) N9 i+ O. x( h" u3 ?/****************************************************************************/7 {+ E) p! S/ n$ s) ^1 I/ S( _
void PWMInterruptInit(void)
0 }( }/ I* r" H/ w5 X7 ~, L. u{. Y- X% R# E! y7 c% R! y
        // 注册中断服务函数
' ?. s6 K6 R& \0 X5 v& c+ |        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);/ C: X/ l. C0 D( g' u
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
5 ^/ S6 l2 ]0 Z4 [* p8 v
5 C( @  Z) }  }2 |        // 映射中断
7 [) n  i8 j9 R' K% i2 K4 @        IntChannelSet(SYS_INT_EHRPWM1, 2);
5 V" B2 E8 _- {2 z, Q        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);1 G4 D- H6 Y1 n5 d: A2 n+ V' @: p) {

- }6 Q$ w- [- o+ C5 K# e        // 使能中断
3 O& m6 p# Z9 o' Y0 b        IntSystemEnable(SYS_INT_EHRPWM1);4 t/ n/ n; L2 N& t8 T  p0 S
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
8 O; s. q/ U; u7 `}: f* g" V; e6 q3 {) R

0 F' G' S. \8 O( Z) i( s" t) ^/****************************************************************************/
' N' Z1 L5 @9 Y; _/*                                                                          */
4 f( h! I- I& g5 }0 Z/*              ARM 中断初始化                                              */
  p, X/ ]6 {) i8 @( S6 I6 N+ ^/*                                                                          *// a7 f) Q* c, t; @
/****************************************************************************/
1 ~! x- ]7 m$ c2 e; Ivoid InterruptInit(void)6 @" F0 K$ R' C) R" Z
{
" G9 z8 p+ z9 k        // 初始化 ARM 中断控制器
4 I! b& T3 {! x4 o5 C: h        IntAINTCInit();
& b, Y8 t2 M  _' Q; T9 C5 G; l; P3 S( \0 n0 ~
        // 使能 IRQ(CPSR)% j4 ]$ T/ r0 J! L5 s" _9 d/ o0 g
        IntMasterIRQEnable();- i' D: X" D- R, L
8 d/ z3 o3 H% N" R7 t) X/ b
        // 使能中断(AINTC GER)* v' J7 S, n' Z- u4 c
        IntGlobalEnable();
* J4 j3 E. {& `
( u9 `  n* x& b# a0 P3 N# a: ]% k        // 使能中断(AINTC HIER)
, h2 m/ x0 }- S8 O. A        IntIRQEnable();* m5 Y5 e1 L' p: d5 {' c
}
1 D  Y3 z8 T( }; \4 }' H& x
1 k) v" E# Y3 @( f/ m% w
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
9 j- G! Z; t' a& Q/*                                                                          */
2 F# ~4 W/ }* s6 C& B2 T  B5 D/*              中断服务函数                                                *// ^/ U5 I0 z/ @3 s
/*                                                                          */1 O; s# N% J1 y& Y
/****************************************************************************/1 i0 a8 ?3 y+ v% O& ~8 H
void PWMEventIsr(void)! t( z. w- M/ ]# H9 l3 N: T9 K5 e
{& |, V& q$ J8 B) }" M2 n
        IntSystemStatusClear(SYS_INT_EHRPWM1);
2 {8 Z( {7 n% {- D0 B  T7 K* V% Y
( a$ m5 Y% d; G. }6 a    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);  h9 k2 u  J9 f7 Z4 K
}
1 a  k0 j2 X, s9 A5 J9 j) `( t2 q+ y; h
void PWMTZIsr(void): t* i3 L% m5 j0 j1 o$ m6 y
{& V+ j( a* f0 y$ a
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);% d0 {& L/ o5 {  j* o  W; t* _
9 B& V: ?6 S! x' n: L$ W9 L4 [
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);4 k) B9 M* B2 Q$ L  @
}
+ @" q" r& r: l) Q3 k- q8 V) _' b) g, q
/****************************************************************************/+ b4 Y  C. l6 R. U1 B8 E
/*                                                                          */
, E$ D$ {+ Y! s0 G/*              初始化捕获模块                                              */
& K% o; \7 v( b6 G" `& I/*                                                                          */% p8 ]6 e* V/ T7 n/ R0 A$ v4 w
/****************************************************************************/* k1 ^# u( f8 H0 Q
void ECAPInit(void)+ Q6 A; v6 T% f# x9 @/ [' v
{
) P% `' |. X" ^        /*-----设置 ECCTL1-----*/; O/ c& B  `- f8 N0 H4 K5 y" u( O
        // 使能CAP寄存器装载
$ W* O9 e2 e; i- x$ |9 x1 \2 Y        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);3 P. Y4 R7 K7 Y0 F7 L& y
        // 设置预分频值.
/ ~6 r: `6 R' M) o# S        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
; ]* I. w$ \: o4 w" C2 I8 Q7 W" }        // 上升沿触发捕获事件
- B5 @: p6 t3 P: b        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);' P  k" s% f# O; r0 G6 ^
        // 输入捕获后重新装载计数器值.- V  I  I7 i8 g& r  A' K
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);3 T8 ^& v: k% n6 P4 F% }5 f
0 X- l4 g; V. x; x
        /*-----设置 ECCTL2-----*/
* m0 g0 C0 |$ H* u        // 连续模式
6 [4 K2 U: j; ]3 \7 @: m0 I        ECAPContinousModeConfig(SOC_ECAP_2_REGS);0 q6 t3 B: m  ~# q. M2 ^% }* o3 x
        // ECAP计数器TSCTR持续计数1 q2 G* M* g" w. F2 y* ]( E
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);0 |, B3 C  a: d$ }' G
        // 禁用同步输出和同步输入
4 W5 x9 w7 |& F' d        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
6 I1 C6 W' `. M        // 配置 ECAP 2 为 CAPTURE 模式
9 }6 K4 n8 o  {7 H        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
* `5 ~, `" g4 u5 a) |7 d5 h8 c2 Z
8 `9 p' S' g9 K! H  T        // 使能中断; G7 [/ `$ s) S  b. _; c8 x
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);7 H9 Q( b( M; x6 j# u, S
}
# E" K0 J; }( M. f' ~% Q  @' ^* W& ^6 F7 N0 s
/****************************************************************************/
' M' M4 D4 p  l. I/*                                                                          */
# A3 Y1 G8 s( |9 u/*              取得捕获结果                                                */
+ L5 b! `8 j% w1 H9 x# }1 K6 X/*                                                                          */' H; c3 n# ~3 v4 o2 O/ g2 L$ b* Z
/****************************************************************************/
, h" Y3 o* I+ y! V5 F8 o0 J! Wunsigned int ECAPRead(void)) L$ V6 a% _  ~- C. ~
{( {: F+ G) p, O) u0 T! ^
        unsigned int capvalue;2 t* `0 l3 N8 H6 ~% m% o2 g8 E1 u
        unsigned long frequency;
+ B* G/ S2 }  H# O) J; f$ }9 z! X; W0 m( b3 }7 P! n+ ?( w
        // Event1 中断标志" o+ l+ j! {* P; P
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))) ~) @& E8 X% x
        {& ?1 r; }9 q6 U# H% k
                // 取得捕获计数
6 T* X5 W, F5 V6 I                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
; H* w) F; q( W" [/ y                capvalue = ECAPResult.cap1;: v: f/ Y$ M- ]- t: N( z1 s  \6 y
* |3 I% g$ a! i( @+ m" y, m
                // CAPTRUE 模块 228M 时钟主频+ O8 c2 c1 \# |7 D: M
                frequency  =  228000000/capvalue;
! A- G" e1 |7 S                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);- K- `1 b7 r7 _* w( k: x# B
+ L; b5 T6 J! \1 q" T
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);! ?- y/ \5 `( g, U, u9 [9 v
//                IntEventClear(SYS_INT_ECAP2);  i3 G2 [- q- Z  z* t  g/ o, y
        }  T1 y7 K5 U- W8 L/ g" X- X+ f5 I
        return frequency;. y2 @1 E, U3 r) _) E
}
- m1 a, ~$ W( Q9 q
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。% J% h+ _+ F; ~2 j0 Q5 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-12-14 17:42 , Processed in 0.050109 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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