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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- R2 I' F/ b0 l9 {/ vmain文件:$ I9 G) @8 ^# _( A, O/ p9 U$ }6 A' k
interrupt void interrupt4(void)  0 I0 s* M. e+ V$ B& v) i8 {
{% b8 l: P7 ?* i& x% ?. y
  Uint32 sample;( Z6 `/ @: \- O' y- `
: ^9 k% L9 G1 W+ A7 s
  sample = input_sample(); // read L + R samples from ADC1 s9 m$ S6 F4 r' }3 P/ ?
  output_sample(sample);   // write L + R samples to DAC
+ `( C. T9 T" m$ V  @  return;
5 u) {( \/ k% u}
( k: Z( u" l! H, U4 f8 m3 o/ x2 ^2 }6 C
int main( void )
  C) c, g7 @+ N* i6 I{
! F0 w9 B- K  ~" C/ }: }) P, f4 }% V$ L0 |, g
    /* Initialize BSL */
. m% B1 G: C9 Q. b( F    EVMC6747_init( );
. y2 c8 a3 c  K9 ]/ Z+ R/ M        /* Call evmc6747_intr function */+ ~; S4 y6 {% ?) v1 x3 e/ A
    aic3106_init( );
2 J* r3 w8 @, U$ y6 a        while(1);' a3 M+ c9 v" v7 @9 c- @
}
9 L. y0 X1 n8 s  p
( m$ W* j) _/ z3 V4 A9 ], K  q8 e7 @- d7 N2 ?0 B* z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. c' ?& e/ o. G
/* Initialize MCASP1 */9 _4 j& f; D9 @1 q
    mcasp = &MCASP_MODULE_1;
" r0 k! l# D; d' ^; @; |    mcasp->regs->GBLCTL  = 0;       // Reset
( [0 `( n; f6 D% O7 _3 \4 W: u    mcasp->regs->RGBLCTL = 0;       // Reset RX# B% }$ h2 K8 ~+ A9 \! E
    mcasp->regs->XGBLCTL = 0;       // Reset TX; c9 R& a: I- }% S  [# h+ ~0 x# T0 b
    mcasp->regs->PWRDEMU = 1;       // Free-running
% r& a# ^" ?  B& q4 q   // configure McASP0 receive registers
% J9 z  m1 g+ a7 g, l" Y, E    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 e+ ~1 P) S3 ]3 v4 u
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 Y; j; P7 {- T1 ]    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 H- M1 P: `6 H) J: k- k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ r& s! s; R. E, w( X5 v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! x+ I$ t+ U+ [+ F! D# B    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& k# J/ I% V1 o  \1 c" b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 i2 p# v4 l: a, z; x; W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 w" _9 f. ]5 Z$ e$ F

' H8 g2 l9 u$ u; k7 w& b; G# ]    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 S; _% Q4 O/ Q7 g3 Z- g4 j, `
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) @6 p, f( e7 c2 {& e# e8 P( E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) l2 y  y, O1 D: x' c6 y" H
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 f1 @( @' H# N
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  D; E- V, F% A/ g! `! c7 n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% S! @0 p) x7 V1 l
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" x! y! z  r. @$ u( x# ~3 o/ P    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, N" `7 g2 L+ R+ B

4 M! v; j- T; _7 i, O% q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" m5 F# c. R4 Z. f5 N, X    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 E5 H0 Q0 M4 k3 R. b* A: P
    mcasp->regs->PFUNC      = 0;          // All MCASPs
. C& m. o. n8 o# R) E    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- W2 i0 P7 V% |/ s" r

1 H8 R) P  x$ @    mcasp->regs->DITCTL     = 0x00000000; // Not used$ t# o  O5 k3 j6 |% ]
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( r; @' m+ X2 E) ^& H
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 C* Z/ i  \; H3 M7 e* M* z7 S9 G& l+ G+ V6 r3 e' k+ Q
/* Starting sections of the McASP*/
- {# a$ \7 N( C5 |, S8 }$ m) J+ q/ a    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 k7 J! B8 L' r/ _& g: Z1 G8 X1 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 D  Q9 z; u% c; T4 ~3 ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 Z. p/ G" B4 [4 B* V1 F6 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# ^* ^" a5 \2 w" I5 n2 y$ m
  W' i& ]" @3 v2 H: f    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& s. m9 i, T' I. `$ p: [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ W- U1 O6 L- M5 G6 s' o
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : c4 R* P- A# P! a) I1 S/ @/ i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 }! k% t9 ~( Q/ B! J
, `3 w4 \" z* }# R1 ^8 X: L    mcasp->regs->XSTAT = 0x0000ffff; 0 r: ]) s5 t7 f* J3 P
    mcasp->regs->RSTAT = 0x0000ffff;
+ e' [. v4 l* M/ ~, p; |$ u  n5 n7 m& w6 _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  M* W; Q! S( z1 \" T1 [: E3 W# ~9 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 t% X) y3 N/ K. K4 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   @8 f3 l9 i& ^8 q5 m  I. J3 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" C; i1 F% O- |$ `, q  ?
" M' L2 H7 e$ ^1 {
    /* Write a 0, so that no underrun occurs after releasing the state machine */
: C1 X. Q6 i1 r& r7 e    mcasp->regs->XBUF5 = 0;
6 g" ~; ]. r* t, T    mcasp->regs->RBUF0 = 0;
; x# g, ^' O- x2 U$ [
2 g0 l& t. X" U$ T/ s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; Y! n: D: b* P8 U" F# ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) a: X. i9 R& H7 _
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" i" H' e! k% {% k  Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# }: Z1 p. i1 G" s

. l! Z9 B1 y0 _7 d3 l- D) E1 ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" a. |; T; R& K  D- d3 B& f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 ]& a1 C* ^7 J2 k; h: \
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ v$ \" F/ l3 p( H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# I) Q) x. D) v' ?" n) S  n1 \( H

% V1 p8 i& n3 Q8 i! t    CSR = 0x0000;$ u4 S' x$ |( U
    INTC_INTMUX1 = 0x3d;( s+ J8 ~) z" n' V
    ISTP = (unsigned int)vectors;1 D' x6 n, A. m/ Z% z" W
    ICR = 0xFFF0;  # q+ o- W! d6 C4 [4 J5 z
    IER |= 0x12;  $ K- `2 n* V: a# a* r( o* {2 m% m
    CSR |= 0x01;  
) E+ K0 P! v7 S8 [- G; F# ]. ?3 v9 p3 p. M: u0 D$ s/ Q
. i- q9 R3 ~% f" ^+ v3 f, [

# p9 B2 I1 A% W1 I9 Y" w" c2 ~还有就是两个输入输出函数:( p. j3 m; c+ m. N
void output_sample(Int32 out_data)9 H9 {2 m% U6 a- o$ ]8 w! ]
{- E8 d  ]5 B2 T5 ^! H
  AIC31_data.uint = out_data;  7 P: s0 }! m9 j) H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ L) W$ [: C1 g7 j
}$ K1 @. S) G+ r9 \- h

3 ]4 n' s: |. d. Y3 {! i8 L8 DInt32 input_sample(void)
( Q# s# e5 i1 W. b) G* {+ U( O{  
' A: G" ~" J) h  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 m  f% v8 w8 |6 ~- K0 A+ A
  return (AIC31_data.uint);2 m  G" ]3 B/ Z& p
}& \5 \2 X/ {. ?+ J' k/ D
4 k7 ^! n, {/ d6 p: _% D
分享到:  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-18 03:46 , Processed in 0.040550 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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