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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************// U0 f3 Q5 z- ], [
/*                                                                          */
1 ^& E, U( A% Z/ Q. r9 A, p/*              宏定义                                                      */
0 T/ ?0 Z4 L7 ]* C5 _. [; m9 _8 E1 k/*                                                                          */( ^- _  f4 W9 c7 z% |. C
/****************************************************************************/
  M% a# F7 Y8 u$ ]% a0 s// 软件断点
* W4 w$ w; }# u7 N+ t#define SW_BREAKPOINT     asm(" SWBP 0 ");& X. o7 |* `5 F) e; f; M
* h$ h# m. B, j+ s. r* z6 p. X- [
// 时钟分频
3 _$ C# u+ R9 z' ]. X4 |6 T#define CLOCK_DIV_VAL     2288 k! g; ~" P4 y0 H1 J2 |. Y" f3 ?

8 }$ {2 I1 Z9 x/****************************************************************************/
+ d1 z% H0 }& M) s7 z% K/*                                                                          */
) n1 y/ x, o5 `9 |9 B& S/*              全局变量                                                    */
: X, B. k+ D6 R' P; y& M& _9 K* L# x/*                                                                          */
7 V8 L7 h! \$ Z. a5 J, E3 T/****************************************************************************/$ S! P5 A- ~6 d' n: k- ?
ECAPCONTEXT ECAPResult;8 ]! V; g. k$ x, X# e8 [; t. f" J

& j' ?/ @5 o) u4 z/****************************************************************************/
7 Y: f- F# I4 V' z# _& w/*                                                                          */7 ^9 ]0 d0 {$ e% M
/*              函数声明                                                    */
: s8 ~$ Y- S$ r( m5 S+ l: g/*                                                                          */
* `2 g" q1 I% y+ I" `% O/ K+ T/****************************************************************************/, r% N+ a0 S1 b2 g
// 外设使能配置; ^, z( B5 ?4 n" ]# j' s* J5 ]& [$ O
void PSCInit(void);
8 y, z. K9 @5 \" A# L9 ~% z
' J2 `: j+ N/ A$ w2 H// GPIO 管脚复用配置
; H' n+ t6 W# g- b: R, @8 Jvoid GPIOBankPinMuxSet();( Q# j7 _9 |/ k& w

- `" j' Z; D7 N// 产生波形3 o  T/ V9 p, m( t; p, k1 D  o
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);6 T/ L) [- E" s" O! {! O  m) D4 F
void ChopperWaveform(void);
* e$ T9 Q# t" u" \; b3 O# D; D
- Z% A% y' b2 `9 G3 E( k# j// ECAP初始化和读函数1 X) I& j! k% }; S& M* J$ c
void ECAPInit(void);
1 D- k  I: {# R4 q& y  M: {unsigned int ECAPRead(void);
, L1 I+ [- @$ J/ }+ ^
* k+ r) t5 Q/ V- V# X2 D//ARM 中断初始化% o# c) P" P3 G' |6 n
void InterruptInit(void);" C; }$ {. x- k0 v9 x! M3 H: |) r

' M/ ?  _; y1 ^0 D// PWM 中断初始化. r- T- [4 ]" K4 E7 u
void PWMInterruptInit(void);
3 q. g# m. ]* M  z// 中断服务函数
1 v0 |9 X, ~5 }0 q- e0 ~// PWM 事件. B4 S% a( N: b% _% t' \
void PWMEventIsr(void);, d. `* t7 e1 u% {
// PWM 错误控制事件
) z9 t0 n( U7 K/ ~6 Dvoid PWMTZIsr(void);" _* z# T6 S! S( K$ ^, I* K

6 d& j1 V  g3 ]* f2 L" a/ Y/****************************************************************************/
3 h- v  D  C) x/*                                                                          */, L& u2 g5 ?$ r+ h$ x$ ]8 n# `$ P
/*              主函数                                                      */
. t: K$ R# Z* x& `/*                                                                          */
, E* e9 R- u3 `) q. Q/****************************************************************************/
& M8 ~, U5 y: |int main(void)
  C0 V, [6 B) ?{
. e8 m' w5 `5 V3 `2 q" I        // 外设使能配置! h' ^/ s( _/ A
        PSCInit();
2 k( s8 k( n9 J1 E
( `3 o$ \1 L7 {+ n6 \        // 初始化串口终端 使用串口2
, t( A7 O8 u- y4 }' i3 G        UARTStdioInit();
- I% I) x' x' G' R        4 F$ @  E0 R% z  [% B7 h( y# e; a! g
        // GPIO 管脚复用配置0 _/ B' H. Q( g% P+ Z& S, P
        GPIOBankPinMuxSet();1 p* ^$ D9 y7 d( `5 W0 S/ L! m* d
; o! L+ K& h# g, p
        // ARM 中断初始化% i% K- s5 {8 R' n
        InterruptInit();, d: y# D; ]$ Q

( }# [2 s  k1 r; Q) T# S        // PWM 中断初始化
+ l. D6 h% @# `        PWMInterruptInit();; A% q9 `9 x/ S$ l
- ~0 p& ^- ?2 a6 I
        unsigned char i;3 I6 C2 C3 G) J3 v
        unsigned int j;# y: R' _5 q1 ]  T1 z1 h

6 d5 O# u* ~0 ~: R7 @        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
4 H+ i, F" ^& y0 A        UARTPuts("------------------------------------------------------------\r\n", -1);
" _2 K! s. b8 }/ Q4 u% x1 `        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
& p2 V+ V  h! G3 O' f" h        // 产生波形
0 E/ V! U8 h, R$ i1 h1 H        PWM1ABasic(25000,50);7 M6 d: M7 f5 X+ n) ?0 N4 B9 c

/ C2 R$ K4 `; K% `( H( x        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);: h5 k. o. ^0 D" g& l
        UARTPuts("------------------------------------------------------------\r\n", -1);
0 X1 `2 Z1 q; p  u: ]" N& C% U$ m" A
, Y; T8 B/ \' T! z
  W5 r) J4 V: w
        UARTPuts("------------------------------------------------------------\r\n", -1);
: R+ Y$ c: P. Y% k        UARTPuts("                    C6748 ECAP Test\r\n", -1);
9 ?$ G! w0 a4 S- o' d/ W) A        // ECAP 捕获初始化
' U, f9 @0 a, y7 s% i: L        ECAPInit();9 s, n" \: l) p$ v
        UARTPuts("Initialize ECAP.......\r\n",-1);
; t* R: U; l$ j" n! k- p! \        for(i=0;i<5;i++)4 r1 w- s7 M2 ?2 W7 s3 G' D
        {6 g& y/ L; p6 p7 n8 i% T
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
& I1 x: \6 z4 a; M5 d; t# v                    ECAPRead();
' K4 C9 B* D- d& t        }! [! t8 ]/ C8 b( K5 Y! c/ M
        UARTPuts("\r\n",-1);- U; d7 ~/ b$ W
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
' b! I+ W3 \; x1 F        UARTPuts("------------------------------------------------------------\r\n", -1);
# e. `9 {' e! u" c  m8 ^1 r: C3 Z/ h! d) _) t
        // 主循环1 _/ J) t" J$ k: Z
        for(;;)6 |, l9 _. Y5 O$ C9 }; _+ ~
        {
8 u, o/ F# w1 A8 T" t. }( a
6 O& E1 P4 a% f5 Q        }* @6 {! U0 f8 D9 k
}# N* O0 _0 T5 N  l+ D( q/ {
' D3 n! {! Y" i; k3 a7 T
/****************************************************************************/
3 B% k" ?; X. q" A- F+ i! m/*                                                                          */
2 ~! b, _0 ^+ Z/*              PSC 初始化                                                  */  k9 C) @' z8 P
/*                                                                          */0 I3 r4 b6 H1 `
/****************************************************************************/& |$ ~- T. l% M, B2 [
void PSCInit(void)
7 i& C  }' k1 y8 P{
) i3 Y: R  V- c0 M  }+ c% ^        // 使能  EHRPWM 和 ECAP 模块9 I& y# h0 p$ h+ ~! L1 b# |; B0 E
        // 对相应外设模块的使能也可以在 BootLoader 中完成
5 V& P' `  Q- v4 A; Z    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; O  E* }8 h  s    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# o1 F* n7 m; {- E, `7 I- ]) p
}  h& H7 m+ F+ G1 \" c6 u' ~

' {0 s3 n) h$ G* x' L% `( Q/****************************************************************************/
  m+ \5 j/ c( K3 D' ^5 X8 x/*                                                                          */* V5 \. R. b4 H2 a7 I8 e
/*              GPIO 管脚复用配置                                           */( @/ s7 E* B& k9 S/ g9 h& L
/*                                                                          */
% Y) t4 f. F5 a# o/****************************************************************************/% F2 ^# C1 s5 y8 h
void GPIOBankPinMuxSet(void)
5 C% p) a& z( E( G/ C{
' _9 O+ @" R" e+ I6 D8 x, |        EHRPWM1PinMuxSetup();
& _2 N% E/ t( I/ a# {0 z$ r% j/ A" ?# k0 e
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)+ d# L7 q/ k+ A- E! U
        // 作为捕获功能时管脚方向为输入" \7 \# U5 d1 z5 {# C
        // 作为辅助脉宽调制时管脚方向为输出
8 \+ n  g6 W4 U% t7 z# }+ O    // ECAP2 / APWM24 N+ R0 W1 e- ?
        ECAPPinMuxSetup(2);# J  {% S8 ?; {
" b6 f- _5 U4 v$ M4 }' Q
        // ECAP2 / APWM2方向设置为输入5 \0 D6 X! J2 k: k6 _4 A/ e
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]# r$ x# N7 e% n$ d
}
6 G8 e% s+ t, y8 ?$ n- c1 [; X1 k9 S' ?# \9 v0 _* Q: k
/****************************************************************************/7 z2 ~) j  q- T( @. \
/*                                                                          */
" M+ q9 l1 `  A" i; E% i/*              PWM 输出波形                                                */
# e# m% N5 j  Z* N  a/*                                                                          */. W( y" o& N' ?" y- [5 d
/****************************************************************************/5 @& k& M' @! a$ a& ^
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)7 X0 h( j" k  {9 b- S' Y
{
: s2 n7 Q. L8 G( n/ F+ r9 A( @, K3 d    // 时间基准配置
  E, c) _7 P$ D    // 时钟配置
$ X7 {+ e& s& o    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
2 K+ L. H* \4 _; N  v
4 }* F# r2 v! J$ s/ T) x    // 配置周期8 u" U& G" M* P- E+ ?
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,0 T+ w; o7 E: g7 z4 {+ H, S
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
' G/ h6 m0 e) h2 [# E$ L9 n7 h5 f
; q! [- C; ^( N& _& Y$ Z& B    // 禁用输入同步信号  i6 i- [) R" a  Y8 [; q
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
9 R! Y- j; W  [% J$ {5 y8 A6 H7 P9 @; m+ f; ]0 D0 B4 F
    // 禁用输出同步信号  @8 ]/ l. @# m% y: T) \
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);" ?" |8 H( N$ J6 x

- v( b" x6 n% M- p- T1 Z9 ^. h    // 仿真(DEBUG)模式行为配置
% z% q" C  H  [+ |    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
5 f( ^0 c% K# H/ H# p- B9 \$ N! ?! u
    // 配置计数比较器子模块" [. V0 U0 w+ D9 E6 d! H
    // 加载比较器 A 值0 H4 ~; H. Q  Y
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,4 t; |6 P# z- R/ ~2 E& p
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);( r( C$ A( }- @4 |8 J$ p1 Z1 J

( D6 h5 C% w9 B4 u' s9 |  P) x0 C    // 加载比较器 B 值
" c* k7 b4 n, Q# U$ f0 J    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,2 [3 k3 Z* `: B/ Q: W  U& s
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
. w* G" u5 M; ?/ q7 n
/ ]0 ]+ \1 V, I2 a. v1 K    // 功能限定配置(输出引脚触发方式设定)8 Q: N: I% [6 @$ w) n
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 O! X  P4 W  ~) V    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
- q, c7 N6 R$ f6 e                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,/ y  Q1 Z& N1 |" \( w0 i! j
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);8 R. C5 o+ [. y9 }$ V9 q9 q* x' x

4 J3 X- C0 K( W+ ?8 ^( E    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
8 L2 D7 @' n- N9 o  R    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);- w* o" }/ v! f' I

% I' Z( Z) a4 J6 w9 w( h  `' s    // 禁用斩波子模块
2 Y6 f1 X. e  n& J    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);! f6 n* p+ i! j% O! d. h' E5 u

( F$ U4 [/ B( t& l3 R, ?    // 禁用错误控制事件0 E+ S1 ^' a1 B; I) }' Y
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 t/ D8 I5 F! ?) k$ ~. v) g* X
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
/ [4 ]( I$ T5 d9 M. |
) V5 M0 ?9 W" Q$ x" ?* E    // 事件触发配置- {* M1 A! x# u
    // 每三次事件发生产生中断# I" x2 D: O- b+ b. o' n, W: l7 ]
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
4 ]- V% i  Z2 h- F    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件0 e3 I0 N, m& X% u! R# s4 c
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);) l' b, p6 _% w  e& A( D" @
    // 使能中断
' `6 w# _& D, {  B! S7 T4 X    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
4 a9 a$ ], e6 ^1 A! f8 c( y& B2 L5 F2 o: ?# g
    // 禁用高精度子模块
6 |, `9 X: n$ G2 Y. ^    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
- G6 N1 j3 k( P& J1 f9 G; s* R4 p  u6 e1 f6 x
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
: S/ ?( m& {! Z  Y9 b}0 a% W  B; T: G. C
/ q( x9 G9 @# W$ u8 S
void ChopperWaveform(void)
- r* y& F. w% w# z" {! T8 d{
$ U9 W/ `1 U" Q, h7 e# u    // 50% 占空比8 M3 d* {8 g7 B$ ]* V# G
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);& |0 x/ @4 |; G$ b) Y/ M7 r2 M
    // 4 分频
: l+ ?$ N8 \/ W    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);+ f9 O$ T; T" E  c/ f3 c
    // 单个脉冲宽度
. e& j* k  l- S    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);: Y7 Y: a- S  w, s9 J4 I6 ~4 C/ h
    // 使能斩波子模块
0 q1 l  i- P% {, w8 o    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
& f7 {6 a' ?, N4 d1 |0 m}8 Y1 F* A# p$ }9 d- Q

: H- W( ^7 Y6 r" f/****************************************************************************/& L# ^0 z6 F7 Y9 }1 A
/*                                                                          */
! N9 a8 r) A3 x1 v  Y/*              PWM 中断初始化                                              *// c( o  c8 Q. x; y5 O
/*                                                                          */
* J, Y7 s- \7 B9 n( u) z4 l/****************************************************************************/5 Y! a1 t: S! c. N& l$ f
void PWMInterruptInit(void)
& r, J/ P; J. H! M# L5 j4 d{
) X4 ^$ X: H& B& p0 n        // 注册中断服务函数
" ^7 x( P! _8 v  ^, h        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);2 u  H. t+ U; ?$ p9 k
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
* P( N% F6 S6 P% M) w4 l1 s) A
# ?& [8 {4 j9 k4 S8 z        // 映射中断
$ E2 `6 k* S  x' r        IntChannelSet(SYS_INT_EHRPWM1, 2);
9 s1 @- P: H+ c3 b' }0 V  h        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 W( N, @( `) P  w9 K1 p, m8 O2 I, v$ k7 J* S9 @
        // 使能中断/ _4 l, Z* R0 E. m# Q+ Q
        IntSystemEnable(SYS_INT_EHRPWM1);
% r, U, Z, `8 d' @        IntSystemEnable(SYS_INT_EHRPWM1TZ);
$ L' h/ K/ `/ H}, `% g. _/ k- }& s1 j
6 Z( D, v8 V# q$ V) M
/****************************************************************************/
8 `+ N: k* E. ~; R, z/*                                                                          */
5 Y; f1 P* {# e4 i+ N* y/*              ARM 中断初始化                                              */
$ M' b; t- ]1 H0 g3 W/*                                                                          */) ^8 b" ?$ m1 ?& E2 ~
/****************************************************************************/
7 @! t. ]& k8 r$ l; @2 k" Wvoid InterruptInit(void)
6 O! n+ W# V6 [* J+ a2 l8 u{
+ z- f8 {6 D; `8 F4 u        // 初始化 ARM 中断控制器* T; Q7 B# K( f4 i
        IntAINTCInit();! G, U) M5 Z- K6 r# c' h0 y9 y2 I
  }2 u* Y6 ?4 o5 @
        // 使能 IRQ(CPSR)
6 `, _( R- Q: t  V1 k. t9 ]8 U' q        IntMasterIRQEnable();
) E; G6 x3 C2 ]4 @% I0 |6 R0 x8 |) E5 c( N& ?9 |3 t
        // 使能中断(AINTC GER)
5 e4 h! u/ L. X        IntGlobalEnable();1 V9 a& I: e' M% w7 o- M; a6 @
% z2 F. P% V+ }3 `0 @5 `
        // 使能中断(AINTC HIER)
! t4 ~) k0 K$ J: d5 b: m8 C        IntIRQEnable();
; K* c' K3 P# T+ ]. V}% `" l  C5 _, r

: {, u, J/ o' S1 I/ a  w% q7 y1 r
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
) Q+ |* |1 a4 Z' r$ w/*                                                                          */6 P1 z) M% @' x; B6 [
/*              中断服务函数                                                */6 @5 f" B5 O: W
/*                                                                          */
- B, p4 Q0 D2 n' E/****************************************************************************/
+ v; U, N# c9 P0 nvoid PWMEventIsr(void), H; h1 E6 J% `3 V) ?& w9 C+ q
{
$ e  m. y" e/ L        IntSystemStatusClear(SYS_INT_EHRPWM1);8 ], c1 G! `& Y% @2 V8 i
# q. q' E3 t: W: T( v
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);3 M' T0 G# Q- G. y  g' O% j( D6 Y, D
}9 l4 u3 ~3 E' f4 i
" ?. u4 u( W/ T' t  {
void PWMTZIsr(void)
4 t  H' D6 D; p# x6 s1 H+ s1 w3 L{% W5 v' b; d7 {9 _2 f/ q$ a4 b4 c
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
1 u6 [& I: c" F7 ]7 }! m+ ~5 v5 v# p2 ?! X8 Q) E2 ^
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);0 P4 v, V: |5 I  {
}
4 a- i: Q- N; H8 z3 H; N2 S6 x4 x# r" U
) Y; d8 H' H" T' w/ z( H/****************************************************************************/
5 j9 G2 E1 |2 O4 j4 M/*                                                                          */
- q- `" n2 k6 y- ]5 l/*              初始化捕获模块                                              */( I- J' u" d( C" [: h" b1 g; G
/*                                                                          */& x$ D- k; n0 U7 d$ h
/****************************************************************************/& h; @% ]- V0 j! I& N
void ECAPInit(void)
( f, u) ^& t. k{: w+ ?) y; ?- v; k
        /*-----设置 ECCTL1-----*/
- d) _6 ^% X# i/ F        // 使能CAP寄存器装载
* g8 W1 l. J$ G4 Y8 ]! P- H        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
" p( w. x8 t' a9 n: y        // 设置预分频值.
+ P& m5 r* V" h. s        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);/ e$ b, I; u" |& G: L( I1 `/ d
        // 上升沿触发捕获事件
8 Q7 r( S0 r) q3 H        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);" d  e) M5 h4 M% ]
        // 输入捕获后重新装载计数器值.
7 H7 n3 O2 N7 u7 x        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
0 t% k3 _- @8 u& c. h! t0 T8 p+ }  v* I8 X. m7 O7 D
        /*-----设置 ECCTL2-----*/
& F- X3 l; U; A; w        // 连续模式8 z5 Y/ _' ^. _6 Y6 {: }4 h
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);8 |1 A% E3 ^* g& d
        // ECAP计数器TSCTR持续计数
8 Q0 H. w# T3 L$ S        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);: w3 F' q2 `7 X3 z! Q" ]  k' \
        // 禁用同步输出和同步输入" _. C, U5 u4 i7 K% ]; n
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
. p& f/ {5 |9 a* p7 I% g# h5 x        // 配置 ECAP 2 为 CAPTURE 模式. ]4 z! Y; k  y0 C  `$ O
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);9 E5 p- J# b4 y; ], r: y' Z. U; A) U

5 D( i$ U" H& p+ M" v        // 使能中断
; U5 d- i- N4 b3 S* i& \  v//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
+ c$ X, l1 H4 I: a6 g}# U- H5 D5 O& C9 t! K0 T5 U; B3 d

! m" Y, Y! c3 F2 h/****************************************************************************/
, Q1 L. U1 z9 }) w* j/*                                                                          */( q% M0 ^* V; ?& x/ |# y) t$ W
/*              取得捕获结果                                                */5 T' n, W% e2 m5 |2 I9 V
/*                                                                          */
: p9 a" W4 i9 [* s/****************************************************************************// t. T% t, `* y0 J8 ~4 ~  Y6 M/ K* ^) r
unsigned int ECAPRead(void)
% _9 W5 J  @+ I' V{
) r# q: M+ }$ Q! D/ n        unsigned int capvalue;
. h+ g& N7 V  B& H        unsigned long frequency;
2 i" p" D% V9 |- U& W& Z
/ K" L# j' L% M0 \6 U9 T        // Event1 中断标志
5 l" l3 _* y+ ^2 o        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
9 Q$ p) [- ^9 p/ W+ U4 R$ u        {7 O( Y/ T" {: `
                // 取得捕获计数3 e. y* u$ b" M7 @+ y0 i- H
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
  R1 w+ Z7 V. K& @* I/ ?                capvalue = ECAPResult.cap1;
5 h7 q3 m9 _9 B" V% r
( k( v3 |3 B/ W. H& ^                // CAPTRUE 模块 228M 时钟主频
1 Z9 x) @0 x1 c& Q9 r                frequency  =  228000000/capvalue;) \+ A5 u" O. I& S) V* X
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
) g0 L( |7 R- e! _$ [2 t
1 V6 `+ V/ I5 k7 R' ?                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
5 ~/ e0 R& A2 ^1 q+ c* p0 R//                IntEventClear(SYS_INT_ECAP2);$ Y4 f  I& l8 |' Q
        }
* G6 W6 P9 }5 B3 n" y5 @1 [  L  O        return frequency;0 e  v& k7 u: [2 g; Z
}
- h# f% @) u$ W7 \+ T$ i9 {
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
  t2 K8 h6 A! T- s' B' Q/ \8 a5 H+ a

本帖子中包含更多资源

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

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-5-6 22:10 , Processed in 0.047135 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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