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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
' \" d2 C0 V  K2 v: S9 k/*                                                                          */% R' C9 r# u& y$ z# f+ v2 f) F' W
/*              宏定义                                                      */1 {1 L5 x" R) `! v* A
/*                                                                          */9 S( ^  S  ^  z% c, U# E/ Y5 s
/****************************************************************************/
3 X; _: T3 W$ ]/ A; S" Q// 软件断点
, H5 ~; m  |6 ^% g0 j1 _& B* ]#define SW_BREAKPOINT     asm(" SWBP 0 ");
* y/ q' a* C9 L9 I0 c7 |& x0 }. b% f
// 时钟分频
3 x: H! x! Y: W8 ]' @" R7 T5 I: {#define CLOCK_DIV_VAL     228
7 Y. h  J9 B) D# F1 n& X" W6 o! \0 x
/****************************************************************************/
, i# ]4 w0 t4 I$ x- e/ k/*                                                                          */
8 a$ e! O! n" `1 C/*              全局变量                                                    */
$ G6 Q# S% I+ d* H/*                                                                          */4 \: j8 \  D+ i8 Z( o
/****************************************************************************/
; M# F% U2 K5 u6 [& _5 cECAPCONTEXT ECAPResult;
6 E& h" H; r0 L3 |$ G. R( X! u8 X6 y
/****************************************************************************/
; r: Q6 d% v, k/ x' y$ p/*                                                                          */" F, `( s* J7 ~7 \
/*              函数声明                                                    */+ |. }: P  |. _# I$ [
/*                                                                          */
1 t9 e5 }* v/ Y/****************************************************************************/) w. v: k0 d! E, p" S
// 外设使能配置
8 X% R8 i. P" t( Y: K5 a/ Gvoid PSCInit(void);' x" E8 ?' _% l: }) ^3 s
* u9 o) L2 j" G: q6 m+ ~+ [! b# b  z8 D
// GPIO 管脚复用配置
. n' i$ u, m$ D. b2 U4 ?void GPIOBankPinMuxSet();
+ ]" Q5 `) m( v2 \1 ?8 G
9 E( D  f' I0 [+ {// 产生波形
, t/ T5 `# Q* g, Fvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);# q. z2 E$ q$ y! }. b. o
void ChopperWaveform(void);9 Q1 l3 ~' ]8 U; |

, J; U5 V8 Q/ n// ECAP初始化和读函数; O6 h; E' d8 G' ~- ~3 {( }5 a
void ECAPInit(void);/ v0 u& [. q5 h' b
unsigned int ECAPRead(void);6 N2 Q  t& G, [4 h% R
% O! ?% E4 g7 {& w
//ARM 中断初始化0 ^" \! O# |3 e: j- ^# u
void InterruptInit(void);
( W2 w0 @, `. J5 o* K, e' N1 d/ I1 e5 n! s! x
// PWM 中断初始化
. ^8 w9 ?9 j, M& w9 M* fvoid PWMInterruptInit(void);  U% }, u7 b2 K- y) I  {
// 中断服务函数, o0 G" ]9 z4 M/ l
// PWM 事件
$ \1 r# O! z4 Nvoid PWMEventIsr(void);. T  Z0 x/ y0 c& Y) u
// PWM 错误控制事件
/ u2 N! V! s, j( s' |void PWMTZIsr(void);
, T4 |7 B! k0 a9 y* b9 G+ U# o9 l+ |3 y. r  _; V
/****************************************************************************/, k( F9 [) C+ P& X/ Y4 n7 A9 M5 m4 S. B
/*                                                                          */9 j% c# n1 D/ b, Z, W
/*              主函数                                                      */$ H9 T7 w+ n. m( W7 X. t# ]
/*                                                                          */
0 e. F3 x0 H% z/ n* R0 C' B7 O2 w/****************************************************************************/8 z& k8 k. N$ d
int main(void)
, C- Y0 F/ M, d' G! S  w. L{
8 T9 {, ]( F& y2 M        // 外设使能配置
5 ^. K) m+ b9 f1 ~        PSCInit();7 O3 L: r2 B) t# \' g
8 p2 k0 Z9 l" S
        // 初始化串口终端 使用串口2$ U2 d9 n% t6 n( i% F2 y- H* E
        UARTStdioInit();
7 B, e* c7 {/ g( ~* W: r$ S0 K        7 n) ~8 G: x0 n
        // GPIO 管脚复用配置
0 u1 R0 F. ~+ i        GPIOBankPinMuxSet();- H9 I- V& f% K% [8 f

  I5 u# _! j4 j/ J8 K" z3 \        // ARM 中断初始化
+ H) [$ s& A  i        InterruptInit();
9 B: ?8 _" p' q' A* ^, _. R- F* x% y+ O" p( ?! F  ?6 N
        // PWM 中断初始化
9 I- L8 N) a: H! n6 H  ^# K: u; n        PWMInterruptInit();4 A# @/ Y( }6 X2 L1 n$ g% i0 M

2 k7 Q5 o5 |5 ~# Z1 m+ A. S        unsigned char i;' W5 `9 B' t$ L
        unsigned int j;/ e+ R4 I/ Y2 x1 q- Z

8 N+ H) ]1 I# W; x: h4 f) m: ~8 k        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);1 R: X* }: ^  f- x% U
        UARTPuts("------------------------------------------------------------\r\n", -1);
8 v. Y' n. `5 l9 r; \        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);8 @" g( K0 k# d( v
        // 产生波形- r$ t' d3 @! L2 d) p. ^
        PWM1ABasic(25000,50);* T( j  u) V! y
9 C" E1 m3 z4 v$ s( r
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
  h/ V6 X- r8 l        UARTPuts("------------------------------------------------------------\r\n", -1);6 d/ q- J+ o9 C1 J, m5 j

7 T7 p6 |7 h4 @7 G) E
2 W- A2 c  q, [8 k! m! _  ~
( y( n% E( v" y" n* |) I        UARTPuts("------------------------------------------------------------\r\n", -1);! A7 ^# R  w6 @$ {; r
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
+ Z3 \, r6 j3 P9 f        // ECAP 捕获初始化# Z3 H1 I3 C3 M$ d2 @
        ECAPInit();
& x8 Z' H  W1 i" h1 U: `        UARTPuts("Initialize ECAP.......\r\n",-1);! v- x6 D( U  A+ Z: }
        for(i=0;i<5;i++)
+ ^: _5 W/ p0 }' h        {
% h) I1 x; v' _2 Z- G5 z                    for(j=0x00FFFFFF;j>0;j--);            // 延时" A' {% f3 K' b: p
                    ECAPRead();
- T$ g. E( K  q1 h& q. g$ h1 t, J        }
- k& U) E0 O7 }/ d# i        UARTPuts("\r\n",-1);
( J9 A  @3 w9 \% B* |$ L: U) G8 h* q        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
1 ~8 {" a8 v8 R& [( C+ N( L) c        UARTPuts("------------------------------------------------------------\r\n", -1);
$ c3 e2 }8 j& v; F8 ?; U
& [# P) Z; ]4 o% K        // 主循环) C* K: p9 K+ R! O7 ?6 ]
        for(;;)
- W/ ^. M" t3 I( r        {5 S' W1 L2 K' I' |; _

$ O- U: B7 z: F; `5 ]) U* }        }
/ U. s2 W2 U2 G5 x# f}
) Z/ Y$ z1 |4 }1 ^$ G; d. ]" g1 n
9 x! I& f5 y% N: U/****************************************************************************/3 x6 W7 ?  m" g3 ?' E
/*                                                                          */  @% l5 Y+ }7 }) c  `3 S( S
/*              PSC 初始化                                                  */
4 x: g) _" W- V9 D5 j% u/*                                                                          */
* }/ E( \% q* g5 J' r# q+ B* W3 g/****************************************************************************/
8 {1 f' b1 n9 X5 y" X$ x; f, ~void PSCInit(void)
" P" \9 T/ N3 E( u2 u3 |9 }$ g{
6 m) h; K' T: p3 u        // 使能  EHRPWM 和 ECAP 模块
( \; _# {2 S0 ~: ?# c- y        // 对相应外设模块的使能也可以在 BootLoader 中完成  b+ v1 \% G) ^) x0 N* w/ g
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- F( l+ [; b7 y( ]4 x5 L    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# ^& u9 Q2 C* W: R
}/ B: q, z; \  {
0 B2 M7 _$ W: f- h! T% [
/****************************************************************************/( [6 S9 e1 n' R8 ~
/*                                                                          */
) E6 j3 G0 D4 \' ?6 a/*              GPIO 管脚复用配置                                           */
, H: L2 A" |8 [& M) n5 B  K6 @) C/*                                                                          */, x( z' Z- ?1 p+ x0 T* _( Z
/****************************************************************************/
# [6 a0 ?- _" w  U% X$ O& J; Dvoid GPIOBankPinMuxSet(void)
5 ~' m! i( f9 ^; b0 z{
9 D6 I" V4 w8 {2 Z  I        EHRPWM1PinMuxSetup();
7 _( L8 m5 h4 e0 T) r
( r2 e+ S* J) i3 f        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
1 [8 h, D! g0 Y5 ^( W# o( [        // 作为捕获功能时管脚方向为输入
6 l5 ?, C4 L2 \8 V# K5 y! W2 c        // 作为辅助脉宽调制时管脚方向为输出( y1 \3 J5 U1 Q, x
    // ECAP2 / APWM2
" }+ e+ p4 r9 P8 g/ d        ECAPPinMuxSetup(2);
+ Y7 v% Q7 o5 U- q5 M: k7 U# K0 U& z) b) f* ?! _2 G2 a
        // ECAP2 / APWM2方向设置为输入: N. h- e7 q, g7 F9 n' U0 }* f
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
& \( U4 M6 t! @}+ h; h, @% o+ Y& v  a. n

3 R, \0 n- h1 l' d" q+ b. D; t/****************************************************************************/
4 s4 k0 `+ o* H# o/*                                                                          */: e( U4 `# C6 F! X5 W3 k: t
/*              PWM 输出波形                                                */
5 w2 N5 A. _1 h; M8 c" m/*                                                                          */
1 O2 G. W% g1 |! ~" c/****************************************************************************/
" [8 c+ F4 ]. `) a; k9 [void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
0 K/ C+ j) O' H{
: C4 d; D6 s' s( K1 b5 J( K    // 时间基准配置
/ Q( L! O7 C6 g    // 时钟配置
0 b/ P5 ^3 m& r0 W# M( W% D; V    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);% v& i! ]. C$ p# x; j
6 [  N% u/ d$ N% F: Y( w
    // 配置周期* a3 z) t6 @  ^$ P. W4 _/ g
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
+ o1 d0 w) }2 \. f! d' N! o$ f' s                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);2 u7 D, {* I/ d! `

% |7 d. K. V$ [" |, d" q6 _    // 禁用输入同步信号
$ V2 Q- j; F  [+ n    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
7 |1 x% C1 k7 w6 M: ^
* S& L# n2 {9 o6 ]3 ^    // 禁用输出同步信号
' O1 |, B$ J. h# a& h    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);* q; y4 h1 {% `
2 {" s  t4 n" P) i6 A
    // 仿真(DEBUG)模式行为配置
, |# w' T' s; F( i# ^) i3 t    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);* a0 Z5 P  P  q/ C
: l! |8 q' n( [. T2 o$ y7 O% k
    // 配置计数比较器子模块# F: h& \/ c! B3 U, o4 a  D: u
    // 加载比较器 A 值
/ A& q# `* @6 V# w6 W: x    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
% k* N& d3 v9 {& `& d7 C                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- i  b1 f2 r) I$ y- V1 T
' ]3 F2 W! c3 J    // 加载比较器 B 值
- l$ W* x, i; @- A' i    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
4 s1 c( d" s9 q4 r; ?                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
8 f6 q" \. U! S/ g
% E% r/ s8 E# y6 a+ C" [7 u& Z4 N    // 功能限定配置(输出引脚触发方式设定)
' Y/ P2 R5 x4 m/ Y, Y8 k    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
/ S9 e+ q# }$ n- c6 @' c) D    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
4 a2 W% M: e. J2 v                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
0 K; c3 o1 _% h9 R% l                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ _. L3 Y+ G6 P* D0 S: O, R/ m5 S! [# c  x0 J
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
: H& f1 y, Q- T. ]    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
8 I6 e# I% N: a
2 ~, H; z* ?$ l/ u- X3 U7 V% F    // 禁用斩波子模块
( b) T8 Z: y8 ]+ z! k: z    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);' d2 I: B' h; q" I

, V. x& q- W' F* q  \    // 禁用错误控制事件
" v" \; o: M8 R6 }    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);) f& y, k  u% Q3 z. }* r1 R
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
8 y' X; g1 {3 \! g, V
3 n4 G& A9 @9 m, k1 `    // 事件触发配置
7 G" H) Y6 J9 `: E; T    // 每三次事件发生产生中断
- @$ R( r5 m1 v4 f    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);% R, A2 }# M( f1 _# k
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件4 h8 T6 U8 V  n- l- L# `
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);% H, j7 A2 {/ A( J2 ~
    // 使能中断- q7 H" z2 C; z
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
9 E4 G( B% A5 j. J3 j, a
. u7 n1 N2 s: e5 v    // 禁用高精度子模块
2 a3 ^4 y5 V4 i    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
% }: W- g' h1 B5 [6 u- q; h% Y" |6 ]& n5 e3 ?+ N8 a
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);, P& m! p: K/ s9 _; s. V+ ~- N; o. ~
}
# j5 A+ x4 t) D9 L* D; {
1 G/ Y7 Y# x- T1 E# m4 E( |void ChopperWaveform(void)
/ t6 {* h" R* T  B, X! L{! l: j0 s' A6 u: `. f( H: Q
    // 50% 占空比
2 C# I4 V1 f  J    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
' M7 |+ i$ N0 w! C* K6 V4 i    // 4 分频& c: k, H  E" S  _
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);( C9 h% \# P- y& x
    // 单个脉冲宽度* |  I2 e: R9 R
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);2 J* D: m; ^3 F
    // 使能斩波子模块
& n+ H5 V+ e4 F1 h    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
! }" ^4 g' l% U6 }% M  B}
9 a0 B! d5 G( [( S8 x! C: @: p* P& k5 y2 W! N6 H
/****************************************************************************/4 s3 A- X$ `7 Z: f) G1 Z( b) ^! J
/*                                                                          */
( y) X, b; }! k9 @" v5 H/*              PWM 中断初始化                                              */
- H0 [( w+ y* x3 N& A' C; @1 S/*                                                                          */4 Q) K4 `1 ^) X6 H, Z6 ]5 f! N+ D
/****************************************************************************/5 u! ?" I! c6 _; f; d% ~+ G
void PWMInterruptInit(void)- a% M5 f% b% A; F% ]
{
& s% K; z7 s) e" T) T# X# c        // 注册中断服务函数- O& X- o1 D  _: w) @( P8 {
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);5 c. P. H+ m, x6 A" J" D
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
8 a5 N; V2 W. M+ i$ T2 R/ C6 ~* \' x. S+ _$ |) G# @
        // 映射中断  Q2 ?5 F5 M/ x' w
        IntChannelSet(SYS_INT_EHRPWM1, 2);) U. T- _3 z/ o: f0 S( Q
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);/ J5 ^: N( x2 x1 O- t& [( G
7 L4 e! V& `' a; n$ `" ^; `
        // 使能中断
8 W1 m; A8 q, Y- h) {7 z8 |# |8 J8 ?        IntSystemEnable(SYS_INT_EHRPWM1);1 c8 A% t* l9 r* ~6 U- @* u3 m2 Z
        IntSystemEnable(SYS_INT_EHRPWM1TZ);: v* j& G& o) M
}
; G# s8 Y: j" [4 f7 Z1 w
5 w# {; p+ e" s6 e/****************************************************************************/! V7 ?' O, O7 M% f
/*                                                                          */
$ c" n/ _$ q9 Q, ]/*              ARM 中断初始化                                              */
( _4 u! x  @0 K2 n2 ~& i4 ]7 A6 g/*                                                                          */
: q5 u! Z. d$ q' A; c/****************************************************************************/) @- T9 ?* C( D, F" ^2 k3 d
void InterruptInit(void)% Z( R# _/ h+ h) N0 ]5 P& r& S: I$ P
{
4 n& ?; b$ o' f. l" `. ^. n3 [        // 初始化 ARM 中断控制器3 u3 o+ i; i6 v/ N
        IntAINTCInit();
9 C3 S4 j: [" t3 d4 Q8 J. S% ?! t* `' X3 X: u4 \' Q0 {
        // 使能 IRQ(CPSR)+ _. b7 @+ m7 `) G; E$ E7 M
        IntMasterIRQEnable();
6 [) I! Q( O3 @- c% h; I
- h* b& k% e2 a  ~        // 使能中断(AINTC GER). l9 M' Q) u) F- i$ w. V
        IntGlobalEnable();
1 Z# {* R& k$ D) \  K8 w" h0 z  q8 K
, M$ F4 G% ~7 V( [9 H1 r- \% X        // 使能中断(AINTC HIER)
0 i' |0 k, O% K' Z  h        IntIRQEnable();9 T/ l* z- E2 O' }! c% K
}7 Y5 w" x" a+ ^2 V. H2 Z1 F
* _5 V4 G0 \# i0 T1 j7 q' Y3 S. P
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
$ N  x# A- n  t8 B/*                                                                          */
  E! p9 t3 r( q  E/*              中断服务函数                                                */4 F3 g+ y" g9 Y' i
/*                                                                          */
2 d3 J& W9 d% k: a) K9 J/****************************************************************************/
) }( a( p% q! f0 Lvoid PWMEventIsr(void)7 [& u7 j' J* F" {
{
4 K' e$ N+ ^$ Z3 t        IntSystemStatusClear(SYS_INT_EHRPWM1);1 B* H# K" a4 h+ ~. |: [" P
, h* I( h  P; ?6 C4 j+ J8 M
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
$ z& p, F$ e1 m* d5 V. _}8 Y# o9 W  C7 @+ G4 W  }5 h0 v9 G

0 R  c' g) E. x* \" M8 H& mvoid PWMTZIsr(void)$ h. N) z. d6 x  ~
{* n' F* G/ O" w3 Y: k. z- }0 K
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);! I3 |. R  ]" ?2 V8 R. v

* r, q+ z( k$ f% R: p- k# w    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
/ ~% X' P/ s6 f}% k/ k% D8 R* U; [& q9 B; t

8 R3 A% |" m' w/ i$ ^9 z/****************************************************************************/
. e& e/ {& r; {' s& E- z/ V* H/*                                                                          */* n5 W; k/ Z, A1 \1 O
/*              初始化捕获模块                                              */
3 s$ e- w  p' o/*                                                                          *// K3 ^- M# v+ C  O/ Y& [
/****************************************************************************/
* A$ F; x2 Y7 U+ {" xvoid ECAPInit(void)' ^9 _8 }5 x: K) ]. v
{
1 Z& m0 }5 D5 G6 Z. }        /*-----设置 ECCTL1-----*/
4 v8 F* ^) j7 ~& b, v        // 使能CAP寄存器装载- o7 g- v- r$ o8 |' l' I
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);  t) B/ c: V3 B  t+ ?
        // 设置预分频值.
) C1 _0 e8 S; k1 L        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);2 @0 X9 Q6 }/ s$ E  @6 y
        // 上升沿触发捕获事件  t) J( Q( j4 z
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
4 a- ?; J! y% _- W        // 输入捕获后重新装载计数器值.' y: u8 K# |) M2 B
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);+ q. N$ d: H6 I: b$ F" ]4 w. X
3 w" b1 b6 A4 l/ d" A" l& V/ h; J
        /*-----设置 ECCTL2-----*/+ G& z4 l9 w  f
        // 连续模式
2 S( g9 Z! I9 v1 O& Z+ l- d        ECAPContinousModeConfig(SOC_ECAP_2_REGS);9 E+ O1 T. R/ W- Q
        // ECAP计数器TSCTR持续计数
$ E% `1 K! Q! C6 k" a! [        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
$ B6 _( s* a& x9 O4 Y3 R, w6 ]4 u        // 禁用同步输出和同步输入
9 l: X- j0 d9 J% o4 P, p0 e        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
# ~3 t; N0 u. w' y6 E        // 配置 ECAP 2 为 CAPTURE 模式: R& d; [5 j0 R& W- P# k
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);4 D; B; E5 s/ a6 Q

/ R1 r+ X; e/ i5 W- k        // 使能中断; ?$ m5 r8 f7 F' t$ H: o, B
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);& ^, t6 n, ~7 t1 Y9 A
}7 S  x# X" _2 C& L7 O9 w. c9 z

% _. X6 ?5 K+ `9 |' w) }' g/****************************************************************************/$ S' Z  ^% A8 U5 h8 B% {
/*                                                                          */% Y# m" Q! E, T- W! F/ V! c" h1 Q
/*              取得捕获结果                                                *// P/ w" |% ?' S" i6 t
/*                                                                          */6 `) X! ?! d; ^9 b9 C- O" |
/****************************************************************************/
' g% a- M, U: @- _1 g. Munsigned int ECAPRead(void)
% K, h/ U0 U" h9 U# v0 @: L{, R4 ^0 U# W, c
        unsigned int capvalue;
6 T& L' l4 t3 m% ~' ^        unsigned long frequency;6 c. }4 q  r% w# P. {

7 k( X1 |8 `. H: n. o  D+ I$ V        // Event1 中断标志5 s9 a6 M6 U1 r# j
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
/ s- h+ h* m: W        {
, W% p2 x' s0 Y                // 取得捕获计数1 V8 u$ o2 n3 G9 x6 L4 P* p: \6 v; r
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
; x( S, O. r' Y( B1 \) [                capvalue = ECAPResult.cap1;
4 u  N4 Y) Q; m. o, ^* ?% L! n8 W; j6 v) |
                // CAPTRUE 模块 228M 时钟主频  a1 ]4 h: U; j" R7 G0 E8 Z9 X9 t9 ^
                frequency  =  228000000/capvalue;
0 Z' i% [$ w$ r4 @                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
7 S8 e5 C, e% r3 P+ N/ M/ j) g# h, h0 C
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
: @# o1 F& {  y! [  Y: h0 ~& U//                IntEventClear(SYS_INT_ECAP2);, t+ `! c6 b6 M2 N
        }
9 ]" P) g0 a* @        return frequency;3 [" m1 g! `+ }. Y
}
9 _) K; |& h7 J. I, P4 j
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
, K/ z6 M! u* Z$ o

本帖子中包含更多资源

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

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-4-29 00:22 , Processed in 0.045557 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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