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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. |6 E( _6 V: w2 S2 ]2 Y: l4 Y
main文件:) a! v5 a5 e* L1 h" @# d+ _
interrupt void interrupt4(void)  
2 f, @, D4 Q2 c1 @% k{
# l: L/ x+ b& m1 p$ j$ ?' T; `  Uint32 sample;  G" T8 `+ J3 t2 E3 W" D! p0 A. s

7 H' z9 w- l3 C) t  r+ K9 C# W- p  sample = input_sample(); // read L + R samples from ADC
, I. P7 K9 @/ F' Q' N# z5 k  output_sample(sample);   // write L + R samples to DAC
: ^1 h, R! {8 x3 w+ [6 o  return;3 N- I+ E. M0 w& E- m
}$ F4 b* B5 M9 i7 L8 p0 J$ |

5 R: h5 M& _1 e9 q4 s3 T$ Gint main( void )7 R+ J+ R  b1 V9 j# n6 P; ~0 f) N
{/ f* ~( [. {7 `" ?

, A7 j. c) ~' d+ I    /* Initialize BSL */0 ]' b, ?% W% r9 D$ t1 s% ?
    EVMC6747_init( );* j9 V6 C7 U; S, V1 @
        /* Call evmc6747_intr function */6 I5 ?  Y2 k* q% I1 x, Y
    aic3106_init( );; t* e& X4 h2 Z. j( Z
        while(1);1 F" f' o* l# s( d8 p
}
: G8 v" }: |8 J
) H8 {9 y0 r5 q) d1 k; ~$ \
9 H) d' Y; d/ c- l& t% g& ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* l7 W+ W) U& {# d) D% L/* Initialize MCASP1 */0 r+ e' \- P5 u0 E& z; W
    mcasp = &MCASP_MODULE_1;
' s3 Q8 h& `0 C    mcasp->regs->GBLCTL  = 0;       // Reset
- A; f* L* L7 Z$ K( s( G    mcasp->regs->RGBLCTL = 0;       // Reset RX
& v" l- |0 W/ ?4 X* _+ Z! b    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ a! h* s' l9 x8 ~    mcasp->regs->PWRDEMU = 1;       // Free-running) B# d' M3 q: x% r) Z
   // configure McASP0 receive registers; w* h5 P# E7 ~( ]: k0 ]& [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ f" {. R3 p6 t( a1 ?8 J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ E2 _3 _& v$ G( _  g% h    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: B# y3 _/ b" N/ b# u0 w; o2 J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 t. w" w% i' U1 j+ |: I; U4 ?
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( K4 s! b4 O8 {. w2 c. ~    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 v1 ?1 u. i, \  N* @3 P" x    mcasp->regs->RINTCTL    = 0x00000000; // Not used& _5 ]; i1 A; i- a! F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 M( p3 A- t( f$ u) c) v" R; T3 v" M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ t( m. t# u; i5 X0 H' `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: p, F% J* |& h    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( E3 s5 i& N3 [2 w( W5 l5 A    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 z$ K6 y1 v  c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, q( E' O# w$ z3 K( ^
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& }& s5 k( d0 e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- J/ `1 r5 F( R0 e6 X5 z3 _
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 V7 Y2 b6 b2 c  h1 |; A, N" \

+ N. ]: X* j2 t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 x: h6 c4 s( R    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 a6 F* d8 S% p8 B    mcasp->regs->PFUNC      = 0;          // All MCASPs9 w+ F/ b$ z2 |' m. H% e
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% [) U, Z, T0 S$ {. x9 T

6 F. v0 ^: f1 A, N; s2 W    mcasp->regs->DITCTL     = 0x00000000; // Not used& \- _: h& r# b0 r$ B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 M, e+ g6 H* T% d
    mcasp->regs->AMUTE      = 0x00000000; // Not used  ?$ Q7 ^0 T* V1 v) E7 x! n% q
* W9 M" C- f2 V; `( ~/ t* ~) m: X
/* Starting sections of the McASP*/% c) T( u& G% j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' w6 m6 z" h$ ~2 C" t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 Q: c& _: s7 u' L8 }! t    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; F& R9 [1 e6 w8 Z$ R, x1 O& G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& Z# Z8 z8 F3 M% K2 w1 z* @' y3 _5 w, s0 v- A
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . z+ w5 o, |3 w9 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( X% ?1 g  M! g3 v+ S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   ~/ v; p' K; X7 B' D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  l' X" c3 Y, V
1 t  ~) D' j: w; k- {8 s
    mcasp->regs->XSTAT = 0x0000ffff; 8 s+ h. Q7 l$ r' m& l, [. u; a
    mcasp->regs->RSTAT = 0x0000ffff;
, @2 ^9 N6 l# j/ ?& j  d: H6 t5 _  f% E/ ?; L# w2 I& S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ D, y3 v% ?" W# L( w* F3 x' r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 [# W" T' _% W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- ^8 z1 @6 l$ y, [' T3 @; _' i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 h2 {3 L" _0 I' @/ k( h/ p9 [) [$ ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 X! c& R( b) X9 [9 N/ V    mcasp->regs->XBUF5 = 0;- |* l4 n& J% N. g7 O. ^3 P  J8 B
    mcasp->regs->RBUF0 = 0;( B% V5 `) h2 F5 q6 P& J0 t4 c+ ?
. p. s/ x! V6 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , D2 _: x& N; [, @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ m: J1 v0 P' P. W; u8 v8 }  E    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 g4 W4 a7 @. v4 X3 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 n& a. }5 L2 F: k! H- b3 _1 ?
' J! {7 Z( q1 n+ }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  s6 L+ W( I% R7 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 {2 ^! x5 p9 y, s! P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( A+ p6 l! A$ {, ^+ M  R6 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ C' G4 O: C5 v9 i$ n- C, b' U

! _* z& ?( _* ?" g    CSR = 0x0000;: `% @3 G$ m9 `
    INTC_INTMUX1 = 0x3d;8 p, E9 _" A9 N: m9 W
    ISTP = (unsigned int)vectors;
7 {+ `3 e2 x$ m    ICR = 0xFFF0;  / p) R9 \! t. s; z2 ?0 \
    IER |= 0x12;  
( T  I1 ^" z+ s& q    CSR |= 0x01;    R9 E6 q' |* {! ~# H9 m! }- x4 h0 v
; H- u  w  y: N8 |3 P; G
  P0 G% j8 m& `* ^6 C8 W) c
0 W$ T5 \0 r7 o  C5 K
还有就是两个输入输出函数:& T& I  ~" F# q
void output_sample(Int32 out_data)
8 Z6 U0 H/ [1 z. @6 n- s8 \7 r& k{8 m* @; k" N& T0 g% C
  AIC31_data.uint = out_data;  9 `* J- Y, h( p# K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, M: l+ n4 ^! S$ q: L4 ?
}
- {/ _7 N) H) h1 h. w* q, \4 _: R' M* @8 k+ x+ J, r6 v
Int32 input_sample(void): n! t+ S4 m3 y7 ~/ ]/ V: x- r
{  
0 Y' o5 {8 t1 v: h) @  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 ~% y" @! d7 D( y# \; M$ x
  return (AIC31_data.uint);
- e6 q, G3 ~- C* ]! \. X}
6 r2 `/ j2 |6 M% B( Q
7 C: [9 v/ E7 z, E! o% v& l
分享到:  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-23 12:40 , Processed in 0.038218 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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