C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6712|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! f5 `; ]  i% _/ S( W; ^- `% _* {
main文件:
* J! _: C9 K6 W6 `, Ointerrupt void interrupt4(void)  
5 G# S( ^, g( B- M0 o{7 M, ]6 ~/ i- k' z! [7 c
  Uint32 sample;
' D  X. I0 m9 n- P
: x8 P; U4 \* X0 V& h7 G' Y4 \  sample = input_sample(); // read L + R samples from ADC/ `( T1 m+ f8 h7 \' M
  output_sample(sample);   // write L + R samples to DAC 2 t1 @# L2 ~9 o# F
  return;
% p. N& o0 Y0 ]& R+ h$ t}
$ S9 O( i, A5 m9 T3 e
2 l/ |$ `/ E3 {$ ^1 iint main( void )2 O' u5 |* n, s6 Z1 T
{
: S+ S- E7 s4 m1 ~
5 d4 v# o7 }6 d    /* Initialize BSL */
! [9 @3 N- F7 Z1 j( d$ y    EVMC6747_init( );- W8 C5 K1 ?" H
        /* Call evmc6747_intr function */
3 U& F' l: X" C9 o9 m    aic3106_init( );/ r& u% C( L0 v- l
        while(1);
- g1 {2 F& m- ~0 m}8 m$ h2 L1 r9 C
  N- s& M3 F2 ?

1 r& c8 ^3 J/ Q) ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 P- t+ O9 |; c& X. [4 c
/* Initialize MCASP1 */- F5 S2 J! h# \( t
    mcasp = &MCASP_MODULE_1;4 K9 G. p: `/ X' [
    mcasp->regs->GBLCTL  = 0;       // Reset
+ ?8 c1 j! P, B4 b; i    mcasp->regs->RGBLCTL = 0;       // Reset RX
: q( P" c: W+ g. F3 f5 r2 B    mcasp->regs->XGBLCTL = 0;       // Reset TX- L" D. Y$ A3 q1 W) I  `4 I& Y
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 x) {* `' G3 X6 i5 d   // configure McASP0 receive registers
) t( h9 v% U4 {6 G7 L    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 B# G1 d, g3 P- _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: C- ^& n4 |! E# _% H# m# L: _- X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ G% e1 S2 Z5 a6 i5 [! t# ?    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( r1 m3 X8 W1 r* V% p) V: d    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! B/ o) Z; b3 U6 e2 q5 m7 j
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) M6 ]8 [) s% o5 w; Q4 p9 e    mcasp->regs->RINTCTL    = 0x00000000; // Not used  O9 D1 y1 P+ r' o) @
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ ?4 C4 H7 n' l7 }2 J
3 x+ S  C0 `; u" `7 K2 ?
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: n+ w# R. U. \/ @
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) {; s6 r$ s$ i3 E6 S    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! P: ~* x. ?, Z0 B1 D' M- P
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 M0 [, S* b" T; W" d
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& O& v" \3 n# @+ W1 c
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ p- P- V) `+ I9 G" l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- p0 \9 G/ ]& }6 c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* Q8 b* M- ]8 t/ g% q7 W. V  G

( M( ]5 Y- B! J* y$ S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 q0 v9 O3 s* ]* U; G" e    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ t- x6 n! w: m2 k    mcasp->regs->PFUNC      = 0;          // All MCASPs4 \6 ?$ _, t! W3 j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& o5 h8 [: ]* X- {) v5 R% _) V- Y) C: T
    mcasp->regs->DITCTL     = 0x00000000; // Not used. B9 \3 h9 K6 i+ i* h: k4 m. H% v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% L0 X! w& M$ `9 }- o9 C    mcasp->regs->AMUTE      = 0x00000000; // Not used& u0 X* y7 M; I0 a

, S- _, j" V2 f0 P; t/* Starting sections of the McASP*/
3 R- G! y* m) k. ~, R; J" F    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! C* |) P8 s* S' _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' X0 ^$ w+ G, o/ C8 a" `0 i  S" b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& X- P- K8 X# N2 R) i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( j: r4 L. y( ~7 c# m9 O5 H. O
. M$ _; X% w2 p; e+ \( o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# N$ v* _* c8 E' s5 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) v( B/ w1 h/ X5 }3 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- q  g9 `: G0 B( e, }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( r0 h, o) G/ f7 ]7 M
! X$ q, O, Q2 B/ q" L4 S    mcasp->regs->XSTAT = 0x0000ffff;   i' Z+ D# F5 A% t8 c
    mcasp->regs->RSTAT = 0x0000ffff;
( J2 s* f1 u6 _) i
8 D$ C7 e! k3 J/ g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 m. @: K  C! o! Z* t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 y4 x. a8 U6 I, E& ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  g9 o; e5 G" {% s6 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 p& m' `$ [* Q5 O- h

  ^5 _; s! U2 I% N6 i/ F& K    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 q% W  F# ^" C    mcasp->regs->XBUF5 = 0;
, Z$ f5 l6 h5 @4 F. D* Z    mcasp->regs->RBUF0 = 0;: w+ T9 M# }  \& W4 ?
, x- g% r5 q$ L$ f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 E) Q% }9 u. M1 K" |9 y: v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 N" V$ p0 [' o) |3 n/ W7 N) c; Q7 Z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% ^  I( L' H0 z# z/ K( d9 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" H5 @1 ^+ G8 F1 n9 l
6 W# B0 a# {& _$ z# A. E( [! V
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ k; d$ q2 |3 ~( L0 q" W+ S6 p' n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 D- X* y* ?- O$ Y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 G* ^) x8 c6 ?7 |8 ~; Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, P" ~, D! K3 _0 d4 p
8 Y2 j$ A9 S( {0 N) N9 F
    CSR = 0x0000;
7 E3 V5 P: Y  e# Y* H) w# N    INTC_INTMUX1 = 0x3d;
; R. @8 q, ~" i    ISTP = (unsigned int)vectors;
0 }( W/ G- Z8 @3 g    ICR = 0xFFF0;  
9 g' y) m; f* I/ j" ^6 a    IER |= 0x12;  - W8 y) o2 O7 M* O
    CSR |= 0x01;  . ~8 B# _! M/ E! b

# v, j& `6 ?: H" S# n0 }1 @# M3 ?3 r% s  G1 y
& F7 ]) X  r  ?; D
还有就是两个输入输出函数:
+ A" ]5 Q  o- V' u8 Yvoid output_sample(Int32 out_data)" S# o& m4 q2 F. `+ m+ T
{
8 Q: i0 T3 L' u' l  AIC31_data.uint = out_data;  
$ u7 T- b8 b5 {4 L  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 A6 F: y. h! D}* ?( ~6 v* w9 i3 {6 P* e8 C

8 l3 f. N# J1 `$ d2 J6 [6 P. @Int32 input_sample(void)
7 p, v$ z2 m6 M- s{  
, H' K9 i! l5 _% E, e  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 M* N3 W; c: H; v, F0 m
  return (AIC31_data.uint);( Q2 r) m& c9 \8 s
}# y) E5 Z8 X7 {2 o% Q3 a

( L* q2 t8 l/ l# |  h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-4-4 23:54 , Processed in 0.041622 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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