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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 O( m, q+ Z) ]. j5 |' y
main文件:
* X/ ~! T- Q% |interrupt void interrupt4(void)  
! ]1 R) @& `: J9 n! [6 @{
' K$ \( o% j! Y2 E  Uint32 sample;* K+ N  ^% S- R( ~: x9 k" U8 U+ ~

, M: E8 r  O/ x. T/ C% G  sample = input_sample(); // read L + R samples from ADC' W% v' K+ ^( ]/ F4 N6 W3 |" l
  output_sample(sample);   // write L + R samples to DAC # b' Y1 m4 J+ H" v  A8 R) [) D
  return;
: c) Q9 p* V9 u9 }- p& D9 o5 m+ f8 \}
1 n- N' V, n4 I  X
8 g1 @( x: S+ `/ I: cint main( void )
! j. q9 i) t9 i- ?, q+ [{
% b8 H6 Q# `% g& v0 p8 w" g
# s2 ~: {! Z5 E  d7 V5 `" o8 ~    /* Initialize BSL */
0 D1 c  J8 ^. P6 Q! a0 N+ ?    EVMC6747_init( );
1 q4 N( B$ x/ K' U        /* Call evmc6747_intr function */
; T. z& e% m; W    aic3106_init( );
' }4 p. B( x1 g' @        while(1);
9 W% \& m$ x. h9 H. s+ N$ b}
$ T2 v/ j8 p- h9 e' U& V
2 i$ L5 _+ \9 s; |8 T0 G% @) f$ R2 |, b! G7 W4 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) ]# k2 @% i4 C) i3 o1 t3 p! S7 ]/* Initialize MCASP1 */% z5 \$ Q4 L) U- k
    mcasp = &MCASP_MODULE_1;
* q* A9 m& A2 m, ]  j) w$ @8 b    mcasp->regs->GBLCTL  = 0;       // Reset
, a9 J2 q9 Z; T- M    mcasp->regs->RGBLCTL = 0;       // Reset RX
! \2 \' J2 X+ J. I    mcasp->regs->XGBLCTL = 0;       // Reset TX
4 G( }$ M) m7 q+ x    mcasp->regs->PWRDEMU = 1;       // Free-running
' j$ P7 Q4 K3 L# D% b   // configure McASP0 receive registers
! F) V$ |( h- P6 j: P* O    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! q) E( K. Y" t: A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 K1 L2 r8 u3 y( Y0 z8 S! B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 ~  g3 R: H0 i0 ^, v3 q: {
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 O0 k% F2 T% ?7 A  ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  P  y- Y& z$ C4 M8 a3 ~( o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" t/ s6 n* @  s& _0 F5 `    mcasp->regs->RINTCTL    = 0x00000000; // Not used) m, F9 N! p& p
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( ?) J& A# N9 f& @- X; u2 |
! C5 q7 m8 ^" r% P4 q! v7 v* k
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! E$ L% c+ a3 f$ s: B! `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 d$ y1 T3 i( v6 d; \4 E  x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 O1 G% I8 f$ A% ^, t! _  b$ V& I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 p. f8 K) U4 I( ]2 U
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& ?+ \' h' t9 D! r) X$ R: P/ D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% \! _. M7 h+ ^9 J
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 I8 {  d; P; `( {% v    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' |( \& q) s4 p% x, x! C+ b0 t: _

1 `, V6 l& k: F4 j    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. k- B3 L/ E- z. Q6 k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 G4 r* n8 K: w# m$ g
    mcasp->regs->PFUNC      = 0;          // All MCASPs4 ^) |" ]( `. V$ O4 Y: J
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 B9 [; O3 ^; |
: |2 L% b$ x! e& E4 O' a5 m    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 ~0 g0 E4 V+ {1 f: X    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 [. W  m- _$ T) w9 K$ a; t, S
    mcasp->regs->AMUTE      = 0x00000000; // Not used& @9 \. L8 O' I
! e4 X( l! B! {: i# ^4 v4 v. |
/* Starting sections of the McASP*/
3 ^# e' v% \0 }    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: G4 U1 y1 ~2 n3 j+ o/ o7 q. U4 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % Y5 R% Z# A. e
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : N) C! ?7 }5 v& m/ N7 J: J/ _& Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: A( O5 x* K, i8 n. ^/ e
% h7 m2 P  e8 w! J0 b' q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 h0 f4 z0 F$ I( ^4 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ K, g+ g8 Q# P. g7 q+ E    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  K5 n( y, V1 D/ g9 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' \% s" P) r: p

' A% |$ w5 d; Z/ Q2 ]    mcasp->regs->XSTAT = 0x0000ffff;
9 @0 ]1 @9 t  X    mcasp->regs->RSTAT = 0x0000ffff; . K3 ^% y6 e% M- C' b6 a0 |7 J5 @4 W0 W

) ?/ J9 I2 d. M4 x* g3 u    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 L' i6 h( e- ?$ b, G- e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) u: `! Q5 y2 _3 e    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 r3 x7 ^, C7 t$ F$ X, K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  z# G! ~% @( U5 s

8 n$ w: G2 q- \( i* e7 B3 j    /* Write a 0, so that no underrun occurs after releasing the state machine */% }* o' K5 j5 P0 j
    mcasp->regs->XBUF5 = 0;
7 }6 f/ p* I3 O    mcasp->regs->RBUF0 = 0;4 N4 v8 ~1 o2 q; U" N. ~  p
# M$ ^5 h. a. c" I; ]5 @, d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" [3 w# u' o, F+ w) k' k: R3 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% o5 E# V9 b- M3 S: }( e    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' v' J; }. v; \0 {, ?. |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 {/ Q3 F5 ~& ~: L9 O
0 k; D7 q, H" v( _( R, R1 P- j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 ]' n0 @  ?2 \" N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ x: j* S) G, }7 ?( J6 v8 r
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- o. U4 e. `. V0 D8 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, f7 g5 Z6 O' r/ W: T
3 A' X, A* m& O% V6 Y% a2 M    CSR = 0x0000;; E. Y# z' n  ~4 g: L+ w1 ]! _
    INTC_INTMUX1 = 0x3d;+ {8 R" N$ M% k; }# {" J
    ISTP = (unsigned int)vectors;% ~$ h+ J' t! B
    ICR = 0xFFF0;  
9 M) i& Q) s/ P" J9 r+ E    IER |= 0x12;  6 d7 d. v4 z+ w  s- g
    CSR |= 0x01;  % \$ s$ T  S& h2 g

6 D( j1 B3 A# c  n! ?9 i1 w9 w: K+ I( r
+ @; }8 C/ i' x% Y6 @+ d2 \: @( F
还有就是两个输入输出函数:5 l# z0 D9 Y& T4 @5 Y% W0 ?
void output_sample(Int32 out_data)
! N8 U9 l! G" p, [: k- w{) l" R" x8 ~5 O0 O) `
  AIC31_data.uint = out_data;  
! G/ e8 J* J# t( {1 _. f8 ^7 `4 a  MCASP1_XBUF5_32BIT = AIC31_data.uint;, R% `6 N( W2 C
}* L6 Z0 P5 `! H9 @$ m

/ u( a" k0 q1 q6 }% yInt32 input_sample(void)9 w6 S% p/ q9 \) y
{  " Z# `" u5 |  [6 A. {0 y" W8 i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;! ]. \0 C( W5 H5 C: E2 e1 \: g) h7 \
  return (AIC31_data.uint);1 s; c$ }; P6 M* a
}
7 s4 K  k% i$ \. n: s- J
" D' R- V( Y+ R8 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, 2025-12-9 14:42 , Processed in 0.041979 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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