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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( o$ }0 A+ V, t+ b
main文件:
+ F0 s+ G5 @& D% [! T/ z/ Uinterrupt void interrupt4(void)  ; d& ?% `( I) E6 H1 d, }8 O
{
& f$ S$ D4 e0 s  Uint32 sample;
$ u, W7 b0 L0 ?
; c" P- i4 m6 |) n( Y$ e  sample = input_sample(); // read L + R samples from ADC
+ a! J- F9 X. d# g$ O' I: W  output_sample(sample);   // write L + R samples to DAC
6 X( \& p, F- j3 D) w' @  return;4 _; ^, s0 ^4 F
}* Q" n! }8 U0 \; i
' k3 n* {- M9 J" g# U
int main( void ). [* c/ d0 J  v
{
) v  `9 P3 x. _5 r
5 W5 t+ y/ [& o    /* Initialize BSL */
+ Y+ ]4 ?0 f9 ~/ d, }6 t    EVMC6747_init( );
9 d- S1 |& P; Q. R1 V4 x3 r& ]3 U1 \0 k        /* Call evmc6747_intr function */
& @" e3 k/ C# I& R: D* X- ^    aic3106_init( );0 K7 i. b' A" m  g2 I- g4 B' Q
        while(1);
- _6 z0 Y. S8 {5 n  f}/ j$ o0 c% G5 @( e: [

) F0 V) x% d& w9 C) _
+ H7 ~/ A# B1 C0 ?1 j; }% {+ @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, W6 x# f, d$ D9 |, i3 i6 ~3 c; F
/* Initialize MCASP1 */
; m6 P, H4 I) i4 l    mcasp = &MCASP_MODULE_1;8 `6 M, D1 f! Y
    mcasp->regs->GBLCTL  = 0;       // Reset0 n: \5 ~; Y% K  `4 c/ l
    mcasp->regs->RGBLCTL = 0;       // Reset RX9 F* p! \( f1 l8 C$ Z8 E; Q
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 d. `; d2 k; C/ T6 H" p    mcasp->regs->PWRDEMU = 1;       // Free-running  b- }- ]$ G" X& p& v6 [1 t
   // configure McASP0 receive registers
( N6 z  E7 X. h! d2 Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  @/ F; I% O7 _1 r) i1 Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' ~' \# i! F  M3 p7 p
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 q. n' y8 w' h$ C+ I    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ j2 ^( z! s7 S) {# D8 s0 s9 R9 r% q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); t3 |  N6 P6 r7 [  z, X/ S
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 H% `$ U, o) _8 k0 q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 _  j2 z8 Q9 @% [1 L) A7 ]- v! H
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 i' s6 Y% i* Z2 r" y
& S9 l; j& e2 q3 B) [* Q* X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 L8 k9 ~9 ~" q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 H2 ?' _9 w( R6 S% T" \2 E9 A
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 U2 @7 h  p8 |+ A    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' u* r5 \4 J' j- Y" y- ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 @: B, @4 n5 |  J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 @- b% e7 z  R8 `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 V0 S4 `* I* Y) }1 |/ R; P
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 h2 ?# A9 N- d/ [; b! A! u3 ]0 B% R# _/ v! H  p
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! Q% F' x. t! e% R    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 N$ O+ t& U: M4 F& H& ]2 ?5 p
    mcasp->regs->PFUNC      = 0;          // All MCASPs- W7 u& r2 J/ y& o: N( k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; _5 E  Y3 K2 C0 y" b; V% V

2 C2 f- ]% a4 y' ~* X2 C4 o+ l; l2 O    mcasp->regs->DITCTL     = 0x00000000; // Not used1 g3 H3 J( c9 g$ e$ G6 S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 |4 }9 L; N! e# Y) E
    mcasp->regs->AMUTE      = 0x00000000; // Not used! }6 x$ R, I+ ~  A, ?
: f: G1 `* e/ J, h9 S& [7 A% l
/* Starting sections of the McASP*/3 i' y  v3 I7 [( E# K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ Y- f9 O0 {5 C) r( j  Z8 \: @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& V5 @* g3 A) e9 D( Y' x: |1 k    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; Z9 }& O" a+ B0 B8 @% |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 B: d9 H) ?5 N
, K# o6 K6 g" u8 J2 P% `- _3 f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# q6 X4 T+ ~1 \# j; d1 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 L, ?2 K1 d) P( M. w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 N( e) h" H9 l: \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 J+ F0 g% m8 Y% A; l0 q2 b/ j( t# m) {; S' a4 ?
    mcasp->regs->XSTAT = 0x0000ffff;
7 K* g- U, X: f! d! ~  K: }8 E8 d    mcasp->regs->RSTAT = 0x0000ffff; , i& h5 x6 l/ A/ N1 C; T' n1 Q

6 t, o% _# X+ m( q$ \    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  x" t  d+ z+ N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 v  Z+ F6 Y5 [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( Z3 P- \. k: Z  M& r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- Z3 z: l1 W9 p1 a* T/ v4 o" @0 z' L: F& ~3 B, `  I% |) _4 A
    /* Write a 0, so that no underrun occurs after releasing the state machine */, ]* P, h9 |3 h4 {
    mcasp->regs->XBUF5 = 0;: o/ }) a1 K- L' j6 F, @
    mcasp->regs->RBUF0 = 0;: }# z5 G0 ^) I( L5 S4 S% L6 }

& A: k) \  q1 c/ o4 Z' s9 _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ E! o& c/ y6 V; [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  x; D( h8 V& _  n* h" B& f% [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) c7 d6 x! i$ q$ P) j6 C8 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 S- W; L" y; i9 v4 X6 U7 R+ ?

# h( l* N3 [0 t  m    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% w* k) d7 c& q. ^3 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% a6 L; F* \7 N4 G( x- R( w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   ^  w3 w( C" v! Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 O# Z/ e# E7 i

; w+ S$ O& g: ?8 c. X5 o: X" Z8 |    CSR = 0x0000;8 Z0 Z' i7 F  d) \# T4 G4 i! l
    INTC_INTMUX1 = 0x3d;
! z- u8 [8 w; [    ISTP = (unsigned int)vectors;, E1 X5 Q0 y" H$ T
    ICR = 0xFFF0;  ' v) y9 O+ b# o. Q6 L
    IER |= 0x12;  
( r$ E6 J$ v  ~, ^, w- Y. r% n9 w5 [    CSR |= 0x01;  
, e9 g( s1 N' L8 G! q
. s4 X6 B/ p% k/ {
: p) H1 h! m- {9 ]' w7 K" R" k9 a
' ^8 v3 t3 t" k# M# C* \: h0 e还有就是两个输入输出函数:
$ W0 H6 Q  o  V5 D5 E9 Svoid output_sample(Int32 out_data)! w! h# x5 G+ s
{
; z  W/ P" K3 w/ z  AIC31_data.uint = out_data;  
0 e7 K; o7 V- t; S' h  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; g# @/ K3 m. }3 @/ n- H9 u}0 I1 ]# e# ^! i. V6 Y. Z, P: B

  O9 \" f9 \; y# a9 dInt32 input_sample(void)
) D- @8 |: M- t! N+ K; J: h{  
& n9 C# M3 l/ f8 Q  V  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 a  b, m8 _3 T' M, ~* h) l
  return (AIC31_data.uint);. C' K/ j8 M/ t0 O
}
. T  }) Z1 Y; e" {
4 _/ o! K* W/ H8 R
分享到:  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-11 03:27 , Processed in 0.040498 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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