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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" W, U3 d( W* y7 c! |main文件:2 y- E0 P; K) A6 R/ E' [( h. @
interrupt void interrupt4(void)  
& s7 E- G5 y( I5 K( a) I{0 l) z2 D  h6 _" d! A, J
  Uint32 sample;0 a* M% F, k2 o* k% K/ _7 I
$ ^3 ~' _# _2 v' f! o& G0 n; P
  sample = input_sample(); // read L + R samples from ADC" M3 n6 C9 @' S
  output_sample(sample);   // write L + R samples to DAC . ^: ?4 f4 i4 ?7 O! p! v' {3 k
  return;
/ f% B; m+ t5 j2 K1 ?}
+ d, ?# D& R# J# ^' I* V5 W2 a# L7 f; ?- U
int main( void )! q8 ]5 i: n1 m6 y
{; q2 O/ y! V" q
! d+ z- x5 @* O( {
    /* Initialize BSL */0 K6 n0 Q8 V8 Q
    EVMC6747_init( );
) `  o. i3 c$ }" z  ^% F) M        /* Call evmc6747_intr function */
! H8 u6 n! M. O( U; ~+ i    aic3106_init( );
, ^* t1 {5 ]( T* j% g8 c        while(1);/ Q3 S" E9 b1 P& D/ ?+ e
}
, z+ [3 Q5 q7 O) b8 `% s- ?' u: h. R+ n
: x( U. d6 n" h; d- ^( ?& J5 g" P" v( ^
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, _2 Z* G! d  m9 k) F/* Initialize MCASP1 */, t9 `7 I: k' ^7 S
    mcasp = &MCASP_MODULE_1;2 z: F8 V; w+ f$ R  ^. p
    mcasp->regs->GBLCTL  = 0;       // Reset
1 B7 ^$ k7 \: H3 x* E2 r    mcasp->regs->RGBLCTL = 0;       // Reset RX
% V, s- B2 B% R7 y    mcasp->regs->XGBLCTL = 0;       // Reset TX
. S4 V9 \( ?- Z    mcasp->regs->PWRDEMU = 1;       // Free-running$ D( d3 Z( t4 d; n9 U
   // configure McASP0 receive registers# d6 F- t- H; e2 H+ u% I4 o5 ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: i( P/ l, H  ^; f# u, o    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 |. m9 q' P4 z  }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" `6 Y" U4 |2 @/ X7 A8 c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ z& c4 x: D0 g9 V- t
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 O8 A) I$ L( I; i- K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 |  [5 u  G) Q" g+ J: Y3 G4 o
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; _$ a6 O' l7 Z# X! w& L, A    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& M- l( R6 Z8 e4 k8 |$ o! Q" F* W7 g6 l0 G) G8 c$ S
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; M. s0 @/ }- a$ |( }    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 c5 R( H9 l" V& @* W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ f, P* m6 A1 n6 N2 m    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% `; D1 z6 A+ }3 f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( u. q5 p% G# _  O
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 a7 p7 w) o6 i, o! x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 Z* ~* S8 }2 [7 i% r    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 _/ Z+ t& w: V, U8 s/ o
# f5 B# x( s( t9 y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 ~3 O" n0 o' h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" R; v4 Q6 q; N' {( [, p    mcasp->regs->PFUNC      = 0;          // All MCASPs
. c8 p- L' w+ z- \& k: k4 r+ K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( ^( L$ n5 J8 t% L
5 D8 M8 ]# x2 X9 R5 J
    mcasp->regs->DITCTL     = 0x00000000; // Not used4 @& }$ a3 T6 k! V; k8 S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used) N5 u2 N6 h4 N8 D5 {8 i; Y) ?
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 S" P0 U% ^( B
) W0 s/ F& l3 k7 v8 B( k
/* Starting sections of the McASP*/6 Q( K- O& g) u- w: [1 z0 R6 O, f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  d1 u' P! e) o1 c; ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # f7 P5 T2 G! V& G" J1 p7 Q" m
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 ]. t! p' X% Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 ]. Q3 a* W# T* k  i
( ~4 h* h& b0 ?/ Z' P: U
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ l) N) i, w7 T8 A+ c0 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 B0 e: m0 z. B8 r) i( c    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 X5 W2 k8 Y' I  m5 o$ i* A5 X6 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. _% h6 W) h- t8 X# F! W8 w# E/ a# x: N+ n; E
    mcasp->regs->XSTAT = 0x0000ffff; ; \# W. a1 \# o/ F, I
    mcasp->regs->RSTAT = 0x0000ffff; ! S3 O9 I" V8 c. V" u* t$ h. t

4 I/ \( v* G- x' \9 }; `    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. c- a, ]: N. w  v+ W; s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" B5 I$ K# [. _& O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! }, {1 V9 {  L( e+ P" T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 |* V7 p  v& w  n) V: {) ^

! \5 f) }, Q% J6 n. X! M+ L    /* Write a 0, so that no underrun occurs after releasing the state machine */
: L. c# j! A+ \& M% O    mcasp->regs->XBUF5 = 0;; n- j" S( C3 T9 T0 ^. Z/ g$ u6 v
    mcasp->regs->RBUF0 = 0;3 c& j0 s2 A$ R- w, P- N  J' z
0 i* N+ A' B) p% k5 q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# S' V, S* H2 i  x: k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, N1 a" K! I3 n3 R0 R9 b* r- ^    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 }* V) n4 E) C: \$ \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 p! `: Z5 T( P
7 Z# B7 a1 M0 V2 [0 y( C1 e  Y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , P  K+ k7 @- o' i) p* `8 E9 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( W: \9 [7 j5 k! `7 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 ^1 Z, p8 c; q2 Q* b; R$ J4 w# c- X- g' S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 v: I* {" Z; ?  t7 Q
; l3 L8 B& y) K+ X" r( Y# z
    CSR = 0x0000;& m- R0 R9 a& D( ]8 X, Y
    INTC_INTMUX1 = 0x3d;! f+ p! u+ n  [8 Q
    ISTP = (unsigned int)vectors;( _5 S3 z1 N  R, y
    ICR = 0xFFF0;  
* S( e8 ?1 b' b& e    IER |= 0x12;  $ Q$ U) }9 U- O8 ^5 S/ z4 D
    CSR |= 0x01;  
# i6 F- N9 m. Z* \: Q  u/ [
8 F; m* m! `8 U; k  H: g2 E& X( S/ N2 ?& }: g( p' P8 S& v" M
3 J: @" c, z# o8 u  y/ r' v- V
还有就是两个输入输出函数:
- t- P9 a/ d) N+ Lvoid output_sample(Int32 out_data)
9 q& b+ {% b7 D5 |+ w1 ]; @8 U' L* t{
# x  Q% C' t8 u  K% g% t6 D  AIC31_data.uint = out_data;  
% G0 w0 V' X" E% A( D8 r3 h+ \: t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ h9 [' a: p5 R& i; E" d3 k0 j}
; u. @8 s) j% l, s4 h1 M' b' ]  t& b4 q' b( L/ ?
Int32 input_sample(void)9 P* R6 W) _' p+ J& j0 t  A
{  ) j/ |$ c9 d7 L, D; S) H- l; F" V
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# p2 A- d3 |/ \  W/ T  return (AIC31_data.uint);' I- O$ d7 Y) Y: A
}
$ m* a# X2 L; b9 v8 O2 f! T6 Q" o6 U! F) X) B! |) F5 r) A1 {
分享到:  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-10 08:07 , Processed in 0.038286 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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