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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! p  p3 a  v! b6 R
main文件:6 @1 ^  Z8 W# D6 k
interrupt void interrupt4(void)  4 N( @' ^; p% n3 z+ B7 N' |6 B0 r
{- s; Q9 j, {' i( A/ f2 Q" M6 h
  Uint32 sample;
/ W$ z2 X9 `( s& ?9 j0 D7 e/ a5 D, g
  e( S# u+ M  y& h, @! r& I  sample = input_sample(); // read L + R samples from ADC
+ ]: Z7 g% G5 ~( }  output_sample(sample);   // write L + R samples to DAC 7 k" T0 Z  Q* \6 M7 {& p" c$ \
  return;3 ^' J  _! \' x
}
% F  b  C3 A* e
6 j0 c  p$ k. {* Q0 j6 Q" H! dint main( void )# @' [- l% z+ G% Y
{
. k' _; }; X2 E& c
& ?% ?3 @1 b  i  @    /* Initialize BSL */
( S: {! V! X9 `  z! M! @+ V    EVMC6747_init( );
4 Y6 I4 z- |3 H* S) l, {        /* Call evmc6747_intr function */6 y: W2 V* \9 I6 B# l% C3 I, ~4 Z
    aic3106_init( );: P2 x* H* O7 l- u) X
        while(1);  v/ c* N& [, a' s
}% U+ ?. S- Q6 X) O- Y, }  c

6 s3 F5 X  c+ w2 y: }6 D" n. B2 s( d2 p, d' i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ r5 x# E% x3 I/* Initialize MCASP1 */
# v, I% c8 y  ]9 Z    mcasp = &MCASP_MODULE_1;$ |% g. p5 f) {* M! v: T
    mcasp->regs->GBLCTL  = 0;       // Reset1 _/ ?  z& D1 W0 _
    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 h/ L: O5 y+ h, R2 J0 ~    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ P1 \0 X8 |/ y' o    mcasp->regs->PWRDEMU = 1;       // Free-running
& G1 i, W8 t3 z8 W3 T7 w- e- f- w: }   // configure McASP0 receive registers/ M5 o& b9 A- c: A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! w3 ~$ Y; Q3 i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 F* h) H8 o! E: {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 p* _$ I3 }6 R
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: H# h, O. A3 D# C  e. N    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 I6 J' F' i1 G2 \: X3 T8 A    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ ~1 Z+ X# f8 a5 g: F    mcasp->regs->RINTCTL    = 0x00000000; // Not used, n! K7 I% \. c6 `1 r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; r" Y) M4 q) H) H, O

( N  J6 `9 @: Q; B* q4 r0 @+ Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  r4 G! t9 P# {# H! n# z) {! v0 \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. }5 o; p; K& T. I8 J: n
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# p8 T1 @# l5 v# _' }+ ^8 D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 o3 x$ e3 D  m2 q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' _5 V8 R' u" E: {. Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 v: p7 `8 s$ z    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 e: ^1 U0 E" }2 ~+ T1 B- J5 o' L3 b. R
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' O1 j0 l* Z; `, z* U2 C
2 `4 F: Z/ X: `! x    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 }1 b" J: y4 z0 U% f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ U0 `8 _7 a7 Y* A+ X( S    mcasp->regs->PFUNC      = 0;          // All MCASPs9 U1 g' D+ e5 @& p* C& r
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' B4 Z8 O# z3 |+ j0 ^3 _; U- X& |9 G4 T; ]
    mcasp->regs->DITCTL     = 0x00000000; // Not used& a/ u* G: x  p/ F2 @0 e3 ~
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. _& w% t; L& y* W  p; o9 u    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 h1 Q. ~9 A& M, F4 W3 [
2 h1 h3 W3 {  V: ~9 P. N1 M/* Starting sections of the McASP*/
# d. p( I( f1 k9 b6 s6 k( K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & [. k0 G, }7 @1 A) g" N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # n& A. V: w4 \0 |$ T; I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & ~! D: y, _' x) b" |- z4 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 v( H: Y9 n! C& _7 A8 p/ ?" B) ^

5 O0 M% n2 T" c0 x% }4 R* z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " B9 w5 Q: g0 W2 I- l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ c' }1 A% E1 ?" \+ k2 `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 Z* Z$ _7 l) Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 f- o8 ~, s( J) S0 u6 y5 O6 K5 B1 N8 d4 U; G9 ^  g' l
    mcasp->regs->XSTAT = 0x0000ffff; 8 G' L# {9 a- G5 o
    mcasp->regs->RSTAT = 0x0000ffff; % t# C' f/ }: ~

5 a  H) k' y; I+ e& V  \6 T( l1 ^    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* M3 y8 B5 n; M, _- t: b) r4 A3 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* |; s/ [. I$ T: S& j  L7 Q( z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 B" z+ M6 P  a& N& |, R9 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; \9 i! ^# q3 [

( x& ?# B6 q* ]. D1 R0 u    /* Write a 0, so that no underrun occurs after releasing the state machine */- P% S8 L7 T: [. ^
    mcasp->regs->XBUF5 = 0;
4 g; w" ]; Q& A7 d; m, W$ i    mcasp->regs->RBUF0 = 0;. H/ U4 I( n0 H# h8 }

' @- G. {$ N8 N1 ]( C    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 j$ [( r6 r. J' ^  j5 F+ P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) g! c! @! s( [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % l5 b2 P  n9 @1 I" F8 ~0 t% d% n  \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ u+ y; b7 y$ B- G+ E8 T9 |( x; e4 V5 @5 {2 u5 N$ ^' H8 D
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 @9 c$ u; h" r" C& O+ T& v! ?) _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! u7 [; V+ S0 {5 m    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 }8 ~4 H( q/ J& r) h5 U$ n4 w- _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 a0 Q+ S4 @  v+ R8 }6 ~
1 \$ h( ~& }& l$ I
    CSR = 0x0000;
0 a" Z: i+ V7 d' s2 Z; x    INTC_INTMUX1 = 0x3d;, s; F/ B* \3 q& q; l9 U
    ISTP = (unsigned int)vectors;3 x; U) d0 T3 `: K
    ICR = 0xFFF0;  ' a8 V# y2 d4 W7 @
    IER |= 0x12;  
* i7 }$ a6 A5 r# z( I: [  ?    CSR |= 0x01;  , K  u  v- Z: h7 |

" ^5 F7 @7 s$ n# f: A6 b3 f2 ?2 E$ v9 ^: S
7 f9 v. u$ N4 J! o( D- `( ~
还有就是两个输入输出函数:
9 t' [$ K9 J' Z* [! m* R" n/ jvoid output_sample(Int32 out_data)
8 i, E) D4 J, Y1 {' Y5 L4 ?$ e{, [9 x# P4 \# I4 W! p  R
  AIC31_data.uint = out_data;  5 V0 v! X3 V9 f0 S2 Z: v; B
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ N# l& H! d4 P$ x}& P, `- h5 B( y0 L

2 @  H! |7 U+ X" [1 xInt32 input_sample(void)
( p5 U2 T: v: H- _: g{  
2 H/ ^  n  @) e; @/ N: K  u  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; A0 O, H* X! T4 J3 h& T  return (AIC31_data.uint);
- U2 S2 ?& U' b1 H8 L$ B' k6 N}
. p" d9 K; M3 f' a( X1 o) r
" j* o) s6 v0 c  c: {
分享到:  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-3-13 21:59 , Processed in 0.042765 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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