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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& l3 ^' [5 X( X2 u5 j9 ^" c, ?
main文件:
) @  v9 G' F6 {3 Z  z7 xinterrupt void interrupt4(void)  
5 t, Q5 B3 \2 C{( ?! H! l3 a; i7 l
  Uint32 sample;1 y6 E" H( e$ W2 Q
9 O5 q& T- d$ D3 a; F3 T( N: |
  sample = input_sample(); // read L + R samples from ADC; @3 l% n7 S. B
  output_sample(sample);   // write L + R samples to DAC . I7 a6 R  Q' E' \# t' b
  return;$ u! d5 A1 M6 w
}( F, y+ y# \2 m
8 }1 S* f, ]$ [! ], e
int main( void )+ q: V  P$ F* W& Q* P
{
5 ]2 P, e* T/ F  V. i- a1 @: a7 g; v& x0 C& r* B
    /* Initialize BSL */7 z  V  a0 S6 B) e% T
    EVMC6747_init( );
/ n  `" K$ T. S1 n4 K9 O! Z( @        /* Call evmc6747_intr function */% Y. W" ]$ H" ]8 m
    aic3106_init( );
* O" e' V2 c( h7 E, v. V, O$ `9 J% i        while(1);( s5 k# r6 i0 N7 F5 y
}, y( _/ d! T( j7 F" A) h

. z, t! J4 `+ E3 L! i( v* {$ q8 K- @& g1 u! {7 N7 \$ V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& e* N3 U) z/ z! Y
/* Initialize MCASP1 */
, B. n# K( y9 }/ |8 M1 a$ k8 P    mcasp = &MCASP_MODULE_1;& J% e- U% W6 |% V4 W
    mcasp->regs->GBLCTL  = 0;       // Reset* Q# W/ L( ?% K/ m( G" v8 N7 h
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 q: B+ W1 @" z% k
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 N! ^, l; X9 q/ |/ G' K* a
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 Z# X6 f* g9 Y3 \6 N1 G+ _. T; |   // configure McASP0 receive registers
3 o( Z1 X9 C+ J2 Y6 c, O8 [5 R" X9 U    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! ?9 ~* z; W7 ?3 A- w, b    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! N7 k: J/ O2 r  Y) |
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 F8 N" ~3 U9 ]9 X8 Q3 x! I1 d  o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 y$ G- [0 u( |7 C0 B  x
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: l  [' Q+ `6 |& \, u1 Z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& }5 J2 f% R) L* `: S
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 N* _$ }( K- {. t0 Z7 {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- n% R( J! t9 G* I$ {1 g: l2 O, u0 ]. q, h. w0 r$ ~/ |! C! @8 M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ `' Q( l  m- u  Q. D( K8 x
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  @( ^6 }: n/ G; g9 F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& u- n; k8 U- }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 r7 F: ?2 }. s; H    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& r2 f# N- P6 Z' {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 z% I- W; J0 G7 n' ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) z5 a+ |+ x. I8 S8 x( X$ s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 ~: d7 g3 ^+ M  X. I
( V. w4 t3 p# ^, w! l8 }. |( |* b6 J1 c    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* I; x& N' n( N: T' T3 e/ G3 x+ L
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 k/ R' y9 n8 r2 T    mcasp->regs->PFUNC      = 0;          // All MCASPs2 |$ T) K; o' `9 I" b
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% L$ c% {' O3 O0 ?

% c( ^) _5 @  H1 M* a    mcasp->regs->DITCTL     = 0x00000000; // Not used
, H- i" U4 _# Y- e- M1 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 x- G/ f. H& _! W: M
    mcasp->regs->AMUTE      = 0x00000000; // Not used( K+ `) P" E+ K2 C
2 f. i* Y) t$ p! T0 i
/* Starting sections of the McASP*/( F0 c; r! k1 a( `, a; q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 N: n9 D6 n: s' A; {& G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 X5 Y8 ?' ?: M, U; B/ i& x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( h! w7 N( v4 p% T" y* m) {+ X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. l3 q! g8 j( |1 `

8 T/ k2 ?0 `7 U- b% f& b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; ~" @6 `6 u8 }0 \4 G5 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 M2 Z; ?8 H/ F9 d    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & J1 ?) e- w! s1 K, X' |/ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& Z# M3 j# [, U, y8 O" t6 {: h. a% H
0 W5 s0 \. l; o# X
    mcasp->regs->XSTAT = 0x0000ffff;
1 f1 U0 l, V2 {) W  P" K    mcasp->regs->RSTAT = 0x0000ffff;
  q6 H2 n# L; q  {9 x; Y8 u
; f' m$ ]1 m5 a, l5 [' O: d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, z9 t) L# m/ g. M8 J1 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: a6 {: `/ l  ?. p  Z3 |* ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 Y+ s' Z" K" F! B8 p/ x! Z2 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# Y: H/ {8 P6 ]& N

& G$ u$ C# d5 y" N% J9 N6 q    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 l3 \# ?) z3 `- S" V    mcasp->regs->XBUF5 = 0;
# |" j7 q4 ^) k3 M7 {& k& t    mcasp->regs->RBUF0 = 0;) J9 |  M* _$ F8 o2 h3 e* J

- {) h% H, l& Z$ w/ G- Q. Q6 \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   O) z  h* x0 z" B' H$ K# {; m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 s, S% n  X6 ]: y4 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" K& j# Q1 C+ Y4 b, M, ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' u$ b, w4 d8 l5 C9 k- l# _8 u) ?
7 v8 }: W. j% z) Q: s/ W
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ \# M, @; `, P+ ?) N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 q% d- r7 V9 ^. P- x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 J" {) L% @/ D9 n$ i  S0 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ Y: W' i$ z8 {- G5 U( k! U0 ?' z7 X. t7 o  r  L
    CSR = 0x0000;9 X5 @  m/ F( s6 b/ d: Q+ ~
    INTC_INTMUX1 = 0x3d;
- Z# d7 J) p2 H: v    ISTP = (unsigned int)vectors;
2 p7 R5 a7 e6 V% G( f    ICR = 0xFFF0;  4 q/ _* B3 B& H* d, s  w
    IER |= 0x12;  5 y/ |; j* ?8 p9 B( ]' n
    CSR |= 0x01;  ! Y$ Q; e$ p) s1 x* S' k
& v3 v; F2 |/ I) O- g3 [
' b3 K/ h$ W- Z5 N4 f  o
, J: r+ _. w3 m, E
还有就是两个输入输出函数:
! P. U% i# |6 b1 R" _- |void output_sample(Int32 out_data)& m! I) q+ w/ c
{
8 E0 R- s! Z. G$ E  AIC31_data.uint = out_data;  + \4 u3 W6 b" s- i! V. B9 u
  MCASP1_XBUF5_32BIT = AIC31_data.uint;% g5 t/ `+ l4 I+ q& d
}( Q" s' _' J. u8 U. k* i
) [! r  m8 K5 f3 W6 `
Int32 input_sample(void). g8 C7 y) K; L7 L
{  8 a5 @$ g9 r' g4 ?% m/ o3 x
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' i; J6 l6 [" i4 `' I: y& s  return (AIC31_data.uint);5 r1 C# }/ D( Z, U- d% s+ b& u
}" D/ V; V$ _/ L0 w8 D; f7 b! E
  N4 s9 a3 i4 M( x. h. h  S; L( T
分享到:  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, 2025-11-6 17:33 , Processed in 0.037684 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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