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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/, P0 w) B9 z" |$ P' ^$ a
/*                                                                          */
7 k6 ?" f9 s+ w  G8 b  F8 o/*              宏定义                                                      */
7 A1 |5 M8 |3 V/*                                                                          */1 U7 Q9 T, c% n6 m1 u/ s. @
/****************************************************************************/% [  W7 N' h+ v/ c, s
// 软件断点
( z  o0 {* m+ m4 q  i#define SW_BREAKPOINT     asm(" SWBP 0 ");7 `8 V- }9 I/ v; e
' |& O1 j2 J/ s5 C, v" m) b
// 时钟分频
& s8 r3 _4 r$ I' @#define CLOCK_DIV_VAL     228
5 {, f! w* ^/ d2 s+ M5 O8 r
! R4 P$ b6 v. S/ |0 E: b/****************************************************************************/
4 m4 E* x3 A" H5 e3 t0 a# e/*                                                                          */9 i( s( I! t! X2 j+ P7 d) P
/*              全局变量                                                    */, v. _9 z* j  @2 E1 _9 X+ g! l) b) g
/*                                                                          */8 O; u7 {4 B4 @) e
/****************************************************************************/9 J) j/ _# S" o7 V9 o" C% w
ECAPCONTEXT ECAPResult;
& \6 ?, h. `# m! C$ Q0 R0 O  n' b: O* Y% Q0 z
/****************************************************************************/
$ W: J5 _( T- O1 h/*                                                                          */
& `0 E4 u! I- _1 @( c& g/ l( l/*              函数声明                                                    */
8 y4 F$ o. ]+ r% g8 _/ V5 Z/*                                                                          */  d; S2 B# g# b3 {( P7 d# {, k) U
/****************************************************************************/1 Q' U. M+ R9 n) p" ?
// 外设使能配置" c+ X# ~1 K3 S7 f4 j2 _
void PSCInit(void);
0 R7 ~% t: u$ Z1 I1 s$ [7 i7 u7 L5 `- K) J2 o4 n+ ?) L
// GPIO 管脚复用配置
3 h4 Q8 z; _! `% e% `; H7 ~  Avoid GPIOBankPinMuxSet();
( @0 x" G6 J1 e. `# R
+ y+ o7 L/ g: i% x! G// 产生波形1 X" v2 v7 p/ |9 Q# O* p- |
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
  e& i# w+ S3 s# u; a8 v, dvoid ChopperWaveform(void);# V4 m7 R4 V( W  |, a& j2 u$ e* V
9 @. [. t# R8 B& A2 J% r0 b6 L& T2 ~
// ECAP初始化和读函数
, E  B+ H$ f( F8 gvoid ECAPInit(void);
# Q, s- T3 q' _- U: Funsigned int ECAPRead(void);0 m# b7 R0 I8 _3 [

; [! c& V4 L( D1 r8 Y% E$ i" A, ~//ARM 中断初始化9 ]3 [6 u; X) ^$ a- O. Q) w0 D( G
void InterruptInit(void);
; q& l9 ]  i" p$ ]/ G) [  [* ?! o+ F( @! B" F
// PWM 中断初始化
. W1 p1 V2 ~6 pvoid PWMInterruptInit(void);
! w5 p8 M3 {5 X// 中断服务函数* q4 f9 }( e: e6 }+ v
// PWM 事件$ {1 d! e: H' D! U9 g$ w. D( |
void PWMEventIsr(void);5 o2 s2 s7 f6 x2 F- a% F3 c
// PWM 错误控制事件, N) ]5 T0 @7 f- L: d% {
void PWMTZIsr(void);7 q+ V  y4 z& ~# C
/ w+ a/ r# ]3 r1 g! S
/****************************************************************************/
" L0 e* p7 m+ B9 L/*                                                                          *// R/ E1 {% L  ^# X' h. G
/*              主函数                                                      */' P9 j" f% w: U" L3 D9 J3 e+ |
/*                                                                          */
8 I1 W2 Q% f  b7 V/****************************************************************************/) }* S1 o$ t2 \3 \
int main(void)! a( J% M8 g  A0 s. q- H! \( T2 b
{7 H- C4 @9 _+ |$ {. z& M& @; g' @
        // 外设使能配置, h# n/ i- Z) b& _
        PSCInit();  H* ]' f7 ^7 d0 {* j9 Q
- }. }5 v1 m2 v) {3 r4 n0 }+ i& W5 `
        // 初始化串口终端 使用串口2
, ^: k% t) h1 T- f) c# l        UARTStdioInit();
# Y7 c7 K7 k; v. w  l       
. @( O  J+ N7 }- s- ~4 k6 ^% z6 A        // GPIO 管脚复用配置
6 @4 v  R  ]# g* Z5 Y        GPIOBankPinMuxSet();4 C1 X5 V0 C" T' Z
$ @& Z% S, R/ Q  _
        // ARM 中断初始化
# D5 S( h" c6 m9 m$ f, E        InterruptInit();! @7 G* o, S; a2 ?  m3 W( P

* d6 `7 P* W+ g: Q        // PWM 中断初始化
/ {' H5 m8 q# g3 ]3 p        PWMInterruptInit();( I% B! D3 d" W# X5 |9 I2 |* \
! W4 m0 F, m- b, j
        unsigned char i;
# V  U- Z" f' K+ B# D) p3 Z        unsigned int j;
3 x7 _" }1 Z: Q$ ^8 M9 I4 r
$ a7 I, i1 G0 D5 ^. w        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 ~. F3 M) J9 l, c2 _, U        UARTPuts("------------------------------------------------------------\r\n", -1);; J6 r8 k/ Z) ]
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);/ ~/ [  H9 R0 f4 L0 q( }
        // 产生波形
, c0 _0 O+ m3 o. u        PWM1ABasic(25000,50);
- T; d+ B% X, @( x8 t+ H7 v
$ o1 b0 \. e9 U        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);7 ]* U3 Z' h: M) ]8 a+ j
        UARTPuts("------------------------------------------------------------\r\n", -1);
" P" F; Y+ w5 A5 N
) Y* E+ P  o5 l( P$ C7 Y5 M* X8 Q. m1 K6 Q6 _3 s, p" X! i0 N& T
% L- A& L3 f* H. I
        UARTPuts("------------------------------------------------------------\r\n", -1);  o$ R+ w8 u, k) K% B8 u( z
        UARTPuts("                    C6748 ECAP Test\r\n", -1);+ n7 R' Z4 M- @$ F& s6 c
        // ECAP 捕获初始化
7 n; b, s4 M$ p" m; W" A7 s! U* t        ECAPInit();- o8 \! f& F1 W4 m
        UARTPuts("Initialize ECAP.......\r\n",-1);
5 ?& C& w+ ?3 T# f  x$ ~2 L        for(i=0;i<5;i++)1 H- E  X/ C+ G# a2 d9 {
        {! j, p! z# o9 u5 m3 o( P  z
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
; T* T. g5 j6 [' {5 ~9 Z                    ECAPRead();
' M! b+ R5 v8 S' b+ h* v        }/ O' F) ]& ?' o) d; z
        UARTPuts("\r\n",-1);; F1 l- D( O3 _3 t$ G" t# U7 P( V
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
- A* H8 p, @7 o) |9 l        UARTPuts("------------------------------------------------------------\r\n", -1);" H7 o2 y1 p0 A* d2 Y
. l, \& a" E& u5 _1 s( M$ {
        // 主循环: W0 e1 ~+ _6 @
        for(;;)" n! G* H8 d* C# }" Z+ Q8 g5 O
        {1 r" X! c9 \# R: Q

# d8 E4 ?/ K' Q  T- _        }+ i6 n$ y* o# P; n! }0 l
}' G9 U. K& v6 P& R; S
' O# R/ T" U5 z6 N% ^! g
/****************************************************************************/4 q* I7 r1 j- V6 W% a
/*                                                                          */! t+ D8 I( l& H& P( H9 Z# s
/*              PSC 初始化                                                  */
( u4 N$ p6 U+ R2 e/*                                                                          */! w7 L5 J7 Y* Y6 S& F" X
/****************************************************************************/, `7 v5 I: x) b& K
void PSCInit(void)4 O7 a' n$ Z: o, C
{1 g; t1 _& r" \1 `3 B
        // 使能  EHRPWM 和 ECAP 模块
+ W, ~0 t: V9 x2 E        // 对相应外设模块的使能也可以在 BootLoader 中完成
& P' K* k1 w0 Y9 O# Q# z$ Z4 O! `2 o( [    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( @5 R: y# I5 g' h8 O" W8 A
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);7 K9 G; z$ J9 T' y9 |8 o
}, J* S5 r# c$ U/ [5 j8 W

; U0 t  Y' z2 \) @# T0 }0 C/****************************************************************************/" @& g+ ?, e0 @' X
/*                                                                          */
6 S% x1 X1 N! N  `5 P( Y/*              GPIO 管脚复用配置                                           */
3 m$ Z: }7 ]; u& \0 n/*                                                                          */
: z/ I' u" P* H. I1 `$ c/****************************************************************************/
4 T7 P5 o+ e* F2 L* I4 A1 b1 qvoid GPIOBankPinMuxSet(void)2 b& K  }2 S% w, R
{
3 P# U, k( c6 D3 ~5 z- M        EHRPWM1PinMuxSetup();
& L- [7 Q% u- L3 ^0 Y6 ]& p- g& x9 p# P4 V& g
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
$ `# A5 E" t  N' {. E        // 作为捕获功能时管脚方向为输入- Y0 q% g2 K* M; K7 i9 V% c0 b7 `
        // 作为辅助脉宽调制时管脚方向为输出- F/ t0 s/ v2 y0 F" @! m
    // ECAP2 / APWM2
! t3 b8 U/ d- r3 ]        ECAPPinMuxSetup(2);$ ?6 z# M5 k/ m' ^& |9 x0 |

8 J- v( M: R1 p! q+ T* k5 S1 b$ S        // ECAP2 / APWM2方向设置为输入& ~# j4 p- O: p
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]0 {9 M5 b* H3 X& `+ B
}' L& J  Y7 ~: N. g7 X: w0 P
$ w/ |* @8 k# J2 r& M
/****************************************************************************/
9 B) w1 f. A$ R+ V: I' p/*                                                                          */
& n& ~9 m2 M6 s- N1 {2 {, y/*              PWM 输出波形                                                */
" J  M/ O) E* D* U# H/*                                                                          */
* x9 |( y* C' E9 Z  l/****************************************************************************/
- z* F) W0 Q! a/ P7 k9 yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)" I/ w5 }* H# ]. A) u& E4 V
{$ b% c* p2 l9 G- L
    // 时间基准配置# ~% x+ @7 {( k( m/ N
    // 时钟配置, v: s; Q; @  D
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
& C3 v" p  i, Z' {- u! X9 X) ^
3 _9 H9 P1 M, }7 _* z$ U3 p& |    // 配置周期) C" q' o- n6 l, l- b
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
4 S& \  X; ~, w- Z( H) r7 d                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
# m: @  T$ U8 d$ ]2 E, [' ~4 u" b% J
    // 禁用输入同步信号
5 g# k# o( d% D" ^9 y( B) p    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
0 _2 Q, C  ~7 ]% d" m* g
# e8 k! y  u' k  a$ H( y5 k" [    // 禁用输出同步信号7 k" d1 R, o4 `* Q* `
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);4 y8 h) M" `( L1 w! S
/ V0 m8 W( E# Y! r( [. p+ H6 o
    // 仿真(DEBUG)模式行为配置/ ^2 X( Z1 e" r) M  U; ?
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
- O) ]+ l1 Q6 i7 Z- u: G, h/ ~. V, Q9 w
    // 配置计数比较器子模块
1 u9 F2 K2 v* J+ @8 h. g# y    // 加载比较器 A 值
, A2 w  u: ~% V& D" E& j! ?. a% I    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
" |7 k2 T+ T: a8 q                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);5 I0 I8 B% r% P6 Y; }" c
, {5 F7 l5 z) G! v% D" V$ i* `. H
    // 加载比较器 B 值
: [+ D0 u; B& J# L3 u    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
/ T" _: x8 g# q) a' d2 |! Q                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);1 }! N- x+ J  a5 D) l
; A4 M6 e( y+ S% }; U
    // 功能限定配置(输出引脚触发方式设定); |6 H- Z9 G2 H
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
4 C# f3 E9 S, y, P* r/ x    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
5 ]/ i9 N2 v  q( c4 Q6 q. P9 G+ y                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
6 R1 r7 Z8 ]7 T; b9 q- M! W  r                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);! R3 i" `# U, T  m, P
9 W5 {. c% U$ D. Y1 o& y* t6 D8 f' U6 e
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
- I8 f4 Y( Z( ?, p    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
. h9 ]- e5 ]9 j0 h
; }# w% d, Q9 H& Z) E6 M" n    // 禁用斩波子模块
& F+ q* A0 {" K4 A6 l    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);+ M2 B4 P5 C& Q$ {/ S+ B% x  O: H

7 n2 _' N9 x1 F5 f- T    // 禁用错误控制事件
5 R1 G& E4 V$ U! R5 K. M    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);4 H* c( _4 Y' s) `* N8 a
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);3 I6 m8 t# V: [) C4 }" _( ~# b

& `- p/ Z- c& Y& @    // 事件触发配置' R" a% F+ m# C
    // 每三次事件发生产生中断; }7 |/ X7 v" m% q! A
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
0 P# A9 j. G, M& Z    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件' ?1 C2 h+ Y6 E# |
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);. T* E& y( o9 Q& `5 O
    // 使能中断5 |5 |3 @: E  n
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
8 O! W. v0 Z, {* s
) J5 C, s4 N5 T5 x9 x2 L: I    // 禁用高精度子模块. j5 Y- F$ ~0 ]; y
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);0 y$ H8 j2 S8 K2 H9 q5 U
6 P3 `) R0 U( y
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
; V+ S9 ?0 v% }}
: s: J7 n) S& N: w: ^4 h" ~5 }& _  d4 a
void ChopperWaveform(void)
& R4 M5 ~" ^  K( W" \, V6 P2 N, w{9 O* c' F8 ]1 ]; S  P  y/ k
    // 50% 占空比
4 J8 t9 n8 `( I9 P# r4 s    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
4 ^8 z! r2 t" a  F& E+ _5 W    // 4 分频
1 h( W5 c- T, V  L* k6 q    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);& V! Z7 r1 I. \6 O0 Z0 Z, ^
    // 单个脉冲宽度, q) Q/ y% \, Q- U% e* ]" I9 z
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);% X+ o; q, d* B. r+ T# z$ A
    // 使能斩波子模块3 l: ]/ ~1 n+ V7 a* m
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
, e! V: i" x) b# s5 ?. x1 O1 y% T}
* c/ ~6 `! `* U' ?
9 Q% u6 W+ T- ^1 C9 J& U/****************************************************************************/
1 r0 w9 D( M+ A7 ~/ Q/*                                                                          */; z" F/ k0 X/ H; s5 m1 u
/*              PWM 中断初始化                                              */* o$ q7 }5 Y) \. X  u
/*                                                                          */
# T; N8 L. n- V: ~/****************************************************************************/
4 T. y% [% H, Pvoid PWMInterruptInit(void)
4 n1 l' r+ A) v{% e+ p0 a1 ^2 f5 T
        // 注册中断服务函数' h- I6 f% [9 Z' a
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
6 N0 `  l3 ]( n' q3 _3 l7 C8 X        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);: C6 J* O8 b; b8 h4 V. R0 y
: n* b2 U8 i: B( Y5 V6 T( H3 T! g
        // 映射中断
, q* q2 H* I! u8 d, Y" D5 ^- @4 ~        IntChannelSet(SYS_INT_EHRPWM1, 2);
: [( M7 j" \0 `' f" K        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);3 y* o% @0 l& d! q' ]
+ p4 [% k. q$ b1 h
        // 使能中断. A2 [' f+ z; G- C/ `( T
        IntSystemEnable(SYS_INT_EHRPWM1);# q7 s* ~6 g: m/ f" q' c# k
        IntSystemEnable(SYS_INT_EHRPWM1TZ);9 n3 y2 \) M( U& z- z0 E
}
, L* Q: z* ]  p
1 s, M& }; {9 o+ }/****************************************************************************/
- d& p7 \0 e/ v; J) {( i$ F/ R7 H* a/*                                                                          */
" i0 P% T  ]. L/*              ARM 中断初始化                                              */
1 y  U% h% U: V' ]/*                                                                          */
4 l) M( B( c0 u+ ?/****************************************************************************/5 k* \; Y- W2 B( k- \
void InterruptInit(void)8 x" g: e' d* V  F( @
{( k3 T; w5 R8 {; }$ b% U
        // 初始化 ARM 中断控制器
1 R4 E4 c1 C% [! N# W( K2 a        IntAINTCInit();- ?8 Q1 S) h! P; V5 ~( ^

* g$ M2 `* y7 z! o  S4 @        // 使能 IRQ(CPSR)
- m7 `* l$ ^7 B, K. v        IntMasterIRQEnable();
) b  H& O$ J2 d. Y6 `' A! j, ~8 c
        // 使能中断(AINTC GER)' s# F. d1 t7 R9 ~7 @1 y
        IntGlobalEnable();
( x. C1 u' R0 n2 x/ ?  t; ]* d/ A
        // 使能中断(AINTC HIER)
7 P9 R" x/ y/ y* u( ~/ H4 X- Y5 U! y        IntIRQEnable();
- |; m2 K# U) @; V}
6 ^9 ~/ H' f6 Y) l: r! q1 r
: `! ^7 Q( G1 S2 [/ o
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
" C( z; Y( Q8 I) [8 N* @/*                                                                          */" Q  ^4 s8 B6 o/ k3 s
/*              中断服务函数                                                */
& e2 x3 l+ P1 |' V$ [$ i. |% f# i/*                                                                          */" b7 v; T6 B& t  d- y7 F% W5 N
/****************************************************************************/
; O/ H& i* B8 B* F9 S. a# [void PWMEventIsr(void). Z/ @7 R' |, E" ^9 c
{
+ n! N- H- i6 g* p4 [' r4 ]5 t        IntSystemStatusClear(SYS_INT_EHRPWM1);
  u* E4 P- H$ C1 O/ h' ~$ |& L2 j7 G+ x2 U, @3 P! ]5 ?
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
2 m0 k/ G, K: v) d  c2 w}2 u; h: G8 c8 Y5 j1 ^! l7 X1 \! S

' F/ a3 N7 Y7 w0 lvoid PWMTZIsr(void)
6 H. t- ]4 N6 d" \0 M8 }{
9 ~- B2 ?0 M9 J+ M' R        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);  H) V: E8 F' c! D$ N

; ]" Z1 ^, X; X9 m    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);5 r8 B0 _# D& B
}9 z; C& y5 C0 F! a6 ~# v
. o3 M; m9 z8 e+ \. ^! N$ y7 o3 }
/****************************************************************************/  O  P8 Z* O" f! ?& y' A
/*                                                                          */8 B5 f+ b  {  _  \) l: U8 o4 l
/*              初始化捕获模块                                              */
# v% a4 M3 P; z0 J/*                                                                          */
7 J4 y  o8 q5 C3 N/****************************************************************************/
6 A) `% U( K  q7 D: }! x: D3 q8 nvoid ECAPInit(void)
; L3 E  E+ Z7 d. N{
/ q# V, H# f3 k) X1 _5 y        /*-----设置 ECCTL1-----*/1 {; N6 R. u$ s, Z* Q
        // 使能CAP寄存器装载
; k5 `2 N/ a" E        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);! Q2 o% j- @+ B0 e
        // 设置预分频值.
" K" A$ G% }' O: W        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);. _, H7 b0 @$ ^& _# }
        // 上升沿触发捕获事件' P" q. `' l3 N+ W; O6 T
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
) i( i$ z  x9 f, Q        // 输入捕获后重新装载计数器值.
2 ]8 s* I1 _7 h% |* n3 h        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);7 f/ u; F. V& J
& W  d! A. e% O2 c4 |% m- ]
        /*-----设置 ECCTL2-----*/& u% ?2 v" F2 @
        // 连续模式; _. T* s5 c' B8 a
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
7 B9 N( ]% ]( v        // ECAP计数器TSCTR持续计数  z, ?6 C2 h5 q, b$ }
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);1 m: B* a7 _% k0 V
        // 禁用同步输出和同步输入2 k1 T. i' ?. L7 l" \/ O
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
. Q  h6 C# M% O% M; o1 d9 ?        // 配置 ECAP 2 为 CAPTURE 模式: I% T: {- b$ ~" _" E  n, n
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
: x5 Z1 n. i6 M) Y" U4 h2 A3 w" |& M. v: q7 u2 w  M
        // 使能中断7 V9 l! g) t9 `$ ^! y  _
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
6 p  N5 [8 k& k2 `, Z7 @}2 f0 ?7 F) q8 C3 j9 Q2 b
' a' l$ v/ q( y2 q3 }- f
/****************************************************************************/
7 d$ V6 V- i0 i" Z/*                                                                          */( |% x5 F8 |& v# \
/*              取得捕获结果                                                */
* \4 s3 [, W  t) F# `/*                                                                          */" A3 v8 i! |. X" \
/****************************************************************************/$ [3 C3 b& [3 O# Q, `
unsigned int ECAPRead(void)
7 {4 ?, X' F9 P+ J' j% l6 r{6 T6 R( }2 U' `! j' x6 }
        unsigned int capvalue;. {5 s: u! r2 o. v7 b
        unsigned long frequency;, R3 q, `: i1 V4 |

& _- \  U/ g% _! q7 v5 g        // Event1 中断标志
$ m+ ]$ F- |. {8 Z% i$ T        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))+ o7 O* v3 e) ^+ ^& ?; U
        {
& Q6 Q2 }+ \8 V( Z/ M& s                // 取得捕获计数
. a# K2 s) l8 f) I5 G* [3 Q                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
4 W% B! Y5 t; w' ~/ t) B                capvalue = ECAPResult.cap1;
& ^6 B3 A1 A, N2 M3 V6 h" z2 T0 J! C: E; E" h
                // CAPTRUE 模块 228M 时钟主频
% U6 x* W5 E9 h, Q& F' i, |( @                frequency  =  228000000/capvalue;$ Y, J7 f. c" ^: e
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
; h4 H5 D5 A, Z+ v0 B+ m. A- v* W! i& b9 K
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);" P1 ~0 Q8 X5 U) v6 H4 y
//                IntEventClear(SYS_INT_ECAP2);
* U/ g4 C: P1 L% B9 e( R        }; L  C- p' e0 ^% [* p
        return frequency;( T3 b4 A5 ^% E( w
}
* S& f( s; M: ~/ D2 L
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
" o  s( X0 X+ R1 l

本帖子中包含更多资源

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

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 08:55 , Processed in 0.052006 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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