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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! b2 A! b" c  y& `. m, B2 I% s! U
main文件:/ f2 W+ |9 v0 _$ x: }0 A  M/ C( }& M
interrupt void interrupt4(void)  0 ~- E+ h2 z. \! N& T! T5 z) i' W
{- W( i) T1 G8 p( P: Y
  Uint32 sample;9 x4 i, G  h" C4 s5 o8 {
! O' M' k' `: C4 }9 t0 r9 P
  sample = input_sample(); // read L + R samples from ADC
8 W' l* X" M% w( |3 Z  output_sample(sample);   // write L + R samples to DAC
1 @3 s2 r: p2 U  return;
* \1 j1 A, ]; G: d& Y' F9 A# L}
, p+ }) t) W0 K5 B1 a' v) v2 ]$ `9 w
int main( void )
6 L( F! Z% y# i{6 Q% F, }" `# h3 M
$ K0 X3 R' V$ c  I' _, d
    /* Initialize BSL */
( |/ z+ l4 h" Z    EVMC6747_init( );3 d9 p0 e! I: \6 X) |
        /* Call evmc6747_intr function */& C; q0 [# m$ K$ H* D
    aic3106_init( );0 R( \% L, j7 k8 l( u7 n) F
        while(1);+ G' i4 y' w3 T, [
}
) t7 k' x8 j% ~4 E. E4 C5 ?+ D3 b$ q

& c& P: P2 t; C$ v  l# M9 ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ x, X" F: P5 S9 f+ G8 O
/* Initialize MCASP1 */
$ x) Q9 K* b+ N" O    mcasp = &MCASP_MODULE_1;
* c0 L* E" b6 N* q" @1 @    mcasp->regs->GBLCTL  = 0;       // Reset$ D5 _5 P% Q# z' d% v
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 t  @- O( m& U! {7 {) }
    mcasp->regs->XGBLCTL = 0;       // Reset TX; e' W! Q. V3 L# |7 Z% e) H& ]
    mcasp->regs->PWRDEMU = 1;       // Free-running
. j  w- V5 r# J   // configure McASP0 receive registers
7 |5 p% i' l# K6 t    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& R0 ~# m! m, E5 e; x4 k, ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 z$ n, e6 l- j0 q7 q# D$ n; x2 _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! ]/ z  _$ B/ e! w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ `: d; b' _/ l6 ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 o: h& x- }! A* n3 V2 U3 N7 C+ T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; [2 c6 x" l! A- q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 C, Q( K; X; h( w% {& `3 C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  L  F" t1 a  h: o* f& i( S

! K) p! c2 Z  d" h5 F  N; Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 j# |' O9 ~# R' [7 j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 p' h  T5 Y/ Q5 ~( b* F; K$ c0 x9 K6 y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( Q& }$ R. c- Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# Y* k8 Y. Z. n! }$ _) N& O    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 X9 [/ [  L7 c8 C7 S% p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( q0 T: \2 q9 x" m% u8 {8 w    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) a8 U8 T) ?8 q% i9 u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- J: v% r  e4 v& |5 b9 |

2 ?7 s. \0 K! ]1 n) \0 I" E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ X: Q9 P& |+ Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ x8 @) n. I# A% K7 k. B6 u
    mcasp->regs->PFUNC      = 0;          // All MCASPs
  D. Y8 Q$ p1 K* n3 n  o/ Y+ y. w    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: h% P' J* Z2 R$ s4 r0 m
4 j- x9 \! J7 U/ Y" v- f2 O
    mcasp->regs->DITCTL     = 0x00000000; // Not used
& o% A4 u/ b9 A& m8 b. r    mcasp->regs->DLBCTL     = 0x00000000; // Not used* ]6 i  C$ O5 |
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 Q$ N$ F' R+ Q
' \, {5 y3 J1 ?& c) k
/* Starting sections of the McASP*/: R% J6 [, e- ]" _* u! U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: W- h1 v' M9 |7 P# w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 r% }! @" N' e& ^: f# [. ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 n; z+ i( H' }5 r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ ]% G8 F' K$ i

9 Z, u5 m8 W1 ^/ F. l4 k# l8 \7 \    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . ]/ z* o) B( w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 {0 v; }  B% J( e
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ H. D. `) ~7 R$ d& R) T  j3 \% g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" f, V8 o. Z& R% n6 J9 S0 |

. `5 h0 J! D2 S: q1 b. l4 F! r    mcasp->regs->XSTAT = 0x0000ffff; 7 |- k  D7 o8 b. e4 r0 g5 `
    mcasp->regs->RSTAT = 0x0000ffff;
5 o- v) v- o( x) S& d
% }. g  V- C( R5 i# R    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% |( Q5 Y5 G$ W$ Z/ e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; h$ V1 B. L1 r( H/ `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 \! a/ a+ V0 F. n0 }) o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' b) b( E5 Z% [" Z  y. [6 W7 T

+ u) w! P! B9 W% e* |6 V    /* Write a 0, so that no underrun occurs after releasing the state machine */
, B; B, Q, J" f5 z+ q    mcasp->regs->XBUF5 = 0;, q8 x3 H5 R2 i. j0 P
    mcasp->regs->RBUF0 = 0;. Q9 j+ I" g3 X" T
" j. j( a  r  T. w( I; P8 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! h+ h& a0 y3 i6 l2 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 |& A. Q) Y9 ]5 l; {! N$ ~8 `. W    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 Y, c8 X! p- `$ m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 E, D6 t% ?  {: f& d0 \% J7 N. Y6 C5 r
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 T: c: D8 i6 m" [" m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ B( X" G9 r" F1 E% U    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 A/ e; L9 c! @: k& \0 q: E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 c% y4 h' z$ U8 E* R4 y; B( I$ X8 R
    CSR = 0x0000;
; O6 v- F* l9 \- k+ O9 l8 x& H    INTC_INTMUX1 = 0x3d;' W9 V/ u" y3 n" a/ p. ]. U
    ISTP = (unsigned int)vectors;3 ?8 Z% m; u; b
    ICR = 0xFFF0;  
! D6 Y: v" j/ E0 b' b    IER |= 0x12;  ) K( i# q" b2 }
    CSR |= 0x01;  2 i3 r2 J) n- I# q3 i, @4 d
7 \% G0 X/ F0 Y+ R" |

' n) k( t0 B  ]. j$ U7 G) g. V$ e$ n! `/ A
还有就是两个输入输出函数:+ ]5 L8 s5 m# t) v5 n
void output_sample(Int32 out_data)" ]( J' h" ?! A) |5 G
{* z; Z. C4 T, D  `1 j
  AIC31_data.uint = out_data;  ' Y" Q" E& V; _0 r- f% W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( T8 s" W9 \2 g; I
}* B: d( b$ D) M2 f' w  t4 j9 ^
  c7 ~4 N; D4 {8 r0 Q* L" N# [
Int32 input_sample(void)+ r9 ^! n0 k+ V% Q) r7 I9 U
{  1 e3 D2 k3 i: G2 z5 a7 {' G
  AIC31_data.uint = MCASP1_RBUF0_32BIT;  u) S! g" U. `( F: F2 w
  return (AIC31_data.uint);# }1 G: W8 F5 X
}
4 W/ _9 N- V% `/ R0 V6 k# }' k# o% Q8 s7 ?* N
分享到:  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-28 05:18 , Processed in 0.040982 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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