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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# d, _% x4 N5 ~& C& S
main文件:
- h6 S2 m* f- X( w3 H+ z( ninterrupt void interrupt4(void)  + ~# ]  }7 f& b) O, ~
{
3 }6 K) F7 S6 Q/ S& w; U  Uint32 sample;* v8 V' c0 v7 d- q2 J6 c6 f

7 k: Z9 ^; P( P! M  sample = input_sample(); // read L + R samples from ADC
0 e+ ?; ^# D' ^/ O) U5 ~( z  output_sample(sample);   // write L + R samples to DAC
; W" f' g0 [* w/ a2 b/ U. D/ Y  return;# m  L8 |+ m" k) H! n
}  R& l9 s- s6 \0 x7 |" z

$ Z9 I7 F( W3 m7 M4 `& B: `int main( void )
: ^2 i7 L9 O! z5 q7 B{
( o4 ~1 u$ I# L+ W( a9 Q( ~, D/ C- C, z
    /* Initialize BSL */
# ^- {, S/ f6 t    EVMC6747_init( );
- a" }: G  `# L7 x( l        /* Call evmc6747_intr function */
& \: v! I8 o$ i* S3 K. D6 y    aic3106_init( );" }& c; y( Y2 u" W/ ^" l+ n
        while(1);* ~7 |  S2 W, O) m
}  N7 K* W8 V9 d1 |2 H7 m

. _1 e! H/ h) S6 ^1 G6 I" e/ r2 L2 [* `. H3 ]# x$ |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 c6 T7 t" _, l# s% J' U5 q9 P
/* Initialize MCASP1 */3 U7 W4 G7 x8 T  O) A- n
    mcasp = &MCASP_MODULE_1;
# W1 [  K" G9 a5 `  h: L+ U9 H    mcasp->regs->GBLCTL  = 0;       // Reset' X6 H, |& K1 b! w
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" M4 E+ t$ B9 f* N: `* k$ ~) B    mcasp->regs->XGBLCTL = 0;       // Reset TX
) L+ g  h- U4 _    mcasp->regs->PWRDEMU = 1;       // Free-running
0 S) d, z  W' M. t" j6 O( O. Y   // configure McASP0 receive registers/ D' Q8 I% A4 L" F* F  z" d. }
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ v! g9 z4 ]: N9 ~# a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' L* h, P, _" j6 C8 _% R0 W
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word" V6 f) \; v) z5 F. ^1 `, A
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* o! F% q  f: U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- r8 x4 {8 d5 W. v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( B, e8 L& x  v: v9 I7 |, x9 ^    mcasp->regs->RINTCTL    = 0x00000000; // Not used: _2 v4 n4 l. V' T& A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 J' p* \$ {( u1 O* ]

1 M- v" X  X% j1 ^: V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ M6 g1 y3 n3 q1 f$ C    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 A# t: H5 B: ]. T  {    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- |" I8 L/ _+ q0 n* g0 C9 x( G( j/ w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 r$ ]( k. F' b3 L6 ?& W% L" x+ ~1 _
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! X* v* V- G8 |+ g    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: L. e: d. _# x1 S3 W% u1 _    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ t+ q( X" N9 U* c  G1 ?7 e2 \1 D$ f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 _0 l, n& {2 h8 Q' J8 B9 v) W4 ^" `7 k9 D& |" Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 l9 ]! t: X4 T% B" l) U5 A1 N2 b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% R5 d$ l. l. ]) J$ ^    mcasp->regs->PFUNC      = 0;          // All MCASPs. S& R8 v) t; E2 p; ]; t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 l* C# N7 C& n% H* O& m
6 v! g5 z0 \: X: u1 G, P: k' p    mcasp->regs->DITCTL     = 0x00000000; // Not used9 A) z- B2 R6 I# U: E( ?# R+ y" ]% k! m+ v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& x* Y; z6 ^2 }. \9 m
    mcasp->regs->AMUTE      = 0x00000000; // Not used' a$ o3 y0 \3 G* O! ]# E
9 R" A$ Y8 X+ P% R  u
/* Starting sections of the McASP*/: K, D/ v7 [+ h" g% w
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ b  s  l) c! |% P- S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) R$ }5 p$ G( I6 V) b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' m9 m# Y# E. G* a: L0 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ c) s( G5 N( o- k
# I& w/ B# m2 ]0 B$ X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & v( E8 |; B+ X% M/ h6 F6 s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; H6 M  ~  K7 x6 v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 f+ p' J  Q: L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% |5 a# y) C% R' v) s& c% l+ G
* E8 y5 T& P; v    mcasp->regs->XSTAT = 0x0000ffff;
! g4 d7 p1 g0 _$ v& L' `1 o    mcasp->regs->RSTAT = 0x0000ffff; - O2 \& z2 c0 L- U3 e! `7 @

3 ]2 M) I% U/ k0 y8 y: `- v    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; e6 _$ A4 O9 P/ H, P  i2 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( F; C) k/ j2 h- H. q6 q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% `7 C5 w! F. z( X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 Z& T& q+ `! U( S) j
1 R* j% o# h' b& I& R* v9 m) _    /* Write a 0, so that no underrun occurs after releasing the state machine */
! i* P  ~$ K0 ^' h    mcasp->regs->XBUF5 = 0;1 {" g3 }0 @6 H; @0 b
    mcasp->regs->RBUF0 = 0;/ w3 n- n; j2 T" N  s! y1 O" W
/ ~( P2 p5 g' O# h/ b4 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 T6 f4 X% O  P. x8 f6 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 Q8 E3 r7 @0 K& l# B9 j    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! C) n2 S- n8 n- N) ?0 n7 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  [, H* {# b( ~7 {; m
- i- \+ F3 U6 z- p* H
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % m7 J$ M' [/ Q' C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ ]# o; D! M8 Q6 F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / ^: }2 E  `+ r, V! a8 M" l4 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* j$ G  ]9 `- t3 A; B/ j- A
( x4 t/ T3 q0 O2 G; d    CSR = 0x0000;
$ z) _2 K( R4 e, G1 W2 G- S    INTC_INTMUX1 = 0x3d;
1 C# |" h( o7 R7 a    ISTP = (unsigned int)vectors;
: B+ s, e: w' {$ n. Z7 c$ `    ICR = 0xFFF0;  ! G# u5 b5 U9 \/ v1 G* F
    IER |= 0x12;  - F& S) V6 Z; M0 v2 a" P
    CSR |= 0x01;  
0 c4 N4 [( X+ S2 q0 q) u6 ?" ~) _6 S( X6 ~
0 r8 Q) B, R8 A5 @# _' ~; [; }

9 H! U; t; D  ]  P: D, g# L还有就是两个输入输出函数:* I) r. @) q% _5 t
void output_sample(Int32 out_data)4 r5 Y' o3 L; ~" I0 B) q) K
{
" T. K2 b3 l! b! V; }% I1 ~  AIC31_data.uint = out_data;  
) f: E, u, D4 i; F: Z% k  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 p" J! d' p: J/ v}* D* @% ~! V1 W: u' L. m
6 e! x& d. V8 {% }2 U6 Y
Int32 input_sample(void)
- V6 X5 X" W. ^6 i$ S. Q{  
" ~0 ~1 ^" s* B5 t2 O6 ^, P6 S" h  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 U0 R1 ]# Z% H4 i- J3 v" `
  return (AIC31_data.uint);
7 \  _7 ?& Z7 P( h8 _, k. L7 b& L}# X6 W5 y3 J+ y6 T. ]) j7 ?- n
5 G$ |4 ]; r! f4 q4 D  D; j$ y. e& S
分享到:  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-2-9 23:44 , Processed in 0.040067 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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