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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家5 s+ e2 o! B" c) b3 Y% j, N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/& s' w3 N( y2 |) w; m. Y4 B
/*                                                                          */! B! s3 |5 C7 z* y7 N
/*              宏定义                                                      */
* \2 n' H2 e4 w3 C) M/*                                                                          */
* \7 S! h3 G, B. R. e2 x& i: [0 H/****************************************************************************/% g0 W5 q. _: m
// 软件断点& P, x# B6 ?% c; t
#define SW_BREAKPOINT     asm(" SWBP 0 ");: @: H4 F) ]7 \1 ~% m

' m1 p9 \0 r$ _% }3 _4 K0 Q// 时钟分频
* O+ Z% k' R' w9 `6 I5 N# w#define CLOCK_DIV_VAL     228) ?2 n. q1 t, y. b
) y  f1 ?8 G4 ]( c/ ^( y- O
/****************************************************************************/
# G; ?" O0 |- \/ q6 t/*                                                                          */
6 C8 |$ ~. }: a7 p% t  D/*              全局变量                                                    */! w2 N3 i4 Z% n8 t" D' j$ n* l) n
/*                                                                          */
: g" Y4 j5 T) F# D; Y/****************************************************************************/
9 T- }8 M3 W& ]) C0 R- KECAPCONTEXT ECAPResult;- [/ u# U7 y9 K  g( V

2 {5 {8 H7 i! a7 |/****************************************************************************/" j: l, X& s! h/ \5 w' [4 d5 x
/*                                                                          */
2 E* d* l( A) V/ F/*              函数声明                                                    */
6 t& k' c. t3 b/*                                                                          */3 R% b+ r- j1 x4 _' c; b- a
/****************************************************************************/
# y2 A- P! P* B2 @% S' m) f4 s' y// 外设使能配置6 o: A$ M/ K* |4 c
void PSCInit(void);  H6 J7 `- H0 f8 Z% w
) F3 N) L! _& L$ D' z+ M9 O
// GPIO 管脚复用配置! H) s" X- }. P3 D- v  p
void GPIOBankPinMuxSet();% N8 r6 N  J5 }& p7 L" W0 Y" z

( L& Y! V0 @# J8 q% J1 Y$ {9 h// 产生波形$ _, W4 `4 P8 d" r3 Q4 s
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
) @. `$ G6 M! `void ChopperWaveform(void);! U1 y0 R4 Z$ `1 g+ [9 o/ `

* d1 u& [7 |1 z// ECAP初始化和读函数
) u. g' I% Y9 l, ?0 A7 s  wvoid ECAPInit(void);
' d) }% d6 I( V7 J* O" Aunsigned int ECAPRead(void);* {8 i4 y9 h; S1 x
  ]6 }4 U1 ^) m& j& v
//ARM 中断初始化
; e# c  J/ e  W5 g: r: L5 wvoid InterruptInit(void);+ J' Y9 G- \0 U$ V

; [7 k/ {% `4 P7 b; d// PWM 中断初始化
/ S3 C2 Q  C! w6 ~) @void PWMInterruptInit(void);6 t1 n* t$ \0 ?* |
// 中断服务函数8 c* w( R0 Y* W8 @# b
// PWM 事件( o$ d- L. A$ \$ D
void PWMEventIsr(void);
, v" b8 w* e* D# b$ m8 L// PWM 错误控制事件; W9 w* ]# K$ D. ?1 ]! y
void PWMTZIsr(void);' w0 ~2 ^9 l' [% Z! ]# R
1 B0 X, q3 V7 g9 X! W# ~3 D1 y. a! b
/****************************************************************************/5 d! y+ Z+ X1 S; G
/*                                                                          */
. V4 h  o! d- G6 ^7 _" Y4 Q( X% B/*              主函数                                                      */# C- c. L) H3 ~$ K
/*                                                                          */( c" k% x4 a8 u6 g% ~
/****************************************************************************/+ Z- b2 L; i" t5 K
int main(void)
4 }! O, X. R7 u( ?" a9 }/ U' r. }& Y{; f9 `. y0 F. M0 v: v
        // 外设使能配置0 ^+ ]3 h. s3 A+ Z
        PSCInit();& {! j" ?/ Z6 w; x: L: E  J

8 U' E; q8 |. h5 {* n        // 初始化串口终端 使用串口2" Y" D1 \: y+ j; `2 @' n
        UARTStdioInit();& ^* a8 ~% H& |% R
       
: V7 s3 d% S! o* F& x        // GPIO 管脚复用配置, p2 I+ k( B5 {
        GPIOBankPinMuxSet();
4 F% k7 ?) K$ h9 I2 u" f' d) B" [3 e2 n8 u- l  W
        // ARM 中断初始化# ?: o  i4 ^% `2 y, S; D
        InterruptInit();
7 Z$ L" k( s- r# e: n: V% S3 S' m  m- W. l" L" m- A0 M
        // PWM 中断初始化9 c1 g/ q# N; X
        PWMInterruptInit();9 l& p: s5 Y- x( s8 C, H  b4 B

' j( `9 c' ]& j/ D        unsigned char i;& t. Q4 y& \2 M5 v8 C, W+ G
        unsigned int j;0 c3 s, @# s  u7 L( ?8 r0 G- |+ S
* T0 }0 w/ ]' W' t
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
" G4 A3 J2 _% @1 H" B        UARTPuts("------------------------------------------------------------\r\n", -1);
* d* O% v6 a$ C% i1 d        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
7 G" Z" K. ^$ l7 ?& i        // 产生波形
! l9 t. [( v2 L! l6 F        PWM1ABasic(25000,50);
3 _6 v  g2 V) c5 G/ n+ D8 Y9 ]7 ^6 g$ ?& z: r3 e: U& J
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
3 E1 ]  [# y  v/ F8 j( r% P        UARTPuts("------------------------------------------------------------\r\n", -1);. k6 A& s$ s7 R+ X/ V; N

& ?* p1 w  [$ i8 i2 X* Q2 m$ V8 W" t" {3 C+ M' X6 N) j

  x/ X9 q: T9 `8 ]2 k, o5 j        UARTPuts("------------------------------------------------------------\r\n", -1);2 c: s% T4 c$ {; {  O( r8 T5 v0 U
        UARTPuts("                    C6748 ECAP Test\r\n", -1);  i9 ?% F5 z# t% H, Z: K& z
        // ECAP 捕获初始化8 {, \  Y+ _' u! R/ ]6 j
        ECAPInit();
3 y& l) D% f: A# h+ N# {3 n* I; ^        UARTPuts("Initialize ECAP.......\r\n",-1);3 w/ Y7 C* ?' r1 u& q( \4 Y( n
        for(i=0;i<5;i++)* D% }& @4 c! U1 H
        {
& f  [; g5 J5 H+ u                    for(j=0x00FFFFFF;j>0;j--);            // 延时
0 J, j6 m% i! J' b' k$ w0 d& R                    ECAPRead();$ ?  W# E# |0 ^5 Q% G
        }5 [' P9 D+ K6 `& E$ ]  O* q! h
        UARTPuts("\r\n",-1);$ s! M1 H) q% k5 a6 C# |; P
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
% }* `0 ^$ `7 Z! f2 D- I/ g        UARTPuts("------------------------------------------------------------\r\n", -1);
. ~7 @) Y; d9 q2 d) S- D2 R' S- b# M! m
        // 主循环* s- R# q' K! Z+ l/ j/ H
        for(;;)/ O- _. C/ P2 f, a
        {
" I. n( b, U8 o' m2 d% C7 k" r* \: l2 Q# j! T! |8 d
        }/ P# [' F/ h" L- r
}. g4 P0 u/ j# D% U! J

) s2 D" _1 r$ o" D$ q/****************************************************************************/. l# f7 l, j* n  v- x5 w
/*                                                                          */. p' Q) t* ^4 M) J+ y( _
/*              PSC 初始化                                                  */6 a) B& G' q; |
/*                                                                          */
- A9 d$ T& z. ~( @# P/****************************************************************************/" W7 w$ P) O8 k- b5 Y' ]
void PSCInit(void)" a: X$ W( n8 m4 Z- x* e
{
& s/ Y. |5 ]) m! G! K( O- y        // 使能  EHRPWM 和 ECAP 模块3 S% t/ F2 O( _7 Z3 P
        // 对相应外设模块的使能也可以在 BootLoader 中完成
* D5 k  i6 V: m+ q3 C! H; E    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);- _# ^% u. P9 V/ j" ^# T* M9 N
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
0 t% b+ X- b* C1 o}9 F- G% N6 S/ ^5 s5 ?( N9 @- f
7 O; P; e; \( ~' [+ A( s+ l
/****************************************************************************/
" a8 `9 c5 }& P5 q/ T/*                                                                          */8 y0 h- m6 }, a
/*              GPIO 管脚复用配置                                           */
0 x! \' ^2 D' e- Y2 K+ \6 w$ E/*                                                                          */
2 W0 |2 C0 O. f: h" J/****************************************************************************/+ s" \! r# U' b! X  a. K$ s
void GPIOBankPinMuxSet(void)3 X/ b* M& ^2 V6 q2 p( E
{
1 \0 [$ d. C# W: j! X3 z        EHRPWM1PinMuxSetup();
. P& x- u% P, ?
4 r: ?; Z1 E% C+ H, v        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)1 S/ \, }$ s7 @2 q, Q# [1 c, L
        // 作为捕获功能时管脚方向为输入6 \$ J& H% r) @' t. T
        // 作为辅助脉宽调制时管脚方向为输出
5 w, q0 c8 P, d    // ECAP2 / APWM2
" `3 Y6 A" T; L2 l+ I3 P( w        ECAPPinMuxSetup(2);- L& k1 R, h/ Q

7 u" E3 H. r! W4 V        // ECAP2 / APWM2方向设置为输入+ z- i. B) x) {4 W; Q3 N/ \. S
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]/ |; P8 e9 r4 l8 i" [/ U4 a
}
5 W% a$ E" R( W# I) ?& o+ D1 Y1 q8 `8 N. ?
/****************************************************************************/
% i" G. Y7 X5 E8 G9 M  d' t6 h/*                                                                          */
8 m% w) V+ e: t8 l/*              PWM 输出波形                                                */
; Y: U# s% A. _: ]5 V# l/ J/*                                                                          */, V' B7 J7 U# u0 o3 v! i1 X& y4 ?
/****************************************************************************/
( r; x$ Y- _! @void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
4 H8 N% x  H* @% b0 E% W{
9 N7 S; p& Z7 F; o    // 时间基准配置7 s- X+ l; q) H  _: v) b5 a) C
    // 时钟配置" \4 K5 F7 `1 g3 T, G4 T: Y
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
! x9 V0 ^  x2 c1 e+ _8 _' V
, `9 y) h! H9 w* e0 D# o( ~    // 配置周期
# W' [* [" T- H5 R' @; }    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
9 S: N3 _; Z) L' f) O: k% J                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);- K! ?* Y+ y7 ^

$ `$ T, }% O7 T4 J( R1 Q    // 禁用输入同步信号4 m; a& Y6 }3 l
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
( U! Y& f9 l( h5 @  h- q0 Q
4 N2 G1 f9 s1 I+ v  b) B    // 禁用输出同步信号
9 e( ?* v  P9 V+ h" \    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);$ j8 J) b  A5 m) l

  i9 }* H1 _) [# T9 k* j    // 仿真(DEBUG)模式行为配置( q$ e, U. E6 Y7 H
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
& l, @6 P. p4 L- i/ N' N3 a$ H) f: J! K$ G8 L. i
    // 配置计数比较器子模块
0 k2 o0 A5 c$ `% W) W    // 加载比较器 A 值
& H; \5 M" S6 H1 z    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
; [) R1 k% w$ ^" z; }                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* q* k2 f1 L9 c/ a) H

. B7 [" F' _  g! H5 `6 R0 v1 m    // 加载比较器 B 值. L" v. D' ~( K/ g7 M
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,6 s: G4 S0 w5 l0 b7 ^/ Q
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
" o4 S# S: ]6 }0 S* k! R' {
( j6 k6 [2 l8 G9 m* N/ m+ A    // 功能限定配置(输出引脚触发方式设定)" X; h5 L; ^  }/ O% k( w) |
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出4 X. i: @" V. F4 {! x
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," f. c" i- }* j/ T% P; F
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,4 K5 k( e  [8 d& i! i" s/ v
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
/ ]# |7 ~9 X. g, F* Q3 j
0 B: I7 B$ ~  Z5 Y. G    // 禁用(旁路,信号直接输出到斩波子模块)死区模块. Q! }. f% U/ T: O5 H
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
( i0 F4 }% {; s1 W: O9 d5 X8 Q
1 }* z/ b4 H' J; ^" w7 O    // 禁用斩波子模块- D4 S. @4 b' _6 K5 N. n4 m1 Y
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);3 x  v( q# U4 L7 X8 ^

/ ~* T3 L, {# ], }    // 禁用错误控制事件
: \2 ?, Z3 _9 F1 b4 Q7 Q  J& X    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
6 c, R- J; B2 g7 Y. C3 q% I7 u" I    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
& [' Q* C) x1 O- @
+ l1 s3 {7 o; _) K0 O$ k  I    // 事件触发配置
' c% p0 w1 v8 B. m    // 每三次事件发生产生中断
& ?( M) Y: h7 w1 K' U    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
. K0 t, Y& Z" I" `% X1 j; `    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
: A* ]2 u5 ?% k/ q6 ~8 U    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);! X5 v  k+ w4 z* [: m# O$ c0 A
    // 使能中断& D) n% Q/ A$ g9 P! S
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);% t" g5 d& ?5 R
1 d8 D3 e: L! s/ n
    // 禁用高精度子模块7 o" g- o  U& B4 |0 u
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);0 q2 S. _  `: s  n. {! _3 c- I( O
  ^& d0 o7 T' v% ]1 o( q
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
4 x" q( t, B, i9 |- z% g}  }; [  s' j; o! n
0 l& Q! z9 P; B
void ChopperWaveform(void)
9 X1 g5 n* W3 U; _0 Y: t7 h{
% ~6 l- z$ ?3 x8 b" f    // 50% 占空比! s" q8 W4 ?8 ^* X. _4 Y+ k" P
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
4 b4 X& N2 X. m; u# h7 _, l    // 4 分频
% r) Z$ s, p: d6 i* b- n( ?* k    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
5 W- s5 i0 I) [% d$ W. J    // 单个脉冲宽度* E5 h1 |7 T! U3 x. G
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);$ D  Q/ l8 }2 S+ D! j4 z, u7 R
    // 使能斩波子模块0 o6 j* N; e9 v4 ]5 p+ D/ L- I
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);; l' ?9 F0 ?( P, _) T
}9 d; b# t1 Y- U# ?% ^. S% t

& f5 X: _7 Z4 L; o/ T/****************************************************************************/
2 I" b- E/ i+ B9 K" Q- F6 f5 T/*                                                                          */
# f! p" E( X* q% K; T/*              PWM 中断初始化                                              */
7 j, m  N7 a: U  |3 I# D0 o1 s/*                                                                          */- M% }3 y4 r  j1 [# o
/****************************************************************************/
0 g7 S. l6 v/ d, E5 Gvoid PWMInterruptInit(void)
, i6 C7 d, A% M6 R{
% x- z, l6 @: H& {+ n        // 注册中断服务函数
0 Y4 b! U' K+ h, e        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);7 r$ L- p, Y/ o  ~8 i
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
8 \& P7 k  \: @9 N: h  `' T+ ]5 M+ c$ r  \
        // 映射中断3 U: u5 n: F4 S! X' P  y) @0 `5 j
        IntChannelSet(SYS_INT_EHRPWM1, 2);4 a) D' j4 A9 E" g
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
- L+ {3 F2 ?4 Y* ]* A
4 u. n' `: D0 A8 L; R8 F        // 使能中断( ]. \6 p- t  k; g6 ^+ J' @. @& s
        IntSystemEnable(SYS_INT_EHRPWM1);3 E2 k. c, O' X# c
        IntSystemEnable(SYS_INT_EHRPWM1TZ);/ {, a9 o6 A3 k% @
}; w! E4 U8 i# D

+ j, W' q$ o/ V- ~- k- y/****************************************************************************/7 B+ t  U+ }9 h0 j- `
/*                                                                          */9 a$ k5 o2 w, ?/ @
/*              ARM 中断初始化                                              */' L3 s1 S" W( O7 _4 d- P2 F
/*                                                                          */- l' v& X. l! P# A$ V
/****************************************************************************/+ o2 H& B# ?% z2 `" n0 o) p
void InterruptInit(void)
2 k8 F4 E/ P) G{! C+ G& z" d4 E* ~' e9 n
        // 初始化 ARM 中断控制器
5 g2 b8 V# S0 f9 D6 s' y8 i1 T        IntAINTCInit();
8 s; c" Z( `; Q7 H9 C, G- d8 A2 T; ~5 q4 W
        // 使能 IRQ(CPSR)
( O) `9 Y& l. {: g+ m        IntMasterIRQEnable();
: w+ i2 l8 a1 N% @
" C: j5 K+ X/ e        // 使能中断(AINTC GER)
( @2 R5 N9 g" K        IntGlobalEnable();. h( p0 m* L. L, X( |- M
+ W. Y5 T) [8 z+ r/ @. u8 i6 I1 i! R% @
        // 使能中断(AINTC HIER)0 s, S/ [3 C+ w7 H" L0 U
        IntIRQEnable();, s8 y1 Q# U* e8 c0 d/ h
}: [7 z) M1 \- G2 ~1 ?) ~
- ?" b- Z  h7 {9 r$ M' W
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
2 r" F& {: }5 u5 v. J: P7 O. @! h. L/*                                                                          */" L& \& G+ [& w2 j
/*              中断服务函数                                                */* W. P$ A* O' a
/*                                                                          */
) V% V- E: M+ M/ f6 F0 V/****************************************************************************/
3 `0 E+ `8 P% \, ~9 Wvoid PWMEventIsr(void)
  E! w2 d% l6 Q3 l{
7 n. c* C( `$ b/ b- y* B6 w        IntSystemStatusClear(SYS_INT_EHRPWM1);; b3 V: Q! X* i% ?% a
5 i  G/ \8 b  z! f. O
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
. e4 J! F- J2 S$ R! S6 b5 S! r2 n* e}' L. `5 K1 p6 K2 D6 ]
8 v) \- v, J/ m+ `7 W6 L1 g; K
void PWMTZIsr(void)9 |7 g  B% c0 i9 l# H9 S* I
{
8 U. l  f+ Q7 H: D: C8 ?  `3 e        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);" N( A' ?! b* W: q; N( u2 n
5 v! r, F. M. h' H5 t) h
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
5 ~9 C8 Y- l% @) y}6 S& P4 W, }. X4 n& \$ O
* o: f; a# T: B4 c( Z' {
/****************************************************************************/
9 |2 B- t$ S8 f" ?/*                                                                          */7 |+ a1 e7 O4 D: G# X
/*              初始化捕获模块                                              */8 L/ m  a( l3 `( z% G* I
/*                                                                          */
6 x( h3 k$ G- ?/ W# _/****************************************************************************/
7 Z' `" H: k& N$ J% |* J- q- |void ECAPInit(void)* I' P& E2 D; n5 I3 S% g
{' T4 G: G6 N8 |3 s# y8 B
        /*-----设置 ECCTL1-----*/0 m/ p9 }+ c; G  ?
        // 使能CAP寄存器装载( [' P- A0 z; d9 d8 u# C! k; Y! q
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
+ h3 [; A3 T- I        // 设置预分频值.3 I7 C6 X$ K6 Y
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);$ I- v3 y" ~- A% B! o- M' P
        // 上升沿触发捕获事件
# v5 C$ O& b! P4 Q' d        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
! I( ?( Q3 k. l        // 输入捕获后重新装载计数器值.# Q; h$ E1 Q, V8 A; e/ C. ~5 J
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
# U* ?. d3 W1 G& e3 r
! u+ n8 ?0 H/ k! b+ }6 F/ M+ s        /*-----设置 ECCTL2-----*/
, @5 m& b, b. t7 d% N        // 连续模式
+ T' ~9 ]2 Z. c: l3 |        ECAPContinousModeConfig(SOC_ECAP_2_REGS);! g3 s; P5 ~2 V( X7 `! ?8 r2 R
        // ECAP计数器TSCTR持续计数7 ]7 R/ S) N! Z' W$ g! D) A: _
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
! f% ]- P' f7 D1 _9 F  @        // 禁用同步输出和同步输入
0 u* i5 m5 T  f! d! B/ r: H        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
& s. z5 j/ q4 ?+ a# S6 t- |, Y        // 配置 ECAP 2 为 CAPTURE 模式
0 i9 }7 X5 _) ~. y7 G* f# U9 u# G        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
, G$ j, H! p3 E) e/ l; m! |4 U# k. _" c  N% S' g; ]
        // 使能中断
  `( i3 \: ?' N0 v4 P( K6 c//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
/ q7 J& c0 J/ i# N$ ]# f}7 x. Z5 k9 e& y0 u
1 v$ u5 u: d. E; L0 f1 \) P$ H
/****************************************************************************/  l, h' T5 R" F. ?; e3 L
/*                                                                          */# B2 ^# u% j# _) e- d7 F
/*              取得捕获结果                                                */
! ~3 X6 R" l) S% D$ j9 ~/*                                                                          */$ b- `, L& S: a
/****************************************************************************/3 o8 c. A+ B. L( f4 v$ C6 ~
unsigned int ECAPRead(void)7 X. S) J! E- ?7 Z! s! a, K  O  v8 E
{8 A4 Z) _; f' E# G: P2 E
        unsigned int capvalue;
3 A, L  I+ L) h% P/ S        unsigned long frequency;
& O0 V9 B) R" ]4 K+ ~8 [; t! v  f1 Z+ A- P, D7 a
        // Event1 中断标志
9 f" v: @, P$ Z- H/ w% ]        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))6 ?) l- F$ M0 |- j/ B% N+ c
        {! e* y: m4 K* m8 u, e
                // 取得捕获计数: f1 r  q  [7 m) \8 d* x* Q; j
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
3 K% G. J( a( l& d                capvalue = ECAPResult.cap1;
) |1 F0 R0 q6 i( X0 R( j. _/ W8 e# l, w" L% A
                // CAPTRUE 模块 228M 时钟主频7 B& C7 R$ g& m" @
                frequency  =  228000000/capvalue;
9 L7 T& r- G% g: d! f% P                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);' D9 |2 X# u1 A6 }1 k4 d

) q+ B: H1 C% V                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);( x/ \( X9 M1 v' M
//                IntEventClear(SYS_INT_ECAP2);$ i' q8 `  d* ?! N/ e# P
        }
& }2 `! k# B+ `7 u1 {        return frequency;. E( W8 |  w& K% |
}
* g% g, }9 r$ f. w& S* }
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。$ J& l, ^+ {& U/ |

本帖子中包含更多资源

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

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-6-15 18:12 , Processed in 0.047296 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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