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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 |" a( P2 F: {
main文件:
& a7 L  R, l: j$ j! W! ]8 minterrupt void interrupt4(void)  ! }/ F8 M2 P, G4 z. J" f- f
{0 |) [/ m# ~7 m  ?) _! _' l" B& p
  Uint32 sample;# i* h" w0 L& x1 R- ^5 \: Z

. _% I! j# L; ~8 ~$ ]( `+ m& [  sample = input_sample(); // read L + R samples from ADC
2 o0 X0 H$ B- U+ @0 |" p  K- q8 u  x1 z  output_sample(sample);   // write L + R samples to DAC
! _& i' W3 Y' o- d8 \  return;. |$ T+ a6 K5 h5 T& K* m
}6 h$ w' i! W" P6 j, a6 b

6 s6 {4 @+ w/ W) ~( W4 N2 Xint main( void )
( x7 a# n: O. T5 P" V# w5 \{
8 }3 Q3 ?% F6 ~- o8 w4 d' T+ V
- s  F" r: Y$ W- M% C    /* Initialize BSL */* X" I9 q7 e" I; C! e4 h: v
    EVMC6747_init( );. S9 D/ ~: n- ?) r1 O2 E' ?- _
        /* Call evmc6747_intr function */8 a4 [: V* P* p$ N3 D6 Y
    aic3106_init( );! X$ g8 A+ E3 Y7 E
        while(1);: ^. {6 [* ?) L! z/ h
}/ d( a0 P+ a$ |% k

$ Y- `1 G: [5 b8 ]
5 r$ L  J5 I* ?! A+ j. Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ |5 \8 [, C1 l6 l2 P/* Initialize MCASP1 */( H; e6 D$ z6 F- O: O
    mcasp = &MCASP_MODULE_1;
3 W* N2 G) m% ^: F6 Q+ D    mcasp->regs->GBLCTL  = 0;       // Reset3 F1 c7 h$ [7 ?- M
    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 ~" o7 N% D6 x* a  B    mcasp->regs->XGBLCTL = 0;       // Reset TX# X4 e4 S/ x2 y
    mcasp->regs->PWRDEMU = 1;       // Free-running
  {* S9 c0 G# @4 o4 C   // configure McASP0 receive registers  _- ^$ ]  D) t3 q6 N; ~9 [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 K# Z% X! o1 E' z: s    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 U9 j& ?* }  D1 C: Y3 T
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ f7 [! M8 O, H8 w' s2 T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); }# J- w6 Z( B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 v' }( D% M9 t; g# T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# A' s. Z6 R( R+ y* o4 a, @    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 T/ o; ^* w1 ?$ y% }& _$ B& P2 A8 z1 z    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 k) q# A2 z" C2 K, j3 h2 y# W4 o7 p3 k) `% d2 f
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; E3 U: d! k8 Z5 z2 i0 j+ o/ x
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 u* V$ Q  E1 u) J' J" u& ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! [! d5 o  n2 ^- j9 \- u, A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( o' T: B5 ~. u
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# ]: w: c+ d7 p: t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  s/ O' w& J9 |( L$ n  K$ ]: @    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ k. I, M9 A: ^' ^7 r
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! `; N# V3 {% N* W

& g& t  [; \" D3 x: A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ q/ p' H! c9 ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: H9 F' ^7 C) q$ Z    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 p6 R: C$ n  y% [2 i, b! P4 [% H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 E6 t- F. `. B$ _$ m# K
# q1 A* H& A9 T% h3 J    mcasp->regs->DITCTL     = 0x00000000; // Not used) F+ [% \( p( Z( F8 Q0 t
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 p+ n$ {9 l4 M/ ]3 r% E    mcasp->regs->AMUTE      = 0x00000000; // Not used
* i3 O6 t5 H+ W$ N3 P+ t
5 I* C1 ^" \6 C: \/ N! b, F/* Starting sections of the McASP*/, \) f. G) u; P( I; }
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + l6 m$ O- I, J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 T0 @  }% H: S# R! i* ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( @* d2 y" r+ @8 U& o0 k/ U* E) _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 e: x1 J! d2 G+ I' y$ y) Z! g* k3 q4 I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 T+ W* D( O4 I2 E# L  g- K# T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 U2 k, h1 G9 x7 K1 H0 l; M; v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 R. C& M, W+ Y# i  a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" E9 `+ o/ j' S8 @, \8 @6 |7 o( Q! |0 [; J  g( d) W6 ]' Y2 e% p
    mcasp->regs->XSTAT = 0x0000ffff; 1 O- Y' e2 {6 s5 L7 |
    mcasp->regs->RSTAT = 0x0000ffff;
! |& A9 M" [4 v# K8 Q% t2 r! }% P) A8 d2 G. S1 e7 E! ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 p$ c/ P& L" a4 N7 q9 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 i! W' Z! }) u1 K9 t, _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! |3 T6 H, F4 j) [1 y/ a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' {9 X( {2 c  T* A
6 P/ e; M& O3 O  w
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* }/ I3 w/ I2 ?  r  }, p4 W0 s  u    mcasp->regs->XBUF5 = 0;& ?$ ]' S0 U  H+ s+ |4 j
    mcasp->regs->RBUF0 = 0;
0 p" u' j% s/ W3 p# Q1 h) w3 r! B; }, K5 p9 R8 Z; J8 a- {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 S( q8 P: Y" p  z1 P$ `, b$ @7 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 E3 u! A, {: F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% \1 E  X* ~" [& Y1 m& N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 {; b4 T4 ~6 o
( Y# T7 u# D! k1 k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, l5 M( {' K' h8 X3 T0 `; j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 u# x; Z, \$ i" w! ^  [6 B8 i    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 v3 w7 d9 u% A1 _6 z4 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ p+ _5 J* n: m% _/ s2 m( V
( v1 c, a; d' H8 ~
    CSR = 0x0000;- t" S& K' b, _
    INTC_INTMUX1 = 0x3d;; q/ I$ @$ S! Q' q- R
    ISTP = (unsigned int)vectors;
6 \2 W3 @& T3 f% O5 y0 w    ICR = 0xFFF0;  
4 s1 p0 y. y& G- U) F$ `  z    IER |= 0x12;  
6 m# ?& U/ I  N. Y' s* Y    CSR |= 0x01;  7 E2 L4 S# s) T, ]2 H5 o: g% M
0 e- k7 B/ o) {+ q
& j6 r" w+ z7 f: T: L

5 K% b( }: O) ^: K8 y还有就是两个输入输出函数:4 J) N1 }/ q) U" {" {
void output_sample(Int32 out_data)
$ e: v+ M" T  a/ }9 T# }{
2 `3 `- m  W, P' Y) h8 v  AIC31_data.uint = out_data;  
* l5 X7 u# ^4 ?; c% g" j( x  W$ e5 @  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 I7 O0 H5 c6 Z% y  ~}
3 A6 V4 S; H9 _
. j! Q9 s) H& j9 o1 C) _5 Z, \Int32 input_sample(void)9 X8 ^* L% z7 a
{  
" L" I/ A% o0 ?* ?% Q  M8 H5 N9 D$ ^  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 n( o& o% T' M/ p2 P  return (AIC31_data.uint);
5 T5 y: C4 r. j# |}0 H! K; p, k+ F$ D2 W

* m) i/ e6 |3 }$ ]8 Z
分享到:  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-1-1 01:29 , Processed in 0.037981 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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