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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:- j7 L* a7 d3 m, U2 ]/ q5 S
main文件:
0 }. n  G- r- Z& F4 |# K% x5 einterrupt void interrupt4(void)  ) D6 F( t, h! D$ z* e, X
{
' ^' x7 h" d: k) u0 P  Uint32 sample;
: ^; I% U: ]1 |1 N. L. x! z4 _0 r: o, _# e9 X0 j
  sample = input_sample(); // read L + R samples from ADC
7 ]1 j- p0 Y/ M  output_sample(sample);   // write L + R samples to DAC + n9 I* _! b% }! R; R$ X/ p
  return;  J) |8 ^! B7 p' K& u
}
3 J( V% m- Y& L6 H2 |% @; }
; j0 u' T" g' F& u1 E- G3 Rint main( void )$ a4 ?4 K" w  Z$ K4 [$ t( `
{
9 o$ K6 J# U6 [5 a2 T1 a) O
( Y3 K+ Q! [' T    /* Initialize BSL */. u4 v0 q1 W0 O8 \9 R
    EVMC6747_init( );
' K, ^6 K: F5 D  w' Q+ Q        /* Call evmc6747_intr function */$ h. i: a) E8 d/ `: _* J, [3 Y
    aic3106_init( );; w* s: b1 D5 I8 ]; K# r0 H
        while(1);4 Y6 \& A2 J/ O8 [. A  c( I7 H* P+ v
}
& X  K" O1 {- N: a% B/ q2 Q& ]' ^  O. B9 u

* C7 H% `5 \, n* raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 n1 G% }1 g$ b/* Initialize MCASP1 */& N( S) q+ C3 }  K
    mcasp = &MCASP_MODULE_1;
: N4 _/ q. s8 D    mcasp->regs->GBLCTL  = 0;       // Reset3 q5 z4 d# @/ Q; v7 l5 s
    mcasp->regs->RGBLCTL = 0;       // Reset RX
) |9 ?7 i) o+ E9 U: x& ]6 e1 f    mcasp->regs->XGBLCTL = 0;       // Reset TX, J  p2 d' y& t4 q
    mcasp->regs->PWRDEMU = 1;       // Free-running
) y4 D0 m, F9 G  h3 P6 p   // configure McASP0 receive registers6 D) {' d, M; Q+ _1 F3 P7 Y0 Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& _% W, o) K# c$ |5 X% F' b: j0 G! B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 @+ }0 V$ Y) w7 r5 l    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 U% T/ ~* h+ r7 R/ c6 O! w% w    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% A9 K$ A. Z- u2 W, s) ?
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 C4 v5 a( ?' u3 p* e7 A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. ]" W& n% g' q1 ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ K# C6 x2 C' @1 C! D6 W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; b' t9 E( A  h6 }9 {3 U0 l( X& S4 U' e2 A% t' ?3 R. V
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 e# g4 i/ p5 V: Q7 E4 r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 V' e0 A8 R. T0 k1 Z) k    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ M, b5 _# J: v1 k" n
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; |+ g8 t/ I4 I( H; s  }; t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ F- c! r5 P8 w- b& I    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 V+ P$ i1 ~" w% h9 x7 R; z    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! O( \6 y" r# ~8 T    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 K( M% t) f8 d" M) n1 ]9 d- ~2 r' Y* r# q, b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; C' }7 @( B% t( ?) f+ j: T
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 j1 P" t3 W4 I2 C# ]: z; J    mcasp->regs->PFUNC      = 0;          // All MCASPs7 @( D7 f2 P3 R+ ~
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) Z5 `( ~; v8 n

  Q# b$ G1 d: e: ^6 x# r    mcasp->regs->DITCTL     = 0x00000000; // Not used
! O) L, O* l" c- B- ]0 i    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; ~1 f( T: x1 {' j/ e    mcasp->regs->AMUTE      = 0x00000000; // Not used
- g9 V: f6 b: U* B* u" N# F: ^+ f( Y2 n, w- U7 X% |2 n
/* Starting sections of the McASP*/9 y8 G- w& ^* Q7 r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & D- @5 f. f* Q+ ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' ?$ H' {6 g1 |/ x. M1 L
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; s, |  t- w! p1 P: ?7 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 P" ?3 f/ i) a# q! W' l
4 Y+ S) x6 D4 n3 Q! b' q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) m; f4 B6 Q& Z5 x# p% f2 T0 {- F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* @# X$ U1 U/ p2 v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 X2 U% e  D  g3 v- @% h; |4 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- U- q+ A7 Z% [' s8 |* h$ x, G
! C/ l" B9 {3 s' j$ x" H/ ?5 z
    mcasp->regs->XSTAT = 0x0000ffff; + W6 |& \4 o% m* t& n
    mcasp->regs->RSTAT = 0x0000ffff; . q! E: q/ y# ~! [
& C% _- I1 k3 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ B: f. a. ]% _, l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% _' ^7 H; o$ v* K, y6 }4 G8 |$ I1 g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : P& w1 S6 J* Q. J" p9 D4 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- z/ Z- A0 @: Z# N, V* [7 S
; k7 F! Z! T3 D$ \. c    /* Write a 0, so that no underrun occurs after releasing the state machine */$ c# w5 O& \: B  z0 s$ w
    mcasp->regs->XBUF5 = 0;* M9 v/ k; h+ u8 B
    mcasp->regs->RBUF0 = 0;8 R0 r4 p: A  n* m7 I/ L
) n2 o. P$ a8 G+ L; F: s- k. N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 v6 }" q& }/ C+ P/ ?0 K, O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# @' b& {5 z9 }5 h
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! S: R7 ~0 x- _3 x; @  B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 R. V4 E6 x  S" \: i
' z( p6 I! Q; d  i2 M5 Z/ U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, y1 I$ n( p, ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" t& p7 `/ Q6 q1 Z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 f" }* B3 N4 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( z( T+ U( o+ j4 e' q6 `' O, `3 [
    CSR = 0x0000;0 a! s0 V1 W. x4 J/ C0 ~, o
    INTC_INTMUX1 = 0x3d;) f" R0 s0 r) _7 o7 X
    ISTP = (unsigned int)vectors;
# m- e7 l% `# }2 Y9 l3 k    ICR = 0xFFF0;  
+ B) |% U- V# [    IER |= 0x12;  ( s# f$ z2 S2 \$ h% f. W
    CSR |= 0x01;  ; k* N: ^4 |* l7 f
3 D8 ]$ q/ k5 l/ F1 ^

3 ^) x" M% i% ~; X5 c& m. _8 y# e$ H0 k3 D. Z
还有就是两个输入输出函数:
8 x# P, |" P* X" Z# K% Q" Hvoid output_sample(Int32 out_data)
& S7 A: \$ o6 w+ p6 `{: i2 C" p- p1 m- q0 h7 q) B0 Q
  AIC31_data.uint = out_data;  
! }$ F$ q& K. L/ y# M+ S5 W. W  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 q4 r1 A4 ~7 q" W0 s% |
}) P  q+ L" x+ G- B1 ]( `
( Z0 P0 w/ H6 v% C2 s
Int32 input_sample(void)6 h( {: u* Q1 o" N" V
{  
* f1 I: l' P! X/ T( t# E  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ A8 ?! m+ g4 e: K% S9 T' g, W2 c% z
  return (AIC31_data.uint);; ]: Q0 O8 y+ E% S' k# R8 T( ~
}4 r7 ^2 A' Y$ _2 G7 i
3 d: l7 E) |; O, I2 Z
分享到:  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-3-30 17:01 , Processed in 0.040511 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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