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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/: E8 j- M0 H# |3 R# o8 X
/*                                                                          */6 Q/ v. ^2 n& I( \
/*              宏定义                                                      */$ V+ H- b  ?! Z" Y! M$ a; t
/*                                                                          */8 }. x- r7 B8 @. A9 {) f' t
/****************************************************************************/4 s, h. m5 h5 _/ B" C4 a
// 软件断点
5 F. d* j# g: ^/ q9 o#define SW_BREAKPOINT     asm(" SWBP 0 ");
+ p% g' }7 f" j/ |8 b
/ y, Q3 s" h. e0 i4 n: S( Q8 Y// 时钟分频
; q+ {0 Q. j, D2 T8 }#define CLOCK_DIV_VAL     228
" r* E* c( }) P8 P8 U
# ]- y' [) L( `8 w. ?% F' @/****************************************************************************/$ a! _. S+ C2 O% S+ }$ e5 X2 V+ L
/*                                                                          */% O/ u1 F5 H/ s
/*              全局变量                                                    */
; b1 W& W, J% x$ j# D8 |$ ?/*                                                                          */
" n) a' l& v, F8 v: G/****************************************************************************// p2 s$ M  J4 z/ m+ o
ECAPCONTEXT ECAPResult;2 O$ Z$ H7 Q  u# A# l$ q
9 z8 t( g# F1 ^0 P, J% A- F
/****************************************************************************/
5 [- ^' c3 R2 y* R/*                                                                          */
! s$ K% o& V9 z+ y/*              函数声明                                                    */
8 f" o# A) n4 m3 u/*                                                                          */
' D3 i. t) T' u3 A" N9 x/****************************************************************************/
6 _5 I, Z  g5 e6 t// 外设使能配置  |6 J/ N8 P# }5 c
void PSCInit(void);" _- l/ N8 d7 x5 M# O) z

& K7 q* u* ^  A, `2 r, P1 X// GPIO 管脚复用配置
0 }$ E) g6 N+ [( F/ d5 n" C; I  t4 Dvoid GPIOBankPinMuxSet();, k# ~. U. y8 K9 V, z

6 {; L) s  E! m$ w2 {& u, E// 产生波形
* T: c4 t6 ?, T1 B+ N0 u$ Tvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);5 _2 F1 n# h7 o# p! j
void ChopperWaveform(void);
# i- E  i4 G, Y* J& ^  i0 K1 a! S+ G5 U5 G8 E4 \
// ECAP初始化和读函数
5 p4 W$ Z+ ~: K: E6 ~void ECAPInit(void);
1 X) f! W2 ^+ g7 T$ V8 \( D$ ]unsigned int ECAPRead(void);7 L" ?6 L* @. P+ K$ a/ x
- Q# ]8 }, y8 P! ~$ o
//ARM 中断初始化% Y8 ^3 w* x9 f2 K& ?3 N
void InterruptInit(void);6 n, S( t! s# Y8 P& ?
. \1 [, U! O( F8 L5 ]' V$ X
// PWM 中断初始化
9 L- L. X2 o' s- nvoid PWMInterruptInit(void);2 M1 J8 `* C7 J" N' G2 {5 i# I
// 中断服务函数2 D8 `. D( L. r, I; ?3 w# W4 P
// PWM 事件
' ~( P, u/ n  ovoid PWMEventIsr(void);2 E# y! C8 \, Y: d
// PWM 错误控制事件. X/ l( h% x1 J$ g" }" }
void PWMTZIsr(void);
& _# F$ i7 M. U. A- s9 C& Y/ w$ b( n- }3 z3 U! ^
/****************************************************************************/
" Z( E; D! F+ h, ]3 H$ h/*                                                                          */
4 A" G  t, l6 S. H$ U+ G' A/*              主函数                                                      */0 M* C$ |! _, E
/*                                                                          */
6 e" g$ ~% I# y4 R* }" ^- M) T/****************************************************************************/4 T, |* \% L0 R# h. Y0 w; p
int main(void)" d) B6 n1 e' N) Z
{
; i+ b5 y1 s. }  r% i9 E9 G        // 外设使能配置
3 j7 D' U9 @! J0 n: @, i! Z        PSCInit();
( J! v9 P! C& Q  t
! e; y. Q- I1 w5 B! ]4 ^        // 初始化串口终端 使用串口2
5 Z  K, _( l) B6 e% e( q        UARTStdioInit();
; Z& ~1 m7 S% ^! b1 @        $ ^. F& V# ^, h2 z7 q* y: d
        // GPIO 管脚复用配置1 ^/ D4 l% _/ ?2 Q
        GPIOBankPinMuxSet();
+ R  A9 h/ H3 Y" }* Q+ H
7 T& e+ W4 V5 Q7 ?' m        // ARM 中断初始化
! A. _! \9 l( t) @5 d2 ]        InterruptInit();3 ~; z$ ]5 W; `) n# f

4 Z% c, T# P/ U7 a6 S        // PWM 中断初始化
8 e) ^# p7 y  x: M" a* y. W# s9 M3 V        PWMInterruptInit();5 a2 {9 t; }$ V4 s

( e& o/ G0 x, w/ O! U        unsigned char i;8 c3 M, d5 \; `9 S3 j8 H
        unsigned int j;
3 D6 e- w7 k2 e2 M  Z. |" f0 ^3 A* F& ~; B% j% [+ ~
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);% Y' n" r5 D3 [% M, E" v
        UARTPuts("------------------------------------------------------------\r\n", -1);
; @6 K% E$ \# D5 [3 W4 g% _$ X        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);6 s) \3 L& L# m8 P, H8 W
        // 产生波形; x4 v/ s6 v7 ^! d( v6 C! F
        PWM1ABasic(25000,50);" Z9 a. t! P# r/ f
2 A/ r+ y+ a% t4 l& c  B
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
, d/ L- s3 h. v4 z7 r. G4 g% z2 l6 X        UARTPuts("------------------------------------------------------------\r\n", -1);
7 U$ w* h0 l2 W7 V) B  g) k  b1 c5 ]) ~# M* V8 J

" k. ~( f9 U2 M& H2 ~' y8 m6 [
6 e6 \* `0 N! g* Q* i, w+ K        UARTPuts("------------------------------------------------------------\r\n", -1);
+ \  F6 J7 N, |. v" F        UARTPuts("                    C6748 ECAP Test\r\n", -1);
8 e; i2 ^! m( }! m+ y& |3 c        // ECAP 捕获初始化2 o; Y$ |+ L0 @5 V* R5 U# H
        ECAPInit();1 ?& q- ~6 I% h, t: y
        UARTPuts("Initialize ECAP.......\r\n",-1);. S) p/ f% s7 \$ o$ J
        for(i=0;i<5;i++)
; O" u$ ?7 l) x0 I4 v        {
5 x6 f$ U7 j4 k8 o5 p; R0 B- c( f                    for(j=0x00FFFFFF;j>0;j--);            // 延时
8 W' X  P" ?2 `8 u% z' ?4 u8 m                    ECAPRead();: X1 V. b9 m( {& f
        }
* q" |- }- n( ]1 H" ^        UARTPuts("\r\n",-1);
( G3 N& G' [2 |# m: I        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
; c7 ]3 |% G& u1 m% i3 g. o        UARTPuts("------------------------------------------------------------\r\n", -1);
1 x+ H7 E4 j1 I+ e. H$ Z. }% c/ `8 \4 r: B' M5 r# m7 T6 ?
        // 主循环
/ t8 j  i, Q9 R7 r/ [, T5 u        for(;;)- l8 n2 D1 E  N5 I7 |$ _: Y" A
        {
( B# ]* N! w, |8 U/ C. J
; N2 s/ l  I) c3 J# D        }
* F) @# N/ F7 J6 [+ H4 S/ N# D}
/ |/ y. A3 {0 p6 N8 O, X7 F" _" [( e" V/ g9 H' k
/****************************************************************************/8 U3 w2 F  X1 c! B, ]
/*                                                                          */5 q" x8 u2 o' t5 e7 B0 _, e6 m
/*              PSC 初始化                                                  */
: a  X) ~7 \. Y1 l; f  |/*                                                                          */2 y7 i6 d" F0 z# J2 s- i
/****************************************************************************/9 }! Y9 O1 X4 e! r9 E3 r
void PSCInit(void)
6 e+ x8 ]2 d" T# e{
; L( }5 m; ]6 K) V$ |        // 使能  EHRPWM 和 ECAP 模块7 j- [& N  \6 h
        // 对相应外设模块的使能也可以在 BootLoader 中完成& q+ M2 ?# ^, ]
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
5 L+ o5 h" P9 V  [: ^    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% B4 {* y6 K1 x, n/ W0 S}& X9 R4 n% L. |8 z7 A7 m8 y% u8 }

- ~  j$ n- ?1 S4 B1 _% y/****************************************************************************/
/ C" G; e4 n3 x$ k5 I4 E- ^/*                                                                          */& l) V7 r  z* p; t& N$ P% w
/*              GPIO 管脚复用配置                                           */
7 v: G2 G5 m. Z4 [' J' [3 G5 L/*                                                                          */4 M/ ~6 \0 m3 C$ ~' R/ d3 m
/****************************************************************************/
+ l* e+ A! h* Hvoid GPIOBankPinMuxSet(void)4 ]3 q0 B) U: z
{
- E! m& M( I; O/ [1 C2 }        EHRPWM1PinMuxSetup();
0 ?1 G% @1 \/ }* H3 a8 R
2 x, K6 V( S2 j        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)& V. j, A9 e5 S
        // 作为捕获功能时管脚方向为输入3 W, b5 u9 `: E. u
        // 作为辅助脉宽调制时管脚方向为输出
- e5 f. ?6 _9 z: K    // ECAP2 / APWM2
4 f9 W2 x2 x( c7 \" ]+ Q. g9 |" k; p        ECAPPinMuxSetup(2);
) c6 o" X" a# J7 M
  I  R: V) g& _# p* F, j; }# a        // ECAP2 / APWM2方向设置为输入6 n2 ?( I5 R% W7 t2 s0 G* M4 Z  k
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]  F( s4 O8 M- x& z
}
3 N0 k9 z3 Z: ?+ P1 r* c
+ k! j6 q) b. l; K: H' T/ {7 d* M' m$ g/****************************************************************************/( A: R8 _! c0 {/ J9 d  l9 J
/*                                                                          */4 J1 u. k. J) E& \
/*              PWM 输出波形                                                */2 r$ n: M. o9 f
/*                                                                          */
8 i( }4 U% l& P; Y' D$ E# Y/****************************************************************************/
; C4 H, d4 E, ]$ Z+ yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
; O. W0 P: M! |! d1 N{
1 f1 W) A' o5 q. }, o    // 时间基准配置
$ G8 v9 V: q1 [( T$ R    // 时钟配置
/ }  K8 T% m1 |3 R: b, k    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
' G. l2 v9 o" d6 E3 U, H. A3 y3 [% r
    // 配置周期9 O  Q7 Z3 w! L2 L( V
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,4 ~# _2 \) {$ e( U4 J  s4 M
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);, q, _7 u8 N8 m0 U
( h. ~8 r, e6 U
    // 禁用输入同步信号8 w& K; b# U9 r
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
+ H+ E$ P/ P- @" f. g1 c( X9 B+ b* ^
    // 禁用输出同步信号) S; I5 o) R. T9 d
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
! t: Z) J" ~8 ]3 l, K/ K6 T" ~3 [8 u) j
    // 仿真(DEBUG)模式行为配置
* E! X( P7 q( ]  }5 t    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);' a8 b1 |7 [  G/ Q; u$ v

, h$ U, l6 i3 |5 J% c! {    // 配置计数比较器子模块$ J6 O( z, C3 z! ]5 n+ U- \* i4 p9 o
    // 加载比较器 A 值3 p8 v9 J; Z8 R
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,* l1 b! C) g. n2 c# _  y
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);8 }) _# l' Z! g  Q* Y8 k

% H: m( F$ N& j! j9 Z- m" e, Y    // 加载比较器 B 值
1 I9 R! x* b; }$ G. h    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
' c. a4 p- r8 s1 b' e' y, g& \                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
+ [) B, S# U5 Y1 E
) H: U# l8 r8 k( `( |- I    // 功能限定配置(输出引脚触发方式设定)
) }- m* l' _/ M    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
4 \1 g( z8 g# G; j! A4 F    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,8 B* c% b# \4 `1 S( S; S
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,! U/ Y* `0 N3 S1 t) O) G5 e
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
: Z( L5 k7 v5 w7 A! v+ w6 w
% g; K- i1 B1 V, s- i    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
; j0 B7 B, y7 I+ G. I    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);0 v# [) ?+ }% \

( K; w* T) ?, h7 e0 x+ E* I    // 禁用斩波子模块
, n- H% {7 N. t    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);# |0 ]7 w# a0 q2 k. N
! k6 {8 p" P' ?4 B9 c; w3 w5 |
    // 禁用错误控制事件$ F& m/ S) A" m6 i4 k# H  U8 P
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);7 h2 Y& N3 l& ], Y) c
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
$ v. C$ P: L, }* }5 |# L3 i
" Q; g! y6 f* S    // 事件触发配置) w* B! T6 C# m0 O
    // 每三次事件发生产生中断
; W3 c# H0 M7 b* X0 s. u    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
' ?% b0 Y9 W! E' y8 j- Z" z    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
9 M: K$ k$ v# x5 x1 K/ B: c; D    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
( C: V  ]3 T+ B+ E    // 使能中断
# w/ I# V5 ?  P& D) w8 P" }    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
" P: x# @( |: G" o2 d1 Y: Y  ?, G' N2 `
    // 禁用高精度子模块
. @) q( m0 e; @" a) a4 ^$ G    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);6 Q! {4 p0 \& @1 f
- Y; l" b0 K  G- M9 B& k  m. J% m
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);0 f8 ?* J$ O" S+ d
}
: H& u/ I- P2 _: Q
- v! |3 w: M& y7 n4 T9 r& a( J; lvoid ChopperWaveform(void)
. ^& S5 W! o* F4 Q, q{" A6 }/ Z+ e6 Y* v
    // 50% 占空比* \, J4 E1 l+ X0 M
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);! h8 q3 F' ^% i9 o
    // 4 分频3 s" A- `9 W8 ^7 o. P9 p8 B
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);6 Q; M. B' A4 ^4 O, J
    // 单个脉冲宽度
$ W  g7 M1 J5 I4 l6 ]& E    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);) F4 s* @/ Y( l" ?  p4 z
    // 使能斩波子模块
( m$ |: W6 D. ?& t    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
! [7 u# J6 e/ b, a" p}
( Q/ `* W4 G2 I; I% c! \# t6 t9 G! k3 e9 t6 U# s# @  c/ `3 b& o
/****************************************************************************/
* [1 n' l. j) `7 s6 Y/*                                                                          */
" Z+ q/ p. G6 V9 _7 g/ x$ Q/*              PWM 中断初始化                                              *// |/ L0 {$ g" I4 @2 q
/*                                                                          */. z4 S' Z* i; Z- M
/****************************************************************************/
' u7 B& U+ Q6 c. }/ Fvoid PWMInterruptInit(void)" `0 ^. z1 P; C8 ?# [
{
. }3 t. P9 i2 w9 U1 X( ]3 W        // 注册中断服务函数
1 M! R2 V# S, i& Z' o        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);, r3 s& o0 \8 t+ y) b9 D" P
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);9 R+ M4 `5 H. m% \2 W; ?! g

- Q6 F( e# A# s6 I        // 映射中断- P1 q# \# B& g- }
        IntChannelSet(SYS_INT_EHRPWM1, 2);
# R/ ^- H2 H, H( w        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
/ X8 N# M3 ~, |8 X9 x# X5 q' B/ e# M
        // 使能中断5 ?5 j9 g' E- b- [/ J
        IntSystemEnable(SYS_INT_EHRPWM1);1 D, n& S% h1 a
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
; q+ A9 F+ n& m! v( u6 L}2 K# r! j. u- N9 q
+ @5 G7 c, Y; X' z: X, x
/****************************************************************************/
2 F- \. \$ L8 `/ ]/*                                                                          */: Q+ z9 N, E0 k  B- {
/*              ARM 中断初始化                                              */5 l% `3 Y. Q1 i7 [: W
/*                                                                          */% I+ e: A3 k" i9 r( E9 m
/****************************************************************************/* N! U9 N/ f3 p
void InterruptInit(void)
& g- Z* [1 J% r. G{
9 {1 t7 [  H& }" d$ R        // 初始化 ARM 中断控制器
7 `0 }2 d; o: V  ?" R        IntAINTCInit();
5 D- D2 Y8 e# o6 I# T3 t0 B* J  @5 r) u+ J
        // 使能 IRQ(CPSR)
$ G; e' f+ R' r& @' H. Z        IntMasterIRQEnable();3 m" c  O/ ^0 E6 P& _

0 B1 F( H2 |1 H( D; T        // 使能中断(AINTC GER)2 t, Q9 w( m4 h5 E5 F. e
        IntGlobalEnable();3 g7 u: ]* M, G. j- H, S
& ]0 c( _1 M0 v$ _, T, p1 `; w/ w9 x6 o
        // 使能中断(AINTC HIER)% X/ B/ b4 y2 s/ }
        IntIRQEnable();
' G- q7 k0 e0 b1 c  k; j: ~6 _}
) I5 @. C, _6 d! K: r7 |+ z5 q, e  V' `$ t* C
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/1 y# m/ J2 @: k2 {
/*                                                                          */3 t7 U2 M8 B2 d- I& H. f+ Q
/*              中断服务函数                                                */
; [. W. Y" o/ _" f( _/*                                                                          */
+ E- }: u/ U# F4 e/****************************************************************************/
8 j3 j4 T$ Y) B# m4 i/ {" uvoid PWMEventIsr(void)
& }  h; q) p, R" {1 s{# N' |$ b; k+ X2 h
        IntSystemStatusClear(SYS_INT_EHRPWM1);# a5 y" Y; o$ `* g% m

( J9 p$ d1 H! U$ q3 }1 D( P6 V    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);- m1 p8 }  o1 y- n
}9 [$ Y( Y$ N3 ~

' C! ]4 j1 K- y4 u( a$ e) Q# q! @void PWMTZIsr(void)! l) s) _. @) S5 _, ?
{
8 ]. b6 F; L1 n  a  h' z        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);" Y, J% v' k! f5 v' ~( [2 S( M

8 X( ~& M# \0 o. i  H+ @4 K    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. T6 F% Q, A: \" [}
( N0 Y# i6 q4 u/ k& Z$ w9 I3 L4 l+ N/ |
/****************************************************************************/5 c& P9 t1 ?3 F2 b) F2 d: |
/*                                                                          */
$ y4 }5 Z2 _1 A0 r/ C0 }% O* |/*              初始化捕获模块                                              */
% E% o  t. U6 S9 ~/*                                                                          */  g  Z. z6 j3 q/ W7 l0 N
/****************************************************************************/5 d1 M' U$ \) s4 e) q7 h, |) `5 w
void ECAPInit(void)# v0 ]7 `& U; G. v- w
{! r  |* \! Q4 k7 D9 e* ?- N+ b6 G0 S, _
        /*-----设置 ECCTL1-----*/
8 c7 P1 E4 w) N  m+ g        // 使能CAP寄存器装载( r8 Z  }% z8 t! J# H
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);0 k6 q; ~+ K9 Y4 K* k
        // 设置预分频值.
1 {* s6 U; Y7 H9 I        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
) x: F$ ?7 V$ t9 q. a5 s        // 上升沿触发捕获事件
4 B! S; c0 e: K& b, T1 o        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);9 V) V$ j) o. l! j. z
        // 输入捕获后重新装载计数器值.& y- k0 w5 c: x  Z
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
0 M' ^6 l$ ?6 j4 l
# [% A: A1 N4 ?: t  y4 v2 d, r& o( q        /*-----设置 ECCTL2-----*/
  t/ j+ Z( q# k5 K7 J$ ?        // 连续模式- B( I9 Z8 R! i. p$ u
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);: A2 A" r# }. t+ E. }5 P1 s; q
        // ECAP计数器TSCTR持续计数
2 r" |5 ^! P' {* _, S4 T* a        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);! E7 G) z/ I3 U) x* m5 U
        // 禁用同步输出和同步输入
( o4 ]* t. q6 {# |5 W( M        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
& P) K7 ^' c* y9 p9 x* X        // 配置 ECAP 2 为 CAPTURE 模式. Q. d' I; p$ n- R" ^* L% ]
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
3 I& \3 X1 N8 }
. r0 f! N; x3 W/ F        // 使能中断
2 I( F( K/ m0 Z5 l, T8 U//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
+ I7 w) s6 I1 Z# |+ G# t}4 @( y1 n( {: w- ?) Y+ ^
3 N3 j9 g. ^3 E0 Z+ t! i
/****************************************************************************/
7 E/ Q) G+ U! ?7 h" u/*                                                                          */7 C9 [+ b  U+ `9 J
/*              取得捕获结果                                                */+ s$ ^! o7 y$ ^6 p
/*                                                                          */
- \+ X+ N  e2 c8 c* C0 ?6 H9 P5 E. H/****************************************************************************/
% D6 _$ m: m9 T3 T* l) g& Q, g1 I; Kunsigned int ECAPRead(void)
  d. j, W& J( @) r{' x/ M3 w8 W4 {/ C/ C
        unsigned int capvalue;
6 x/ Y1 j: Y$ u* J; u        unsigned long frequency;( M5 u: d& X& S1 ?

: o$ U5 Z3 K  k, F        // Event1 中断标志
# {4 {- r  [+ i) C; a  e) l$ L        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))6 g& N9 H" F) }
        {
) Y- q8 c  V2 ~$ E                // 取得捕获计数
4 U5 E. {5 t# o4 D6 d                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
3 O* m/ C2 T6 v! ~% B; h                capvalue = ECAPResult.cap1;
/ f0 r1 V$ g6 K! ]0 o) o9 j# J8 J- Y, B
                // CAPTRUE 模块 228M 时钟主频
1 w8 l! }  ^  ^5 J9 j7 I! }  L                frequency  =  228000000/capvalue;9 L4 j5 l! M8 m" \6 }
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);0 R! X0 h& J: `# K

  _4 F5 L2 {4 T( x; J                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
4 m9 R3 ]6 u) x9 h//                IntEventClear(SYS_INT_ECAP2);
1 i/ [( \1 D- w- j( d8 [7 F" a9 D        }: n# e9 A( a9 z" g: ?" k
        return frequency;3 l8 {7 o' P& v7 x
}- w$ t. j$ D  j3 D- R3 r) P
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
) ^$ z" }. G5 a' V

本帖子中包含更多资源

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

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-3-3 06:57 , Processed in 0.047703 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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