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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 ?. ?2 ^$ ]# J7 ]; N
main文件:
9 S+ t" v2 a0 Y5 ~% zinterrupt void interrupt4(void)  ! a& T; l, U: _" F3 u$ ]( c
{
! Q/ `6 \& u. S9 E: Q# x% s  Uint32 sample;& N$ e4 Z4 k( K
" A3 @1 I2 Z4 \6 j) V
  sample = input_sample(); // read L + R samples from ADC
+ h9 v$ |% F6 V! P6 T  output_sample(sample);   // write L + R samples to DAC ' W' R7 P1 P7 F* i
  return;
; x9 _6 p) O8 U% `* `- o! Q$ Z}0 e* x5 ^: q5 j9 v! M
4 q% a5 j; T$ a
int main( void )
- f' k8 b2 ?# t% d! o3 h( |{: S& o9 i- l8 a  A( v8 i+ S
. W2 a: t1 @4 x6 A6 e
    /* Initialize BSL *// n; m4 a4 `( Q9 K5 c5 `0 E
    EVMC6747_init( );
9 B. }! \3 d4 G9 }' x. g: F' G        /* Call evmc6747_intr function */
6 l! X# q0 g& V2 G0 ~1 _    aic3106_init( );
9 N2 ~  v! c. a7 @2 M        while(1);
- e4 e! I( N9 _' X- D$ K}
# l% p0 v; B8 F1 P8 n2 }
* ]: p4 ?+ q1 {) `- G
) L5 `/ z# U6 E+ W* {3 [0 ?7 l, h! _, Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% l& N/ a9 A- }  f0 M0 o/* Initialize MCASP1 */( y  c4 `/ p  U' C# ~4 \" h
    mcasp = &MCASP_MODULE_1;
8 u% M4 k( ~7 U4 s    mcasp->regs->GBLCTL  = 0;       // Reset5 A2 u: v9 f  l( S9 h* y
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ D8 m( W9 \7 D& ~' A    mcasp->regs->XGBLCTL = 0;       // Reset TX
" p+ W  K2 e9 [) N3 p( ?! J    mcasp->regs->PWRDEMU = 1;       // Free-running
! u& Z& j' F  S/ B& i8 N! O   // configure McASP0 receive registers
6 `& A! M' R5 J3 o+ F    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' g3 C2 K" _3 e) L8 X+ i% k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  t/ ?9 A, n+ H& P    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 A: A4 Q# Z' D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); }6 d1 q3 {; E7 K4 V2 h6 I0 A# k/ h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 A1 j& `5 }9 z+ `# \. g5 E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 b$ r: F" h, X2 e8 M) I1 w    mcasp->regs->RINTCTL    = 0x00000000; // Not used; T, q4 l& C  c0 R8 r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 Q) j% z6 K$ l4 ?8 A& |) g$ }3 X& k) E$ d
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 k! @5 x3 q" y' ^2 g! _3 ?    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 ?. a7 I. S0 Z, C  n! ~- s9 O& y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 @; u; u+ r# A4 f/ ?% [
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% i3 J) U" }5 d0 @, g: ]7 F6 a* j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" \) E- T% L& r: b+ W) s1 h" ^
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' Q& n; ]/ k/ z6 T6 b( g( _    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) b. R* Z1 e; \: r& J# v    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, [0 U5 _' |; o  }6 u( g: D; e% A! \6 Y$ q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* @& w5 g8 h0 |2 o
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' ~1 g! d$ u" @( |- j    mcasp->regs->PFUNC      = 0;          // All MCASPs
" |+ r! S, d5 t- g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" p) m6 Z6 z/ s' L" K
; }7 L( [% Y1 q  b2 P* A1 r/ O
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ z" u# S1 n1 v    mcasp->regs->DLBCTL     = 0x00000000; // Not used* O: q/ z: e/ Z& |/ `) {
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 B: l; B% F' q% ]$ Y/ R1 r+ T' v# P* j9 W9 g) N
/* Starting sections of the McASP*/
. B$ l1 F4 E( k& h& ~+ K: Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& W& j* L: @4 J: N' G* y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 m* |+ s& B# t) ~% A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  Z1 t, `/ H( g; T/ y0 k) f. J7 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ R3 T4 e9 @6 J  z3 p

; S+ L" l: ^0 G    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* Z: T3 x6 M- m+ F' v* [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 {% s0 o/ Q% g. I2 W& `! R
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 U2 `+ B; ^$ L+ _+ i0 Y/ G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 S& Z- n. J. T# Q
; v* r6 b, d' _# Y
    mcasp->regs->XSTAT = 0x0000ffff;
; c$ E( x. I+ z$ s* `  D' g$ }! v    mcasp->regs->RSTAT = 0x0000ffff;
% Z9 J! M- U( A* f8 f  H
% k7 l+ n) I% X; h    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 w0 b# T+ p. _) F: D, ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 R4 \: F  ^! B; J; b0 n; g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 V$ N- n; B: f) ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ ?1 M% x6 T5 d# p. T+ s% y+ P& X5 c- ?2 V8 l% `* T1 }6 y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 {* F1 [! g5 s( {    mcasp->regs->XBUF5 = 0;% V8 T' X  _. B' c/ q. h
    mcasp->regs->RBUF0 = 0;
# {' u* G7 R2 o( i( Y, v$ {2 }6 J/ r" r( h* C8 q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 w& [5 ?. U  s9 h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: x1 N* ]5 q; s, \# R, s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * P# y5 x/ e4 r# ^* q0 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  P3 b% a  Z+ A) ^' W
- B  A4 o4 v# m; m2 J    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 E  X2 _" y. W' F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 R6 w8 z* E0 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ W. E1 h2 ^( K# t. t" X( Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 \- R4 Q' Q& P8 B4 A' y- F: v' f* m2 y6 |7 u* e8 r
    CSR = 0x0000;! r2 I2 c% n2 V( p
    INTC_INTMUX1 = 0x3d;
- k9 f9 X+ @  X* c' l    ISTP = (unsigned int)vectors;
! y0 j, E' e1 k6 I) n! `    ICR = 0xFFF0;  
  E6 A) U$ Z2 M    IER |= 0x12;  
6 F- I0 b# j, u    CSR |= 0x01;  $ m2 {2 P7 j" J1 {% d
. F% ^/ o" Q) w) c/ A+ N7 M
: T3 U9 Q2 S. i# g
$ Z0 a% T6 t- z& [" }& k- {* F
还有就是两个输入输出函数:# L4 K- N5 V+ m
void output_sample(Int32 out_data)
3 R2 m4 h" _( X" z' _{
" l, p+ j$ m5 K% }  AIC31_data.uint = out_data;  6 Y# d# m: @7 }) |! Q  d
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ T. j1 G; X8 z0 q) x
}
5 N7 z+ B* Q/ B9 I: R$ e% y3 D* v% h# q
Int32 input_sample(void)
1 V, w3 C9 K) {{  / u) M! Y5 y9 z9 W
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& X! v' I# U! }, L  return (AIC31_data.uint);
) Y* ?5 u3 S" f8 v/ f" e* _}% M: j$ [4 B+ M) [( X/ H3 x  S, W
0 x8 J. x2 z3 y, k; I
分享到:  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-11 10:32 , Processed in 0.040819 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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