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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 X  p" ]! O, Q8 Y. Emain文件:
3 R. u) `& w2 [: ninterrupt void interrupt4(void)  
, E. z2 P* a" y; \3 n4 f9 L; {{
; l7 Q3 {+ U( i- j4 ?- O  Uint32 sample;5 K1 T( \" u- @
3 X5 x; q* Z$ E( y0 }7 j& c
  sample = input_sample(); // read L + R samples from ADC) M" W, X6 w' G7 Y& z
  output_sample(sample);   // write L + R samples to DAC
$ C! `( b2 N4 z+ h" {  return;
# Y( d2 j. i+ a" V}
$ V9 I& y; I" c# n! [
! O1 T$ D2 A5 x4 r4 \$ m" ~int main( void )/ R" f3 V" G" K) l+ s
{
' r7 o8 y& e+ h4 o7 i7 j% b& G+ G0 S) P% D; E7 T- l
    /* Initialize BSL */6 b. d9 s/ D7 @; U+ G
    EVMC6747_init( );
6 T. c3 P1 Y1 z( U9 l' L* y9 `        /* Call evmc6747_intr function */
: d" Y. ^8 H' l6 x: q4 u    aic3106_init( );! @1 B' T8 Q. `
        while(1);
; H: T; {2 B2 c}
  e# X5 |2 [! j6 s4 p8 h  |2 N: s: f

; Q1 C) v8 Q/ F% o6 k" paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  \0 m0 r" r0 U+ t0 K# t. {: U  g
/* Initialize MCASP1 */" ^( d8 z' L; d: R/ T& ~1 w3 U
    mcasp = &MCASP_MODULE_1;
+ V! w( i$ {. n) `    mcasp->regs->GBLCTL  = 0;       // Reset8 c- {$ B+ A  @5 I- Z
    mcasp->regs->RGBLCTL = 0;       // Reset RX. C: ?* H& y! r, ?4 @) O. K- Y& R4 }
    mcasp->regs->XGBLCTL = 0;       // Reset TX
. {" r# w: J% G. t( T7 w    mcasp->regs->PWRDEMU = 1;       // Free-running, o! s1 v" M! V
   // configure McASP0 receive registers
1 u" \! K2 }( ?( K+ Q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 x+ U: F, H! [
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 ]5 @/ X' t, X1 Y! q5 g6 X/ y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' z: l: q& S& b. u) l0 O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 x2 ?+ R  _' i3 }& b; E. C# o: W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ Z' V' q4 v7 \' h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- p- u7 B9 |! a+ i  f8 v( c7 Q    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 l7 X$ W1 }2 G1 y0 B5 p* B
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  J1 D& \4 U# f

# E2 G) m5 Q' z; ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 v" s% s' c7 w2 R! a+ _    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ v/ l3 ?: ?$ o- B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 f) v7 H  ^# c, f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( Q0 `  d1 g  |: \1 |. P# |) G- U8 i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 h* D" T7 s3 [; Q' y3 E& c, R! g  R/ _    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  c( ~% G5 j8 l
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ F- X+ R% X( r- C" n- C7 i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; c1 U. h% D- U0 H) Y
$ K  x( U9 L/ Y2 c    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# |4 `  q0 {9 p6 {+ J6 A: F. T    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" r6 R7 T, p/ y
    mcasp->regs->PFUNC      = 0;          // All MCASPs  {2 O2 K& J5 x. @
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 f: N8 h$ v4 l
" r4 @* Q. b* p: Y( K+ i
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ I) n' ]$ t% R/ I, F
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! E! T% a  f% c# |& y    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ q$ D4 A1 k; v  f& N: K( c8 ]# ]) m' H4 a
/* Starting sections of the McASP*/) H) L: V' K/ c3 t! {0 F( w3 s/ C0 J+ E2 K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# s1 M$ M( F3 u3 O! M. r/ X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 F! K" l# Z' b" p7 n; [7 Z: M$ D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 I3 m' z; a+ Z( f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 j' E- ^" ^9 A  b5 i' D

7 O8 A, Q) A) Y6 U) ?/ v    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; N3 c' i" o0 ?8 _. Y) K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 ~! d% x6 n. L) @" z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( L& _; O. U# i' T( g, A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% B; t1 M* I: _4 b4 e, ~! Y4 G6 w1 y  N4 P- O4 e' E
    mcasp->regs->XSTAT = 0x0000ffff; ' K& ]7 ?/ s5 Y, L) }9 o. P' R
    mcasp->regs->RSTAT = 0x0000ffff;
  J; V: O" s+ b4 Q6 {. Y( d/ T1 x
: u1 r3 K2 I& c3 ~! C5 l    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; ^: `" l& ^4 O5 T0 a4 _/ {% Y2 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ ]2 A( R* J& s/ i7 w1 _& N' s+ [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, o; s8 p6 D0 ~6 Z  x7 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 a& I. \$ i( s- E$ ^6 a$ @1 H1 G
6 R3 f0 ~8 z; P! T5 N0 F/ Y$ z! o
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) f! [" y9 u, B, {5 W    mcasp->regs->XBUF5 = 0;
+ _, ]# S% ^) r3 y    mcasp->regs->RBUF0 = 0;  E; Q0 x7 O3 h7 X9 B7 E
' m( K( L6 L+ e) t  S1 ~7 ?9 {% M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - K& ^5 S! B! l9 e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& e4 r( v% P" v: s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' z" L3 n: q' T+ w+ ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: u9 o& p3 ]0 J* n9 L
) z0 L/ u% i7 I    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 _& p7 K, g  ~! {& l4 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 ~+ N# J. j; o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * y7 ]; e3 ~! n2 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 S0 H' B8 Q0 h" J, T
8 ?7 E) i3 g* N: S' \
    CSR = 0x0000;
& z! e; M' J4 d4 W. c    INTC_INTMUX1 = 0x3d;
1 l& x4 P: D- g8 G    ISTP = (unsigned int)vectors;. _: x2 e4 t- _/ D3 [! P1 n
    ICR = 0xFFF0;  ' ?, l  _8 Y* N/ W& G
    IER |= 0x12;  
7 W7 v) m! }* N    CSR |= 0x01;  
0 G- K( Q, Z2 z, J
; R& M+ Q4 j' N2 j% y; S
2 J8 t/ N! C) B2 U4 _
& v& @2 z8 A2 x9 s还有就是两个输入输出函数:
) `- N! S4 E0 P. t3 |( i* Tvoid output_sample(Int32 out_data)
( d: J" B4 G. o" k{5 z9 O- R# j% |8 x  e3 k
  AIC31_data.uint = out_data;  
# f9 k! q: S4 e+ w& l- y  U  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" e8 ], i2 l5 O; Y}7 s& }* m6 b/ A0 v# ~" d

* s* A: ]+ ]) \  Q! i5 [, o0 VInt32 input_sample(void)
5 ^# C! i2 C! A4 u{  
. x' W# ]8 V- v$ x' l  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 B3 }  r4 c6 Y
  return (AIC31_data.uint);; A! X) i" M8 l7 ~  U7 c  S
}
  u! C  G9 R( ~7 C( r  J) s
/ u0 ^* z. l- T6 e6 v
分享到:  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-28 20:36 , Processed in 0.039667 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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