C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 S. V; L' k% t2 S6 m# {( @1 Emain文件:
; [. I5 V' P4 Z) Y# {9 _/ Xinterrupt void interrupt4(void)  
, r3 a8 n( K" m7 M$ q. m. `{
9 ~1 w5 ?1 L9 ?; S  Uint32 sample;
) y+ r/ U% m; {( w" G  a6 {9 C& c6 k
  G, |4 B+ B, |  sample = input_sample(); // read L + R samples from ADC
3 k3 t% Z+ A( d9 h, g4 A5 o  output_sample(sample);   // write L + R samples to DAC . X' S) M7 Q) ^  {" a
  return;# E5 D8 v- T0 S
}
' J; D% L4 h8 t
& x* y& @1 ~" K* y  |, b: e, j% D& Rint main( void )
: Y- T8 Y" K! q{" p$ e8 F7 [7 H; p# u* M$ n

/ D$ ?, @1 Q+ J    /* Initialize BSL */, P. C2 d7 V- |* A, j/ J8 v
    EVMC6747_init( );, t$ W& Z+ K6 k7 c0 @4 x1 w
        /* Call evmc6747_intr function */
0 a' g4 W( S2 f) M, \# e. i! @. z    aic3106_init( );
3 g+ Y( m5 }0 v* z2 ~0 [8 U- I        while(1);
6 ?5 r  K0 S$ Q4 Y3 f}
# y- W7 k& w% G0 t+ n( q2 d+ b* s1 f: I% `& C

* D: x% u- S7 x, {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' B  |, [8 p$ J1 ^% M4 f3 x6 m; Z
/* Initialize MCASP1 */3 W9 m1 g% {( l0 ^0 Y% b$ n3 S
    mcasp = &MCASP_MODULE_1;# K! z2 o8 \$ K( @. D
    mcasp->regs->GBLCTL  = 0;       // Reset
/ g; {! U. s, t" d. M    mcasp->regs->RGBLCTL = 0;       // Reset RX
, W; k) h% h& t7 q    mcasp->regs->XGBLCTL = 0;       // Reset TX
. v3 j+ y5 ~+ i% H" x    mcasp->regs->PWRDEMU = 1;       // Free-running
* G5 z/ g% q- c! k( |   // configure McASP0 receive registers, a. L/ a% V0 a& l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" g2 X" S! z+ o2 L; Q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 ]. j* G5 u+ m' ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 n+ O: @7 @+ t$ I( ?* ]    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 j! }% C( D! g) q6 Q* l5 t* C1 j8 q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) I. V! w$ O2 S2 \+ [& x    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ \- b( K7 v! \; m, @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" C! ?% y/ n1 i( f8 o; s2 |/ l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 }- s5 X3 x$ S  _: F0 ]; Q+ A' Y3 T- t; D, P4 |
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 A# q, F( R. |, b, n+ E7 Z1 D7 S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 D( [. P( P# H& X5 _# b* Q+ G    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" w  J; z& ~2 e+ ^7 T    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. L2 U0 w( ^, ^! h  f  D    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% Z* _9 b. c0 W% o$ z' m  ]
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 c5 S0 |! b1 \6 \    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* u5 d( S/ H/ D  D' D$ u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ z! s: ~; G  a
: q* |) t+ E5 J/ s$ C    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# |1 a+ J2 J2 Y4 @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 C9 ^0 M$ n/ b* I+ x8 W& }# c3 B
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 c% j" i% \  K6 E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- s" x- n0 a( F' x  n1 b) [
, _2 O0 Z; X6 S0 R) y9 j
    mcasp->regs->DITCTL     = 0x00000000; // Not used, K/ i; G/ K; z7 n0 h! T- R
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& }1 D9 k! g1 E    mcasp->regs->AMUTE      = 0x00000000; // Not used
- T0 {& I. O* a8 N3 w: H
5 J+ \: ]. W3 a/* Starting sections of the McASP*/
5 R5 d' E4 J2 E9 }7 ^; K, v/ B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) E/ N# V4 u, ?2 ^* Y9 l# G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 o  F; k3 G7 `& x: u) v4 C    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 W% r  h! @! D4 J1 h1 t$ P& _) R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 A7 ^! d3 ]. |* I1 a2 U" D1 X; f: P1 |
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 v3 i6 d* L, q9 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ r& \$ D; v0 q5 `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 M; @& l$ I6 e2 k( _5 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ u6 Z$ q1 ?2 V0 n* j

5 E' `5 z( |$ m" O* X3 K: T1 N9 r& m    mcasp->regs->XSTAT = 0x0000ffff;
0 s/ b+ F9 w; u/ ]2 ], A' c    mcasp->regs->RSTAT = 0x0000ffff; ) I  n7 b- ^- ^- u% f4 _
2 l' }$ Z! ~+ m+ `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 D7 K  v6 n5 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ e+ s; w. x: v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 ^6 u2 w! g9 D9 h, `$ g, H- a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 n& q, x2 L7 Q. e' i# h2 k3 g

; S  S! o# n$ K& X3 g: A    /* Write a 0, so that no underrun occurs after releasing the state machine */- t1 m. M2 ]( g8 u# G$ v1 }
    mcasp->regs->XBUF5 = 0;
2 [/ _9 Z3 i! I& Q" a    mcasp->regs->RBUF0 = 0;) y- [7 y3 \0 A* h* j% S! P: p5 V
1 u5 _) t; t0 }5 f3 m: b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' D  g4 E  @7 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& {* p/ Q: L* i6 }) k    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! ]$ |9 T; N- q# ?2 y  b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- `2 t/ L* ^( h  w4 \
: w. f' |) t, [! X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 i. b+ m- m2 x/ l0 g$ t8 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 b7 ~0 i4 O% \$ j/ E8 |+ o- G! o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : B& m; G5 ^; p! ?, T& s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 B5 M, P' ^) g: _
- Y7 v7 L) f4 h3 N    CSR = 0x0000;
4 _' Q1 C3 y/ U+ L1 l7 z    INTC_INTMUX1 = 0x3d;6 {4 b0 @( ^/ W$ K" `: T
    ISTP = (unsigned int)vectors;
; J1 d: A  @1 z* u- a    ICR = 0xFFF0;  
: U* S7 S( W0 P' F6 K% Z    IER |= 0x12;  6 N3 G4 g2 s" u/ w" c$ I" Z, Y2 W
    CSR |= 0x01;  9 C' E% T) _; w" a  {& z0 d

  m4 l5 {! R* T4 \8 b4 j( E5 R- o4 {/ u, H: M" G2 I
# M5 V$ n! g# X/ L+ M; l  M
还有就是两个输入输出函数:+ v$ Y- {( V! O3 l8 Z, W
void output_sample(Int32 out_data)- Q0 L) v1 M) J+ A! o) [& r
{
! Q. }+ ]! m1 h& S6 U" l, @  AIC31_data.uint = out_data;  5 C# C7 V4 \2 W$ S  m! W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 j- N+ u) ?, l5 R3 s
}# A, w% W, v  G: B7 c7 Q
- x$ A! ]9 b' z% z" ^& u
Int32 input_sample(void)/ _. O/ k2 B9 M) P1 y
{  
- j! r2 X3 \; v+ \  AIC31_data.uint = MCASP1_RBUF0_32BIT;- j! v6 y: V( }9 J1 m2 f# B
  return (AIC31_data.uint);: W: q: m7 j2 i. W
}* s+ ?1 {- T. y- f# K: M% N! q
$ t0 v0 _; x! Z/ }1 q
分享到:  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, 2025-12-24 11:07 , Processed in 0.037087 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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