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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/7 M. E$ C9 ^# Z; r5 X
/*                                                                          */% m9 ~" ~# I8 f8 I
/*              宏定义                                                      */7 d7 m3 X8 I0 Y. N( h5 o8 H
/*                                                                          */
2 Q1 |% A" a. J/****************************************************************************/7 z* h* A  s! G* ?. t: c5 W1 ?# K
// 软件断点% ?: h% L- \# |
#define SW_BREAKPOINT     asm(" SWBP 0 ");
  o& m1 A1 r9 N& J3 M  D9 v' \) R! t: ^
// 时钟分频8 |  ^% Y6 e/ i& t7 E% d2 ]4 S5 n
#define CLOCK_DIV_VAL     228+ P  \) b; ]+ t3 N1 i% u2 W
6 m/ |: f, W+ ?( k; P" a( E
/****************************************************************************/) H! f# v6 h! w& i/ x6 R' T; P+ }
/*                                                                          */! X7 Y" ?3 G1 B! u
/*              全局变量                                                    */
( b  y0 S. v- ]9 `% g; k8 w/*                                                                          */
% ^2 ~' D( r+ \; q" U! S' u/ C/****************************************************************************/2 j) I5 c; c/ B( U) n
ECAPCONTEXT ECAPResult;7 O+ }; k# Z8 ?' G
  i, |0 b+ B: M; r: O, v
/****************************************************************************/( S6 N! k3 m; {: G* N  M
/*                                                                          */
6 q( M% n& O2 ?: A6 ?/*              函数声明                                                    */, T1 o( j' N" O, s* \5 H# c( Z% y
/*                                                                          */. D6 ^3 m5 U( y9 s: ?
/****************************************************************************/+ h& b& g( f( g: P4 W. E
// 外设使能配置& v8 x8 c) w) u7 g8 h
void PSCInit(void);
( ]  d% n* s$ q1 j4 }2 Q. ?" \: L  n3 R/ k! T
// GPIO 管脚复用配置
" ^/ }0 u7 a3 A4 {void GPIOBankPinMuxSet();5 X/ P" d5 q/ F& q
9 _# ?7 o5 q9 H% J5 o+ j  B* E
// 产生波形
! {. `+ P- @6 P7 G0 o: L5 Yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
3 b" g% A- S! V- e. K: [1 Ivoid ChopperWaveform(void);
- [" l  p( w5 g- p2 B$ @
( l' g2 E$ F! M$ N8 d, a: e4 t// ECAP初始化和读函数' c- M$ `( ]5 M
void ECAPInit(void);
5 L3 b/ V( _. F" x; f$ f. {- Cunsigned int ECAPRead(void);
' F& A+ P, i$ \; W7 v  T
, z1 Q: H* Z3 Y, u. m6 T" [! Q//ARM 中断初始化
% A7 w+ x" ?, c9 U2 j4 cvoid InterruptInit(void);
% V4 w; n  P6 H% ~0 u1 ~1 e! M- w" _9 H
// PWM 中断初始化5 ?' F  g$ X7 ?! A4 v. y4 G$ n, H
void PWMInterruptInit(void);
  o( r. s+ h+ ?// 中断服务函数
& @9 \0 m8 p! `' u4 U0 r7 H, b// PWM 事件& ~6 X3 }$ c' Y9 b  B$ q
void PWMEventIsr(void);
# [$ \: w1 q/ X% D0 G// PWM 错误控制事件
0 D3 K4 u0 b, T5 M# b$ o. Svoid PWMTZIsr(void);# g. a9 P% N! z# H2 l

. m6 l/ o9 u4 @# s, y) M# C, F/****************************************************************************/
, ?8 [- w3 J0 U/*                                                                          */6 h* {4 v) c; J# I- K6 ^2 C  b
/*              主函数                                                      */& _* E, A) w' w
/*                                                                          */* O2 S, O: h3 e
/****************************************************************************/
8 t& P$ l1 r4 x" x' @5 A3 ~. [int main(void)
/ W7 O9 M' N# K8 G8 W/ O- ~$ \! T{
) F% u' v) s1 h+ V( \- V        // 外设使能配置
  Y% _" P& c) U5 G        PSCInit();, a" r) Q/ ?+ O0 g4 k
/ o# F" }! l" u
        // 初始化串口终端 使用串口2% K$ e( n6 y% |4 r5 R7 c
        UARTStdioInit();
. L" N  }# h8 x+ b0 }: {        - U& g) X$ `9 u& i% _
        // GPIO 管脚复用配置- ^  {0 o9 O! d
        GPIOBankPinMuxSet();
7 t2 T9 t/ l# [' S$ {6 E
# |2 `0 c& v. C& l) n3 P        // ARM 中断初始化2 d; H  E. W' P1 h' q6 G) [; Q
        InterruptInit();
8 B* r2 H: S% m7 t$ X- D; c' c3 O. u
        // PWM 中断初始化  C' X- g& ~7 E
        PWMInterruptInit();+ o; R: F9 l  p! E( v3 P
0 U, l7 |, o! A
        unsigned char i;- |6 u2 T1 K( g6 M" L
        unsigned int j;
* R' t* B& v/ y, L0 |1 k
, ~* V  p5 H. t' i1 O+ H        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 H: A+ G- V: S" O! t9 k! ~4 N0 ~        UARTPuts("------------------------------------------------------------\r\n", -1);
8 ]! T- `1 Q. i: o0 \+ H/ e' @        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);& u- C. {6 ~* ^. g+ ]# X
        // 产生波形0 Z+ B9 e+ s# G$ o
        PWM1ABasic(25000,50);
4 `& y. p2 e, K; h  a* P( C9 V" W. j1 J
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);/ F' l5 _0 g: B. ~3 E4 s
        UARTPuts("------------------------------------------------------------\r\n", -1);
5 W& g  H# }# m1 W) d2 w
6 e* j7 I1 P, W% a4 t% l5 N) ]6 z0 Q" a/ J# L+ l
2 B! m% k& h3 ]$ W6 q4 Q5 Q
        UARTPuts("------------------------------------------------------------\r\n", -1);
7 A5 N- P$ E  W2 j5 N* @# I        UARTPuts("                    C6748 ECAP Test\r\n", -1);
: ~# ~: \" D9 ~1 z# B4 |9 ^        // ECAP 捕获初始化
$ o* e& h# l7 f/ y        ECAPInit();/ B: u- S$ w! w' H5 `# ~
        UARTPuts("Initialize ECAP.......\r\n",-1);
, ]7 t  ]1 f( {6 g        for(i=0;i<5;i++)
- s' D) j/ A% `  B6 a. C+ x        {
( _# B$ ~6 ]2 Q; l                    for(j=0x00FFFFFF;j>0;j--);            // 延时8 m; z4 Z4 p( n" C* V" D
                    ECAPRead();+ M- h+ `6 @2 q& a$ ^" z
        }2 v5 I3 u' C, w
        UARTPuts("\r\n",-1);4 U0 z/ Q5 N3 ]
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
) B5 H" n+ Q- S/ b' p9 C$ T; G        UARTPuts("------------------------------------------------------------\r\n", -1);
( g! Q. \! G# k3 x# E! ^, ], {3 r# b$ d& u+ _
        // 主循环8 j0 k% @) x  j7 U1 ]) y
        for(;;)
: i/ y* Q3 j6 P( q        {
, u1 u  z5 J0 Y& D' `7 h/ ^3 c! Y3 n* Y; Q/ C3 k& n; U( C
        }" E" n4 T2 x5 R0 |
}
6 l0 |& w/ n/ Q: v$ E8 b, M- Q; s! a& H; I
/****************************************************************************/
* q1 N( D7 {! G' v$ x/*                                                                          */
, U, Z9 d8 U6 j2 b0 q; o, r$ ?3 _- {& w/*              PSC 初始化                                                  */
3 H: ?5 v% Y1 ?+ F3 ~6 d5 l/*                                                                          */5 Q; {2 v+ g9 {5 ?
/****************************************************************************/2 `# l4 L! g3 u. d0 k& G
void PSCInit(void)
6 A4 s9 j, v  I- [{) \8 b/ m0 {$ i  D
        // 使能  EHRPWM 和 ECAP 模块
  T& r3 H! p3 W! H# }' {        // 对相应外设模块的使能也可以在 BootLoader 中完成
/ m. Z# M! s' l. M8 W+ ?    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
2 Z# `' z  B; h. G8 v% `/ K    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
* z- @2 J" b! f+ z& z) o8 ]7 K/ J}
. P. |4 s' w2 `' d( M' I" g& H5 o: s
+ G2 b6 A. Q1 \4 M0 ^+ V/****************************************************************************/
- y" B: Y: Q9 U4 i  ^/*                                                                          */
: ]6 h7 a; i* n* d/*              GPIO 管脚复用配置                                           */4 k& b2 R' Y2 ^4 A7 w* N9 C
/*                                                                          */8 y6 L9 ?; U3 S  e6 s8 O, v+ f
/****************************************************************************/
5 r( t5 w- F8 ?void GPIOBankPinMuxSet(void), }; v% _2 {4 p: G& c
{# Z% @6 O* o9 k9 {9 @. ^+ t
        EHRPWM1PinMuxSetup();# O; ^" y* a% a2 U0 H. o

( N. A  ]% p$ [  ]6 L$ M        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)0 m% |( V7 x2 s, b4 [5 r7 O
        // 作为捕获功能时管脚方向为输入8 K4 n6 H- O4 J- T" q
        // 作为辅助脉宽调制时管脚方向为输出$ t1 k/ ~" s  z# Q3 H' z
    // ECAP2 / APWM2# t8 t5 `5 y) q( F
        ECAPPinMuxSetup(2);# H* F$ C  d3 \# R

! A$ m( [# f; W        // ECAP2 / APWM2方向设置为输入8 {" V7 D) H) b" ]- l5 O( b; w5 [
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]3 L+ _! u3 C; D3 N7 C0 ?
}
6 u6 X% N2 r" F  M& }
* _0 F: i$ s. G. }( c$ V1 [/****************************************************************************/
! O: }( V; G5 Q+ V/*                                                                          */
- D7 f' }0 b  w& @/*              PWM 输出波形                                                */# Q0 ?; \5 a- f. f' V8 s* |' a1 {, l
/*                                                                          */' h9 a9 A2 b- n3 q! T) M
/****************************************************************************/+ s" K8 \: a+ H! y7 j3 q
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)1 U4 q# s* x/ t) r3 w8 }6 a
{4 D4 T2 Z) x5 V! i+ N2 `; [2 ]! l
    // 时间基准配置- ~4 k/ K& M# R7 G6 _3 H- b- P! C
    // 时钟配置
( |( ~, S- K# Z4 L5 Q    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);+ C: q7 N0 b6 S( l  \
5 A1 W' v# l; H0 @
    // 配置周期; |" E% e. V( H- i, q+ b# v
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" ^) N& q* |# Z& I                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
0 M6 Z/ ?, j" U: c
% t/ `1 l" P* T* `4 D" W    // 禁用输入同步信号
$ S* a; P7 L/ T" [    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);5 |' O# O  L0 l3 _

# A" s9 \8 b# y" G% I; j    // 禁用输出同步信号
7 V3 \8 x0 P1 h    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
; ]8 ^$ s& Q/ a0 _
2 b3 t: `: j6 m' d, ~/ b. M: ]    // 仿真(DEBUG)模式行为配置
- a9 o( H5 G, ]$ q$ J1 K    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
$ Q/ c6 c$ V5 S7 O2 v" F% j7 j/ D- z" A" k3 B
    // 配置计数比较器子模块
8 i: I2 y7 A% a- w    // 加载比较器 A 值- r! v1 K6 c7 X$ k6 I) h% @# ^" Q$ l
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,; s# n/ }$ v/ B; G% R
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
1 a% m, y- r( D6 h  w* {' q2 u# R
    // 加载比较器 B 值+ d6 f6 z( F. e
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
$ w6 z" a: _3 h                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
9 y* c! E1 D" J& J8 G4 {9 ?
" [+ q+ H! t: E/ z) a" p* A3 Y    // 功能限定配置(输出引脚触发方式设定)( k% T2 \( |8 F+ Q+ v7 t; y3 p/ Z
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
- X+ R0 p; g8 Z" J* \) h    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,( S: j. o0 {% V# j2 I
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,, t; ]7 z; Y. q0 V: @: L; D! Q
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
2 \/ f8 G/ ^8 o; ~+ z
! ^3 c% B9 X+ R8 G& _9 g    // 禁用(旁路,信号直接输出到斩波子模块)死区模块# `8 {. p, Q6 R; V" H* z7 N
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
/ B$ L; c' p# T/ G2 B! f
, \* d) h# g. X3 g$ m    // 禁用斩波子模块
% e0 K8 a1 r4 f1 N7 s    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);7 A" P$ u# M  o1 D9 |

4 J; K! D  S0 e2 T, ~! }2 ~    // 禁用错误控制事件: ^' E5 o  g" J  l9 C" A8 L. p# T
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);; d  L6 X8 `- J/ H3 s5 |6 s
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
9 v- ^! r* ]' t- k9 m
- Q, z5 k1 [$ c) N. W) |    // 事件触发配置
; r" @8 o8 H3 D% F: N4 I    // 每三次事件发生产生中断. ^- ?! J, q, ]4 C& K$ r6 b
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
, k% E8 p  E- F/ Y( W( ^4 K! c: |    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
! c+ D4 J$ q: R! O! ?" S7 e) K2 k    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);8 @9 L' g* L4 s& m  F: ?
    // 使能中断' J5 m+ V, b: j/ |* {0 I
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);3 m+ V9 p4 j; |2 m7 {

- M- |( e2 H" |; M    // 禁用高精度子模块+ K* H( _4 n( B8 A
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);( [. g0 \& F. `+ z0 ?
3 [0 p: q- V6 `+ b8 E) A- O5 L. O
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 \8 w+ ~, j/ O+ G7 E  N0 ]}
- w) y+ C8 F5 I6 s- P1 T% h9 n0 r  i; e- H
void ChopperWaveform(void)
# Q& ]1 R4 n/ F1 f{
2 I* b- J; K" T$ J    // 50% 占空比8 J3 A$ ~$ V7 \5 P# K* b7 y
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);, E9 v0 ]7 h8 A% j) ~" F
    // 4 分频$ p# s* k, y5 e  ]
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
/ E1 M" [' F6 Y- P2 W: y$ x% D    // 单个脉冲宽度
9 {( |% g' `! F- \( C    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
! S/ r- W) e6 q5 w    // 使能斩波子模块6 ^$ u+ j8 [% n* i
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
. j' \, W4 U; Q3 Y}
9 a* t  w% p/ A- w5 X* e( ~2 X' N2 K$ C' D
/****************************************************************************/
4 Z# g5 f/ j9 Q/*                                                                          */
# `+ P/ t3 W5 D# |! H8 E/*              PWM 中断初始化                                              */
0 v& `# b3 O+ {+ k- i' ]/*                                                                          */, Z3 N% B+ n1 W; ]$ U4 |
/****************************************************************************/
+ c9 S4 p( H8 P( Vvoid PWMInterruptInit(void)0 M# n8 F$ o( u1 Y; I
{
; E+ g! O2 C+ q. B* Z3 t2 v$ w8 `        // 注册中断服务函数
/ u! p4 n& C7 v& l. e        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
( U! _! p/ `; R        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);* u' n& e$ r9 ^" B  J. G1 z

$ Y/ _5 P/ e8 [- R% ?+ X        // 映射中断* z0 f; r7 H/ G7 r) S: w
        IntChannelSet(SYS_INT_EHRPWM1, 2);3 {8 |6 j+ I8 v( e
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);$ f7 M0 ~7 T2 d. ?
2 U, u  s9 \2 M3 I' h7 c6 O' q+ D8 S
        // 使能中断
  ]9 s+ Z$ `2 Q7 t1 A. ~) A        IntSystemEnable(SYS_INT_EHRPWM1);3 Z/ v) S4 O3 ]9 H, O8 u
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
8 S% K& C& n! [  H% Z" \$ F& n2 A}( g! F9 c5 J6 N( }0 ], V7 q
" k9 B9 Q& ]5 @1 {
/****************************************************************************/4 k0 x: `7 g, R2 a9 o
/*                                                                          */
- S8 Z: p5 M4 D/*              ARM 中断初始化                                              */
! G/ b+ m1 `# h5 F" u, D9 h/*                                                                          */, X, B) T; ]: Q  m* H
/****************************************************************************/
" C8 i# [0 q( T# d% z5 Evoid InterruptInit(void)# B6 q. x5 V0 k6 g9 D. i. C9 S
{" t, k: x# X0 L
        // 初始化 ARM 中断控制器# Z- o: T$ B( f: W" B) v# ~+ |
        IntAINTCInit();
$ r) h  X  S7 w( o  w' v5 c+ I9 a9 q2 d
        // 使能 IRQ(CPSR)" i; |* J" [$ s/ h
        IntMasterIRQEnable();
  i  Q1 A" U$ S: B/ L1 U1 _
. s9 T1 l6 R- {/ W4 n$ m/ A$ T" M6 ^        // 使能中断(AINTC GER)4 Y; `3 V8 J, o0 e# X
        IntGlobalEnable();3 T5 G6 K% t2 z0 F" s8 x& J
! c% X/ h: ?* V4 R+ N6 P5 y3 H
        // 使能中断(AINTC HIER)
; m* X# \9 u/ c2 K1 m8 y        IntIRQEnable();) X7 F" M  X! [( K; _7 E6 X
}
- W6 w5 m" k, r9 L$ U/ Z  C) [! B' `1 e) O2 |3 e. d. F4 M9 [! D
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
; O3 ~+ ^* e, \- S  ]+ ~7 r+ r/*                                                                          */
; |5 G4 @# i( F! @/*              中断服务函数                                                *// s. K; s% ?: K
/*                                                                          */8 G) ]% e/ b/ G
/****************************************************************************/
( w) n6 J# x0 V' G' Yvoid PWMEventIsr(void)' [8 M' D9 y! ?; ~; f) U4 Q
{$ C$ |0 `1 }  N& S; B
        IntSystemStatusClear(SYS_INT_EHRPWM1);
9 H8 S3 r9 I/ c  h! q3 Y0 i& l/ v, R$ o: U8 ^
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
3 T, x& z) t# P+ U( j}+ l9 x' J3 t  Y7 n3 P

! `; a+ ~4 O' \5 M8 Vvoid PWMTZIsr(void)
! c0 @& Y! S# n/ M. \5 }  h{
0 Y8 f% _) o3 t        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
2 {# a6 ~) i0 w, Y5 u7 J
& w6 [8 a& \* e: G% [- @    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);1 K" A, N# V$ d
}* r/ \( `1 K" |' k* i
+ U; N2 k' R) c
/****************************************************************************/5 g8 z+ N! D9 w6 O6 z/ K# g
/*                                                                          */
7 [* Q7 g  W! n2 U' r, M/*              初始化捕获模块                                              */7 v- s3 t; L5 R0 Q! q
/*                                                                          */) C  ?( N2 Q/ \& K1 s
/****************************************************************************/3 P. X" _/ {7 i
void ECAPInit(void)( G0 d& G6 J9 h% ]% g' w; J3 \; ]
{
) n9 E: T/ y- ]" O        /*-----设置 ECCTL1-----*/; t, z5 X2 T. z2 B; n, ]
        // 使能CAP寄存器装载1 o2 e" h7 e4 H9 \
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
4 G$ [0 y2 W) \$ V' x+ N3 t5 H" K$ R        // 设置预分频值.% \. \; X- R# n+ x, A% {9 p2 m1 H
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);1 z/ n# Y4 K, k
        // 上升沿触发捕获事件
1 M( L, G/ X; z$ U" A        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
- \+ e3 j3 E: Q  g5 X- C/ G        // 输入捕获后重新装载计数器值.
) n) f# P, d6 v+ ]        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
4 P" u; i: j9 t+ }
5 M2 D  a1 ^( u, T$ o' n        /*-----设置 ECCTL2-----*/1 `' K. D" [4 x
        // 连续模式
/ A7 [9 a# f  C, b) v! f, B        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
* R% H' q' K# S- k' h: \# e4 F$ h        // ECAP计数器TSCTR持续计数2 f" l0 o0 y1 T) L$ o0 }
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
* E9 O* d  [3 s7 n        // 禁用同步输出和同步输入# N. i$ e8 V# Z
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
( s" Z/ E% c) v( n9 v5 m2 f+ ^+ {        // 配置 ECAP 2 为 CAPTURE 模式
: l7 R* `( T& \9 j/ v: P        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
+ M, [  x+ c: O. }0 H2 A
" e/ }7 L9 e$ ?7 _* c8 a        // 使能中断
  L" e4 }* k7 Z4 }  k//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);) z. X! r2 _- W: s- w$ z1 r
}
& `0 e. P& m. @" r
+ p! M0 h5 N% r/****************************************************************************/
) W% B0 V" p5 L* h! U$ M& t/ q/*                                                                          */. L# B; G( u- M8 n+ j# R
/*              取得捕获结果                                                */& ]+ O" p0 m5 ~. O5 L0 u
/*                                                                          */
5 i  @6 \! ^+ w' W' ^( I9 M; x1 F/****************************************************************************/
6 J/ Z0 j) k! b' y! Tunsigned int ECAPRead(void)
- ~; _! }2 F; _5 f; r- V{2 S( o  \4 P' D0 \
        unsigned int capvalue;# I8 d; _' N6 y3 S7 ^* U$ i
        unsigned long frequency;
2 x. k$ T& v+ i) n: v/ a
; n/ r7 H) {0 S  P, ?        // Event1 中断标志
  B, }* ?7 ?, P' t0 l        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)). }4 G* ]3 ]0 m& E8 x# g' O! V7 _
        {2 z& `/ O3 Z5 v% @
                // 取得捕获计数
+ ]* L4 s9 Y$ l5 A                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
* J' n& d1 j1 R3 `; A8 R                capvalue = ECAPResult.cap1;; _, U+ {* E1 u) h7 c3 }
; v" T( \7 z  |
                // CAPTRUE 模块 228M 时钟主频
2 w& {5 r3 q8 F8 }* P; l                frequency  =  228000000/capvalue;
& b% P6 `3 j1 W8 U  V' ]                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);* \5 G& j7 Q; m7 E9 L) ~
0 o+ `, i# ~& g9 c* J
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
5 a" X; Q5 ]- x0 [//                IntEventClear(SYS_INT_ECAP2);( m" {4 j" ~; f0 A0 O
        }: \: K& A! A5 V! `/ V
        return frequency;! E: c7 L/ q2 y( |$ j' Q3 g" A
}
/ ?' w+ T1 I- u, s
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
: F* y( v) U4 L; M% ?2 M, i2 d

本帖子中包含更多资源

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

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-7 05:57 , Processed in 0.045125 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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