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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/4 a$ c: E  w0 c
/*                                                                          */5 T2 K8 O0 D0 U2 n6 V) J9 F$ [  |. v
/*              宏定义                                                      */
. n, T5 i6 }* u7 A8 o1 _/*                                                                          */
' j# R: A* |3 G/****************************************************************************/
; g- a9 q8 o2 i5 l1 p. |& e# k// 软件断点
' F7 {' D% a7 w8 v, u#define SW_BREAKPOINT     asm(" SWBP 0 ");
- [# T$ H; z. j7 u( l: s: k7 f+ t8 h# o3 I; I
// 时钟分频
( y" I9 N& [+ g- K5 W4 |, z" [0 z#define CLOCK_DIV_VAL     228, |! o% f; B. `! ~) _( r' K

$ b0 m6 T7 U& ?8 u" h9 e, X; b0 I$ {/****************************************************************************/
) O$ M7 E( u: U* ^9 r2 T+ d+ C9 K' _3 J/*                                                                          */9 |6 ?4 w( W" {5 l; l/ G
/*              全局变量                                                    */0 {/ `3 [% T& h, G
/*                                                                          */
( ~7 G, e8 W( y/****************************************************************************/
( j% x1 q4 E0 s5 r8 T4 V  E! Q0 e9 lECAPCONTEXT ECAPResult;
- z( `3 L9 Q5 i
; l3 B! R/ j, L; W0 k/****************************************************************************/
$ l; f8 R" R& @" ?6 g7 A3 h: C/*                                                                          */6 \4 R5 d$ o  ], X
/*              函数声明                                                    */8 x6 i3 b8 _- |
/*                                                                          */
+ S! e* w  ^) ~# j/****************************************************************************/4 S8 o* w# I* L: U2 N2 _' x
// 外设使能配置1 D9 n7 a9 x* c- U, K
void PSCInit(void);' H5 ~+ l# ~  e9 }
( b, a4 C9 ~+ f  d
// GPIO 管脚复用配置
# U. A  J/ Q. u2 w' ]5 |: Vvoid GPIOBankPinMuxSet();
, T- v% T) H& ^8 g; m: y% }, c# A
: o& H/ D2 T% Q1 k, h// 产生波形8 i# w  K2 q4 y5 ^; [3 i; S
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);- W& b# O9 D8 [2 D, V! s2 `
void ChopperWaveform(void);) ^0 N4 T# \* d3 \

0 R& l% b* {5 c* p0 C6 q// ECAP初始化和读函数% Q  m( b4 h0 I
void ECAPInit(void);( g9 q' @0 v! Z: u9 f1 V1 f+ J
unsigned int ECAPRead(void);8 d, Y" n% ]1 J( J  R* a+ y+ p! A

1 F( V2 h, q/ V: p3 n( E/ N//ARM 中断初始化
* M# ~0 F6 @# Z! i) D4 k8 l6 ^; rvoid InterruptInit(void);
3 y  D" U8 R. N% m3 N! s5 ]5 v2 _1 U, I: h. \
// PWM 中断初始化
/ J+ o3 i0 ^# Z! u& x- F. zvoid PWMInterruptInit(void);
( x2 Z& s( c9 b// 中断服务函数
7 E/ [% H8 H- N2 C1 d// PWM 事件3 M: E& e. V& H+ w
void PWMEventIsr(void);
; f  {  V. \& B$ p4 S: |( |// PWM 错误控制事件
  B' y: g. t! V8 Rvoid PWMTZIsr(void);
! x* X# T: u- B/ R3 D
- ?4 f, L$ W5 G, j  I2 n$ W/****************************************************************************/' I8 Y. E0 h2 w0 w
/*                                                                          */; h8 k# x5 a3 W% q1 a4 S
/*              主函数                                                      */
, u1 F$ @% U& C/*                                                                          */
( S0 [  h8 w- p' p/****************************************************************************/  [3 `# Y( q" C, F# x  q6 [& t
int main(void)
) w6 \, A0 m7 v* x' d' ]% r/ G{
0 H& C" @6 [4 E% k6 v$ B        // 外设使能配置
6 @, l$ h  H9 V8 ]        PSCInit();
$ E$ N) Q# Z9 K0 C9 S6 [0 P, ], N6 e9 J9 d( C  `  y+ e
        // 初始化串口终端 使用串口2+ L9 l% b6 G5 q; ~9 E8 o
        UARTStdioInit();
" g2 X2 I0 V' ^3 M, [- t$ Z# m       
7 Q$ u% S1 U# ^& e  X8 G; M8 [* D        // GPIO 管脚复用配置
4 _  ~/ T" q, e- N% w        GPIOBankPinMuxSet();" p: L1 o2 \* |" w
" p% _  k$ S% D# q3 x) L9 _/ {
        // ARM 中断初始化
5 w1 Y- y/ o; ]% {8 p: g        InterruptInit();4 X' `' G% K2 F

3 R" z3 y" Y" L2 d        // PWM 中断初始化( _5 Z" F6 t4 W! ~' U' O. |
        PWMInterruptInit();$ o7 s" ~" ]& H. I
5 f% r1 e4 H3 ~8 M. N
        unsigned char i;
5 k. `6 q. n, I/ _        unsigned int j;: ?$ q8 N4 o% ]( p1 u& S
* n3 b1 q! }4 @# j6 T3 R5 h- k
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 c8 m; r. \& M1 d0 _        UARTPuts("------------------------------------------------------------\r\n", -1);
" o' z! b0 I$ c        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);( X; r" W, X. y6 R* J
        // 产生波形5 l9 d( F; t) N
        PWM1ABasic(25000,50);
; ?- R- {1 _- G0 H, N. W" Q
2 U$ j/ {; P0 \# |        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
& d4 V9 n- n4 Q1 u8 f        UARTPuts("------------------------------------------------------------\r\n", -1);. e# n1 ?8 l+ g$ a/ H

$ |. ~! {, d6 H6 m, P7 X" K& t' X  l' b; Z

4 F! ]* b2 f" f* F* M5 y+ j7 b$ ~$ h- B        UARTPuts("------------------------------------------------------------\r\n", -1);7 A2 I* q, n: B$ c. F
        UARTPuts("                    C6748 ECAP Test\r\n", -1);0 q0 `# `# R3 ^& C8 h4 O- a
        // ECAP 捕获初始化
0 H, t1 l' t2 Y$ w9 M        ECAPInit();, H* t6 i+ k+ i% I; u
        UARTPuts("Initialize ECAP.......\r\n",-1);
$ J! o( C2 H+ k* c        for(i=0;i<5;i++)
6 l# l" W" l: U$ u% U( `        {
; t  U8 t; Q& r8 E8 R                    for(j=0x00FFFFFF;j>0;j--);            // 延时9 S0 w7 l3 Z  ?% H& z
                    ECAPRead();
' z9 {3 `5 ~4 Z" Q/ U! A# F        }8 a  R  F5 w6 p$ N' C$ {
        UARTPuts("\r\n",-1);
6 v* G4 K% J2 z- {! [        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& g- o) G+ V* J( l! }4 o
        UARTPuts("------------------------------------------------------------\r\n", -1);
# }9 Y( r* J# }; I% E- `) O, m; ?* w1 t; F' B
        // 主循环7 @* @6 A- h7 J( i9 [5 L
        for(;;)
- \4 B$ g6 S6 l" Q7 D) K. B        {
/ q# ]& `9 u6 ~( U1 ~& t
! ]# B/ B" ?/ a" B0 D& ~' K9 \        }
( r; e& I4 A8 `: J# N}
$ U! h( y( V  R+ o6 u8 v
1 ]& P% P" [$ g8 q& v: T) u/****************************************************************************/- q' P, W* W  i! ~$ k/ b( k
/*                                                                          */  k9 N. ]* F+ m- S" D; R
/*              PSC 初始化                                                  */1 l. P$ W4 d2 r" [
/*                                                                          */* c# B& X' b) C( G5 F
/****************************************************************************/. _& Y" ?% S8 P1 }& e: u
void PSCInit(void)
" y$ }( U, [6 ?% j0 {  O{
0 v6 H5 ~- A9 |( j& t8 N* W        // 使能  EHRPWM 和 ECAP 模块% v0 P; K/ [$ i: b
        // 对相应外设模块的使能也可以在 BootLoader 中完成
/ Q  C* j3 r6 M+ {; O) z0 D    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
9 r: t, Z# r5 G$ d1 G# |+ Q    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);3 d( O1 ]9 i  J- |
}
. Y1 ^! {( R+ \, L9 T! Q( D  ?. @& @) Q
/****************************************************************************/
6 V- u9 n; r% G  E7 s: t2 q  R/*                                                                          */& S* B' I* h- I" P: e8 U
/*              GPIO 管脚复用配置                                           */
7 G( ^7 m4 B6 }0 y% e" j/*                                                                          */
" m2 }5 d% ~; P/ v4 c/****************************************************************************/
% z7 i! g# w: A6 y3 N% Dvoid GPIOBankPinMuxSet(void)7 Z( T. V- `: U* S/ c9 k; U+ n
{
! f2 E" Z  P) T7 T/ x+ p/ v: `        EHRPWM1PinMuxSetup();
0 [2 ]3 A6 |* R' y* F4 e5 W* O: Z% _
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
3 K4 v! S0 G1 ~( @& x        // 作为捕获功能时管脚方向为输入! G* w( z. M* k3 b
        // 作为辅助脉宽调制时管脚方向为输出
- e$ H  E. e+ w7 I. M& L0 ?3 ^    // ECAP2 / APWM2
& w$ B; y& }2 H        ECAPPinMuxSetup(2);- [4 z5 u) e- f. |, l

, i5 @$ m* [1 I% j6 @7 Z        // ECAP2 / APWM2方向设置为输入
/ g* j' d3 s( ?& b' i5 h9 ?" l* a        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
( h5 b/ c+ ^+ P+ B( b9 V7 y}7 @& W5 G# t: y6 g
, c* q" M& U: W
/****************************************************************************/# L& f  A+ u1 T: L$ m. B' D
/*                                                                          */
4 b% @' t( K& f& e1 [/*              PWM 输出波形                                                */( b- H5 P$ s8 R
/*                                                                          */. n, H  N. [8 ^$ F" U8 H
/****************************************************************************/4 e+ f; b! c$ R+ H: i
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
% }7 f/ W0 M! l0 g4 s+ V. U5 O! d{
! i0 m0 Y  ]- B  R  s4 S    // 时间基准配置, f& K  O  R& _
    // 时钟配置: R' z# x  Z6 j1 X
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
: P1 p. k( S+ _4 Y- B: {% E
  U4 U4 G2 `+ H9 v# p# g    // 配置周期
! w' z" l; O7 t: B2 s: i    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,( M$ b* i  M- d& S  u; A
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
+ Z: \; I. [+ V5 F% y! d8 r, d# D1 U- d1 P8 p
    // 禁用输入同步信号4 B* D* }2 T" U$ u2 p8 @9 J7 y
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);' a, Q- _" i1 Y+ J5 g( [- c6 q) P
% Q9 \: w% O0 N3 O+ z0 _% }' T) \$ I/ Q
    // 禁用输出同步信号: U6 [9 Z5 y7 b4 H1 R) R
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
+ e6 I  `6 u. n( j! J1 u6 J
0 D' P9 N( E& Z0 g    // 仿真(DEBUG)模式行为配置5 E" N& {1 i- m; y' b8 L
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
6 ?( c7 \3 s9 J& _! U
& W( e$ U: Y; m4 P, r) R    // 配置计数比较器子模块( o: ]- I7 V; A! `( F
    // 加载比较器 A 值2 V5 w& I% }$ i
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
9 w6 U* ^/ X; f9 h2 t  S: g7 G8 I                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
% F+ v: J1 l# S7 H  v; C6 r4 I2 h" g8 ]
    // 加载比较器 B 值
  f- q: W4 O' _6 [    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
2 h1 [  {5 ^1 J* \4 l$ Y% V2 r                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) {3 P) X3 b1 G# j* ?; k; t) r* E+ U1 X$ F% |8 a
    // 功能限定配置(输出引脚触发方式设定)
. f3 _: a' q" f! {    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
( K; Z9 L! Y, d5 S    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," o3 V3 K" v1 m
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
' J* n2 s- ?8 }9 w                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
2 _; P6 s- `; G; n4 K
% Y  U" c4 A1 r2 y; B3 p    // 禁用(旁路,信号直接输出到斩波子模块)死区模块. v3 B: P! d5 C( |
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);4 {7 }% A4 G3 ^: j& m1 S
3 X  V7 a7 T5 h5 l1 H  R) p5 h' |  y* {+ [
    // 禁用斩波子模块1 j, {" j! F" }7 |; n. P0 R, G
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
: d0 e) J7 s# ?& C% h3 f, S% u2 ~- z$ X( S3 N  p" b8 n
    // 禁用错误控制事件
+ j, {; ]; P) @4 g4 I    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
# O3 I2 W8 \4 z0 N: d4 Q6 ^% p    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);: U9 P) [; z' ~' F( K

6 U7 S' K  I( L+ `1 ]0 X; R# |    // 事件触发配置
% Y+ u' y" Q  O# _    // 每三次事件发生产生中断
8 p* n5 l: x2 L0 |) H    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
7 M) l, H/ @* w* k9 h    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
& K4 X. v, n, a) {0 P; v& V, p    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);8 z( J! {4 O0 k, a3 C0 Q% I
    // 使能中断. g" Q9 Z( a. K; N+ h* ~  y0 Q
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
& x% s0 N# J$ U" _' E# ~! y9 d2 {( _/ \$ j' c$ I; f( ^5 a
    // 禁用高精度子模块
$ R# u( z6 w8 |( j    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
/ x4 B2 `% A! W, |5 f
/ ]7 i6 y/ G; l( ]% ?! H: x7 r    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);' a) S$ f) S) n+ E$ X
}
  M( S3 Q; Q8 q$ e9 w  W! u
$ Y% I. D; G% _5 T, Kvoid ChopperWaveform(void)
' `2 R6 f0 u7 _/ V6 m8 X{
0 ~, s( I6 M3 \2 H    // 50% 占空比& S  \) j3 v( @- s
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);3 W& e1 l0 i. l6 e8 W0 r; ?
    // 4 分频
: f4 i9 w' I5 g# Q$ l) N* H7 @    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
& L$ L* O8 n1 L5 o* ]  ~, }2 w5 P( f    // 单个脉冲宽度
8 ]2 x9 j4 ]; m! y: b! W; u    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
2 v* k$ n2 c: F* D( Y& m- B1 b9 b* r    // 使能斩波子模块
$ [/ j' l& f& \) N5 Z+ n    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);: n+ A; W" d. |& x; u
}9 e# c' T8 L8 E5 |8 x; E2 k4 C! X
. N& {( E) I5 p( J
/****************************************************************************/- I- R; k: Q; ?' C( R" \/ K
/*                                                                          */
/ ^2 N' Q$ Z; s0 t+ i! F4 [- r/*              PWM 中断初始化                                              */* Y# v, O* {2 @2 A5 U: s$ R
/*                                                                          */
) \# ?# g  I9 ]8 l6 p/****************************************************************************/
; \+ w& g) X( G/ f' lvoid PWMInterruptInit(void)$ Y7 j" v) R% S- J
{0 H: T. \1 d4 i# [. B
        // 注册中断服务函数8 P7 k5 r0 N; {/ I3 ?
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
1 ]: L' g' B6 _6 y4 A- b$ t' ?1 V        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
7 c, c7 l  M) e+ A7 A8 W; b7 i$ b* U, A& y. N+ Q
        // 映射中断9 q) N+ i8 H! m# ?( ?
        IntChannelSet(SYS_INT_EHRPWM1, 2);
# C  d: g2 B6 x6 t& ~        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);$ ]* S2 \. {% R7 f/ l! z% C  c
" U7 [9 k( `( q. a, q
        // 使能中断( Y4 _. T$ c' ^6 _; \/ d6 U
        IntSystemEnable(SYS_INT_EHRPWM1);0 i- A) ]- m% H3 F) _3 k' ^8 y
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
! I  a0 T4 y9 c: D}
+ d) y0 K; ^4 `6 o. a
* a# g* E0 l. Q% f& H8 [, c1 ~! \/****************************************************************************/
* R$ t7 }/ {1 o6 g( D4 I/*                                                                          */
( Y0 g  q3 p/ z, x( G$ w9 x/*              ARM 中断初始化                                              */
7 Z, C& {* Z: s5 r2 {/*                                                                          */" P* [1 k/ z7 \5 B6 C
/****************************************************************************/
2 p$ n; v2 s: \( p( V. a: h4 mvoid InterruptInit(void)
- ?) K) s  ^/ U2 ?3 R+ u{4 |& ^! v  y! b- R8 z/ }
        // 初始化 ARM 中断控制器5 J8 i/ p9 ]1 R1 v) e0 Z
        IntAINTCInit();
+ K9 \  f6 e5 k5 r- K2 ~( X& }3 F) Q
7 O+ H& y0 m! u. |2 [$ C  s* Y        // 使能 IRQ(CPSR)1 @/ w7 W$ g8 v! P0 C3 F$ u% W
        IntMasterIRQEnable();
% S: s& V2 Z, N+ u3 C2 h& V) ^0 Q$ P' g# v5 Y' p: l
        // 使能中断(AINTC GER)
# U8 f9 R" l( O1 {9 W% P1 n        IntGlobalEnable();7 M; V/ |; P/ ~. G/ r$ h3 ]

! W: ~) j7 H0 G" m8 l; E4 V# |        // 使能中断(AINTC HIER)
1 u; L. p+ f* }. ?  d        IntIRQEnable();- M; D  E! s8 q6 ?) T( [: c
}
- W% t8 e) Y0 w& u3 E7 a
) e: a+ ]: {: \
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
$ h' U/ f/ J! S/*                                                                          */' a3 b6 q( B, y" F
/*              中断服务函数                                                */$ J! z" ]  e6 U2 Y
/*                                                                          */) B! v; h3 Y8 ^$ U
/****************************************************************************/! h. f+ x2 i  ~9 b7 N/ Z/ e! X7 ?" T
void PWMEventIsr(void); C( {: j2 V8 M& I' G
{
2 a( t% G1 L# H4 f        IntSystemStatusClear(SYS_INT_EHRPWM1);  n' t0 P$ @, }

2 z, c# @4 U$ d4 U+ _    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
% {7 h9 T! m( S}
" R1 @" y/ e  y8 \  c$ g
- F! e) Q) a, e, F- Y1 t/ U: v6 }void PWMTZIsr(void)- a- W8 y" j, F, L# {+ B8 s2 q
{; a: e, @# m) ^- j. R' z
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
& N( b1 l4 z3 _6 l6 N& n0 H/ Y+ C) I( A) h+ r3 ?
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
: f7 ^: O5 l, H! o}
3 P) F( P* g1 e; V) y+ c* Z9 W) b3 V  W) V
/****************************************************************************/
. w2 P$ C+ m  I# y9 f! r/*                                                                          */4 `: Z8 v: k3 f
/*              初始化捕获模块                                              */5 A0 H! z8 F' V
/*                                                                          */1 y0 s3 H! }- n, N4 A7 D
/****************************************************************************/) y) y4 z9 i' F9 O/ y& f* a$ b
void ECAPInit(void)! p4 }# J8 L) N( k( U7 X5 Y5 ~
{
* C* Q3 x0 F$ j0 J3 d# V6 h        /*-----设置 ECCTL1-----*/
* v% O+ M* ]* b3 V5 g        // 使能CAP寄存器装载
2 z( U" e7 y+ X4 j7 y        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
7 i) ?! [) F. X" J9 W) ^2 P) I        // 设置预分频值.
+ q1 @4 G$ i+ N; c        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);- K  R$ l% t- i% G
        // 上升沿触发捕获事件
4 z7 |8 [  l' D) F2 A! w  Q        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
. [! q) n4 {% T1 z        // 输入捕获后重新装载计数器值.
" a1 m" X, f* [        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
+ S7 k" M: s" W4 g* d' N% t- U0 H* {* J# t0 b
        /*-----设置 ECCTL2-----*/$ m2 [& H0 E# P; Z, G
        // 连续模式
4 B* ^1 q* r0 k        ECAPContinousModeConfig(SOC_ECAP_2_REGS);, ~( L5 t' W& d1 Y; t/ M- w7 O
        // ECAP计数器TSCTR持续计数
' U. Z. s4 ?, U% M        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
" C' W* |5 G3 D9 E7 [% [        // 禁用同步输出和同步输入
3 Q! G; S0 e9 q6 n  w        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);8 S' q' w( {" C( n( e( J
        // 配置 ECAP 2 为 CAPTURE 模式9 s9 O( V5 B# b% z  D. e- o" O
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
2 O* {( b+ ~) D2 d6 i+ j2 c6 A" ?* ?+ o, E# a* [4 J/ T8 W
        // 使能中断2 ?6 J6 S1 b% u
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);; G1 l; L( m* i. R" L" ?& ?
}. w3 ^/ o7 f5 c8 I
$ D2 c% O3 [9 R( A: J$ r
/****************************************************************************/
5 k0 h$ ~3 n( y* _7 L2 P! b/*                                                                          */
3 B( J% |- `3 y4 B/*              取得捕获结果                                                */6 T9 S; h0 v8 N% N$ Q& b8 g) `: R( l
/*                                                                          */
* y- N9 u/ J7 b% W- K, W4 E* K/****************************************************************************/
- v; {  X4 z  f( xunsigned int ECAPRead(void)/ h- G% A. z) x& Q# k- c) |
{
$ d, q. }" x" Q2 L7 g        unsigned int capvalue;8 P: N3 B+ |& \  g
        unsigned long frequency;
  [  D2 T0 I5 k
% E# L! a$ m+ c0 p        // Event1 中断标志$ A+ m2 o5 _0 [; l/ O, p8 l
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
) o7 v, V* K, R9 ], A  H* U: b' K        {
3 B2 a3 Z4 `6 ?+ S; V8 F3 o                // 取得捕获计数
/ G  A! D0 \; e$ C9 `9 P                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
2 k1 X. K4 G/ _: p4 t                capvalue = ECAPResult.cap1;7 \/ o9 J+ F( i; Q
) E/ n- a. I6 B& P9 B3 b, A1 Q
                // CAPTRUE 模块 228M 时钟主频+ i) c; H; C3 Z* T6 v+ d
                frequency  =  228000000/capvalue;
/ n, x# U2 o$ T. }& B8 Y4 b" M                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);4 Y. ~3 }& f1 G

0 O7 e, _* C- b                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
# F' B1 R0 b9 c2 f! f. p" d//                IntEventClear(SYS_INT_ECAP2);7 H5 b6 ?4 O3 ~2 n' u
        }6 `7 M& j! b+ }/ C8 e
        return frequency;
: D5 |, p. `3 w}
3 W- r, @. X' V& f
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
4 R5 P, [( L5 ~9 M

本帖子中包含更多资源

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

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-14 07:27 , Processed in 0.046303 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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