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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* {( w- n2 v7 {2 O0 q  Q' l8 s+ b2 z
main文件:! t0 ]" j4 R, V$ o+ X
interrupt void interrupt4(void)  0 O1 q* |  x# I- S# P; ?
{
: q$ n" w' `: ~& {3 {  Uint32 sample;
3 ^% n: S2 @1 e" ~5 ?+ z8 L8 b3 E9 @6 p. L" o
  sample = input_sample(); // read L + R samples from ADC" _, A( ^! B; L7 U1 V: I8 t. M
  output_sample(sample);   // write L + R samples to DAC
: i( z, a2 ^0 q. X2 v) _  return;" v4 P' c. A- U/ s8 e! j0 s$ ~
}3 N5 d2 V4 S" U2 |

0 v- m" l6 f( yint main( void )
# I! h; P  P+ N. k; d# \' u{+ I' F/ Y% v5 o6 R4 r
2 w4 F% h$ a3 Y( N/ V
    /* Initialize BSL */; v& J/ U2 b! J
    EVMC6747_init( );
( R; B5 V1 h& b0 M- O5 ?        /* Call evmc6747_intr function */
) j( O+ U, O  n) C    aic3106_init( );
4 u; S5 d2 c" S& ~        while(1);
2 K8 y- a$ [/ S1 D- n" f7 C% L}, g5 w& `( p2 Z3 x; \' i

% s6 i$ A3 ^7 |0 Q) m& [5 R  l9 _: ^6 H' ^/ h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: G$ ~0 g/ [6 H0 s5 ^/ ]) w$ f$ ?* R/* Initialize MCASP1 */& Z. i, x7 `0 A1 X" u3 V; y
    mcasp = &MCASP_MODULE_1;5 l: f1 K! ?6 N) e
    mcasp->regs->GBLCTL  = 0;       // Reset$ g( t$ w+ H  [' m  x2 |
    mcasp->regs->RGBLCTL = 0;       // Reset RX; X+ T  U5 x, J7 T6 X( o
    mcasp->regs->XGBLCTL = 0;       // Reset TX0 r/ D$ x; n$ M. N! [. x
    mcasp->regs->PWRDEMU = 1;       // Free-running* |7 N  n* ]" e* y- v( \
   // configure McASP0 receive registers
/ r/ J5 {+ ~) D* l( _# P6 H; E    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 D' T# H  F+ }  U
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 G" r4 o" `# g8 D/ [1 p! Z) c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 Z# C2 H' O9 A! b7 W5 [( }6 I3 x
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ T: _3 b' F- [8 R, F    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' q7 }# S% c6 l: r
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ {, m4 V4 z, J
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 S: H! A# I- m$ h- a0 g- [9 b  Y- S( g    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: v( S( C1 d3 ?1 m6 c" A
/ r# N% S3 D9 h3 z1 I; j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 A1 L6 _6 h1 j' b% r! Y; S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 t1 M# l% b: C4 _+ Z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# H- t& h8 h) \5 K8 y( S. L+ K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) U0 E# {2 }  i) W: c: J    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: p5 b! j* p9 v. v* N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. u2 e* J; u+ I3 G9 k9 Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 T( }) X0 w) n8 P
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ ]8 _% b& b8 R$ {8 L1 q! o: y, i" y" v+ Q: Q$ `. W3 {( H1 i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 p! `% p# T7 q5 {* [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 Q* L# O, w- a+ e0 c    mcasp->regs->PFUNC      = 0;          // All MCASPs: S5 n, E3 Z6 e/ N  M% n, A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ \- U+ p9 n/ a4 ^$ U( z; ^* ?( Y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
' ?8 |6 D& J8 H1 p    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, k: B& ]7 ^! z' p7 r( u5 v3 {: @    mcasp->regs->AMUTE      = 0x00000000; // Not used! @, d8 J3 G, N: w2 X1 i

& Y# ?: ^$ r) k, n0 z1 y& _( T/ [/* Starting sections of the McASP*/9 p* ^: q' w% F9 G3 [/ o
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) E6 F3 Y) l( u# R7 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' @1 A$ n, S4 l* n$ J: n
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* S3 d4 u0 x; l# {( K. [- E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. E6 t+ R. t9 L: i

6 ?4 w1 s( `& @( A) V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: m4 z0 L9 [- E2 K1 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* n. Q" k3 O8 [. C' F    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 N. v  C3 v' z: l* ~6 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 Y$ c; K) ?5 a

6 a* U! s6 r1 c, l: s    mcasp->regs->XSTAT = 0x0000ffff;
8 A" ?% d' H, N- J    mcasp->regs->RSTAT = 0x0000ffff;
; C& U! G3 |, t  |. S( T2 b8 p6 n+ [4 ?/ R; g0 e$ N! k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ N6 p0 }8 h# ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 k5 s  g. m* |! d8 m% J# d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 W" t8 \% \% v' e8 B  S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 g+ x( }" v' r) ^: M
: S# F# v2 y& I% c  x- p
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 M# Z  ~$ _4 i9 N    mcasp->regs->XBUF5 = 0;% O2 B, A  G9 R
    mcasp->regs->RBUF0 = 0;: Q' l+ L: @: B% a7 e; a+ `  }

, w+ u3 \) [# V! `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 b+ K8 y0 D" c" Z' s* f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 G0 L. r% b+ p3 q0 v    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & ~5 l5 R  |- E& M1 U- m" x  d3 j- o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ e) Y3 `% o/ j+ Q: A; X! g6 ]4 U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 B6 i. y+ p9 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. N  W! Q0 E* \& g5 h. l+ H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 Y+ U% u, V' `$ Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! M& x, Q; ^# Q& }; Y6 g

- d4 m: a& p3 s6 _' d& h    CSR = 0x0000;
7 A7 H+ p4 `+ B6 N    INTC_INTMUX1 = 0x3d;5 c0 ~# ]8 d  c% G, F
    ISTP = (unsigned int)vectors;4 m) D; Z+ |0 N6 n& o9 g
    ICR = 0xFFF0;  1 V( t$ Y* E3 b
    IER |= 0x12;  
* {0 x) Q0 U3 Y2 [+ I4 m8 T    CSR |= 0x01;  
& t2 o4 [/ |3 s0 P  E2 Z1 P7 {+ n$ A* B# |
5 D" o1 M" @$ s# @+ V

) r6 y! k" n. |- L- Z% _) ?; {: ]还有就是两个输入输出函数:
/ H6 a0 G  g; y% jvoid output_sample(Int32 out_data)6 I% T  l0 s* g1 c( j+ Y. t/ w
{
) @( D3 i( }/ h; m$ x; J; q  AIC31_data.uint = out_data;  
) H; Z1 n! f$ x) M5 h9 `  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 m" r; K2 @0 C* U}( L" h% R, a5 A7 @- U* N
/ u8 ~! B" D/ M4 L1 M
Int32 input_sample(void)
+ I4 e# `% q1 y8 z: w6 N' b% ~{  8 ^" D4 u- N4 ^4 p* v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;, x6 E8 m9 {- c$ a- @" T
  return (AIC31_data.uint);
* }; b- [: Q+ ^+ V4 W2 E}
6 ?/ ~- i* Q) a( O
* _0 [3 s/ r; F' p8 y
分享到:  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-1-12 23:05 , Processed in 0.041158 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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