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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 [( q5 |3 Y; V" q1 Smain文件:
, B- N6 ]0 a/ c) f0 p7 q* `interrupt void interrupt4(void)  
1 V9 z- T! D4 f) s: j/ o& m{: d6 L1 O: L  E& |
  Uint32 sample;  G# h- G$ K' B

& W- M9 o9 u& A! w  x* y$ v" ^  sample = input_sample(); // read L + R samples from ADC
2 K' s4 T5 m7 ^/ N- D  output_sample(sample);   // write L + R samples to DAC . @/ C. T5 o$ }# Z5 X, }
  return;
# K! j: M& n; e- a% f6 I. m( J6 M}$ o6 q2 c' m+ f* I* E- m7 F" u

7 W' t* P) P- M+ s, q$ {; Tint main( void )
8 Z. P" M  P5 \3 N9 _{% q6 Y8 R; h  N; l$ }( A- }

$ V8 H6 R. _! C: ?$ `5 a5 y    /* Initialize BSL */5 E/ q' F! J/ I; p  Z
    EVMC6747_init( );
; `9 u9 P6 G7 m: W9 W        /* Call evmc6747_intr function */
. n" B6 X6 {/ y6 o    aic3106_init( );
/ z7 \! C, ?; s  e$ `        while(1);4 J& x1 O6 t* s5 e+ y8 L- ^0 c, K
}7 o9 g6 }; B1 W2 T( ]. M& p

$ k: @+ d8 i9 x6 \$ d0 E! |
% l3 W+ r7 X3 }# ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 X  G6 M9 b* a8 _8 A# I# ^2 Q) x/* Initialize MCASP1 */
+ e. }2 R+ ]2 c: m/ Z; b    mcasp = &MCASP_MODULE_1;
% r) T( D# d7 ?7 A2 B' h. A  R    mcasp->regs->GBLCTL  = 0;       // Reset
: m; a- x+ N$ ^6 m" A    mcasp->regs->RGBLCTL = 0;       // Reset RX8 Z( ^; o1 c8 P, i) d: _, \& `
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 a7 R) u1 q; M2 G3 G  O& R    mcasp->regs->PWRDEMU = 1;       // Free-running( [3 b: [1 |8 x" a7 P3 L, B
   // configure McASP0 receive registers3 v  x2 z3 n0 `3 ?  ~" S% z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" U9 T3 K3 h  y2 \6 E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% O: q8 O% c0 y/ \7 ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 q7 d. M2 y" j* u8 W2 ^/ H5 Y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 Z1 P7 z2 ]4 r) a- u* F$ j: c# m  p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); ~: m: p% o0 A! ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* E- m, _: ~6 P: `# i    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" h" N3 t/ z2 D+ a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ L$ O$ s6 C: f& F
$ Z& }: m# i, D& y- p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 z. p: O- Y; x+ i0 S( B9 M    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ n, E3 U6 X/ Z: E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" K( E6 a- `4 [" T% E9 v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# n, Y/ C& G" d8 u
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 ?& C: C  o6 E# q& h9 M+ N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ _  G* ~' e9 P0 d- ^$ y! U  Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! p0 G( e  D  L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  n" m, n5 T' ^3 b# v9 V1 J. N+ A6 b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: o& n! r5 p6 g& v8 b# R
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
6 K" c' N+ K: B/ C. Y2 d    mcasp->regs->PFUNC      = 0;          // All MCASPs
* O6 i" c: N: o4 m; }% [  F3 f1 x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* O3 e1 ~" ~& x

$ m" }4 J4 M9 ?- o    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ t1 y3 T# k7 d- p) O9 _0 l( ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% [$ T/ x" A# F1 {! C  d    mcasp->regs->AMUTE      = 0x00000000; // Not used8 y' w5 o% q0 L* W. h
  C* B3 B; b$ K# U6 J/ r
/* Starting sections of the McASP*/4 P. y# p9 e! }, B1 ~4 O- E
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 O& ^/ l* i+ ^5 n) j( v1 M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' Z8 m& I+ `1 G* E0 u: W3 W2 z0 T$ J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : A/ N* g6 w5 g7 G! B' }9 {8 i0 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 e7 M- \) s' l
' u9 d4 ?9 d2 w) W
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / z/ v# x' ?/ L8 f( j8 ^$ J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! G1 B' C, ~  @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 J* d+ S1 ]. v% v, y& D, r8 j/ l* ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' {& n& n- s8 E1 N6 c7 v- b
. a& L2 e! O9 k* y  o    mcasp->regs->XSTAT = 0x0000ffff; # Y0 L3 n5 Y& l+ w) ^1 b; K4 o
    mcasp->regs->RSTAT = 0x0000ffff; 8 s1 \' C) r( G% e
6 M6 N$ p* w: v5 K: E; S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: B7 @0 N# o! m5 u( P: l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ ^: V, Z. y( a: W" c' [
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . J; R( D4 N( }% d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ _- S" u0 J# Q( \
6 n1 L1 Z* m5 m% M9 v8 B
    /* Write a 0, so that no underrun occurs after releasing the state machine */& W& h, V' n% P4 R) w
    mcasp->regs->XBUF5 = 0;# [: V8 i4 \- n& I) w+ ^
    mcasp->regs->RBUF0 = 0;
6 ?5 E! ?* `! X6 w2 K% p* {9 g/ S! _
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# f! w# e; A1 R" v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 s) E( r" N- A6 ?7 \    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 D% _$ D+ @% L+ Z+ E$ ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! j8 O9 g- S& n0 r% R
9 r3 T- l6 {) W0 o8 E    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! t. Q$ b2 b4 Q' }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( R" I1 z3 n  U" f5 \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + a+ Z+ R1 n, v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) `/ D3 y7 q' u" Y" K
8 |! P9 u# b( e& i3 V& r% X: M+ q    CSR = 0x0000;
$ @6 D" h4 K5 z8 v$ n    INTC_INTMUX1 = 0x3d;$ x3 E8 g- Y/ x; j. t2 j
    ISTP = (unsigned int)vectors;8 y. }1 T- K. F" a
    ICR = 0xFFF0;  
% v2 I. O0 d. B: B' M' b    IER |= 0x12;  7 T# j; @* E0 _% E! O2 T
    CSR |= 0x01;  " s: M, I; i' l1 C, C# C

. @: t& u7 @  i1 ^0 i8 K1 T
  P) f+ \/ D5 H8 K3 W7 Y
- ~* H; R7 q2 G还有就是两个输入输出函数:, Q) y1 p( g" E* X
void output_sample(Int32 out_data)
: P5 A+ t, Z6 X( M+ U, i6 P{
4 b2 h: {5 ]: e+ O0 w  AIC31_data.uint = out_data;  ( G5 j) K* y6 @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 ~' i% h& X, C}6 \+ H: q3 Y& r+ h/ `$ v

( O7 E( a, K$ Q" a  sInt32 input_sample(void)
0 N% B6 H( k) x{  , ]  q& \/ Z! I' ^, N6 e! i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) k: z8 _1 S7 e+ C( k/ O  return (AIC31_data.uint);+ M* ~3 n4 i( }% \  }2 u
}
4 C5 y. J5 g! ]; h; i  w$ O' E* 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, 2026-2-13 12:44 , Processed in 0.039652 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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