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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
) {% z! z1 i; Q2 b$ @& j8 F) m; y/*                                                                          */
' f1 u6 x# u4 c0 v7 F8 H! D2 b8 f/*              宏定义                                                      */
: d3 K7 ^, E" N* n1 `+ N  h6 W/*                                                                          */
$ u( |9 N5 H2 J5 o1 H  Y/****************************************************************************/) H  n) j4 ~& z# h% b+ Y9 K
// 软件断点3 h) U7 m1 e5 S& |5 A
#define SW_BREAKPOINT     asm(" SWBP 0 ");
2 g- g& E- ?( D# M0 I. J# N, `  F3 O6 A4 v( v8 p( d6 H
// 时钟分频
0 v2 d. A& B: d6 B% m1 ]#define CLOCK_DIV_VAL     228
9 T. H  ^4 m2 H& i# \% |+ B: J
& ~; J% |, L7 m  ~/****************************************************************************/
1 s: b) g4 Z, b! r- O1 P/*                                                                          */. j! K# N: z$ p% q
/*              全局变量                                                    */: P& |5 U" w8 e- v5 N5 B% m
/*                                                                          */
9 B( q) x  Z! d2 X& w% v/****************************************************************************/
" }5 T7 r& l7 @. t% @: TECAPCONTEXT ECAPResult;
) X# P0 Q, [7 y; I/ ]; r
; e; }$ R- d: E6 p' G/****************************************************************************/( G7 Y  ^3 N! z4 T6 H
/*                                                                          */& w6 ~7 {: M( M4 U
/*              函数声明                                                    */
3 S2 T% U& y0 }- C# f/*                                                                          */3 L( c8 Y/ w% n2 N
/****************************************************************************/
& ?7 t- ^" K* ?5 V4 C. D, \; r// 外设使能配置
' R/ u! Z) f! D; B2 Q* F8 Pvoid PSCInit(void);0 S, e8 M4 D4 R2 k& S* O1 h

6 _2 Q* V' P( A- s// GPIO 管脚复用配置
5 _& Q' ?% |: l9 W4 Mvoid GPIOBankPinMuxSet();$ Z1 e' Y4 a& P' B4 v+ }3 n
) F1 u7 [5 t7 |; }
// 产生波形+ k6 O$ G* l7 {
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);- p% ?' Y1 X# _- x4 }& i
void ChopperWaveform(void);/ E& S) w' H$ |+ k/ O! n5 t

" R1 R6 K2 |" f. W; I/ J( T, T// ECAP初始化和读函数9 E8 t5 G/ P4 `- ~
void ECAPInit(void);, S$ L! ^1 |5 {& i2 J% m' W
unsigned int ECAPRead(void);) O+ G7 N4 n4 k
; P. y/ A5 [: m; r! U
//ARM 中断初始化
7 T0 Q9 x* o4 g$ F( b) u0 Dvoid InterruptInit(void);
4 t0 y5 @0 i( A1 X% K3 S( @+ ]' M* @$ j9 `! q
// PWM 中断初始化
3 o/ u/ H$ K; @+ e- x+ X' f! |void PWMInterruptInit(void);8 N, Q3 ?1 R; _, r* X
// 中断服务函数* {$ ~! A- N& o  i4 l
// PWM 事件
- h, U+ ^& c6 dvoid PWMEventIsr(void);3 c, x" L/ l2 Q" x
// PWM 错误控制事件' P; P3 y% K0 N. m5 @/ N5 K
void PWMTZIsr(void);
# n2 f: r2 x6 R+ u, k4 H  x& q/ m. [3 Q. M/ F! }$ j
/****************************************************************************/
1 k4 Z) F- u2 F* S/ q% \$ o4 X& T# x/*                                                                          */6 o& H+ a( }7 L) c
/*              主函数                                                      */
5 ?7 R- R! s4 C+ @/*                                                                          */1 v! U: T8 U, V4 h
/****************************************************************************/; \- K0 w* s& U; Q% m5 k
int main(void)
9 Y( e" Z$ W2 |{
; a8 _% j" X' C, O! M        // 外设使能配置- W6 j5 ~# j. f4 E$ B% W
        PSCInit();
) T5 D* ~; l% w2 g
- @7 a+ i; @1 N        // 初始化串口终端 使用串口2
- n; ]/ i, A5 h        UARTStdioInit();
. {/ y$ e! D$ E& s& w  l* V        " x) m* h  A/ ~* e
        // GPIO 管脚复用配置
! z: L6 D" v4 P* y; j# O4 z        GPIOBankPinMuxSet();
  p; I! C' h  X
0 V, I1 f; h# a: `1 v) O        // ARM 中断初始化- T  D3 L4 V/ M% c. F& q
        InterruptInit();
) J! N7 ^7 Q& k) H* _5 Y6 O9 |" K: ?* |2 y1 x$ e9 r
        // PWM 中断初始化
: l; W. Q3 M1 X7 e        PWMInterruptInit();6 k3 h9 Q# b/ y# K* Q3 W

# ]. [) {, i/ h$ L8 J        unsigned char i;
' I  _; {& L4 v% `        unsigned int j;
5 P4 J$ @7 A+ d, A0 A, Y% K/ g; V* C1 x7 R0 {4 L
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
, x# F  N2 m# F' N! \" J3 c        UARTPuts("------------------------------------------------------------\r\n", -1);
+ A1 Q+ |- @* R/ Z! n2 x/ y        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
9 p$ Q, g7 g# P  ^) f        // 产生波形
& Z5 i% E( A8 N- A: Z1 _        PWM1ABasic(25000,50);' t; Q* Q) d4 y

3 G; c# s4 G2 n% B        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
2 O/ q# {7 }$ n. A, o        UARTPuts("------------------------------------------------------------\r\n", -1);) y# U: |1 [( f
9 S, Y: ]5 Z" Q6 r* G! q# |0 b+ v
0 m( k1 c' N* ^4 y3 k( D$ F6 S

, D! x+ N9 k9 ?8 |0 X        UARTPuts("------------------------------------------------------------\r\n", -1);
4 T6 B- m* t* S6 ~& p% a6 G, L        UARTPuts("                    C6748 ECAP Test\r\n", -1);6 x( e# M. `0 i' w* N
        // ECAP 捕获初始化
2 Z( T2 ?: b& Y9 ^4 H        ECAPInit();
1 f$ S% A% J0 f3 x# l! r! [( A" a        UARTPuts("Initialize ECAP.......\r\n",-1);
' C! u) H0 h# q6 Y        for(i=0;i<5;i++)
0 A( l& M) e' P% T4 C" |0 a4 [7 K        {
. ]) S! o; Z; t, R3 z7 Y: w                    for(j=0x00FFFFFF;j>0;j--);            // 延时
2 Y7 W. W3 ]8 V/ t7 U& y4 P                    ECAPRead();
# V! [9 a- o& b! s        }5 v# q- X1 B8 f
        UARTPuts("\r\n",-1);7 [  u' u: s7 f$ L5 x$ B
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
4 }5 ?: o. D( `9 S        UARTPuts("------------------------------------------------------------\r\n", -1);
9 V0 j# [4 c) w+ S+ o$ G: a5 f+ x* ^$ J  v: h' x. a' {
        // 主循环
# x$ j% B' i7 j9 s  T4 ~; a        for(;;). S/ R& p$ l6 {4 f4 U
        {
" A; G- H5 Q& i, E# r7 {1 q+ X! ]/ U+ K9 N  A
        }0 ]3 [( L0 |: l7 r+ ^0 w# ~+ t
}& S6 e, ~/ a/ q9 S# ?$ k( I$ |

' G3 \. g. U! G- h8 p/****************************************************************************/, k7 j! a% I9 l% `- Q9 i: g6 P
/*                                                                          */3 W3 M+ E' h% A+ v* f
/*              PSC 初始化                                                  */# a: s& r& c8 K, s
/*                                                                          */( `5 m/ b5 W) i" |
/****************************************************************************/7 U2 Q1 b8 K9 H0 ?& v2 Z- q7 {1 Y. j
void PSCInit(void)
0 t" }! q" P3 Z5 ]# S+ H2 v{
- \% ~7 b& {( K6 N* O        // 使能  EHRPWM 和 ECAP 模块
- ?+ P% S; |" T& L        // 对相应外设模块的使能也可以在 BootLoader 中完成  a- N/ J! b4 Y$ b
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( S8 ]2 U/ p8 C# {+ x' q
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
* _5 a7 y: I+ {5 t: p( Q: s}- G, O4 G- }2 _  `

' W1 Q. ~! o8 H- N( J/****************************************************************************/
! U: m; P& `2 Y7 l. |/*                                                                          */
& W8 u6 K6 W: d& g# ~3 D/*              GPIO 管脚复用配置                                           */$ l; O+ i* [  v  m+ E( I7 Q
/*                                                                          */
' H7 k) R& p; z; `- Y/****************************************************************************/' n7 F# ?7 R2 U0 c
void GPIOBankPinMuxSet(void)- y/ o$ P1 X7 e7 B
{2 ^) ?4 R- @( M' ?) B1 _' k& t2 Z
        EHRPWM1PinMuxSetup();' w; C7 v- ^' s: j  b9 n

6 H( C! g" J8 ]* H. n        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)1 R, y: i# r% P5 U3 D+ y( [
        // 作为捕获功能时管脚方向为输入
. q! _7 Y# c# M. Y# i, s  q        // 作为辅助脉宽调制时管脚方向为输出. `* l7 B/ b: b% P: ?. h* D
    // ECAP2 / APWM2/ i5 B* {, J+ N1 Q5 N; r; t" J  I
        ECAPPinMuxSetup(2);( Q/ i1 o% U* N7 V, H
. x# ^: ]8 J  G7 [- q" I% t0 B2 w  L
        // ECAP2 / APWM2方向设置为输入
) X0 Z6 c6 O5 b0 m        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]$ W, y, w1 F  ]! Y7 ?
}
  `2 f2 L2 _) ?
7 ~% k  G2 [" d& E/****************************************************************************/
, {' [2 V- F5 I; }' @* M/*                                                                          */# v7 u3 S% A4 u8 q  @) s- n$ W
/*              PWM 输出波形                                                */
$ ]  A3 E- \! `1 T/*                                                                          */
3 i; M9 {, h. N' B0 T/****************************************************************************/8 P3 N& R$ B5 J. `2 d$ t
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)8 Y* E9 z" p+ T  s0 n
{
8 `, r5 _  \3 [! K, x+ Y' W    // 时间基准配置! `9 \: X7 F" B  }
    // 时钟配置
. j3 V7 @8 d& a& Z    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);0 d/ l; _* Z% c* [- ?. W$ w) k
3 f& b  T0 v0 e; N& r8 D% J" }; O
    // 配置周期
0 k; y% ~* J/ C    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,5 m! x8 m1 N9 S' d$ E% _/ u4 d
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
7 D  [1 v, J  |6 I3 ]" f7 E5 @6 w$ \. M5 K/ K( w7 V- _& L% S
    // 禁用输入同步信号; {( \1 A) p3 P
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
$ Q# c/ O) k1 Z: W0 j$ m  h  I6 j: Q* q5 x# |) O& A% E- ?4 d5 t9 O  j
    // 禁用输出同步信号
' }" Q' M# \, X* b3 U& ~, i% E# ~    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
1 |4 [" e, j) ~- G# \4 r  ~, w$ }, \# z1 A2 ^" l$ e& c4 o7 ^: W% u( o& f
    // 仿真(DEBUG)模式行为配置
% S7 A5 p) \& k, Y    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
' [$ A, ^0 F. o9 P* i8 Z$ B6 `, \) y0 N% B% V* n; B7 t4 y: ^
    // 配置计数比较器子模块
0 P6 |% ~9 o# ?4 H  {1 R( L2 k: N/ G  J    // 加载比较器 A 值3 j; N$ {% @4 H5 |7 z% i
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
4 B! S$ t8 e" ?+ \4 M% v' A                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 P3 c* ?* ~; V7 o& p/ S+ x( E) u( r, b$ k3 Z, B
    // 加载比较器 B 值
2 I1 S, t; J: V) r* m7 ^8 @    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,$ g) l! U- V: ^! a% q( d" A
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) W* c+ s2 j( E2 c3 D3 R5 f7 @# b. l2 R# v- G4 Z$ n( j  `
    // 功能限定配置(输出引脚触发方式设定)
4 R& R1 o! O# [& w6 u    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出  n# H0 Q( U- H0 h
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
5 m: x  i1 W" ?  n6 g                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
3 x$ |$ L5 f$ j6 j& i& p( P# x- P0 H                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
3 |, v* v! E1 k/ O6 N* X/ A, `7 Z# U9 y9 w9 g. T
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块& x& f. _, N( ?) X. m- Y
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
* k; |0 n! O2 x6 H* F( S% K$ ~2 `1 B/ S! z2 u  H
    // 禁用斩波子模块
) H) N# n% O! x9 \/ W; S    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);# D4 j# i, |% o
: M' B  f/ {2 m0 T) L& f. F2 y
    // 禁用错误控制事件
, w2 }* m5 n* a6 b9 S    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
7 b& b( Q# g- X' U6 P    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
/ H2 _1 A% b$ I* V- ~4 `) S. M
; z5 U0 Y$ L- H    // 事件触发配置
1 i" P+ N" r# j) g9 }9 R    // 每三次事件发生产生中断" s, o% X9 k0 M4 B7 e9 w9 s( Q
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
+ n  ]( [7 U/ A* H) Z    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件8 [- U/ n. ^/ z. Z. c! H- W+ C5 ^
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);! }3 h6 j# T: a4 U7 R
    // 使能中断
9 v* I# Q! d3 s6 I6 Y/ J    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);3 [, t8 o) C! t

; N3 ?" k$ T; `7 P9 N( k8 j    // 禁用高精度子模块% ~$ G6 Z0 u5 t1 s" v
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);0 Q, J# z' D- Q
7 ^; P$ M! T& M) Z/ i! }4 p7 ?
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
3 r1 @2 b) P- }" M4 [& o3 N}7 R0 c( C, p' H( m" Y

  ^8 ]7 `* }( j7 A9 R, ~5 Lvoid ChopperWaveform(void)$ Z  @1 N% f$ l7 s) e9 Z& y2 ?8 r
{
0 ~, S; f: }1 }% z    // 50% 占空比, m) h( E9 h& E; n+ C: S
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);9 |; @: y  {8 W8 c9 B
    // 4 分频
* w- m& @, j) `* b    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
$ V$ v. M  v, h/ V( z5 K    // 单个脉冲宽度
" t& P: \# N0 [; S8 s& g8 b3 b7 W+ w    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);% F6 p: I# ]. |5 Z% I
    // 使能斩波子模块
- z! k8 w3 x* ]$ |- u7 M+ L1 u    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 ^% J$ i3 F. F: u& M}2 w; h0 H4 {, f! P3 \3 y
5 U+ i( _- b2 P! Z
/****************************************************************************/
# J2 `6 [* D3 \/*                                                                          */: V5 M9 @5 V% `2 s+ J
/*              PWM 中断初始化                                              */) c% @5 J% ?4 S( O% O
/*                                                                          */
* E& y8 r3 U6 H; @* a5 i/****************************************************************************/1 Y& ?% {( Q: w9 M
void PWMInterruptInit(void)
5 N; d) P$ |: C" y. }# E9 f{
$ s0 o2 H7 h: o5 j& ~/ o) e        // 注册中断服务函数
7 F5 N2 u- ?4 a0 B        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);9 N3 \4 ?2 ^- ^; A% G: ^: j; B
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
4 }8 p) l! `6 b
, c7 _/ u4 m( L8 g9 S; |; j2 z        // 映射中断8 [4 l$ t( {* L: D6 G, j9 @
        IntChannelSet(SYS_INT_EHRPWM1, 2);
- }; ^( B6 m0 {) w$ P# e. T, d        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);5 i3 g' }* {  Y) ~+ x
/ J6 O6 R- z6 D0 C3 x' d
        // 使能中断0 M1 W' P: ?7 C. I3 y; t
        IntSystemEnable(SYS_INT_EHRPWM1);4 J. \8 C) w( y- d) q) ^
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
  x; t$ H& H1 S$ \) N" H- {}
4 y; s- Z4 [. J7 M1 [/ W6 z5 `3 c4 V/ |9 k' K
/****************************************************************************/
! T4 y* G4 J# I; i/*                                                                          *// P8 y$ O+ U# r: [) ~4 W
/*              ARM 中断初始化                                              */. j3 ^7 N& `# T$ }
/*                                                                          */
: Q4 G5 A5 Q* s9 W3 y: W/****************************************************************************/
' a: Z/ `* \; }- zvoid InterruptInit(void)9 v' X" F* [6 m! v6 {8 @
{# C3 s. c7 X& u# A: p1 {
        // 初始化 ARM 中断控制器
2 m7 A9 U4 a/ d  y" u        IntAINTCInit();
8 W( u$ @8 F/ Q1 Z: f# w7 r6 T3 i: f7 A
        // 使能 IRQ(CPSR)
7 L& ], j- c& j: [7 Q        IntMasterIRQEnable();
0 T8 T7 Y9 ~/ P+ ?# T$ O3 [5 U2 s# ~: d7 t5 h- U
        // 使能中断(AINTC GER)
1 D7 ]  l& b  Y        IntGlobalEnable();$ \3 v8 T) e! E$ a2 Y

% t4 ~, L% y9 R; t- Y        // 使能中断(AINTC HIER)
" U! j/ o7 R- r3 T" K        IntIRQEnable();
' m. ?( x! d1 K# A2 m$ H}
5 d7 a* D0 l: {$ e9 J0 i4 H) ?  n! ?* k, ~! w* V
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
: {! ^" Z1 v! k- P  r/*                                                                          */
& [7 K# l$ {, M3 S7 R9 p9 [/*              中断服务函数                                                */
  w: _( H! h; Q; B8 E$ s2 _0 E/*                                                                          */
8 B) u$ R; ~0 h% s/****************************************************************************/% r$ H5 e; E# d; ?
void PWMEventIsr(void)
1 O$ V% d4 @) |  J; S{
  l  Y$ s# h4 {9 @        IntSystemStatusClear(SYS_INT_EHRPWM1);
# T: k" `' k' P, C% r4 L
- {0 M* w. ~( x$ ^    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);) C1 M1 X' A% {2 W6 L; S: _
}) K3 e) W( A( j7 N8 [

) I& A  c3 \# N+ m+ Qvoid PWMTZIsr(void)
+ |4 a3 f4 F. E/ f( M* y{1 @" N4 u: W) E& a
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);) q" ?1 ^! V* H) f

* f! D1 ^7 A" u3 L, Z1 @2 D: M$ `    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);! Z: Z, N' y% w% S& ?& A
}
7 h; {4 D* m  [; q8 e7 L
0 \! W% ]# I: o) w/ }+ L/****************************************************************************/6 W! l# m( U. I2 x' N- C6 |8 s) W1 F
/*                                                                          */
0 h% X. @: @( q# v" v/*              初始化捕获模块                                              */9 y: L4 u2 u  K6 l$ C6 _. c
/*                                                                          */# t  i7 e3 l7 t: T; x
/****************************************************************************/% n& M4 Z0 C: O: P
void ECAPInit(void)
. [# }9 B4 f% m( C) ?{
& V/ Q$ e4 y  ~        /*-----设置 ECCTL1-----*/8 ^  c; r% W5 q6 y
        // 使能CAP寄存器装载2 @/ a0 l$ _. M% s+ C2 o8 }; s: M
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
9 {/ S+ Q1 d6 \6 s7 A        // 设置预分频值.
# Z, C1 `$ \9 j) V        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);! l' p% G, M) L/ Y6 l+ U
        // 上升沿触发捕获事件
; y& [+ x7 ]. U+ D, O/ Y2 g        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);3 a7 O. B* S3 n6 @8 m8 Z
        // 输入捕获后重新装载计数器值.. ^# F# _6 C9 W7 M4 e
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
) n! b4 `: S0 u3 q1 Y( [+ ]6 A
& a+ ^$ O9 v& \( }5 D: u8 L! `        /*-----设置 ECCTL2-----*/& }* q  i- c4 D$ B" G
        // 连续模式
$ t  V' g; k3 l- w$ d        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
, [- b, B  O& P; l& ]3 t        // ECAP计数器TSCTR持续计数2 r( i5 p9 T# J7 E- e
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
" u" O+ N: \. K. L/ P4 D        // 禁用同步输出和同步输入
( T2 V& C- K2 A6 \        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);9 S, ?) h+ v: E% f
        // 配置 ECAP 2 为 CAPTURE 模式
# m$ v$ P5 E4 K, W, }" f        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
6 r' @6 `9 _8 w+ V1 n  ?. A% \9 Z; f: a' c  u% }8 k
        // 使能中断
. m2 a9 A1 _5 m  e* y//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);) N% `$ v2 ]( F$ k* E6 S
}* o: |3 p! Z2 F# T) l. f$ G6 t

$ N9 |9 J8 e5 U; V' B5 U5 {, r  v/ |; z/****************************************************************************/
% y9 T) U& S5 m2 N7 o/*                                                                          */8 d0 c: w; y- b" r0 f1 T
/*              取得捕获结果                                                */
  X2 Q4 K% X% m6 w5 }- K/*                                                                          */
( O* W/ J& `! g! Q: a* n/****************************************************************************/
3 {6 y, j+ ?: b1 b0 N# i$ `: wunsigned int ECAPRead(void)
( J: L% W# d* `& Z8 B2 [. G% Y{
4 a& |& R* S) K0 f. m        unsigned int capvalue;
( [4 L, y/ j: V+ j3 F4 g4 w        unsigned long frequency;
6 S( {2 E% Q; C% i1 Q) ?
! ?1 h. j, {% M4 f        // Event1 中断标志
- R/ o! ?8 B' i" V! e0 q" _! t0 k        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))  F' ^! V3 N2 j0 ^+ n1 U3 ~
        {
0 o! Y" y- s/ J8 W, k7 N                // 取得捕获计数
" {: v  R4 u7 Y6 P- N4 _. `                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
- t* T5 |% N4 U: s! S& [8 n                capvalue = ECAPResult.cap1;
) r% T- a2 z7 P- b0 I. Q# J! f* Q( ^2 R$ v7 G
                // CAPTRUE 模块 228M 时钟主频
0 S/ G% |* k2 x) E* t+ E                frequency  =  228000000/capvalue;. z; U  w4 K! [* s$ [7 M# j" Z3 U
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: W( T/ {# t( n" }  O; ]+ c

/ Y* x9 V, h0 t- H3 D; d                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);; k/ |# t, k: Z1 V. @4 ?4 {
//                IntEventClear(SYS_INT_ECAP2);
9 w& b8 f0 O* e% s        }" ?. z% D3 s, C' Q5 ~. v
        return frequency;
8 D( f$ T# ?+ h5 l7 a}
& ~2 P- F" q& Q/ ]; 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波。我们有相关例程,请参考。6 L$ [" y$ V* A2 l' R9 d) B

本帖子中包含更多资源

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

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-9-7 20:48 , Processed in 0.045496 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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