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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* V9 s# U8 K$ Z3 J
main文件:
  r& X% b0 d4 w8 dinterrupt void interrupt4(void)  # x0 j& A& {# V( R+ ^$ J' t
{
; w2 G+ {6 p  |7 p  Uint32 sample;
6 Q5 x2 V4 h' J3 \" K# w* d' Q8 ^  F, k8 i3 e( g& B6 M: C. E- n
  sample = input_sample(); // read L + R samples from ADC
- u' v- H. `+ O/ i  output_sample(sample);   // write L + R samples to DAC
; R. H, h& Y3 a3 D; A: r, L' O  return;
& b" U" N3 b+ n: |- ^}& O; M6 d+ C8 ~5 o# v2 J% `

; u: _$ P0 _$ t6 [8 v/ V% Eint main( void )
: J0 H2 Y  Y/ A{# c  z# o, V% j- i  v$ O
- x! R9 s+ i6 h' l1 W+ y
    /* Initialize BSL */3 f, O0 u. Y/ I; d
    EVMC6747_init( );
6 i. K- A* w) ?) L2 M        /* Call evmc6747_intr function */8 T) F( m1 Z0 C6 j1 B8 h
    aic3106_init( );2 T7 j! l1 B/ g3 f
        while(1);
1 M# C# o3 l7 m' w# r5 O3 k! {, {}" a: q1 j, g+ t
& ^  w" B# y4 _7 _& ]
; c7 M& @7 p  i: Q# w5 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" D; ^& p7 ]# l( S  B( q/* Initialize MCASP1 */
0 r4 E/ h. M: e/ Z% X1 S1 |( e    mcasp = &MCASP_MODULE_1;
9 D8 p+ A3 w* ?# j    mcasp->regs->GBLCTL  = 0;       // Reset9 ]" b& ^' x) j: x4 p
    mcasp->regs->RGBLCTL = 0;       // Reset RX( E" J0 ]! P; n6 Z) O3 `
    mcasp->regs->XGBLCTL = 0;       // Reset TX" _* Q6 I2 J/ g7 Z, I# c
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 w, Y# T+ o" f( [: i   // configure McASP0 receive registers  U: _8 {6 Z- ?4 w/ _! n
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 H, \4 c8 X7 l3 N1 P    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# A; m- i& f% o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 O) t1 ?% y& J( v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 g8 T8 M6 C4 c9 A, h4 Q5 m' p3 S
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; _! {- z0 z1 E5 A) t! x    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- z7 f  j+ S1 B, S* m) z    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ f( L8 Y0 q3 i7 j5 l2 T; S7 b    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 ]. i; G4 K2 j  @9 ]: L$ j

+ D8 P; Y9 W8 d9 B! t. z4 y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) q! Z- }  N# {, z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  [3 n2 S5 W7 E6 \7 L% k0 G    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 Y$ B+ B6 T1 I( A/ J" @0 W    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( T# \  }/ j& s, k8 i+ t' e3 ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: e+ x* s. a' d/ W( a! v
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* J# c9 Y8 D/ d6 O, l4 h* G
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! v* W1 T3 V/ S) l5 T
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 }( [! G- n3 ^7 W1 v7 G
# _- j8 F. z, U: u! Y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ v  S0 f/ w5 d& h2 U. A( r4 I
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! _. C: a, Q  b& q    mcasp->regs->PFUNC      = 0;          // All MCASPs8 m! ^! o' ?5 d+ N$ K2 P, [/ C8 C  x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 j2 ~" }" D4 F9 O

+ U6 s, I3 X9 c3 t2 }* k5 Q    mcasp->regs->DITCTL     = 0x00000000; // Not used7 z8 `  v& @, @# k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& {3 d& v% }2 G# y: a: W+ V
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 a# b$ n4 H" z# A7 w/ \0 j3 Z& r
+ }3 i8 N+ {; P( I3 Y2 ?/ B8 a
/* Starting sections of the McASP*/  P8 T+ B5 k* y' g' u. d
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 ~8 f! j# B3 ]+ G$ |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ Z) J4 \! |. ^# T/ R1 v7 L    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 x5 g" h6 M* J* O& a1 n4 E( v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* D6 x; W  l. d- C  u' C% v1 l/ n. q

  g! C! z- o0 J- z- j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) I. f4 f/ c; a7 g( H; g% x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 W  W2 W3 e( r3 v% S3 f# J6 |    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 {0 a$ d0 R  y4 `5 N. E8 s$ n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- c& W" d$ {  @0 u7 v
5 e' q7 }! @6 H" L3 G    mcasp->regs->XSTAT = 0x0000ffff; 3 p' o2 n. Q2 E5 G5 I) i, K# \
    mcasp->regs->RSTAT = 0x0000ffff; . e" m" u7 d3 |  D* m6 E' M1 L: {
* |6 U" u' f$ I  M' o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 J& P! s# G8 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, ~' w4 _6 r1 q4 M( t# U$ q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 Z  ?- A9 ^9 v  D: W" X! `  Y) R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 s5 e! N  A- G

2 K3 t- {* Z0 I* A    /* Write a 0, so that no underrun occurs after releasing the state machine */& U' r+ R4 k( K7 E, n6 H
    mcasp->regs->XBUF5 = 0;
% N. N4 o' S/ Z* d    mcasp->regs->RBUF0 = 0;
  ^4 y2 d. I" Z& C* R; Q, U
# I8 }& E' w1 Y# {; t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 U( B  f+ s# H$ S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 Y" E1 p% p. S8 I8 t' W    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 e2 z" m; c: y- D; i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, F, }+ w; L5 U3 B
+ E" M/ R. [7 s& F    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ h0 t# X8 g6 y3 T: X: t# q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# |6 D( D% h# E) w' k8 r7 O! K+ p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 j/ r! c0 O# C7 w6 Y% h' X; d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 W" l; {' L* ]0 c+ b. B
) y4 m6 Z; [/ W% c0 w9 j    CSR = 0x0000;
! b0 t2 r# d( n8 o9 |/ L    INTC_INTMUX1 = 0x3d;6 D  {) t3 E) f' {6 m+ ~
    ISTP = (unsigned int)vectors;
4 D' i5 C! f8 e2 w" A: y    ICR = 0xFFF0;  4 j% ~& h! u9 Z: L# |5 z
    IER |= 0x12;  
( {, Q" R# y/ m; n' v3 l    CSR |= 0x01;  . U3 A% `8 Q3 M

% `$ x9 M0 @# u& R9 l+ D
: z9 R$ e2 U& m
* y! G4 I* J% ]  R8 I* s( {$ V& v还有就是两个输入输出函数:
* c+ @( |3 a* G! f9 r. [0 Nvoid output_sample(Int32 out_data)
7 I  G' L( e9 s& A{
# E' L' O1 w  f  x8 z4 b+ s  AIC31_data.uint = out_data;  
3 J, b3 q0 `* ?" R  MCASP1_XBUF5_32BIT = AIC31_data.uint;- R9 c% @& }  {8 x- x5 S: w% L
}+ s. N. r) |1 J8 A  s5 f

. g4 P( g' s' H8 ~" F% e$ EInt32 input_sample(void)5 t* n0 V! Q$ x% {) H
{  9 G: z1 H6 f. ~% ~# L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 `6 Q9 E% m- D$ y- D; R' u
  return (AIC31_data.uint);5 `! {! W' N* r( E
}
' k( c3 l  t8 w+ u" S( c( E4 u2 N9 l2 ^" K0 ], ?; C5 K
分享到:  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-4 00:21 , Processed in 0.042169 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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