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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 @! G1 U. h- h% Y2 y" U+ umain文件:
: N5 M6 ?$ E% zinterrupt void interrupt4(void)  # y; `  s6 I  Z& S
{6 t5 G# u0 n% w8 F1 R) O
  Uint32 sample;
/ D- }) I( f6 n( H  n2 {9 g+ s7 n8 U) t
  sample = input_sample(); // read L + R samples from ADC5 `) v/ l; H% b. `! ^2 c+ l. M. s
  output_sample(sample);   // write L + R samples to DAC
4 z9 J! ?6 H* d: G( W1 f. a- Y  return;. R' ^! O$ r3 Q1 z. v
}
: J+ p0 t5 Q6 t( P4 R- F' `; w0 h
; H! U% b, w  ?: cint main( void )* {$ P, h' C; a7 S( z3 I
{4 W( R) Q- }* M% N" f+ M9 C
# T3 ?( E/ Q2 [9 ^
    /* Initialize BSL */
& F0 C% d6 Q& u/ Z2 m7 s    EVMC6747_init( );7 {$ g; f9 K' I, w0 |
        /* Call evmc6747_intr function */
* Z) `- {, o9 n( ^5 V    aic3106_init( );. o7 U% i; v8 U" H! Y/ Z: k  V
        while(1);- [8 e: c0 m  ]1 a
}
+ h0 J) I% k7 \! m5 V* F& H( d( I5 N
* ^# n( ?- [) N, V. A0 r. F! X  w' x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 `6 y% y# Z" E! u, ~
/* Initialize MCASP1 */
& g0 |& g- ~- j7 {0 v* l9 Y4 q5 m    mcasp = &MCASP_MODULE_1;5 L$ l. Q, F4 G( o5 A+ R
    mcasp->regs->GBLCTL  = 0;       // Reset2 ]! F2 Q2 p' K! b) E1 s
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ H1 P( R0 O, X: |( f    mcasp->regs->XGBLCTL = 0;       // Reset TX- Q9 X; y2 x6 W5 Z' u
    mcasp->regs->PWRDEMU = 1;       // Free-running
! Q3 u8 `/ m7 C& n. I, w   // configure McASP0 receive registers0 G3 \- J3 R* a4 V( N
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# o* ^7 p4 r% X9 K1 a. _( R. H    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. |6 K1 m- j! L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 q0 l- n' b5 \/ b, B    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ v6 m$ N/ ~7 }% S% D    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 H4 T% \' L7 A  v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; K) l, i4 E! M9 P7 D0 r    mcasp->regs->RINTCTL    = 0x00000000; // Not used
% U- X8 S$ Z& W) X( r5 g& }    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; _( t4 H0 t5 Y

4 z% e, K: Y. j" Q0 D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- D/ m% V5 B4 u# U8 v. _0 k( }
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 d7 Q) S  H5 D+ P; D9 x4 K% ^' b    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( `# C, R3 Y% E5 Z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; B: A7 h' I& P5 _$ [
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ y2 N5 v$ f6 O: ~6 k7 X& _    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ g$ r! Y6 ?' J    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ ]& E; L7 Z  k: Z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 E* C1 f4 P; B) G+ z# k' n! c0 k

$ j. ~& i3 I1 F2 {' s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ R" ^5 ~; ^. i/ s1 w/ k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" p* z, r) a) S( g1 W+ T9 t
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 c1 k& j) |. d2 V    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' H8 e: L8 F! W) t$ s( g$ i6 C
    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 J  q2 G. P! ?& y( ~8 @    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 _  S5 U% @' |% q& z# ~    mcasp->regs->AMUTE      = 0x00000000; // Not used
# A0 c( h- \0 l5 w8 Q1 O7 q  f. L, E$ D
/* Starting sections of the McASP*/
- F$ e+ ^1 t/ a( G2 a9 ~& f8 f    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. n9 p! d* H' |$ [% |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) d& U" C. U2 S) R5 E6 ^+ S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 k9 T, l, h' y3 X8 k6 A9 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& y8 J" S& z# i9 J7 Q2 G) g; r

' b+ M+ X6 U0 Q$ {) N" F* H6 ?, `    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- \0 Y3 C  [0 G& ?; w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) F6 }6 M4 f: p- U    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 @# w6 k) ?8 q, t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! D( d1 H- k8 O4 m' |
2 u- l3 j; ~% u& }9 e
    mcasp->regs->XSTAT = 0x0000ffff;
- [) Z( i2 T  f# o2 s    mcasp->regs->RSTAT = 0x0000ffff; 6 r, d  z- }% \0 z' ~$ ~& B" Q
8 a" [4 J7 _+ U) m+ `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 c5 ^5 i- A- n- W, G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) a3 X* ?" K& h5 C/ V: |9 [: o# H" I5 c
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 I4 M$ R8 d- A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ e9 D; _/ C1 j! Q! e

4 \  K1 p; n, [& }9 L7 z2 V    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 D' P( E5 N2 ~! }    mcasp->regs->XBUF5 = 0;
" S! T- t: P2 |# u    mcasp->regs->RBUF0 = 0;, f7 [. P1 C" a! a/ Z; [/ R
  y$ A* ^. B% ^1 [3 {0 C$ U
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - Y6 m. }. z9 u' `2 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 E9 r0 H) m  I
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 a. q8 v% ~8 V* b  O5 g# @! l- J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ [  ?6 N0 t6 \  m7 o. z' |6 W3 k+ |
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* [+ l4 b* V4 y# p* i8 y& b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* j$ S9 _  W; @6 a, n' k3 V+ ^6 e
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 T% n( t# C0 d( X; E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 v1 J& Z6 [' p  z1 H! t( c6 b
3 f) Q+ g* Z5 \" u9 F
    CSR = 0x0000;, H$ v+ e( i6 G( }
    INTC_INTMUX1 = 0x3d;7 n% |+ P2 m& T1 W
    ISTP = (unsigned int)vectors;4 y. R1 k; i6 L+ X1 m2 b# r
    ICR = 0xFFF0;  . o) k9 A1 j2 B! i0 S) e
    IER |= 0x12;  
4 O" M" i) I% r0 I    CSR |= 0x01;  
3 i/ Q! b2 J0 r( o: F( C& A' L9 R
" c/ s) |1 r3 l3 C* M7 E! t; \% G: y  e, Y0 N, @4 @

2 k0 l( R. p8 D& K: u还有就是两个输入输出函数:
. E2 G0 r+ R& V: {void output_sample(Int32 out_data). c4 D0 j' O1 E1 A8 x! ]8 P
{! E4 N+ w# c/ U
  AIC31_data.uint = out_data;  
8 Y, w' A* H- M$ K" P( o5 D9 |  MCASP1_XBUF5_32BIT = AIC31_data.uint;& ~4 ?1 g' U$ U! R+ A0 N
}
7 h# h3 T, b8 }+ ?5 D# W- r, D% Z, e
Int32 input_sample(void)8 N8 L, y! t+ F% i
{  1 h/ M% I' o* V) E4 V
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 t; G4 l, `$ i) S0 ^  return (AIC31_data.uint);4 {6 b3 w* K" x- i3 h  v" ^% _
}
' w, ]1 x( B0 ]: b! N4 Z; M6 s$ i' W5 L) f; g+ U! V
分享到:  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-29 23:25 , Processed in 0.040606 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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