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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
8 _$ b4 ?* T9 o4 l4 S" y/*                                                                          */7 V- L, t5 k! R, V
/*              宏定义                                                      */9 @8 d# @# ~* v5 t5 _: c
/*                                                                          */3 X7 T$ o; Z9 ?- U3 k
/****************************************************************************/
; A0 v" L0 M! j& _// 软件断点
- ~: u! q( y& _- R! I#define SW_BREAKPOINT     asm(" SWBP 0 ");
+ [$ R* y8 U4 ?: n" a8 c, p
  R% o4 @' }4 q$ m9 P: ^// 时钟分频
1 }5 L% A" Z4 J1 d$ D7 I#define CLOCK_DIV_VAL     228$ j& ~4 d( u, e

! O* F% d  C+ n* s3 Y/****************************************************************************/' A) G2 z$ r& h8 {& y2 _
/*                                                                          */9 x3 k( c5 ?' x* V8 ~: {2 {
/*              全局变量                                                    */
4 k$ Q! m  h" g( q/ R4 y4 l/*                                                                          */
$ S, p" p9 B' v. v/****************************************************************************/
2 w0 N2 Q! L& k; [2 \  p7 KECAPCONTEXT ECAPResult;
) @( u) \+ C4 N; D9 R4 ~% o2 @- p4 Y. _! {
/****************************************************************************/
0 n, O/ R2 y' s0 Q0 @* t. W' l5 T7 `/*                                                                          */4 i+ S( T3 d7 r6 w
/*              函数声明                                                    */. _) Y! o& Q2 r! f
/*                                                                          */! R# |; n  A+ l1 W2 H( ^1 @* ]4 y  G
/****************************************************************************/, S1 ]# v* L: y/ u( ^5 k: J5 R
// 外设使能配置
; r6 B- b! u, R) y9 gvoid PSCInit(void);
# N' p* r4 Y/ Y9 g$ B
$ g; p/ n2 w; K8 m// GPIO 管脚复用配置
  R' E- [1 w2 s; Ivoid GPIOBankPinMuxSet();
8 A+ _4 |" V$ L+ T/ I8 _. V% U+ _1 M7 a3 s! f0 T
// 产生波形4 {8 d) c) h& \: X/ m* `$ h$ J
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);" o/ U% W; O" N/ l, T  v" w
void ChopperWaveform(void);2 z  O9 M7 A/ J* _3 s
& O# s( b+ i" K% I0 m! K  w8 S
// ECAP初始化和读函数4 P3 F( e( H" |
void ECAPInit(void);$ R$ r2 h4 U8 p" v' Y  l! q0 k, Q
unsigned int ECAPRead(void);
) c) h' `" R- e* r2 r5 \) R
! |$ H( b, v" j7 L+ D  P//ARM 中断初始化
7 J( I; z8 ?% r9 T  Gvoid InterruptInit(void);
& V$ q- ~/ O; O8 j# Y" b6 q/ u. ?9 X7 E! n5 A* `
// PWM 中断初始化
6 ^+ a- Q  Y9 M2 d/ w% Hvoid PWMInterruptInit(void);
1 Q5 w& y1 v2 y# j, V/ l// 中断服务函数: j1 a/ E7 D8 _; b
// PWM 事件
2 e0 S' ^8 q; J' {, U4 Evoid PWMEventIsr(void);
9 Z, a8 k" U0 \9 u1 y# B// PWM 错误控制事件$ D) T/ B/ `3 l
void PWMTZIsr(void);, R9 G- A/ X. [5 ^& x: P) w
7 r$ h, l8 {" B+ v1 q% c  E" h
/****************************************************************************/& g5 K. [$ C1 Z) `4 T9 Z
/*                                                                          */" P, Q' ^7 B! z+ Y
/*              主函数                                                      */
. W: I5 u. o6 ]2 G# e/*                                                                          */
+ p: h- [; J0 n0 E& O% s/****************************************************************************/2 D: V5 c- b4 V" \; B* R$ C" L
int main(void)
: l* g& K+ a% r6 T3 X% G{; N) @6 U3 E9 p/ P* J  ^
        // 外设使能配置8 x) {2 ]! j3 R! `
        PSCInit();9 Y8 y! Z2 P) k4 Q" v9 h3 i
# \, ?" t- U5 O) b2 Y
        // 初始化串口终端 使用串口2* D& c: ~$ X3 i+ O: _) X4 c; W
        UARTStdioInit();
( b+ Q$ }7 u" S9 ?% Q        7 O6 ^4 N$ Z' l' W
        // GPIO 管脚复用配置  ~* L8 C& E. m9 a& m+ Y+ d
        GPIOBankPinMuxSet();
6 |( _' q$ ]' r2 b
* y9 q0 R' R3 q& U0 h" N$ M0 ~! V        // ARM 中断初始化
# G" n* h4 x7 h4 B        InterruptInit();
. D% b& @3 l% n+ k3 U6 f1 z' ^5 Q) s
        // PWM 中断初始化$ v" a5 }4 [/ c* l9 \* K
        PWMInterruptInit();
$ I3 C* |8 V- g# h
% B5 a5 b  b  {) V% Z        unsigned char i;
1 V! y+ W. @* H9 p- x& n, B        unsigned int j;1 ~  \" T4 e8 d) z) z* y% {

1 K; J7 H- _& P        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);+ K' U# i5 i& K3 m
        UARTPuts("------------------------------------------------------------\r\n", -1);+ N; K' g- O$ u$ x2 ^& L: D
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);7 f! y/ D( L& Y8 p6 Y+ H
        // 产生波形
- S( @- T& E0 j) x/ ?  K        PWM1ABasic(25000,50);
! h* V' c/ f( p6 Z2 |
. F$ Z5 w5 `8 q7 o        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);2 y+ d5 ^3 z$ }- S
        UARTPuts("------------------------------------------------------------\r\n", -1);
' @0 {  V2 Y# ~8 S4 M: m
; O  T8 [6 L" |" N+ R3 K3 w/ j0 \
- S4 s2 X& o2 z; R6 W
        UARTPuts("------------------------------------------------------------\r\n", -1);
2 @7 {3 Y$ M  \% T4 E        UARTPuts("                    C6748 ECAP Test\r\n", -1);
% H* {8 s5 L; {0 a% y/ R' g. `        // ECAP 捕获初始化
. \4 o. W9 O/ \9 {$ b+ A, y3 N% ~. p        ECAPInit();5 q+ n1 f! J( C7 [; ~% c
        UARTPuts("Initialize ECAP.......\r\n",-1);  Z! C7 E8 Y$ \1 S  L! j) D$ Y
        for(i=0;i<5;i++)
5 K3 J  s; u+ Z3 D, G$ K8 V) X        {: d7 r7 B/ M* Z
                    for(j=0x00FFFFFF;j>0;j--);            // 延时7 G- r+ J- S3 L3 v1 u: J) i! w
                    ECAPRead();4 O7 G" l6 n" `+ u& _, P
        }5 y1 h6 v9 d) u. ]( v/ f) `2 W
        UARTPuts("\r\n",-1);
6 P8 Q4 x) l* [+ G4 v        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);* a* z- v) o9 e
        UARTPuts("------------------------------------------------------------\r\n", -1);, c* ?5 y3 h, x' e

7 V) C9 S0 [; T3 D& k2 A* t        // 主循环" J: u2 V$ {! P- p6 O5 F6 |
        for(;;)) I5 a% |# a$ \" Z! \$ s
        {5 u) X2 c% E; n: P. c
- g8 q# g, ^  b  s8 m
        }. v9 ?$ [3 i" f) }; I; `) T
}
, M" Z7 W) G9 d9 [" S/ {2 L' m5 Y3 _8 I8 V
/****************************************************************************/" I1 p  d1 {# c/ n1 O
/*                                                                          */
1 z& k' G7 E0 ]* g% h) s; v/*              PSC 初始化                                                  */
2 C5 @- T9 b9 o7 a/*                                                                          */
' [& R  g, x3 L7 ^, l% b/****************************************************************************/4 X  ]) w7 {# y6 Q8 L9 C" j( x: C5 e
void PSCInit(void)" v( ?9 v( N- V: y
{; U/ T0 R- l  }: B
        // 使能  EHRPWM 和 ECAP 模块6 E' @& v5 m, ?" i8 c5 d6 W  |
        // 对相应外设模块的使能也可以在 BootLoader 中完成# ~: E9 {. ~7 ^( n& ~9 g8 P
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ X8 `( X8 |2 B% A    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. N7 h$ i) {5 Z* I( y% m4 y& j5 P' h}! {0 \: t% D2 w" Q/ D8 Y4 T+ s; }# l, L

2 p8 k( k; q6 w% f. V& N. ?/****************************************************************************/' ^) U9 I" _6 I& f5 u2 u' K* ?- X
/*                                                                          */5 D6 `! M" \4 O: b
/*              GPIO 管脚复用配置                                           */
$ S5 l/ @- N  J/ X* N* F* E! \/*                                                                          */! y# K( }0 p5 D5 W# k) L' C, E7 A
/****************************************************************************/
0 t& i7 m3 h" ~) N* Gvoid GPIOBankPinMuxSet(void)' c9 ^* c) ?' @( i# V8 o1 b- w/ {
{
+ [- X  c/ w' M0 k        EHRPWM1PinMuxSetup();- s5 F3 X; j& b; V; S3 |

  T- [$ Q* o- l4 O% c1 D) d        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP): K/ {& f) T9 A3 ^6 t: a
        // 作为捕获功能时管脚方向为输入
% Y7 X! {5 ?' _( v1 U8 N8 l- _        // 作为辅助脉宽调制时管脚方向为输出$ V$ M- d+ D$ v& `7 r% z. N+ r/ O
    // ECAP2 / APWM2. v2 p. f5 X2 [+ p7 A4 {
        ECAPPinMuxSetup(2);
! Z5 O% @* B4 B" T" ^: |2 @% y3 p& \1 ^& L' J( e
        // ECAP2 / APWM2方向设置为输入
. C- p* f% h2 l+ v) p        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]2 v: ?/ A& L% m1 f2 `
}* u; W& s5 x; _8 Z

5 `) D9 c% `8 q. T# G" B. M# s/****************************************************************************/
! H/ |/ z3 i  O! W: C/*                                                                          */
" R$ e& c" X4 B; G9 h  P/ }5 G/*              PWM 输出波形                                                */
" ]1 _* D, B2 U. c( m; W. w/*                                                                          */6 c* U. ?# D- e1 l7 d
/****************************************************************************/
& ^$ D: C1 x9 k( p6 M& pvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)* @' @( ?) B# Z
{- ~  W7 O5 u' G- {
    // 时间基准配置% O$ I3 Z( F9 c% x* e/ N2 z: T
    // 时钟配置% X) P  f& L2 G1 J* j& a; @
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);* i1 S8 x! o) K- C
) K5 k3 n4 V1 u$ h# K2 |9 i! |
    // 配置周期$ w0 m! K7 Z/ p4 V" q( Z1 h
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
5 \0 _3 o8 H( Q3 V/ c                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
; D5 t4 G0 R2 e3 T) }0 v3 Q; j* Z' p4 S, K0 V
    // 禁用输入同步信号
4 k! j7 C1 z) c7 n  Q' t- k! i    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
4 Q* B" x$ Y/ X4 l* q# V1 s# u  f  ]! X" u
    // 禁用输出同步信号5 R  Y- Z: a  k* D  Q& d( L8 X. W8 s
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
2 E" D0 k- b4 @4 s4 D: I. r4 c( i* ^. g7 g$ E
    // 仿真(DEBUG)模式行为配置$ |/ a; ~1 P: Q4 g$ w* t
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);' t1 l, H& d. b* Y2 k) M. G" A

+ w7 r; h8 l% S7 w2 P; N    // 配置计数比较器子模块
. |5 y! W2 k% L1 l    // 加载比较器 A 值
, q3 o6 @$ Z! e3 P    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
- |2 o# S) B+ c: ~                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) y: T; n3 v. u* I- U+ H- W9 J& _1 s; c- j9 W6 ~
    // 加载比较器 B 值" E; C" o  C5 z
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
8 ]$ I. N9 _! {0 ~5 m; U* t, [                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* V8 o, E. Q2 a& O

% j& R; V8 U4 W. i# }) b4 E    // 功能限定配置(输出引脚触发方式设定)
, d3 ]% I- G4 L  c/ l    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出# V# n1 h* U! {; f
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,2 b+ V& Y4 j- D% c, _
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
) v. C) h' O: U/ [  S! ~                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);; X& R! u( q0 s8 k- z) N
; R. G6 }  L8 Y% a
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
3 p6 L( X. E  i; [. Q1 ~% H    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
6 \( b% a' b1 ], I
) N7 L; V3 P1 ?" c    // 禁用斩波子模块
$ ^/ L( ^5 P0 ]7 E    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
, W( g9 S& g) t) |) \( p) O" N* U. j
    // 禁用错误控制事件2 k2 z) ^& M* T  k. o, }
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
6 ^: I6 T8 k. Z8 i- B, w    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);5 B0 m5 F$ B+ u$ x( |# f
. x& S# i% w, Q( n* t
    // 事件触发配置/ g) V" X3 n4 |7 e8 Z7 d
    // 每三次事件发生产生中断) I1 P( d4 D% v
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
' H' L: P1 h$ L4 s0 f/ ]0 G6 |    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
* O. v  v3 }6 Q$ ]    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);) M8 [7 [+ H: m5 C
    // 使能中断7 O6 x2 _# h8 ~+ c" \  x4 U0 {* ?, o
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
. y! X( _: f, M5 [/ i
  d. T$ Y5 H. e8 u    // 禁用高精度子模块
9 N) ^, i: H# L- o) n/ p8 R0 F* v    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);) v5 \, h+ _: r0 I

( S9 }) h& ^& y; ]; h8 Q) k1 t: D! F    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
! ~( e6 E, j' x2 r6 e}
) l$ j+ I" T) O& \/ Y$ a( k. C3 A: F0 R/ A! A; X2 l9 D
void ChopperWaveform(void). C4 \. l6 L1 h) K
{
" C( `6 e4 N6 P5 `- q# w    // 50% 占空比* O2 G& t  J' r& f
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);8 l6 G# z; ]" p' D; }/ u
    // 4 分频. {- _. A# d3 ]5 k" P
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);+ e9 B' o; C# x! f0 O7 N2 t1 c& u2 U
    // 单个脉冲宽度: \  h1 V- S. K3 R8 P; u: E4 W. |
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);' k! O; Z5 M% `4 J! J
    // 使能斩波子模块4 p4 R+ g$ U6 d. s5 x  o  u4 L
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);) O& C2 \9 {& M
}+ u* a: r8 g0 F8 ^* O5 K

% {  x6 v6 ^3 j  }7 k/****************************************************************************/& W9 I' ~6 h$ L# e( F! H
/*                                                                          */7 w, F, i& X8 [: l6 t
/*              PWM 中断初始化                                              */
$ W8 x" o" ^3 f" T, a! o/*                                                                          */) `6 f- B% b7 f; ~9 u
/****************************************************************************/
, L! @$ E. C  {; e6 ?void PWMInterruptInit(void)
7 G8 Y1 T/ [: ^{% {6 P, X0 T8 I* I% s( u! I
        // 注册中断服务函数' N- B, ?; E; G  _
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
1 Z2 N. C, X' z( f        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);% N% C$ D3 Y7 f, s2 S& Y) y' R3 c; y

) l$ _7 M4 a, l7 Y' S: Y        // 映射中断8 t5 Q; d. l2 X; x( R' m, }* T
        IntChannelSet(SYS_INT_EHRPWM1, 2);
5 A2 I+ [9 O, u9 b3 ^7 }' K        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);- H6 a' D; a. X# B$ |
# {7 X3 l6 @- A; A" \
        // 使能中断
+ @; h$ O( w" ?  q# H4 @        IntSystemEnable(SYS_INT_EHRPWM1);
5 ~1 L6 L0 b) S8 V7 ^5 T        IntSystemEnable(SYS_INT_EHRPWM1TZ);% ?: W4 O, o" d
}( |  C' a6 p2 ?! M2 U5 c) T

0 v! v% r& U: f" T) u/****************************************************************************/
% l/ E) Z+ H6 o- J& F& D. S) d! q9 E/*                                                                          */
' |  z' s) N2 R5 I# m! V2 j% z/*              ARM 中断初始化                                              */+ }/ ^: L$ w& ^1 Z
/*                                                                          */- W1 z( q4 `  [. f0 m6 T7 f6 p
/****************************************************************************/
  j% k' p- Y' h. B' u5 Qvoid InterruptInit(void)& ]) E/ L# [3 D* O& h( p
{3 `$ h, j& b$ N, m' G
        // 初始化 ARM 中断控制器( ~7 Q5 T* g, o% Q' y1 L
        IntAINTCInit();- E4 `$ j! [0 D4 c1 m; W4 A. b' f
% e6 W  E7 F2 I$ i* z
        // 使能 IRQ(CPSR)
9 `3 g0 s' p2 F2 Z! K        IntMasterIRQEnable();6 i( A0 Z8 B1 h* b, O
6 ?) R  V( ~+ B, |+ O1 \
        // 使能中断(AINTC GER)
% z2 ?! H7 d2 i8 Z3 {        IntGlobalEnable();
$ L+ v# ]& y& x$ O/ Y) a) W7 N! O: |' A; e/ Z7 b( J7 d
        // 使能中断(AINTC HIER)
% j# D( E" p8 k* X2 c3 W1 r8 j        IntIRQEnable();
1 [/ a% g2 @# J+ F# J}' H- B/ J0 r7 c& q, d- V

6 J3 u8 ?6 {$ ]* |" C
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
" z' o4 l4 r  y1 Y3 P/*                                                                          */, x8 z) R- X% F: N% c9 D  n/ _5 Q( |
/*              中断服务函数                                                */9 a1 ~( H# `2 q5 g
/*                                                                          */
6 u- |1 p. h) x; l/****************************************************************************/0 o" S$ K- h; I4 M2 s" g3 S3 b% o
void PWMEventIsr(void)7 [! _- S( i; N7 ?
{
3 T) R9 }* |2 o$ C' N  K+ u        IntSystemStatusClear(SYS_INT_EHRPWM1);- R5 e; m/ D6 f6 u

5 g" G+ V/ ]: }& v( Z3 v    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);# _7 l5 F0 \  T( v8 A* H; g: o
}
, g1 P) U( s& Q
% k% p$ }( ~2 h+ ]5 t+ ~void PWMTZIsr(void)& s# F! u2 b5 b2 \* J. C
{4 R6 u( A' @( ~! m, o/ _1 C# H. A5 d  h
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);1 C7 \7 D* _' ]
& {# M6 C; _8 F1 |" B& q
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. Y1 P: F& k" j0 \5 T/ b' q: Z}
$ |- M* R; r3 q& S7 N2 }  \& C9 Q3 J" p; r' A
/****************************************************************************/
7 F! l+ N1 O% l( \, z! J7 F: P/*                                                                          */
9 _/ \+ S' r) N3 E8 X/*              初始化捕获模块                                              */5 ]4 f; w3 r  h8 }8 w% v% a( T- v9 u
/*                                                                          */
1 d; O1 _2 l. I0 H* ~3 A$ W, @0 i/****************************************************************************/
0 s, Q' D6 t3 w) Bvoid ECAPInit(void)8 ]: {; c5 I' u8 P' v
{
- u% _+ `6 R# }7 j! s+ h' D: |. D        /*-----设置 ECCTL1-----*/9 k" j6 a. o5 g, ~% _( c/ S9 l/ n
        // 使能CAP寄存器装载* m; z/ a) }( Y
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);( q6 b" U) c9 [+ A5 |/ h
        // 设置预分频值.
: d4 ^# }( L! O        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);$ l- ?' `3 o, i. @8 F% v1 q
        // 上升沿触发捕获事件$ M% \3 s1 H, a: H, v9 Y
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);+ w4 @% Q* X4 D1 Y' Q
        // 输入捕获后重新装载计数器值.
7 P, f0 s7 X" d0 G4 u' u+ h        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
% ~  ~# r, \" _/ n4 v
$ c- N/ f/ ]1 a+ U6 I" ?, M9 n# Y        /*-----设置 ECCTL2-----*/
) n8 O6 w: |2 U$ R( Z. j6 W        // 连续模式
, E3 R" F% [; D4 ?. o        ECAPContinousModeConfig(SOC_ECAP_2_REGS);+ M. a' e- {9 I$ y$ y8 T2 d
        // ECAP计数器TSCTR持续计数
8 P3 U0 [" f& b& S* |9 Z        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
7 N4 L( e3 N8 H4 Q9 F6 P        // 禁用同步输出和同步输入
* B. [% P0 t- W( O        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);" p8 l( q1 s- j7 |# m
        // 配置 ECAP 2 为 CAPTURE 模式
7 S$ t! f: s0 p2 k8 o2 j/ ]        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
6 {; D  f: s4 u/ z
9 K  A0 ~9 W; ]        // 使能中断9 g) |; b5 ^/ T2 `2 M2 W- T
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);# e) O& ?8 n  s0 h
}
0 }, Y8 c) l- ]2 F$ j: @+ F3 |4 [6 `
/****************************************************************************/: s# T9 _6 Q9 K# J5 m5 e- e9 D: n
/*                                                                          */' D4 k3 F0 f0 {1 z, O
/*              取得捕获结果                                                */5 l0 x9 v+ X2 o/ D' E8 G
/*                                                                          */
! A) d, E# A: o0 k$ d6 @/****************************************************************************/3 I" D; U- E% |# [0 J/ j
unsigned int ECAPRead(void)
- K! r- D9 k  M) \& z! P9 j{  f, K3 w/ K1 J: I8 O/ t
        unsigned int capvalue;& A1 @) @5 c% m" J1 a" V9 Z6 `. C
        unsigned long frequency;
2 F0 `" u: E  N! c$ ]
. s- B; R0 s" K  L$ A( R: w        // Event1 中断标志4 t# f; g" R: B! H
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
  L( [: x( Z7 {* [& Q        {
$ m2 A3 o- i- |: C1 L' h8 F9 I! ~2 B                // 取得捕获计数
& G7 p4 r& I0 F. Z                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);# ~/ I, ?; x, j7 E. f3 K8 f
                capvalue = ECAPResult.cap1;
: t+ \( _9 k+ W5 V9 \6 C- K. g4 F. @, D0 H
                // CAPTRUE 模块 228M 时钟主频+ _) R, Q' A9 C" e
                frequency  =  228000000/capvalue;
5 a+ p" L3 M) s3 C5 s4 b7 `2 D                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: r# u# {& H/ z% S% r4 F
: z8 t1 s* ~1 ?2 ]
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
0 n$ r+ k1 l7 f//                IntEventClear(SYS_INT_ECAP2);  v# Z! Y0 M- y- V- s
        }, F( y9 X0 K  _: a3 A3 H
        return frequency;+ v" y- g# n6 R# D7 p* Q6 t
}
+ E, {/ }- W  R  c4 \
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。; z$ L- x& {0 J& `1 H4 g+ 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-5-6 00:40 , Processed in 0.047293 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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