请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
4 d* q( S7 F+ c: M5 h; Z% F, E, L/*                                                                          */
4 q% G7 t! N0 j! E9 C# n( V/*              宏定义                                                      *// Y/ {/ r! r/ }1 M
/*                                                                          */
5 ~% C" h' h! w9 J- m/ s/****************************************************************************/' D) F7 q9 B. r" v1 u6 t
// 软件断点
' ~6 q1 E$ \7 n+ j, m" B1 G- D#define SW_BREAKPOINT     asm(" SWBP 0 ");
; r7 v% s6 J" t7 E$ l3 T; X; ~" P
// 时钟分频
7 d. R3 y3 Q+ k#define CLOCK_DIV_VAL     2283 j/ ^) M8 e; U1 `/ j: R+ H
- w4 z# D3 ?9 K; A# z
/****************************************************************************/
( _! H: X$ a9 I2 g. ]2 W6 Z, l/*                                                                          */
; s4 ~* Y$ s/ w1 \/*              全局变量                                                    */+ @3 K! Y' \% X1 G' \  F
/*                                                                          */; M2 @4 H4 q8 d5 x5 u
/****************************************************************************/+ a- y' q1 F6 l0 d, I5 j9 Y
ECAPCONTEXT ECAPResult;
; S) w0 T+ x3 `0 d6 r& Z1 K' m+ l9 N7 R
0 V. f: p8 F+ D; f3 J( T5 c/****************************************************************************/, L- K2 x1 e' z4 Y4 j1 A
/*                                                                          */9 a6 A8 I! r3 M
/*              函数声明                                                    */
! _2 ]8 ]% o* a) x6 {/*                                                                          */
% F7 m8 V, M; e- T/****************************************************************************/& @2 ?9 c8 P, q  K. n& V
// 外设使能配置; Z( t; H3 f7 B3 f1 o
void PSCInit(void);4 R. T. `5 q' a- p
6 j2 _+ T; a& E) H5 Y% j
// GPIO 管脚复用配置# x6 l+ P* j7 ^
void GPIOBankPinMuxSet();
9 p. Z6 D- V7 J( W8 ]  `8 t: ~: A7 j! f1 ]+ ?' A3 o
// 产生波形7 d6 f0 J1 U* C
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
. j% R: y  Q& O9 t7 [9 l8 }void ChopperWaveform(void);
; `1 B* B4 t! X: S) M# s6 |4 h+ r4 b; P( A' B4 G, g. Q4 H
// ECAP初始化和读函数
' e- M) f3 g, H+ c2 l/ w0 qvoid ECAPInit(void);5 y2 G. O, Y) n  [. Y
unsigned int ECAPRead(void);- T( H" S, G4 n8 n; D

& W) N& R* ~# G5 ~" A//ARM 中断初始化% f. R# w1 b9 @+ c, o
void InterruptInit(void);
/ d: J( n$ |' t  [5 y; P6 w' @/ C- \) N, |& G+ R2 H, b) y* b) y
// PWM 中断初始化8 ]3 I0 r2 n9 V/ O: \2 W/ T
void PWMInterruptInit(void);( a% X" G9 r8 ^! `9 t0 m
// 中断服务函数
" I. T) {  P7 v3 [: Z// PWM 事件
, |- m! k0 c7 w% d! ]void PWMEventIsr(void);
2 b/ Y2 [5 H7 x// PWM 错误控制事件- B+ h% {5 O( o
void PWMTZIsr(void);
; [9 l; O6 T$ H: w( p! u. q! c0 X5 d- I
/****************************************************************************/2 |0 z( A4 U& W
/*                                                                          */: m/ O: Z9 u1 k1 p* |$ p" ]
/*              主函数                                                      */) C4 b9 U1 `9 w! b( f* ?
/*                                                                          */
, n5 o' G6 s- N5 b) k9 u/****************************************************************************/% @7 K& @0 ~3 ]6 O' Y4 t; R
int main(void)3 C- T( P" m' U7 b) m) M, }, Y
{
( P% H7 O* h& U        // 外设使能配置/ ]' Q. Q! C+ L  O. b! {4 o2 G
        PSCInit();7 k* H& q$ S+ O' V/ X6 b  U

2 N5 L- ]5 z( L& M& r& _        // 初始化串口终端 使用串口2. O* r! J( k1 [9 K
        UARTStdioInit();
. b" `" @8 ]+ O4 Z7 t       
7 T0 w% J2 h+ W4 ~        // GPIO 管脚复用配置
: s6 P9 E  K5 a0 Y        GPIOBankPinMuxSet();8 o9 k2 D& J. e/ o( e3 I3 J5 w

3 ?/ |5 l& [. S8 f# v        // ARM 中断初始化( e4 S, v( `: A7 S6 X1 C
        InterruptInit();9 T, x& ^9 }2 n& X4 p

+ p; `* `$ }6 _. s; |4 Z8 p3 g        // PWM 中断初始化2 _6 p3 ?# C( h0 s  y5 k/ _
        PWMInterruptInit();6 `4 b' J6 j) y! Q

7 v5 @+ a! w! X5 |% E; \3 y* k$ n        unsigned char i;7 u: |' z4 h9 l% ]  j9 C
        unsigned int j;
* i$ X) e  R8 F# D! P: l) x$ m$ z, d
. R# I! L8 Q2 [7 ~        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
0 [$ O* N' y. p& D+ H: }        UARTPuts("------------------------------------------------------------\r\n", -1);
& O" {9 p6 @# z; d5 n        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
0 L1 x% S% ]1 ^; f        // 产生波形( e& c" L6 ]! d" Q
        PWM1ABasic(25000,50);
) B" P8 o9 n/ U: I5 m: S0 f  \. @0 x( f5 A8 F2 U
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
2 E, k2 R& @" {( C  k3 ~        UARTPuts("------------------------------------------------------------\r\n", -1);1 z: C8 Z3 a; Y9 A% {9 h" K1 C# H

5 |+ }: v/ h" s* H4 {$ v' G( Y, k( ~- A- z9 `  ]) O6 G5 U/ T- h- d
% D" R# b: a$ H* a( b% Y7 ?
        UARTPuts("------------------------------------------------------------\r\n", -1);
9 l' `: g" o# m1 h0 |% N1 M( I        UARTPuts("                    C6748 ECAP Test\r\n", -1);- Y; ~0 K/ M7 C$ _# T( |9 m8 L6 d
        // ECAP 捕获初始化; S) m7 Z5 b* D$ \) O
        ECAPInit();9 V7 `3 U. d) U: V
        UARTPuts("Initialize ECAP.......\r\n",-1);$ y8 z/ P& i# j/ N( w2 |! C0 l
        for(i=0;i<5;i++)
1 i  P$ o) c0 _+ l        {
# e  M) O* U5 m% q& O                    for(j=0x00FFFFFF;j>0;j--);            // 延时
, ?# c0 |% e8 H0 Q                    ECAPRead();
+ K- v  X, [4 K; b3 w. t        }3 }; R8 H$ n6 K, @8 F
        UARTPuts("\r\n",-1);/ n( T3 y6 K9 q0 p
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);: I, i7 v" R8 f# I: J* a  q
        UARTPuts("------------------------------------------------------------\r\n", -1);
3 M& Q4 z7 b  E2 b. D
9 I6 r1 W5 i  q* @6 x- q! g9 n: ~! r        // 主循环. x  n* v5 b+ P6 }. X
        for(;;)
" `  u6 a4 W; |. I3 q4 T' v* I6 Y        {  Q2 y9 }$ L! O8 S  b- Z

) P& n, k% }+ @* q        }
4 v4 F3 M. Z1 B& A}+ J" R$ K; p# z4 p4 [: x: w" j( z
* a% _3 A; H4 Z
/****************************************************************************/2 s8 ]5 j8 S9 H( ?0 B
/*                                                                          */
. J4 M7 W( Z) P/*              PSC 初始化                                                  */
* X% O) [+ N( @: x+ A2 F- |/*                                                                          */
: E5 L0 Q7 F0 V1 b% B, L/****************************************************************************/
3 Y: u; s& X7 F* P2 M& E  T8 avoid PSCInit(void)
+ O6 t$ x& m  [2 p; }% V* J{! w8 H& e) ^4 R1 v- [; E; @
        // 使能  EHRPWM 和 ECAP 模块
3 U; Q5 l: ?: _        // 对相应外设模块的使能也可以在 BootLoader 中完成
# a" h* Y2 v' Z! B    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);% A) g( H+ \" ]$ z7 ~' O* w
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);1 y9 D# i1 e3 c  o  `  g
}- Q  s9 C! {8 |3 S
& o, D  t/ k  p6 _9 h" q
/****************************************************************************/4 |8 o( w3 Z& }% K' z+ y
/*                                                                          */
9 z5 z! ~2 ?) y, f( |/*              GPIO 管脚复用配置                                           */
* l) I9 }8 W, F6 Q4 _# C/*                                                                          */
) z- v- E2 \" @7 S" ]/ Y: O# |+ I, S/****************************************************************************/! ?: G3 N( Y* Z' M/ O" d
void GPIOBankPinMuxSet(void): `" Z' z) }# h, K% }* a* h. c; F1 x
{
; F9 U; V. l) g' G4 q5 z        EHRPWM1PinMuxSetup();0 w5 Z/ p% j' A' c5 Y
  ~( f) q8 s" T2 Q  p" S* q
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)' a1 o% {3 Z, i+ M
        // 作为捕获功能时管脚方向为输入8 E9 F. q- [- ?6 S1 [6 P3 ~) x/ ?
        // 作为辅助脉宽调制时管脚方向为输出9 |5 M" L' p, P) w: N8 Y1 R4 z
    // ECAP2 / APWM2
% O9 D3 {2 F, O' m5 Y        ECAPPinMuxSetup(2);  d) r! x2 r% T# x/ p* m  S
3 ?) z' `' l  x8 M% j0 X2 [
        // ECAP2 / APWM2方向设置为输入
# q: K6 ]2 _* k  X' S" e6 ~        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]% \: p$ C! |+ W: i6 G8 B
}
% I2 k( L& N  {- c
$ t/ A2 K( Z) G$ L0 P. ]. G( R) U; V4 t/****************************************************************************/
, c. ^' r2 V! g: u! t/*                                                                          */
. U5 t1 h# K2 M5 x$ G/*              PWM 输出波形                                                */
! |9 h4 m' p- C2 m# R/*                                                                          */
9 I& G* P$ Z5 a: h2 m/****************************************************************************/
' E( r, m, ]* E0 B8 l5 tvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
7 Q3 D& E% i2 f$ p{
2 b! ^5 _; V+ F2 O+ Z7 |    // 时间基准配置
8 k: I- _3 d- Q. D- g    // 时钟配置
4 L7 }# n% ?4 ~! C$ S& U/ _+ J    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);3 \+ _8 P6 ^! a3 G

4 v+ R1 {# K& a4 c# q& W' w    // 配置周期$ ]) o6 M6 K& |( }: o. ]* \
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
5 C0 w. X" F2 k0 _: F                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);5 P) B' \& g( A

3 ^) ?+ M0 V3 c; b; a7 `    // 禁用输入同步信号4 ^! M# e4 b9 X$ h' g
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);( n/ E" J+ K2 b4 H$ R. {* g
/ |; g+ q8 ]. q. L$ h
    // 禁用输出同步信号
( [; m8 K* {) i: t6 y6 g2 i9 J7 f- c    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
4 R8 X+ W, A- }4 c6 k
! K. P+ l3 n3 e2 p    // 仿真(DEBUG)模式行为配置# k) r4 Z6 z( u6 L' h  C
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);+ c  r: u4 I  A. L3 r0 [
' m8 V% j1 f& {7 m- F
    // 配置计数比较器子模块
" a& s* h% M$ B8 r! v3 W9 Z& [    // 加载比较器 A 值  {* v9 m: K  r, M- y
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,/ Q0 z- W( ?5 u( ]3 L8 R$ a. f
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);: B# w* ?* L; Y. m
: }  _) m  ?+ |% Q4 j! ~* S$ T! P
    // 加载比较器 B 值. d" ^5 m) V/ g
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,3 }  q. U& M1 ]# b( l  k# c
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
3 }* t8 q, p/ l% @) ]) F
  a7 |& F8 e6 Y+ N8 g    // 功能限定配置(输出引脚触发方式设定). A( o7 c8 t5 q' m9 q' i
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出0 Y: Y$ ?# T# o; `
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
, x1 a% S- F; H8 K% e9 s6 R+ s                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
* ]2 U2 X. t5 f4 T                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);$ J# z; A- P2 s
  G0 V& _+ F! L6 V( o1 F" u) R
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
! _+ ^8 r, L0 U4 W: X# O! h: O    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);  c) c: |% V  {) k- J
/ Y) T! u% P/ X/ y  R" H. E
    // 禁用斩波子模块: Q, a) @% `8 Z9 f. f. z
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);1 v2 F; @. R: g9 i. p" @* @! Z
0 m* `' l0 P- H; S
    // 禁用错误控制事件
( ~7 L2 \' ?6 j2 W$ A' v    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);: \0 W8 ~2 Y* @* M) k
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);9 I  Z' Z& f) a3 }, }
/ W+ M( T# h( a0 H0 S
    // 事件触发配置
. J& R/ J* N; }3 ?    // 每三次事件发生产生中断
7 c) z5 X6 t/ {9 P1 b" C) }    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
7 T4 C! W6 J& ^) Z  I    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
  ]) k* \4 V# i/ @    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);6 \+ a& [: e+ `4 g  w5 [. i
    // 使能中断; ~* x) C8 N3 Z
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
# ~. b2 s& C- c. ~8 F5 Y: X/ c
2 }, y; y- {- j* }* h) p    // 禁用高精度子模块
- ~0 i5 O5 o& _9 ]    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
1 i: |* f/ E( u; q, X/ Q3 u- I: R* |0 Z8 w$ V7 I- L2 M7 E
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
- q; r( U8 W: y# b3 F5 h/ }}3 u% j. _7 O; c. e1 a1 M
  {# S) J, n( z! m1 {. b$ T7 A; R. `
void ChopperWaveform(void)4 x1 @  `5 X( H
{
- H( }; f( B& W2 v5 O+ p/ d7 D    // 50% 占空比6 x1 e9 n9 @* ~& o' p) K
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);5 u+ i# K4 l0 u2 h: A
    // 4 分频; f' m/ a; j; u. X
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);0 m+ A( G* |8 Q: u/ J) ]
    // 单个脉冲宽度
! n* `1 f/ B* v  E8 G" U3 M    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);1 \6 l+ F; _- ?' O$ H5 H( g: N
    // 使能斩波子模块
$ Q) ~5 y& d0 k! c    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
. Q. y  X; O. ?}& V/ |% a6 o$ z0 j

7 W. Q! e4 ]$ y: ~/****************************************************************************/4 \0 M; E: S5 H; x$ q0 F, H
/*                                                                          */
6 i3 l+ d6 \3 ~  K* s& `/*              PWM 中断初始化                                              */
9 O% v: \% Y/ D- ~9 v  S( b/*                                                                          */
( c+ ?, K8 g  h% p4 p' G4 y: z: ~1 @/****************************************************************************/5 r. ?) b: p0 V2 }& c9 F
void PWMInterruptInit(void)
2 p2 a+ X/ F$ R/ [$ `; z. U( m{
3 ^) L$ j  j' X  ]! L6 Q2 I        // 注册中断服务函数
; }) Y) k7 K2 m  O        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);* d& s5 A, H! s  v/ h$ @' u
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
6 J7 ^: r1 L$ H' C: ?+ f% n" b; R% t7 c4 J. l" Q
        // 映射中断
; V( c8 n* X1 C8 K& H, A( ~        IntChannelSet(SYS_INT_EHRPWM1, 2);
( m% p: o" L  a& u' c        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);" ~2 `) f# Q7 h$ Q

, H" m6 }, V2 b  i) M' b        // 使能中断% @. R) h& M) y, E* n- O
        IntSystemEnable(SYS_INT_EHRPWM1);
( ~5 ?. W) Z( G% p  R! g        IntSystemEnable(SYS_INT_EHRPWM1TZ);# }  ^1 q) L0 G, m5 |9 t
}
! L" e6 k* p, B. v! {- k4 F3 A! |8 |8 q% F2 k
/****************************************************************************/! D2 r2 I, M- O5 @% V. y; i. g& c( Y- p
/*                                                                          */6 A( Z1 Y5 B' ?1 X
/*              ARM 中断初始化                                              */
4 Q3 s' g/ `/ e( `9 W* e  t) b/ b/*                                                                          */
4 U) Y( ^; Z/ n8 U/****************************************************************************/
+ Y4 i7 D# m/ B! |5 k1 ~void InterruptInit(void)+ V0 U, C: G" x0 U3 Z
{
1 f8 z' ]6 @$ I        // 初始化 ARM 中断控制器, p/ r3 N8 U9 f# \/ s  m& X" Y
        IntAINTCInit();0 ]4 E2 Y, ~; {7 ]3 K6 o

  M# ?( Q' x+ V3 P( c% t* f        // 使能 IRQ(CPSR)2 H) n/ t/ E: \" w( L( U/ C
        IntMasterIRQEnable();
+ Q1 o2 c0 l3 J+ P
% [; h9 c0 i1 ~# e7 y' b- e2 ]        // 使能中断(AINTC GER)- q& a1 H% Q" V- Y- n$ A; n. o* j; n
        IntGlobalEnable();
6 {* d4 Y" z2 H" K2 i. g/ |4 m* D7 v! G
        // 使能中断(AINTC HIER)" T( I- o9 A) h& r
        IntIRQEnable();7 d( j+ q5 ]/ z
}1 ~* M6 W" i9 v( @! F% f& c
6 D* N1 [% n1 F/ I
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
7 ~8 K  z) h1 s9 W6 s( J/*                                                                          */
0 G$ e% [' h6 s/*              中断服务函数                                                */
/ L! ?$ O& u7 W" Z; I/*                                                                          */' _, e! N2 N. S$ g
/****************************************************************************/
( f6 E  _% F# j! fvoid PWMEventIsr(void)
7 Y! q2 n* F1 u" W{
" r+ m0 K4 C2 G. g        IntSystemStatusClear(SYS_INT_EHRPWM1);8 v& y2 D9 F7 h

+ f) Y5 U2 m- i7 w5 s# x+ I  K    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);2 H& B+ G( V) F+ p9 t9 k# Z  P
}0 x! u" R# [* k" s# `" Z3 P" M

+ i- g  ^9 [6 n' dvoid PWMTZIsr(void)% ]+ u/ c; S: N( r2 b- o, [. @
{
8 |6 h. w. n3 V7 F: [  C# E        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);+ K3 V$ C( o$ U& O8 w- V( E2 n

9 n* r5 M7 y3 F$ ]    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);+ G; u- K$ r" D; ]5 S" Y  C
}; c$ j1 {* e% }$ U
/ ~4 l1 H. u9 n' O9 A- }6 ?
/****************************************************************************/& C; O  B* S7 H+ J( j$ _5 ~
/*                                                                          */- e, _' n0 L) ^5 w6 h
/*              初始化捕获模块                                              */5 }: b+ y  y0 _
/*                                                                          */6 d+ O  Q( r% v3 w
/****************************************************************************/0 ^7 W( ]4 @% s8 g
void ECAPInit(void)! M, L* p! {; g5 \
{, L3 _/ K6 G) ]8 I% g% T* D+ c: q
        /*-----设置 ECCTL1-----*/
$ H" I( g. b% R        // 使能CAP寄存器装载
4 S  b3 l% S3 J- D( l- Q9 }3 {. X        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
; b# b2 y/ `! K: i5 b& U6 X        // 设置预分频值.; ?: z. U$ m4 j" i: R" K. [$ a
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);! x0 }5 g- y4 r# N/ a& b
        // 上升沿触发捕获事件
' R+ q5 `- Y2 Z* d1 E6 u) O        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
7 \# d0 [  \9 |" @4 D8 R" u7 |        // 输入捕获后重新装载计数器值.
! i- R8 ?" e/ o' e: c5 K* H; T        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);) l+ W- l9 n5 b. S0 G0 u
- a9 @& [1 p! t) q3 L) k
        /*-----设置 ECCTL2-----*/
$ l8 W  v) n8 p( J6 f2 v7 ?) {        // 连续模式
8 e: n, s- R( B1 }" v' b        ECAPContinousModeConfig(SOC_ECAP_2_REGS);) u7 N* a$ A3 _; ^/ s
        // ECAP计数器TSCTR持续计数' A# p8 p1 @4 l7 S
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);  c$ F; ~2 j5 `# U* G; c
        // 禁用同步输出和同步输入3 E& z  p! P4 F7 u
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
  N( ^) {* y6 v* L6 K5 _! _        // 配置 ECAP 2 为 CAPTURE 模式
" G6 c! M( u1 l# n) K8 j        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; @' S: D  I/ V. I& a  E
* W+ c( d6 h( l; k5 ~* |        // 使能中断# n- K4 `' A4 K; z9 m+ J5 M
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
; Q0 _5 x" U1 F% @1 d}5 T7 t7 b5 |( F+ p, O
, Y. C0 q0 B+ g
/****************************************************************************/* _- N$ o% t4 d) o) W2 B
/*                                                                          */
/ \7 k% f# E0 A: F/*              取得捕获结果                                                */
- D2 E* {7 G$ [/*                                                                          */7 q0 w2 v' b/ M& G+ n
/****************************************************************************/
+ ^0 |2 Q' J& u) L/ Y8 ~unsigned int ECAPRead(void)
/ Q4 W. F) f; r+ E. y8 x- A3 q{
- V) T( [% p) g7 d8 O, C        unsigned int capvalue;! w2 z6 Y5 \1 M3 K1 R0 K
        unsigned long frequency;
8 z4 L1 Z3 N! y0 w, D# ^
0 s2 E  f( P( Q        // Event1 中断标志
* b* A; n( F  K: L( i        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))8 q  l7 j- y  R7 X% n) D" }+ [
        {  j5 w) ~# U9 u/ z+ c* l
                // 取得捕获计数, h9 f' k8 ]4 L+ y  i
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
0 n0 U. P5 x1 Q) X                capvalue = ECAPResult.cap1;
+ R% U7 z3 y7 g9 k; T" y
2 k4 C2 Z! q+ [& n3 ~2 G                // CAPTRUE 模块 228M 时钟主频3 M$ f8 }1 A4 Z8 C' B. q
                frequency  =  228000000/capvalue;
8 P- ?; F; G% N                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
. p; c# H& k. `7 D: C9 k- e6 Z: z: K) g+ Q% p0 u
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);2 z1 ^( K( s' Q; {  L$ Q
//                IntEventClear(SYS_INT_ECAP2);3 l$ @* D( h7 H% [# x; Q( A0 r
        }
. c) r2 l5 e" d# D- W: H7 h/ o        return frequency;
9 E0 v" c2 |3 i2 T- Q9 }& F}
$ Q9 \+ ~  @( e& ~8 b" _
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
2 o0 @7 a0 i, D% f

本帖子中包含更多资源

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

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, 2026-2-21 21:28 , Processed in 0.046736 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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