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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
  ^8 H0 J  U3 M/*                                                                          */
1 Y; N( [) n+ y* \9 q! @2 K/*              宏定义                                                      */
2 [% P, ?: W6 M/ z/ J, N/*                                                                          */- [2 K1 i% k7 q! m+ o9 A" l, I
/****************************************************************************/
  P4 e* g5 |, u// 软件断点6 N' B/ C) r- ?0 v; U
#define SW_BREAKPOINT     asm(" SWBP 0 ");1 ]( r: A# l: h( n* z4 I
. q0 b% A% S! e7 A' U, D: y5 q
// 时钟分频
# T* R: ~7 T* k7 `/ M# l#define CLOCK_DIV_VAL     2280 X- J, e; p) Q# i: Y3 g
$ |# s2 w/ A' h7 E2 Z+ B0 C
/****************************************************************************/
- B5 x" `7 r6 A0 K! L1 H( R/*                                                                          */
8 C5 s' }% l  j1 ~/*              全局变量                                                    */
7 O* u# b8 z0 T: x8 ~" _/*                                                                          */
1 z, b- q8 b+ ]& m+ T/****************************************************************************/
( Z- B: u+ `- y' Z& JECAPCONTEXT ECAPResult;
: O8 r( @' Z0 Q
, W: O. a+ K- {) C1 Q& Q( E/ k/****************************************************************************/
3 r: X% c4 ]$ j( b) |/*                                                                          */; O& t/ I- a# W& Z  W
/*              函数声明                                                    */
, l& @  C: B6 _! ~/*                                                                          */1 h" b5 Z( I  X: l% u
/****************************************************************************/
" K7 ~# T: {' X* _9 u6 g// 外设使能配置
% O# v6 B- {) f. d& ?. J) g. \9 uvoid PSCInit(void);& k2 U  _0 \3 w. c) q1 z& [

* U9 a' |3 F8 e3 h0 o// GPIO 管脚复用配置
- m' o* i, E( b: bvoid GPIOBankPinMuxSet();
/ P$ F, D& y& v5 a. J9 A0 L5 i* E7 u4 L( o/ t0 g
// 产生波形
. P0 Q; D, Z/ Xvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# D0 o% o; T* b. N1 M. d* Bvoid ChopperWaveform(void);
1 z' y" }' u( t7 r2 j* w2 {
/ j" b( i6 k' s7 \* [( R// ECAP初始化和读函数
. o2 T+ w" a! p& o3 Vvoid ECAPInit(void);
7 d7 f! r' P; Funsigned int ECAPRead(void);; F3 A; o, y+ U4 ^, _
! f( l3 e. p9 P" Z+ }- m" E
//ARM 中断初始化2 e* G# G' F5 C  j: ]) L8 q0 I' u& Z
void InterruptInit(void);
% {2 i* f3 t) p' v: S. I0 Z
$ s4 D% D; Y, H3 l; t// PWM 中断初始化1 \5 {) Q2 M: |9 S) e: D0 G
void PWMInterruptInit(void);
4 u" O1 L/ \5 x+ y// 中断服务函数
! T( M# z! F& L8 ^" g// PWM 事件
2 w) \! L9 w3 n6 x# Ovoid PWMEventIsr(void);
. S* e. A. E" H) m0 F// PWM 错误控制事件
. d7 a% B: i( K9 ~2 Bvoid PWMTZIsr(void);
+ A  ~1 ]% f; i+ f8 v
+ o9 W* D/ m) ^2 m/****************************************************************************/
0 h4 n5 ]: l; l' s/*                                                                          */# Y4 [; @% {! y, |
/*              主函数                                                      */# ^! L8 S/ C- t" `/ e  X* g
/*                                                                          */6 `/ n/ @: v3 E6 e9 w* C
/****************************************************************************/
8 R( Z- Z0 C& t* @2 @int main(void)2 A  q4 }" }8 `1 d- M
{! ~& _) y8 s5 l( E& B
        // 外设使能配置+ H# h: v/ ^9 [
        PSCInit();& }: S& Q9 A' O

$ g0 D# e& [, f        // 初始化串口终端 使用串口2
; n: f0 S- g. Y. I+ E        UARTStdioInit();
6 E; s- o" g$ ^8 B5 s       
" J8 V1 b6 v+ `" Z; g: i        // GPIO 管脚复用配置
! ^3 u: f1 E  F, ^        GPIOBankPinMuxSet();
  `% U) ~; f' E5 m! H
0 j" [& h# T# W# f  z: j        // ARM 中断初始化! m  m8 K. o% \2 O2 n; [; V
        InterruptInit();7 m4 W, O5 |1 J

- b$ G0 z1 D( X, t) B9 Y- i. G6 F% ~8 V$ u        // PWM 中断初始化9 m/ d6 M4 J! |% ^7 A# v
        PWMInterruptInit();+ R- l- ?( f$ j0 s6 ?; i6 U. N
8 f( r8 _. \/ U* F7 ?. q
        unsigned char i;: H% O. K; M+ m& G4 T
        unsigned int j;
' t2 i3 ?0 m7 |7 a6 c, N0 I( j  r2 C8 \, o! D/ q6 Y
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);9 b- `; L1 K' o( X* W
        UARTPuts("------------------------------------------------------------\r\n", -1);0 M9 G! }  K1 `7 F# p# Q
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);1 F" n6 w/ B, G! v- \
        // 产生波形
$ e* I0 Y8 y2 H$ e% i! S        PWM1ABasic(25000,50);* |, q6 m1 u! W
% [, s" i; G- s6 d0 b0 _) `
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
8 Y7 m; @2 y2 L8 x$ ^        UARTPuts("------------------------------------------------------------\r\n", -1);( u8 Z3 G: Z* ~% D- ?. ?

& y4 p8 `: w0 f2 `; Z) m; M# S/ X- l& ?$ u! ~, P
/ k, g  G0 |4 ^% b. t7 O
        UARTPuts("------------------------------------------------------------\r\n", -1);6 b4 }0 q: Z  b( m, O+ i+ d3 A8 @
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
1 e( h$ S4 V2 R. B7 O  w        // ECAP 捕获初始化
' b( ~" w( r( @  b+ Z4 g: V) }; e7 X        ECAPInit();0 M5 x2 |  a$ |2 s. c
        UARTPuts("Initialize ECAP.......\r\n",-1);
+ B* X1 \8 ?, @9 P! z' w        for(i=0;i<5;i++)! O1 ]/ f& _9 M# {. O5 z5 [
        {. J5 a5 D5 \8 ~( j* L( c
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
+ Y. D3 a$ Q, B! H1 k; y" M' Q                    ECAPRead();
  `; c! m; `2 W8 f4 X7 |! ^) ]        }6 A0 {/ V. X/ B' ^* w
        UARTPuts("\r\n",-1);: b) ]8 l- U/ {: Z& g' d1 h
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);0 q8 U& k. Q0 _2 c' y. k
        UARTPuts("------------------------------------------------------------\r\n", -1);
# k' D& U* L& G3 k5 l' C. t5 i, O3 z" @  t
        // 主循环
! y5 U/ \2 Q) A! `6 @" A        for(;;)& h2 u% j- i0 n9 R
        {3 m/ ?* _# E8 l5 p

' e8 @4 _6 N& `8 U7 D9 G) c        }5 I* E+ V- k' }
}9 {: F* g' `& ~6 O1 S& M  ~

: G7 B- F$ w7 J& M% u1 T7 l/****************************************************************************/
) _0 S6 l' O6 v- i" y/*                                                                          */: E' u0 [7 W* j9 H
/*              PSC 初始化                                                  */
  _1 W5 j/ ]% j3 e& e; H  Y$ Q- i/*                                                                          */
9 i  Q) ?% n' W0 N/****************************************************************************/4 N# F- P# Q9 [7 L) [
void PSCInit(void)
, d/ {# V! Y# R* k9 Z2 X: t{
- N* s& W# ~, S9 I  X2 x2 P6 s        // 使能  EHRPWM 和 ECAP 模块) b9 T" ]* D, j* E0 T. V) I
        // 对相应外设模块的使能也可以在 BootLoader 中完成0 A) K" k3 w0 U/ g+ ?  [7 P
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 E  E2 F7 ?% x* Y5 u* m
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);+ E) O9 Q8 b; x: x5 X, }' W( Y
}
4 S3 W: z$ ^2 u: U  O
% Y/ I5 R+ V- H8 R: r/****************************************************************************/# t3 q5 J2 y3 X. ^
/*                                                                          */
2 a8 h9 F' R5 H$ k+ o' F, S/*              GPIO 管脚复用配置                                           */1 b/ u6 S+ O* \$ J
/*                                                                          */1 J+ ]3 J5 m; B2 r# {
/****************************************************************************/
" b  `$ g7 T. x; X+ y  Mvoid GPIOBankPinMuxSet(void)) T: V9 c$ e; r) [' m  H- l
{+ g1 w- L$ t1 C: f' V
        EHRPWM1PinMuxSetup();  L! r% I" P2 o1 z! k

; j; x  d* N) R0 Q! \# V9 y        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)4 V2 d* L( s: m8 V2 _: x4 ?
        // 作为捕获功能时管脚方向为输入
4 I8 j1 c7 {- d. q# |4 q5 d8 S        // 作为辅助脉宽调制时管脚方向为输出
" F& @& _1 x+ n5 }3 y" ]    // ECAP2 / APWM2
+ H5 q* g9 U# v: T8 n$ P3 \        ECAPPinMuxSetup(2);
: F+ K& y9 _# u1 P7 t- `& ^5 j7 A* P, Q0 g) L. x( C, t0 g9 B
        // ECAP2 / APWM2方向设置为输入2 C0 _8 x+ t& w4 T
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
+ q( @# r, y& V9 k5 T}" C, a$ @6 K/ I+ |9 I3 I

$ n* V( f; `8 h1 H7 k# `/****************************************************************************/
2 j% v2 s' v) }9 {/*                                                                          */
5 m* l2 @) s- Z1 V/*              PWM 输出波形                                                */
% ]6 W- r  r& u6 G( V# M5 q/*                                                                          */( }; p- l6 y! i* B0 o& O& H
/****************************************************************************/
* g9 Z, h  N' i" pvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)1 {/ g( u3 q9 A" O* _! m, v
{# \9 h# m, y! R: m; _2 o
    // 时间基准配置
( W$ T" w  E, f/ m& D    // 时钟配置
9 _1 o" B* C) |    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
+ B/ T0 P. D. {4 Y- T/ F! v0 V* B$ `/ C1 \+ x
    // 配置周期
: H) n9 [8 |/ E+ ?' l: M" H4 u! Y; K) T    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,% r  t; c! z* @5 T: [+ ?2 Z
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
0 S  W/ Y3 w$ }9 `. p8 j; }8 Z* ~, i
    // 禁用输入同步信号
9 F( ?7 F# `9 N6 T5 ~  t6 y4 Q    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
1 p( o% _6 I: A( l/ h
3 C) D4 F; Q/ ?' ~6 f/ o    // 禁用输出同步信号8 |! b! Y6 \9 E' y% u
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
8 N1 C$ k5 `: x3 s& i& f0 `' f* M6 h6 ~# I# A
    // 仿真(DEBUG)模式行为配置5 Z6 I" S' }$ c8 T; L
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);: P( ^5 z7 u) @7 t. A
5 G  V* ]# E# u  p2 d7 u
    // 配置计数比较器子模块7 f9 k4 U1 H7 ?% i' h7 V
    // 加载比较器 A 值( a1 ~7 r" ]) I* {! e/ B) l
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
. e& u+ M* U' C+ F% p& v                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);. u2 ~+ [3 l, i1 z  p% {0 U

6 J3 @. g2 N; b7 x" o    // 加载比较器 B 值9 A( f' P2 D7 y' `, W' c9 |1 I
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,+ a! p, ~, d8 I
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
+ N* w' Z. ?5 ]+ ]7 S
7 Z$ |6 ?$ n: L6 m    // 功能限定配置(输出引脚触发方式设定)' l& \6 Z" M5 S& ]6 m8 I5 f. B
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出& Q5 _6 _0 a: e5 x
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,& b1 X3 O* @  Y! C; V
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,7 l, S) }* Z  H: L' Y4 Q1 u" L
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);, N$ G: A2 Y! ]4 C! f
3 B& s' S2 ~: n( y4 B3 h
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
6 K$ r$ Z6 e% q, {6 C  w: U4 B    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
) F% L: @% I: D
% k, c7 `# p5 K( y9 r    // 禁用斩波子模块
- p; e4 d1 q' [) ]    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
& S. P1 K% h2 g3 R8 y* N0 `2 t; i
    // 禁用错误控制事件
; z3 H- V( `+ D6 E) |: p    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);3 [& D; m6 M3 ?/ [- j
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
+ W! l) b! a& E# E7 z* |4 n+ P. X. F& K; L
    // 事件触发配置
: |9 j, s: s: Q    // 每三次事件发生产生中断) x0 o8 b6 z! v. W9 ^
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);+ L) B( h/ R+ F
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件/ d4 C$ s* ^3 |( @4 P0 ]
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
' o# }9 ~; }* F* |$ e8 ]9 e    // 使能中断* ~' Y$ s5 A! f
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);5 R: @4 `- \8 {7 [. h5 B

. u5 h. o) w# b/ B- e& T    // 禁用高精度子模块
( j2 E0 C( ?6 o, {& M. V; q7 S    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
2 u4 a2 j5 s5 Z5 {3 B
/ i$ x$ f5 r; Y( y    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);/ N6 J/ \0 P- c9 z
}
( y4 _9 r$ ~$ b1 o, x3 _! g) A
2 `2 i; `' e( A+ @& Y4 Xvoid ChopperWaveform(void)
4 E) ?+ W6 q7 e# J# {{! g) p0 t8 B  l* p# u: I0 F$ u
    // 50% 占空比
( V/ s% ?7 R- j* q    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
* A; a8 Y* V* W( g, L! ?    // 4 分频/ c) w; g- q4 Q& T; M: B
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);/ J5 V! u5 i5 w# o$ u0 l4 q
    // 单个脉冲宽度
! T# y0 L; i! N: `    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);  D& n: e  `- J) l  V1 y6 C3 ~( k
    // 使能斩波子模块
0 v6 g- ?4 f0 P    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);0 G5 k4 s# V6 B! i( J$ g
}
. k4 c( X0 W4 I6 Z. [4 }6 [) M, p8 g6 }
/****************************************************************************/
' |& D; J- K! C; ?/*                                                                          */+ \/ m" T$ _0 a; M
/*              PWM 中断初始化                                              */
  D! t& l7 C: c1 E) F6 @1 p: S/*                                                                          */: l* w1 z9 r. g6 v/ Z/ s
/****************************************************************************/, X$ A2 z# l8 z& I6 k" I+ K
void PWMInterruptInit(void)
, I0 n# V' U. f9 ]" J. L{
# K8 S  u! O& ?& b8 C) W* r        // 注册中断服务函数1 X" f1 j4 g# {( @
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);  B( c! z$ {5 A$ B$ u4 X9 Q( Q4 p
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);  v+ ^9 [- M8 O

% m- N' {; A+ e; D; R        // 映射中断
$ Y# Y, A5 b2 b6 x; |  g        IntChannelSet(SYS_INT_EHRPWM1, 2);, |/ w+ m; E/ ]. q
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);! U* m2 t. X, b) t/ b. c1 k7 T

/ q$ Y. u  N! L9 J6 W* s& y. x8 \        // 使能中断
! K4 S+ _7 _! E4 A% n        IntSystemEnable(SYS_INT_EHRPWM1);
# B- T3 j2 Q5 x2 k        IntSystemEnable(SYS_INT_EHRPWM1TZ);7 R# E0 W8 _1 Y& D% O% v
}: p- O# [" o0 i, `4 ~  U6 I# C

  a3 ?( j: a, R" @7 k! w$ d! B/****************************************************************************/2 D" o+ z" _  b1 g
/*                                                                          */
# z4 g7 Q& D' x7 S$ f1 V, \# X/*              ARM 中断初始化                                              */
% a5 a- H. H4 X! j5 \/*                                                                          */2 v3 Y/ N& {  b8 C% Q
/****************************************************************************/1 f  W+ A/ ]4 e3 Z
void InterruptInit(void)
" R+ r' B  y5 w{
- ~% M+ B% U6 S: p# T5 V        // 初始化 ARM 中断控制器
4 H. F  w# q4 r5 g: E7 L5 ^$ ^        IntAINTCInit();
) Y$ p: H' N; F3 Z4 Z3 c
: d4 |- U* y" C9 L        // 使能 IRQ(CPSR)
4 W' u0 |! S1 m% r  e, I6 L        IntMasterIRQEnable();. u- ?* e2 y/ F- K

; z( a$ G# X. R# B6 X" [        // 使能中断(AINTC GER)4 f+ Y( g9 \8 G: H  w
        IntGlobalEnable();: P" ?4 Q* b0 o! `
! L& g* ~" f! l2 Q: ]9 f
        // 使能中断(AINTC HIER), }5 S  J7 x% D, X- \5 i$ W
        IntIRQEnable();
6 ]6 O% T' H8 [' T. m}
5 }. c' U1 @/ ^, f
: g7 I% T7 ]9 ~+ c
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/9 i6 d& j9 g/ h0 i% `" \
/*                                                                          */% ]# ]9 o1 k" v. O' G
/*              中断服务函数                                                */+ {& q- S7 o3 i" ]6 F
/*                                                                          */
2 [4 h! D3 z5 u' F/****************************************************************************/
8 J0 {5 \5 v: q' i% {* Mvoid PWMEventIsr(void)
/ \! ~% U& H' m{3 C$ r8 Y- U) {7 U! k# c
        IntSystemStatusClear(SYS_INT_EHRPWM1);7 B1 _& T# y' w0 [
- m4 d2 R! i" A+ A
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
* @( Y0 Z5 }2 B}
4 z% d, f5 o4 K4 X6 V0 `( d
0 k/ u% S- R7 L- c. e4 Evoid PWMTZIsr(void)5 P) B* ^5 w2 k' F8 i5 O
{
! o7 M" N( t3 N4 N& b+ s        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
; x& e. W( a4 E& y6 m+ x. W" y
/ W5 i5 s7 k1 R" X" {' I; J    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
* w+ E5 a# V& [$ O! B}
6 P& H3 b7 e( _# L  N/ `9 l5 J
/****************************************************************************/+ l  g& W' S( A* p
/*                                                                          */
6 d" [7 k" K) T: T6 |/*              初始化捕获模块                                              */; B3 k3 Y# R# \: ~  ]- A3 X
/*                                                                          */
$ A* B' F7 n) u1 F1 F! k3 B/****************************************************************************/
. \% a% ?9 K8 l/ J4 \4 q0 O- u% Lvoid ECAPInit(void)
7 N" J& d8 |/ h. }{% Q8 a  x5 x$ R' t( z2 z) k
        /*-----设置 ECCTL1-----*/
# V0 |  _# T, z4 M" y- W4 U" W) J        // 使能CAP寄存器装载* _9 l( Y9 y  w) s" x
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
7 _) d# @( q9 E( H4 j4 d: A9 K        // 设置预分频值.
! N4 `$ h0 D) X6 `' w        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);4 g( [8 K% s7 d: {+ w' t+ Y
        // 上升沿触发捕获事件) l( J# }# u+ v3 ~+ s/ d
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
: Q8 a4 b) P& i+ W( b        // 输入捕获后重新装载计数器值.( T# X$ g7 e3 C7 B5 U. z- N8 z
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
+ @6 f. ^- D9 D& o. L9 P0 U) U; e( b
        /*-----设置 ECCTL2-----*// I+ j* o* }- y
        // 连续模式' ^/ y! j) J7 ~1 A
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);% u/ I. A! H, O/ Y; \- z4 p
        // ECAP计数器TSCTR持续计数
! s" z2 A4 I2 n3 E8 b) x        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);4 k* f, h/ L+ L1 x
        // 禁用同步输出和同步输入
# M/ Y0 V% O6 Z* t        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
0 A4 `) U' |) |# R        // 配置 ECAP 2 为 CAPTURE 模式
! w2 r3 u# w: O+ T        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);2 S3 z- K9 G% n; Q( Y# k$ l+ x
% j3 }$ V! ?: p. F( u5 ^" z" ?+ g
        // 使能中断* ^4 r% T1 E! d+ n
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
% D( v  m9 M! ]4 @, }1 K}$ B! _' Z# Y$ ]$ F# A! v

' r5 @% W7 B5 ~9 h, ^$ h( p0 r/****************************************************************************/
5 p2 w$ y2 i+ H1 k/*                                                                          *// @) O6 i" k& B. w
/*              取得捕获结果                                                */
. m8 p* S7 g: K1 p! {/*                                                                          */
( z; F7 w9 w- u4 {$ N3 K3 E8 ?/****************************************************************************/4 }8 T+ D, C6 L
unsigned int ECAPRead(void)
5 Y+ m3 U/ V: m# p7 [{- }& x: B$ G4 b" Z* n
        unsigned int capvalue;
4 Z* ^5 o* F' e" A& E& _2 E        unsigned long frequency;
/ M/ F' _* W6 ]/ m/ Y; Y
7 F& W  s  F; o8 F* W. S4 }1 I        // Event1 中断标志) V# r: z5 }/ M8 \
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
* P8 R3 L$ H8 X. B1 l        {; t) r" }- w6 f% P! z) E+ I6 w
                // 取得捕获计数, ~) z( z: I/ D) r1 l! N
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
( g3 M* @7 V- Q$ E; d% C                capvalue = ECAPResult.cap1;& R. f. u& S8 q# \

1 \7 X6 ^* \  o1 `0 c9 m                // CAPTRUE 模块 228M 时钟主频
2 X( u+ l: _' H& ^. j                frequency  =  228000000/capvalue;
/ i/ u6 g! W, ]                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
' h$ W2 u3 c/ ]8 f" E% G
8 B. [' b  r% ~+ f                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
& D/ N$ L1 t5 J7 w0 P* `" W//                IntEventClear(SYS_INT_ECAP2);
! h! C5 A* h+ \( \4 l0 D        }; n) Z9 H! P1 c1 v3 x4 T" q: V
        return frequency;9 e5 ?" r+ K/ {0 W: H
}
9 p0 @4 W- l8 h7 L8 Y% ?! K
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
0 I' T+ {7 W, K. X

本帖子中包含更多资源

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

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-4-29 05:26 , Processed in 0.044808 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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