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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# x) a. g6 j8 L  }# C# vmain文件:5 b$ M3 \( |  ^* U( J# B/ ^
interrupt void interrupt4(void)  
# z' h7 Z* {. `{0 e* p& i( \: P
  Uint32 sample;/ m+ M, B7 B8 C9 E# W) _; ]

6 X/ ~9 K; B8 q  P  sample = input_sample(); // read L + R samples from ADC
& x' s) _& h: z% Q, X$ h  output_sample(sample);   // write L + R samples to DAC % Z# e3 c( v* V. r% W  R
  return;
  l* H( v' b# r' U  S}
' R# n! c  v/ q3 s: q6 g8 J) ?
2 y, S; i7 ~) `  j8 w5 Xint main( void )# d" M9 }# u- a* h6 S, N! |
{6 k% P3 I1 k. ]/ g. V; _" n3 i
2 J$ U3 Q7 \6 Q" w$ A
    /* Initialize BSL */
8 ?* [2 K% v; v    EVMC6747_init( );1 ?" O' N+ q1 X% Q* x
        /* Call evmc6747_intr function */
4 w$ H4 J3 F; h6 a% X/ }    aic3106_init( );
5 V2 j) U) g4 V% d- Y$ B        while(1);) ^+ V, v& Z- c9 y4 {6 I% W
}
) |* X  V5 R9 L0 V$ R# _7 a/ |* |9 S6 i

# L% {# y) \5 p) \; N- Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 F, e2 R- Y  ^- u5 _1 Z
/* Initialize MCASP1 */3 j4 i% @- O! a8 W) E2 T/ y* ~* a
    mcasp = &MCASP_MODULE_1;
2 O3 b) [+ C4 J4 [  o. Z" O; B    mcasp->regs->GBLCTL  = 0;       // Reset
( z9 U( O5 o* c7 Q3 M    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 v2 W1 p( D7 E# `    mcasp->regs->XGBLCTL = 0;       // Reset TX5 D; f0 S2 t# l) Y/ R7 v9 e& n1 d
    mcasp->regs->PWRDEMU = 1;       // Free-running
& l# Q9 Y( F! ^- E1 U! I( Q   // configure McASP0 receive registers
* {0 ~% S6 p0 ~/ D* ?5 t% \+ H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% y' X+ a7 z2 T. p2 Z2 p  H    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. c: J- P2 w8 P. |) e$ N# i  i0 c( ^3 T    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: V( Q/ D& c2 k  e3 g/ g% L    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 {5 w. ?) [" B# U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 S. q4 l( O# Y$ c2 `7 t: \6 Z, Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% o1 {9 C2 [' r& R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 T( P5 ~# u, q  Q. b
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 r$ ^2 e- |) t5 g' X

& J0 k' v9 E8 [% L2 Q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. r# ^$ p; E. T+ P; z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( R, ]" J) _$ r: n
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' I0 B% D7 P3 H% J! ]+ D( [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- F- s1 g( @& M$ I  h2 L& K  j0 A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! H  x  O5 d( D3 ~    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, N* G3 a3 v" |/ e    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: a& P, Y& q/ w: e0 d  u6 v    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 s6 p5 f9 k$ Z/ q/ e) U9 T/ e+ ~7 c' ^& V1 c9 E9 h1 Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* `6 R( [7 M, M  p2 ?3 |0 C* h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: I+ S) P6 x$ Y# n/ K    mcasp->regs->PFUNC      = 0;          // All MCASPs. X0 V, s  R8 O8 U& Y. W* a. B* U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& V7 Y8 x* V) `( I$ J2 f5 I; m- Q2 v, m# F
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% J  S' _# D, y% G0 e$ D    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- J. N( D% X3 Y* O    mcasp->regs->AMUTE      = 0x00000000; // Not used
, J" y9 M5 p; k. i( F2 m5 F) s3 P! s& M# U( ]' B: e
/* Starting sections of the McASP*/( j1 P  Z0 c, J) D* ]8 `
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 t1 i5 P7 K9 l6 u8 E7 g$ @- X$ c* B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 _( T; a- o: N6 F    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- u# x2 n8 n! c0 I7 J4 T' A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' ?- I) c$ |% L% U! k, j( |3 }& y1 t0 H

6 S/ L  `, V: ^9 c) ]9 {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " n, d- C4 T' d, D$ _: a1 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ H9 e0 q' _2 F    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ L& u# {9 @! b! U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 V+ Z1 C! f; T; H% U, i5 {
# S' C' m% ^! N: e. ~6 R6 m    mcasp->regs->XSTAT = 0x0000ffff; + n2 }' {6 n7 X; z, E% T
    mcasp->regs->RSTAT = 0x0000ffff;
* V  j# K( j& {& Y4 @. `- m2 j: v* }& h' r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, \8 V) s* G" }' F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" g: c: w, V& o; _' F6 W
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   w! Z) F& R: n1 C* \# X# C2 t- {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  B$ b& g+ W  R; l, Z, T

3 }+ T: S6 ]* j& [( R$ m1 w- f    /* Write a 0, so that no underrun occurs after releasing the state machine */% s$ q) I1 g8 Y6 x- x2 w
    mcasp->regs->XBUF5 = 0;
0 b; }2 d8 A/ v% i    mcasp->regs->RBUF0 = 0;/ E6 d: I( X. u8 `& Z& C' D
( t; Q! T5 c. y$ r! M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) i# Q/ `, i3 E" i; g2 S4 y$ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, N9 t* U' p7 e# N1 n    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , E+ b% X- x5 Y0 M  Z8 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 R+ I9 Z1 u4 P6 _+ @$ g  [2 g5 \7 [2 ~% R; t6 f
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. l) A" K4 G4 i  R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 q& m! ]3 U$ A7 q5 Z" M/ W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 T8 x# _6 `: W8 l" \2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ H7 w( A- P2 P. e; C  x% @, O$ J2 o6 u3 X1 v. ~' m2 U8 D- p
    CSR = 0x0000;  }! U) K8 t9 j# S; k
    INTC_INTMUX1 = 0x3d;
8 Q4 ^- L* f! s0 I" _; d    ISTP = (unsigned int)vectors;( H% F7 E# {$ j
    ICR = 0xFFF0;  
! l2 l9 n8 O" n$ O    IER |= 0x12;  
" e3 S  z' b/ U6 A" u, [    CSR |= 0x01;  
$ }/ m& K9 ?1 ]1 z0 q1 O$ X/ G) u6 G) o' h% [+ e, `

& }9 S' [# O4 V0 v1 w* C
; T( k$ @: T( f7 _还有就是两个输入输出函数:
- Y4 ~6 q5 g2 F$ W) u) uvoid output_sample(Int32 out_data)' [0 s$ u# \% S/ o0 _1 j
{+ O1 I$ B% K) K# |1 i. L
  AIC31_data.uint = out_data;  . ]* }7 s/ G  ~/ T6 p$ x% P
  MCASP1_XBUF5_32BIT = AIC31_data.uint;  X2 [4 O* }- p2 r! u
}. `& r+ q) g' }# Y, z: k
9 Z, u0 S. H" b  w* f, ?4 f8 z
Int32 input_sample(void)
# h: X; W' u0 ~' P8 o: L" e+ t4 g{  
. P' m8 p0 Z# g6 E- {  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 R+ i3 C3 c* n- u7 O+ [/ e$ r
  return (AIC31_data.uint);
4 V2 @9 C2 R" g' O; K}+ C* y! v/ K" t% {# X" I& m
( c9 i6 z, \) V# u
分享到:  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-17 07:38 , Processed in 0.038546 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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