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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ R3 r. d$ X: p/ v9 z2 |5 E
main文件:
8 p, P. A% M* q4 f+ ~" j* X- D6 X5 jinterrupt void interrupt4(void)  & ~. K: f& H  Q' H  {& i8 o/ b) p
{& N2 Z, k' c) U- G% T
  Uint32 sample;
1 {! }  g7 @% d, n$ D9 n1 {' B! W- |7 V
  sample = input_sample(); // read L + R samples from ADC& K8 }" e, M  p8 c+ b0 i
  output_sample(sample);   // write L + R samples to DAC
+ _; B- ~  }/ C* S2 w9 J  return;
% M, f% }  e* Z% K/ w/ g) C; _}- q7 K; n& G/ j3 Z7 b$ W& G

7 O+ E$ |, e! R& Mint main( void )
. d1 c; k- p. j$ Q$ `% j# r{0 J" E; X3 A7 ?9 p, }
4 T; H8 s+ l, v3 K3 H
    /* Initialize BSL */. X; A2 m# I* b  P) W( R  a
    EVMC6747_init( );2 ~) e- Q+ r$ g9 U0 b' Y1 i0 W
        /* Call evmc6747_intr function */5 P2 S7 ]. q' G. v( U
    aic3106_init( );
5 h# P9 ?7 q, R1 ^! a        while(1);
, T: z& b; f1 W8 M2 u" z}
& A; f) N) g7 X: H3 V3 W" h$ `* \/ u2 M/ x/ ^4 v7 F9 [) P; a- ~
; H# Q& G: a' ^: z2 @. ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 w' _" ~8 R6 S7 K' X$ T1 R
/* Initialize MCASP1 */
  x% u5 d' X% ?! F9 h+ E6 |6 j; X1 w    mcasp = &MCASP_MODULE_1;% p: h  X  }( T/ a9 R
    mcasp->regs->GBLCTL  = 0;       // Reset
3 d; F( m- `6 q9 G5 M3 q5 Z    mcasp->regs->RGBLCTL = 0;       // Reset RX
; z7 R. v/ n+ S1 @6 B" S& c    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 r% ^& C$ H% _8 |2 w    mcasp->regs->PWRDEMU = 1;       // Free-running' j' e7 Q; U. P
   // configure McASP0 receive registers
+ m! B4 N: O$ @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 l; y) G; T2 N& O5 a
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 u% i: p0 F5 j- l3 q. d4 Q* i/ H
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 x6 |# u( P! v! y) ~) Y; @- [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) {0 J+ m) L5 v& B, [7 i6 r+ a+ F; Z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 o( Y0 P- ^: M/ I7 W5 Z% E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 `3 C$ {, d) S6 C$ Y$ u    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 Y# D1 [2 L; b    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 y+ m# Z: e& ~$ h0 Y" i
: D4 k0 O% R+ o( K+ f5 ^
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, b2 z* i* u3 c$ o# S1 B% z# e- h( L    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ `$ `8 b/ {8 H& ^; I2 J! R6 ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. `1 C) ?( N8 z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" r8 a- H% Z9 i# ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" X4 s" _% R4 s: S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 s. L# {8 o' M7 ]# x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) K! Y/ Z& V' D
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- P6 y! K4 I8 a6 s: N, o& n  _  O! e% s# w' |
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  y. p2 `3 q( G, z9 z0 G
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 t' B; k3 l; w8 y1 ], t
    mcasp->regs->PFUNC      = 0;          // All MCASPs! W1 W" N1 c% ~4 g& ?
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 D; l" h  ?$ i6 d
4 L! E/ o  }, L, _+ Y! L! B8 l2 D8 J; {' ^5 G    mcasp->regs->DITCTL     = 0x00000000; // Not used
# z5 g: [6 W& Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 N' }% K$ P; o% K; T6 u0 J; s/ [    mcasp->regs->AMUTE      = 0x00000000; // Not used5 a: A+ f0 g/ w' K  v, o
! b2 h* B8 B( X& U1 ~. E
/* Starting sections of the McASP*/4 [! W2 _+ O+ {. K, k
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ p+ D0 g2 A9 q+ m9 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 y* \5 Y; Z* X0 n& A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 \/ b" \4 T/ a) A! ~5 R4 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( w$ `& T& S1 o4 A9 a3 G. P0 V4 R5 S7 ?; I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  P0 L0 e. W% m  p4 l$ K  B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. k! N) ^! }) E( W, v$ q6 |! V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 V" B5 S% s- P: i! W* \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 f: `8 f; v4 p7 S
+ Z, O8 Y- V( k' Y$ w- F1 c4 Y    mcasp->regs->XSTAT = 0x0000ffff; , H/ ^. f& k* F+ M1 U0 Q
    mcasp->regs->RSTAT = 0x0000ffff; 1 O$ |4 x4 Y  f. [& V

  {" @% \& D  E4 j2 f    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 W5 [) d; R3 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- N8 g5 ?* z7 W! J' R    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. w- ~- v& G' V$ G( C; K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" {% b/ Y' [5 v8 i4 N7 S- d; z9 l+ X2 b8 m
    /* Write a 0, so that no underrun occurs after releasing the state machine */& N. c! f3 _2 H, H. V# w! Y$ U5 k
    mcasp->regs->XBUF5 = 0;0 j3 t( O, C$ @! g5 v; q6 u  J
    mcasp->regs->RBUF0 = 0;
/ W2 G1 }& {& w7 ?3 v, d; I$ S7 Z6 R0 m- X% l- \
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& T" k# l' ^; a; y# D% i/ U4 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, M. S8 [0 i2 G3 L; k    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, M2 b; l4 P3 b. v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 D2 w3 R; E( e) W: t/ t3 h- l* g7 H0 x0 N5 |9 s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# |: S. y) }$ O8 B8 i- s+ N, D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- G, n! q" Y" g4 w1 X/ r    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 F) H3 \+ G2 v* {5 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 t% |& I6 |5 E) b
4 P: `" J$ W: f  A5 l5 Q    CSR = 0x0000;) k8 _# q% W2 a$ O
    INTC_INTMUX1 = 0x3d;" `! V& n: y0 y7 e" C" d6 ?
    ISTP = (unsigned int)vectors;
7 z* I+ p4 l  m" r$ D% N+ L! z    ICR = 0xFFF0;  3 j0 w+ n0 ~7 `2 c
    IER |= 0x12;  . v  P; |: a% Y
    CSR |= 0x01;  
/ ?, M# K7 ?7 ^/ @+ `8 H2 K$ w* T: M5 T2 M

; P1 n+ Q& W7 g( }# W5 z% H: n9 E9 ]. o
还有就是两个输入输出函数:: l; B* t/ T- x% r6 g2 i8 K. R
void output_sample(Int32 out_data), ]2 c" B' I1 P! M- K# u
{9 x% \# Z( [$ T
  AIC31_data.uint = out_data;  
* N3 ^+ p# \/ K+ W. D5 e: N) h  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! g! u0 v1 T7 b# k  U/ `  Q}4 F7 j" p: `. q( e
/ D; D) P; r* }0 k5 H
Int32 input_sample(void)
6 f) w% t: l' d$ s8 y{  
7 n& k# H: c: y2 p  AIC31_data.uint = MCASP1_RBUF0_32BIT;' x5 z5 Z# s6 e& j
  return (AIC31_data.uint);6 E* D8 k3 O( p0 w5 f
}
# y) I6 s2 w( |# j) E1 b* u( V0 ?# n+ M
分享到:  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-17 15:34 , Processed in 0.051031 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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