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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/" Y' s: J6 n! J+ `! m; |$ J5 ~
/*                                                                          */
& X8 I/ [) Y# ?0 B* n$ [/*              宏定义                                                      */( P/ [) A/ h  _
/*                                                                          */  E, n! X" v5 s/ E- B, W
/****************************************************************************/5 s" _4 J$ O8 W0 j! e: a
// 软件断点
" m% X6 d- F( N+ n#define SW_BREAKPOINT     asm(" SWBP 0 ");
) S0 c9 r7 [: ?5 _% i2 j
+ x! R! k0 i/ |4 @4 M* n8 `// 时钟分频9 ?% O2 T' U$ w* h' J& L: R8 Y
#define CLOCK_DIV_VAL     228, Q/ ?8 e0 u* q: d" J

9 {8 Y5 `9 s  N/ {+ C* _. l. K/****************************************************************************/
: i" J  q* e+ _& Q1 M& i* g- ~8 `5 N3 N/*                                                                          */3 S$ h7 J  m$ y7 S% p2 i- w. G$ R
/*              全局变量                                                    */
; y: H  }, X/ h8 `/*                                                                          */
7 c! ^! g' E( ?& }1 _' B/ r/****************************************************************************/8 N& i+ z9 u) c
ECAPCONTEXT ECAPResult;
# |% g& ?2 P) C- o/ x! S7 _! G
5 M! R1 p; E5 e1 m5 y! _: l/****************************************************************************/" @+ w3 T, C5 C) l: F, l
/*                                                                          */* ?: R  |: o2 W6 W
/*              函数声明                                                    */
$ X6 Q! n% p) P" j  G/*                                                                          */" Z8 G; z0 z/ i
/****************************************************************************/
9 h$ I/ u, P/ r// 外设使能配置# F% H! Y( a6 n
void PSCInit(void);3 R! _# f7 s! F8 a6 x1 n$ J
+ R# v2 h4 U8 j- L( U
// GPIO 管脚复用配置2 }: G, \- m# n) X4 p" x$ W
void GPIOBankPinMuxSet();# W2 j: ?( w! S

' ^; U' F- s! I- Z7 D; z0 Y$ a9 }// 产生波形
: r2 E6 l( g4 a4 H3 R" Evoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);) Z/ H% U1 @9 l" h+ i
void ChopperWaveform(void);
; n) S; c, n! f: p; ]- D2 L) Q/ T. _
// ECAP初始化和读函数
3 @0 g* T1 W3 s" _. f3 {; x: vvoid ECAPInit(void);# p2 ^3 H  B1 m% E) E8 X
unsigned int ECAPRead(void);
4 D: Z! i! t6 H- o3 o& h. F! D  J( z  v$ ^
//ARM 中断初始化
& C/ N0 \9 K& svoid InterruptInit(void);
. S/ z" O$ m/ ^( [+ W- h# o8 o) C% O. ?% s" {5 d+ W$ S
// PWM 中断初始化- n3 a" }/ q; p. {
void PWMInterruptInit(void);
% d; I( @. h  m- N// 中断服务函数' b# X: \9 ^5 H% U9 d
// PWM 事件0 z- V$ [% x: Y. e+ j% X- O# Y
void PWMEventIsr(void);# J4 Z) N( ^4 @9 l1 v* H
// PWM 错误控制事件5 q5 X& Y1 `7 U$ k/ z& b( D
void PWMTZIsr(void);+ s0 N- A# H! s0 ~" D

0 }/ w/ Z% h: `/****************************************************************************/
" S6 n" f6 C+ r/*                                                                          */
: P7 y  f* y1 E3 Q' ^' b/ O, T/*              主函数                                                      */# z! S8 \' ^/ m# d: o% ^, X: T
/*                                                                          */. I  }2 M) u) q
/****************************************************************************/6 e# W. B6 E" {
int main(void)9 A, K  Z( @2 T  C# n8 q
{
& }, {; h4 {7 S. r, H/ H5 Z+ E        // 外设使能配置
; ~; e2 X0 R3 J% S5 b8 `. q9 C* T! y        PSCInit();. i: {/ A5 r/ w" ~, F' O
9 C$ ?1 ?* v3 w% S
        // 初始化串口终端 使用串口2! s% l( S, O1 M( O2 p5 e
        UARTStdioInit();4 X8 O; \( I  M, r0 \3 N0 P* ]) q
        " r+ A2 o; V+ q( q: t/ z
        // GPIO 管脚复用配置
' D2 `% f0 V, f1 X( P        GPIOBankPinMuxSet();! N+ j+ l% Z) a: V
  g. L6 d/ z0 K) b% w: ^, ~
        // ARM 中断初始化' U# ?7 }5 I9 W
        InterruptInit();
* F$ R' P+ b+ e1 A/ z# }* t9 e) n# k3 P/ {# [2 C& y# P  S
        // PWM 中断初始化
* r& z; X* g2 O3 ~4 Z        PWMInterruptInit();. V9 t- h- Y  t( e9 l: g: {* C
! y5 P; e/ e" Z: @
        unsigned char i;
4 e( S9 A" k9 ?& F        unsigned int j;
/ [* v- l! ]8 E4 \( K
3 _% a( p7 s, }$ B4 T' W. s" V% ?        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);7 Y: D3 j6 i% h2 ~. G3 x' L( [
        UARTPuts("------------------------------------------------------------\r\n", -1);! T( `, f$ o( Q. e4 {/ W5 w
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);& u* C7 G& J  H1 H
        // 产生波形
" m# W9 i/ z3 ^        PWM1ABasic(25000,50);
! _( Z) V, j3 Y5 v, B% c) u5 Z% l5 d) Q/ X! u; }7 K
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);3 r( d2 r% A, o; b# y) y( p
        UARTPuts("------------------------------------------------------------\r\n", -1);  ^# y* w" H$ Y: h6 b9 ^0 \" l/ @

( P: e& h: Z. r& d+ N+ d" u/ {" Z6 G3 A. _# O6 H( e2 G
, n( U0 p6 \9 Z3 ?9 Q6 e/ G
        UARTPuts("------------------------------------------------------------\r\n", -1);3 \4 L( L: \7 _, k
        UARTPuts("                    C6748 ECAP Test\r\n", -1);; p0 [! ~0 x9 K' \* n% s( u6 K
        // ECAP 捕获初始化) M" d6 Q1 g3 p7 O3 r: q
        ECAPInit();- [' P$ N6 e: ~$ H+ {7 Z: \
        UARTPuts("Initialize ECAP.......\r\n",-1);
2 v6 O# m& |! P$ `2 N- P        for(i=0;i<5;i++)
4 w2 @& q+ ]0 D1 S+ h0 O6 M4 J& {5 E        {8 I4 [; u: A3 `
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
0 q4 ^% i  v/ e2 `                    ECAPRead();# c4 I# |9 v( m% ?
        }
& N' R* E' H; K* P        UARTPuts("\r\n",-1);
3 D: V6 X2 ~6 y4 X; z        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);4 S% n" ^9 m& n% T
        UARTPuts("------------------------------------------------------------\r\n", -1);, _* r0 S2 S: `. |" R% N) R) m" P
2 o: x- b& j7 Z9 X: O: j2 V. _
        // 主循环
$ I( T6 M9 I6 S* E8 b        for(;;)" y: J9 O+ T) m7 q
        {
% q( Y% C) q6 [& o/ p4 \( M4 F& T" s. V9 z: {9 Q% C; w9 a
        }
7 V* U2 [: f, @0 w, {. i}! ]/ }+ ?4 R, o. B) v, G2 S

  R3 C( Q8 d- ^7 A/ p7 }/****************************************************************************/) L2 q3 O. X- h  U
/*                                                                          */
/ D4 Q0 ]2 o2 c8 y/*              PSC 初始化                                                  */
0 n" h# l, c9 l! p# t) z4 M3 i/*                                                                          */
" X1 @  }* a% b) y/ T( d0 k/****************************************************************************/- X! @  E1 n( u0 S( B
void PSCInit(void)& g( Z# h: I7 b/ G9 n* C
{$ R8 c1 |/ a) O
        // 使能  EHRPWM 和 ECAP 模块
2 M# i8 M( W( j+ l        // 对相应外设模块的使能也可以在 BootLoader 中完成
; }3 P7 s/ B6 ^  R6 y$ [    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ o8 n, g* ]! R    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ M$ v0 s8 D) T5 c/ X+ c}
2 v& ]0 Z# {  V0 j7 @1 f' t& l+ G& {( _4 f& K8 |1 f& W1 u) F
/****************************************************************************/7 i# i. y: [( X2 l
/*                                                                          */
. V5 k+ R6 N4 D7 W3 {& s/ Y9 h/*              GPIO 管脚复用配置                                           */# B: v% x: I# k9 l6 V
/*                                                                          */% S. E5 U$ G3 _/ {/ E8 U& O* ?3 P
/****************************************************************************/
+ y3 b+ u% X2 T3 Q/ L  Avoid GPIOBankPinMuxSet(void)
% m. U: Q5 h' d( P{9 i9 X" C  E) N: S# h$ N3 M
        EHRPWM1PinMuxSetup();
; ]2 l- g! J* X3 O' A
* }" X4 D; Y) [( P$ O7 z  d8 W        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
  @) B- ~  y% s. P9 L: q; i3 o        // 作为捕获功能时管脚方向为输入
6 r- x4 d) S1 z( {+ ]7 U; {        // 作为辅助脉宽调制时管脚方向为输出% w! ^# N8 U& u$ `  K6 x
    // ECAP2 / APWM2
$ A/ l# {! Y+ u5 ~        ECAPPinMuxSetup(2);
. E, p! x: ~  ~* y2 }$ a' ]. J3 M' D; s6 ]9 @
        // ECAP2 / APWM2方向设置为输入
3 N9 _  a; o% r/ K- r1 ~        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]1 R( }; ?* _8 k3 k/ @) j) v
}
. u5 `' r# a. m* L* y4 D; C) A; x1 t$ U! H6 f$ t7 o" q( ~. ]2 _
/****************************************************************************/9 c; g( r$ w7 a. {2 r
/*                                                                          */
9 t! m* h3 A' i! W/*              PWM 输出波形                                                */
/ |5 c( q* R0 Q# d/*                                                                          */
  k0 t: \! U* E/****************************************************************************/6 t" S' U* r3 e: G# g; q) a
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)! }- }$ V* e& \& K+ m0 _+ k, E
{
& D# M( s- S* }% T. `6 p    // 时间基准配置5 \! n% Q/ K9 F; D" N
    // 时钟配置
2 v! {, U0 n2 P    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);1 D# a$ X' G8 e; c8 A8 ~- h
) R2 L3 A. O# a' Z6 F
    // 配置周期  J- [6 k1 ^3 K! ^% X# t
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,) W" V  f' x' r$ a
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
) c; v8 ]6 u7 ~& J% }$ G; q. o2 k( x1 Z2 |% ^" y
    // 禁用输入同步信号0 q& h; `; M8 [, C# `5 E
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
6 q( `: c, S( E: P+ x/ {% v' J: D  I' M, G: T% J
    // 禁用输出同步信号' V! ]# o1 J  M9 ^
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
) ^* p; o2 Y9 U8 ~, X* t) @
" D$ T+ T  _6 [1 K- K    // 仿真(DEBUG)模式行为配置
* Y0 V: c& `- [2 _  ~! X    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);( u. |" |; o1 Q: F+ N4 Z% `

5 [/ V; C! h% q' Z1 u9 F    // 配置计数比较器子模块
8 A# O9 c: J7 I    // 加载比较器 A 值
/ @. E7 I5 K% z8 N$ [    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
2 I2 V+ v7 f9 R  Z+ `: }/ Z3 P: z                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 C1 [2 A+ X, X# Y1 X1 z
' K2 M& F# G# `5 g% O; j, K+ ]
    // 加载比较器 B 值
6 R* j* q* @# t    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
+ y8 x% l& j$ ]# y9 z                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);% Q: r! e7 |0 \# b* f( L7 r
: F$ @" [' |7 z* A& u
    // 功能限定配置(输出引脚触发方式设定)+ s+ f: N: e" w$ Y4 ]2 W
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出/ P- ]9 s# Y+ `8 X: f$ l
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,  S8 F; Z& a4 d! F7 W. ~
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,2 j7 x/ e1 Q! r* m
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);: Q! M0 f( a# H, z" ~/ Q8 k. w2 U

% V7 l; N  T7 E: J7 h    // 禁用(旁路,信号直接输出到斩波子模块)死区模块/ Y& ]4 k8 y# F1 e/ I1 h# F  I* l
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
/ T/ G2 u9 c0 L; C4 k
& K: L3 E% \5 o7 @& x# Z    // 禁用斩波子模块+ S/ X+ q9 k( o. @3 `) v, i* s
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
. o0 u5 z# C9 @7 j0 I1 U
: B! p( r. f) K2 K$ R7 L: d    // 禁用错误控制事件
( D0 @5 M+ w9 R    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
% o& H( @: V1 Z0 z' B. j    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);- M% l% b7 p7 h9 g& v4 e
: q% ?7 @. O1 L! }7 F
    // 事件触发配置3 R- k: G: g& V; E, P; a/ u  [; D9 Y
    // 每三次事件发生产生中断4 K/ }1 T' ?% s5 A4 ?) R
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);" t, d" T, k' @+ O% z% h) m+ R3 _
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
( V" S5 d' N& d+ t" E+ d0 \9 l    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
. t* k% E# a6 U& t    // 使能中断
, {6 t7 T% Q: ~+ F; F    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);- O, ~; d2 A  @0 B. @, @

  U  {+ Q; J& g    // 禁用高精度子模块% D9 t2 q8 T7 Q( A; |. g! n8 h  l5 Q1 X
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
. B1 T6 N) d$ L0 [, u3 T4 L7 M( O3 O: e& i
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 @  ]# v1 }: T+ o5 q) B! J}
- }; s7 E' }7 |- t  Z1 I7 T+ T" h1 F+ E4 n/ l
void ChopperWaveform(void)
9 J, P: `& A9 p, L{0 p9 Z: j% ^) f7 h+ r
    // 50% 占空比
5 l3 m9 k. V9 \( D    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);0 X. f2 j8 D8 |( _8 |0 e
    // 4 分频
8 u: Q0 z- W* A0 ^6 U& c3 x    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
3 a3 z& N6 G( b  H  o, r2 R7 G    // 单个脉冲宽度$ z' s$ ~) n- Q
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);( z3 e7 C4 C3 Y0 |. k: H6 a
    // 使能斩波子模块
4 B0 K0 `: N/ T) t" o4 T    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
0 Q1 Y. ~8 n* K& S& J}4 T0 n$ q" a1 |- w0 b
8 N; Y7 J% K6 d4 |9 `
/****************************************************************************/% z2 O& f/ \. ~9 \
/*                                                                          */
# ]5 j2 [2 h" W8 i/*              PWM 中断初始化                                              *// a+ K2 G7 r" c# V* M  m
/*                                                                          */
6 e3 q$ P" h: T0 ]  w% \/****************************************************************************/
4 b6 n" z& I* [! r" ~' e8 ^" tvoid PWMInterruptInit(void)
) q6 h9 r- Z9 I' O- {{  e/ \& }% h, {$ f) O
        // 注册中断服务函数0 X3 C# O/ t- [( u
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);. q$ k! j1 g- |: c
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);, A* }' v; h" z( p% a7 G3 P

( L7 q4 b! \. V+ |; `8 d        // 映射中断% q9 R8 n2 C2 z  S
        IntChannelSet(SYS_INT_EHRPWM1, 2);
% n, x# ?: l6 ?        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
7 Q8 s" u( i4 b/ }( P, _: n4 |/ o6 `3 G% x: Z0 u
        // 使能中断4 Y9 R; Z* |" ^3 k/ d+ Z' S+ o
        IntSystemEnable(SYS_INT_EHRPWM1);% G7 T; [5 \% U7 `. N3 v
        IntSystemEnable(SYS_INT_EHRPWM1TZ);/ p* H: I1 v( F8 U; f! i
}* u7 N' ]4 P/ m! L* p
6 Z  B$ }, G% o5 {
/****************************************************************************/
* `* E5 e  B) h  f8 C; L/*                                                                          */
9 g- R4 a) n0 A. P/*              ARM 中断初始化                                              */1 o8 P: ^  m  E2 O* R
/*                                                                          */* v# g" I" v- G. n! i
/****************************************************************************/0 D% {+ h! w" ~& D) e
void InterruptInit(void)
; Y4 ?8 F5 S; z1 l3 y{
/ D. g% A/ I3 d1 R        // 初始化 ARM 中断控制器
" w; Q1 X  w! I        IntAINTCInit();
  A. x9 t  r+ R% \, R, d7 I7 u  F/ Y6 A0 K# r
        // 使能 IRQ(CPSR)& ]4 V0 ?+ O8 k% c% K+ t" h' d. z
        IntMasterIRQEnable();
: b' c' J$ s4 }2 M% Q+ Z1 C, S1 b8 r# x3 P
        // 使能中断(AINTC GER)
$ {, \' d0 @( g% L4 o4 x        IntGlobalEnable();5 `: u. C: L  t6 n4 O- z
6 q3 D6 B4 k/ Q) T- [2 {
        // 使能中断(AINTC HIER)& g( w5 r# F/ H6 H8 i' [+ a
        IntIRQEnable();
  F4 m( K( w2 g}
4 i+ r7 A) U' I! h9 H& Q* Z2 @( A$ T' _+ [& ^' p/ [' e
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
. I4 C/ b% _8 F6 P% F( [( w/*                                                                          */# d: u% q5 f* R0 _9 g: W2 t  W) \  C
/*              中断服务函数                                                */9 Q/ Z/ r& N2 c, x1 X7 J8 T
/*                                                                          */* U- N+ D0 u3 p) |
/****************************************************************************/# R. X& l* t6 I6 e
void PWMEventIsr(void)" N+ f0 R4 A2 Z4 O2 F7 S1 {
{
$ Q0 F: e+ [+ x2 B/ T        IntSystemStatusClear(SYS_INT_EHRPWM1);. @4 s# H9 t7 t9 D( |2 I

& c. l- R) q7 n# c) \; q8 E, z    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
& w1 L3 u  ?) A; ^! H8 X; G}
8 F6 _: j6 K+ F3 a( }, F" k& ?% A; m7 Q
- T% `" g/ h: a0 G3 Pvoid PWMTZIsr(void)) ^" Q5 r3 v( V' m, z6 g
{
" h! }+ T3 e9 x1 ~) J4 c1 m        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
5 S! f  g! e5 q$ W1 f- a$ P) j9 f. z0 D2 C1 O0 I+ d7 d
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);/ s  @. w$ e# }
}
! L* H; _. A/ H7 G
( J4 q- K6 k* ~* Q. p$ ^' @1 n- l/****************************************************************************/  h1 U; H: N9 D9 c8 J1 a% c. R
/*                                                                          */
2 ]" ]1 k: w% a$ h0 \* F; k7 l1 F5 z/*              初始化捕获模块                                              */% h( W/ K  ^9 w8 Y9 B- y6 Q
/*                                                                          */
1 v) Y7 V$ O! T2 l, m, ]/****************************************************************************/
0 g1 H1 D2 M8 d. {5 M) {void ECAPInit(void)
* j$ b3 I3 Q. D9 M$ }9 I{
  K  k' P7 r/ h& \8 S" i. ~$ c9 B        /*-----设置 ECCTL1-----*/
: }& u4 q; y+ D        // 使能CAP寄存器装载0 U. ?9 i) w. g/ a+ H( U1 u$ |
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
0 O$ a8 q8 N1 _+ s        // 设置预分频值.( G3 P! o- v. H) Z$ n
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);/ f" [/ L* N* Y
        // 上升沿触发捕获事件
  x4 }: a: O, c5 G) M9 ~        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
6 ^- J" `+ F) D( l        // 输入捕获后重新装载计数器值.- t  d" G0 E3 Q2 I
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
5 A! I  V2 Z: {  K5 Z9 D2 H' m! v! \8 E1 p9 m
        /*-----设置 ECCTL2-----*/
' i7 J# }" a  x- I        // 连续模式4 s  d/ Y- A  p
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);  `. u/ q1 H/ |& P- l$ F- z4 k+ H
        // ECAP计数器TSCTR持续计数. I7 w. p- E* g7 z0 w
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);6 q  ~9 Z* p: m. p# N/ r
        // 禁用同步输出和同步输入$ ~( l: }( P1 u2 Z& W8 t- m: o7 Q
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);1 t% N$ `; O5 G- D3 j8 F
        // 配置 ECAP 2 为 CAPTURE 模式
; @7 N/ w, b2 l* q        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
: s: y- P) N7 }; B( b; v
6 t& n2 D  T$ V( N# ]. J; x8 E2 Q0 r        // 使能中断' D5 b9 `0 [, ?8 {1 j6 M3 O5 K$ m
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);* B) \9 C% @! H5 I0 w0 D  I6 U
}4 `9 v, [1 _: K2 _$ L
( v, i( k& h1 A/ P, y
/****************************************************************************/0 Q/ L" S4 @; {3 A7 y; \
/*                                                                          */3 Q3 i3 e! k+ g- v
/*              取得捕获结果                                                */" p0 o9 _) [, I8 f
/*                                                                          */# G, w4 }8 T9 z8 J' ^
/****************************************************************************/
6 p8 k) ~; E, g6 [' \unsigned int ECAPRead(void)
4 r3 p0 s6 P* X( ^. s{
9 @+ s8 H" m% `4 N        unsigned int capvalue;
9 V5 S" T+ C( X8 M# ?! a. j        unsigned long frequency;7 g% ^/ i, F1 f0 u( u0 a" V

! d% K: ^( N1 h; {5 q        // Event1 中断标志
- ?- V* v0 Z7 ^6 W6 Y4 v        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))6 G( j: |3 Y2 m7 x) Y! S+ |+ Z
        {
3 Y+ Z( l2 Y9 ^4 S' M$ O                // 取得捕获计数3 x0 A+ I# s' g4 t+ e( o
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
# n  m. @: ~8 @2 S" z/ }( Y& j                capvalue = ECAPResult.cap1;
, i  i  B6 j! D& o. ^- p
$ }* A# V, a" p1 w  W/ @                // CAPTRUE 模块 228M 时钟主频
6 u5 I! X+ g; k4 _1 _$ p                frequency  =  228000000/capvalue;! R: c; H) h( }5 j1 R
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);) @$ `3 ]! F1 L: m9 N4 {" U1 o/ P9 ]& A. \
: o9 h  h2 J( s5 c
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
9 M( j. s3 b" Q* r* Q4 N1 {, E//                IntEventClear(SYS_INT_ECAP2);/ g' g4 z3 ^; e: D. r
        }% p# u& T# E& B% w
        return frequency;8 ~. n. u! X* ^4 r* f" w0 n$ I+ B2 a& g
}* Q# |; m4 R0 S2 T3 i% U
回复 支持 反对

使用道具 举报

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( K3 Z5 H1 H+ }* m( c4 \

本帖子中包含更多资源

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

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-4-29 23:35 , Processed in 0.044575 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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