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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 R( a6 p" K' Dmain文件:" n+ `/ e/ @& X5 r" v# k3 [
interrupt void interrupt4(void)  
. @- _  \; n% c" w{
+ R/ l; a) g9 q3 F! Z  Uint32 sample;: \% I3 e' S  {, G1 o+ R9 B
$ L6 X8 }! C' M$ e2 ^" ]
  sample = input_sample(); // read L + R samples from ADC
. M6 @; d4 q6 W4 }( W- S  output_sample(sample);   // write L + R samples to DAC ! E+ F; R! C( {0 M( b( E* d
  return;- n8 n4 n; N; b5 O
}; R4 m# t4 j% W" M; E

9 C* i7 Q! `  ]0 E) F( S9 Q+ yint main( void )
) n  l6 l1 N/ ~7 t) m{
1 W/ |& _# G  ~. D, H9 A  Q, x1 d& z5 @) O
    /* Initialize BSL */2 w: Y: \& }: I  `. o! T  d  m
    EVMC6747_init( );
. m  [' ?& t( R        /* Call evmc6747_intr function */
1 l6 I! C$ T# V    aic3106_init( );; L4 G6 ?4 X1 [- p; R
        while(1);
- [0 M$ x8 m1 G/ x3 l}
+ j1 M1 C! o/ k' O
+ ?5 @2 ~( f* C6 h; M& f1 ^
, M* P+ E# k1 c! ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 W2 k) H$ p* |$ N; F* t/* Initialize MCASP1 */
- b- B% j; _$ l: |3 E    mcasp = &MCASP_MODULE_1;5 x6 _- S* t! r. S7 s8 c  i1 j
    mcasp->regs->GBLCTL  = 0;       // Reset
9 p# A: x$ v" K: I7 c    mcasp->regs->RGBLCTL = 0;       // Reset RX1 n, N& j& E6 u. G) R5 B
    mcasp->regs->XGBLCTL = 0;       // Reset TX2 A; H  m3 a/ t. g* j7 c% b
    mcasp->regs->PWRDEMU = 1;       // Free-running
" R7 J/ L, S1 C/ \5 i0 ?* g5 k   // configure McASP0 receive registers3 c: L+ z2 O( `: {& h4 v1 H
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 @: Z7 Q( S( Q3 L9 o) C
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 @1 o- p, o9 y  t/ ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; t4 j) A* L% [: R  J3 x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 L' H- ?  f* L9 O3 V1 ]( J2 F    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ n& |% f3 \5 [/ ^, Z$ k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 ^1 s0 o+ I3 M: G1 Q5 _" \4 K3 L
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& w' p7 a( W0 g4 ~    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ]8 J; |2 L' T$ K& W1 r2 |6 v! X1 c' v2 h
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" O* K6 _' X' d; P1 g3 A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 i  D( R7 f2 J+ C  U    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% j3 u- O/ u# Z- ^    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. D8 c2 U9 T, `8 M/ n6 Q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
9 a& n; g! Y4 l4 ?8 t  b    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ a6 r9 _8 g$ i& P0 ~* d) I" Z$ t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; R) p, \1 T- d8 e& l    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; W- A: k. R+ j4 R
$ j  n8 f( n1 A% @6 z  k
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 t+ x/ \6 ]3 M( I& V$ }& \4 r+ [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& a& J3 [. T/ H    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ d% T# v+ w& [# n3 `' O2 F' z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ o5 Y6 M) {7 B3 \+ B0 k) B$ t+ D& h

6 h; v: t* h. u/ k( O+ I7 n    mcasp->regs->DITCTL     = 0x00000000; // Not used1 g) H# R; \* [7 o0 r" K& I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( J. E3 |% b/ S/ s$ r' z, w; u/ v( f    mcasp->regs->AMUTE      = 0x00000000; // Not used7 }, m$ ~( I: D: y" |
/ B8 k7 v/ V9 ^) _
/* Starting sections of the McASP*/
% S1 t2 Z% e$ ^; Q  h; e' Y0 D    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - H( s1 H- L) W. {' q8 N  r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - D8 u+ ?% G5 E- D  H
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 H7 i3 E( @' w4 R+ @5 C! i: q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( i, V" B6 {7 E; s
* z2 _1 I' q; m& c2 U
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  \2 o9 V) }4 r6 ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ I1 a0 h2 R! ?" }+ h
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( g9 U+ @3 I+ f/ a  D. D5 ^& I2 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# r/ k" e6 b. U, j$ w/ _
7 l/ p, z; z5 Q6 {  \4 H
    mcasp->regs->XSTAT = 0x0000ffff; 1 w3 v$ x( t" [% b3 L+ C, ]
    mcasp->regs->RSTAT = 0x0000ffff; / i# U! i9 q* B1 E: D1 n' i) u

: b7 M" u$ O0 V2 m6 w! n. P    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# u. D' H2 K' a# L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 V6 w* w5 \/ C3 x& r0 Q7 ?    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; \  I' @! r6 {  k, e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! T8 G. |0 c: ?8 R! `  T" M) U- G4 y* R" p9 c+ F
    /* Write a 0, so that no underrun occurs after releasing the state machine */' ], O% d$ |: }  w  j  U
    mcasp->regs->XBUF5 = 0;
' ^6 n! _1 v) O8 m7 E    mcasp->regs->RBUF0 = 0;! [2 ~: i% l; r3 h7 i

- ]+ `7 i- O) p: G$ E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 R: A, K+ o" ^* y! @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 }+ }& |  q$ P. f8 \8 f* Y* p( x5 j6 i! }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! s% k5 r3 v  W3 a( E" j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( @9 k- B2 S3 v9 |
6 b9 U* E) l8 M- X( g1 d    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 V. Z: L0 P+ |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 T! O% q& s) |; U, o7 g    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  T+ G8 r& ^" w- o4 @$ C- ~, ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 ]9 d3 A' s# K7 a& [* E
# P& v# |" T7 a6 n' ^    CSR = 0x0000;
9 U1 Y/ Q" b1 p  G7 Z9 J2 ~) K  E# s7 Q    INTC_INTMUX1 = 0x3d;
7 O3 ^3 u0 [/ X1 ~) Z/ e    ISTP = (unsigned int)vectors;
; ?$ h9 }# ^! q( }' s    ICR = 0xFFF0;  : Z& z) K" `7 J; t+ n+ \' P
    IER |= 0x12;  
3 v1 |8 r; m, x% t( y  J% V    CSR |= 0x01;  - }7 M. `. P" M! b& I* E' @. N0 k

: F' D- M$ t: D- [" V" d. }' T) F0 \' k" p+ D
5 T( o( @! u& g; E2 j
还有就是两个输入输出函数:
  R( N: Q9 F& N* Z2 s* \/ wvoid output_sample(Int32 out_data)* T& P4 e9 y& K! W: S
{
, y" j! U4 K, k& H$ M  AIC31_data.uint = out_data;  
$ B: Z7 v8 u: q7 X( Z. i" c  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( f- y4 `9 F+ B9 ~) t, a}
, r# h4 V2 D% o3 H7 M. x, Z8 l7 ?7 L, y9 U6 M* Q8 m& `
Int32 input_sample(void)9 ~: q3 D. y+ n8 Y3 v
{  : l1 w2 V7 F4 w, u0 P8 P! L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. W0 ?' m3 M4 W3 F# |4 g  return (AIC31_data.uint);6 Y" q" K( J1 S3 q
}
2 D+ `$ f7 r9 B0 G% P5 P2 G8 l2 o% }  t. n* 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-2-20 19:32 , Processed in 0.045960 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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