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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ R5 s  r' l: f* K/ omain文件:
  b2 Q# s% _" O/ winterrupt void interrupt4(void)  : g* Q( b  G$ s1 Q9 f
{
' J' B( q, K5 g- @; t2 L) X  Uint32 sample;+ d9 W0 j/ i+ t( W, h* @+ X
: t( r; k5 Q4 a5 D! m9 x7 J( m
  sample = input_sample(); // read L + R samples from ADC
- `# [- K# A) O  output_sample(sample);   // write L + R samples to DAC 4 [  e) n8 x0 n( n6 p+ H+ U
  return;  h3 O( M& t& z% A& y) t* Z
}
& j* v# l& ?  W, X% l; U
8 F/ l7 Q. X! d$ [9 Y" @6 cint main( void )
" u2 K' d) p  o. D: @{
  @( ^& K( e& r6 V* n9 M! u8 C, \' d! ?9 s
    /* Initialize BSL */
" H! ]5 k, {( {$ ^  ?    EVMC6747_init( );
$ N& O$ ?+ h2 X8 t) F        /* Call evmc6747_intr function */
! h7 _' G# a" p% e' r( K6 f+ s) i" Y* J    aic3106_init( );3 \' e1 h0 H# R$ K' a2 o$ \! q
        while(1);
, \, L& @/ P. B}: Q' {( s) Q9 P* b$ @

8 X  ?3 |8 c  l! q# A% j" Z& c0 r- U9 c1 i# \: x! c8 i) Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: p. u+ A3 t  ?7 n# u" C
/* Initialize MCASP1 */8 R+ u6 I4 s; \8 a5 r# b+ u
    mcasp = &MCASP_MODULE_1;. Q; `4 s0 U8 V+ {
    mcasp->regs->GBLCTL  = 0;       // Reset
: A) ]* d) H: f& o+ J, ^    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 r& H1 W" U, |    mcasp->regs->XGBLCTL = 0;       // Reset TX
) u) T, T3 ]6 t  k9 W    mcasp->regs->PWRDEMU = 1;       // Free-running; p8 H/ u+ E7 p% z
   // configure McASP0 receive registers
8 R5 {! r5 g; `4 Y! a* w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ o0 |8 `0 D& ?0 l    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ ~/ Y: v! x2 f, \  ?8 g. i' E7 p$ p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( ?; R: F3 e% f3 W. p    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 X5 p: k0 [8 C4 C    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' }# b% B# a! l, v+ T# E- R2 u' L
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 d6 C; m+ ?4 b1 v( U* c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ O( {* J4 F  r" J    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 h; u, L/ v, E& u/ v5 m8 ^
7 R0 ]$ p6 t! b+ K7 h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ r7 u" |6 x2 o
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 F" N) F% o8 n    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 \2 g7 Y; o: t  O+ g, R3 C
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! P( f! ]0 z* C1 x& f1 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ s" V' U3 [* K1 [" Z$ b    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 U6 R- a* Q% N% L0 @0 D5 ]
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, G9 U. g5 M4 B7 V/ Q& z  J* Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 B- ]  E& `/ o

# Z, M. N% a* X8 @    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) [: E! k' z; o0 m$ a6 c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  S( R- \8 _0 t# X: j; J
    mcasp->regs->PFUNC      = 0;          // All MCASPs
! B0 B+ r( r+ U; |! z3 [5 M    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 R9 y# {4 m2 u1 u( ^) L  i8 w1 _9 S1 z8 [& k1 q% m0 Q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
( v4 S& ]- S; k' {    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 K* m" d& X" f( J# g. B8 l    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 `* k0 X1 o; `' A* _: P6 h  H5 q, u9 ~: B# `8 o5 f" a( G0 n
/* Starting sections of the McASP*/
8 `5 @4 A4 ^6 q( A: R    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 z. K7 G/ ^% L0 E; L# a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # S1 i: P. H( x6 @6 \/ ?
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) {1 C% a( l8 O" p. i' O- D, Y& L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ i# C( h( \" ]5 Z
# P0 ~' X- z* m    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 ~  ^$ Q8 p: |" f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 F+ ~8 Z  P5 Q1 }5 w2 \8 i6 I2 ~    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 H- O- r3 o# s. c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ M6 y) t0 o5 `4 J. A
0 [) J2 r+ t8 }+ Q  T( L" Q6 V
    mcasp->regs->XSTAT = 0x0000ffff; ' ^, K  Q# I! W) Q" p- l+ p4 \
    mcasp->regs->RSTAT = 0x0000ffff;
3 K) R" S6 E0 B8 n+ M$ q: e) }$ W: s2 T  v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' a1 G9 A, D( d: B: o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  Y# @$ [4 p) [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& M9 x# b6 j' w) ~: a' R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: w1 e; c- m# t
  d+ p6 t, s1 t$ t; D    /* Write a 0, so that no underrun occurs after releasing the state machine */, s1 A, g, y( v2 j. n
    mcasp->regs->XBUF5 = 0;5 w" [' Q( T; z* ]8 p: V
    mcasp->regs->RBUF0 = 0;, [8 W" L" t1 ?4 w) d/ x

0 d* v, n0 c- B9 @6 `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 b+ G1 v" ]# Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 ^. C* X9 S: B! m+ Y2 D& Q2 ?; g
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! h& s! A( Y& D/ g: i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, j. y& N' ]1 `
8 i& O' N$ ~2 i1 q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; @  l( n9 M! m; i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- `' F" P/ @1 F/ n
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & M- ^2 L! I' h% g1 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  N$ B6 w8 v% O' r  N% E0 |3 N

9 l; q9 F8 \$ t  ?. ?) O    CSR = 0x0000;, u& S. O2 m4 l  X9 i. P5 Y8 v
    INTC_INTMUX1 = 0x3d;- M. z' N" v8 Q- W2 i
    ISTP = (unsigned int)vectors;% Y! G% ]- p( }, J
    ICR = 0xFFF0;  
3 g0 I& g& I4 A5 w7 M/ @3 O/ }5 f6 F    IER |= 0x12;  
2 O: k6 G: w' u& r# q    CSR |= 0x01;  - ]$ [# `2 D9 I6 {! @

; d  M- e9 Y' |3 F- o' g* Z! N0 E9 A5 g

3 q, `( t7 T+ a+ @) ?( c还有就是两个输入输出函数:
# n" i8 a/ g& Q# ]- s' |void output_sample(Int32 out_data)
5 R; S% P3 Y0 m: u{! G. n) l& n  Z* m4 P, I- P
  AIC31_data.uint = out_data;  ' o, F- I/ F+ ~% Y" H8 p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 Z9 W& A$ k, Y) A, \4 T}
5 t9 v& {9 _" w9 ^1 y' ~3 ?$ i9 D! D. l
Int32 input_sample(void)
% G( d( I7 z9 e% w/ u{  
8 b. B9 P7 }! K1 X8 ~2 n  AIC31_data.uint = MCASP1_RBUF0_32BIT;, ]! V. s+ m* ^* s; C# |4 f
  return (AIC31_data.uint);: W( Z' P; `) V
}% m' j( R6 a+ k6 t
+ t4 d7 |+ X4 k' H9 N& G
分享到:  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-9-16 19:00 , Processed in 0.038519 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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