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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! `  s9 _% i, U# [0 T5 C$ F4 xmain文件:
! @' d+ O5 t7 s+ P6 ^6 M! Dinterrupt void interrupt4(void)  
. l! [/ V8 S) |% w5 l' H{
# H6 d: I. X- i- A  Uint32 sample;
  Q  ]- Y6 U8 Q, N* b. _7 \: X3 N5 T1 a/ u. U  b0 K
  sample = input_sample(); // read L + R samples from ADC
9 k; M& O( v5 B  output_sample(sample);   // write L + R samples to DAC
4 j5 b. Q/ b2 {6 Z3 \  return;: `. a; N. F) _$ G* t
}
9 t# S5 R6 t& E
% r% `" P5 B3 t, H2 B! H3 [int main( void )
; H! h/ v- }( E+ _{
& S6 |( }. G* R  X, Z7 i9 v: ?
0 R/ C! z; p$ T  [/ v9 d" z, X    /* Initialize BSL */: M4 C* q' t" ?$ e
    EVMC6747_init( );
. y! O4 r; w$ o8 p2 _7 z        /* Call evmc6747_intr function */
9 P8 M  p4 Y7 X    aic3106_init( );
7 f1 Q# f$ y" o        while(1);* d3 S1 c; a  A% ]* f! O. x2 f
}; W" P. T9 K7 F3 D0 F: i

" ]1 B. S9 L9 T
8 i0 y6 \- K" |& V! w1 ?$ o. ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ x" @* I$ U6 F, _0 Z( S" y
/* Initialize MCASP1 */
/ p4 I& x3 |3 r    mcasp = &MCASP_MODULE_1;% w7 x. _. [: i9 d# e
    mcasp->regs->GBLCTL  = 0;       // Reset. S6 _, s1 t+ S) G: h- C4 F
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ ]8 m7 F1 e/ l    mcasp->regs->XGBLCTL = 0;       // Reset TX4 o0 m3 c5 o1 l1 J, g3 ^
    mcasp->regs->PWRDEMU = 1;       // Free-running" i- U$ }( W4 F4 D* g$ }( X
   // configure McASP0 receive registers
" |: y+ n' c4 N: N. U. K! R* u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 G7 V8 E8 K, o- h: ]: ~
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 g/ I1 g3 ^' k    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, `9 w+ r7 f: S% M) N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 M8 W7 h  A, n3 {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 e( o, Q9 j2 T% \- V) V% Z$ G/ s! o8 z$ S    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 U1 t2 h1 R/ M7 v- d# S3 P0 u
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, K  V. m0 S! I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 [  ]3 y- r, X) X

$ A- M: G- p$ {8 j7 c    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) _( T" C- p2 |$ {2 Q, ?
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 I2 W0 \' W$ B% t4 {' ^  a. l- v
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! s4 A7 E6 ^" t; {
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: k; g2 ~. V  S0 n- {
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( K( M, ?8 X! d0 A/ H- p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% \. g% w2 u) O
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 ~9 w, O+ N( L5 Q' p1 X6 d    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; P7 \6 V6 u9 y0 h& _1 T( z  n

9 S6 `& t- t: m9 o9 E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! y* \% @! y* n+ T6 \    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, \9 r8 S" g  L, m    mcasp->regs->PFUNC      = 0;          // All MCASPs- ?! q" y8 E# N  U# Y  ^! I
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; Q1 L( l7 A. U& \
. M. N% N8 i9 |
    mcasp->regs->DITCTL     = 0x00000000; // Not used
( V: }; G" T% Q$ h5 f    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ U' O7 B6 t# H4 M  o. D    mcasp->regs->AMUTE      = 0x00000000; // Not used' {7 g; n" E1 i" O& g+ `: k
" D$ p) n$ j; ~" B  Z1 _" b
/* Starting sections of the McASP*/
; `6 k" ^$ ]* i+ J1 K! b; [. i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # b  [: S1 o1 M- J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; G. e, C2 p5 S" j3 O6 b! Z* U- x
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 h6 y8 [5 I5 \9 m% V, u" {( x" K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 W6 w* p* l1 J

  g; \. _; b, F$ u, O1 g) h    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ d& W+ B& q9 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 ?+ d' h! K' c6 b( p  Y$ N- ^    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' `0 K! M. M8 g. {- m* v- o- T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ m& z& q4 `- K: ?' Q; J# U$ A2 a/ V4 Q
    mcasp->regs->XSTAT = 0x0000ffff; % A7 t( T2 T: n$ }
    mcasp->regs->RSTAT = 0x0000ffff; * r. s" ]5 o2 x

$ q5 [5 J. p, Y2 g  z' d* i- _/ r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. T! n# N% S7 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: W( p. Q0 k. V. `# g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / w" c; O* b, w% r0 F$ U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% s( |7 v5 w$ o% Y& @/ ]% e5 J+ Y0 \2 r8 q
    /* Write a 0, so that no underrun occurs after releasing the state machine */
( c  X2 x) [- v) Z9 G6 q* y" i    mcasp->regs->XBUF5 = 0;
) _; E* b& |8 k- Q1 P8 F    mcasp->regs->RBUF0 = 0;
8 p1 b' Z$ h* u$ T) Q" Q3 n) B- Q# G8 N% ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 k+ ^* j* t( S( q( Q4 [8 t2 B3 V% E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( H" ]6 u/ s. J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   Z+ y8 F% {7 Y+ C. o( a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 b7 ~, [+ t& n) }- u
+ l. W1 I) n- W2 Y7 I" l* B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- @) S2 X4 ~( q% l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, u! b  y- P: p8 p% I) r
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) h, u  j9 p/ D$ q/ v3 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 P3 z. R" i7 \- K4 X4 I& v; a  ^! h9 x; @
    CSR = 0x0000;1 o; @2 ~$ }% U
    INTC_INTMUX1 = 0x3d;
/ L( S# l* ]& k  ]0 Y$ d    ISTP = (unsigned int)vectors;
! l: s( y8 b+ ?    ICR = 0xFFF0;  % C$ y. }& l5 H0 s) m* l  p
    IER |= 0x12;  % p8 p9 t% X& U: R  }, u
    CSR |= 0x01;  
5 ]# S6 e8 V: Y# W8 K* S1 K% c9 Q3 x) w- N

5 L0 W% N1 e8 M
, k* a, Y; V6 y3 Y4 s还有就是两个输入输出函数:
9 z% v/ k, `+ F8 Z9 L4 c( A; lvoid output_sample(Int32 out_data)8 f: O4 w. Z- e8 L- s2 ?
{
; i( |  D4 ~- K) ]& C  AIC31_data.uint = out_data;  
0 l0 x& C3 q+ l7 i) |  MCASP1_XBUF5_32BIT = AIC31_data.uint;) C: K, Y1 C% k, Z) T
}4 I3 v4 _" b7 T/ ?, x: U, t
. ?- K3 f% K; y  f
Int32 input_sample(void), p$ g+ P" O( J( D
{    [+ G# o$ f, f% d2 j! h5 u& ~# v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: T5 Y+ {' Q' X  W8 _, ^3 k
  return (AIC31_data.uint);
( w" R, w; W$ D0 f& ]9 @9 K0 O8 ^}. ?$ X8 Y4 A* J* l+ X/ j9 s3 Y

* l% e5 d' c' a1 Z! R  [; m4 p
分享到:  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-15 11:39 , Processed in 0.038892 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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