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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) |$ }* r' _1 H, W7 r' V
main文件:+ w7 f. F7 x3 Z# d% K* `
interrupt void interrupt4(void)  
; n  }7 B- j7 X; A: K{
- C3 L, W  x. n" q1 H  Uint32 sample;
" k* E5 ~( |! L9 B$ @1 ^( x* i% o, l1 ^; {
  sample = input_sample(); // read L + R samples from ADC
5 n( ]" H- y: ^0 \3 i$ P  output_sample(sample);   // write L + R samples to DAC
/ N# R  H1 l. |5 j  return;6 L" G/ c7 N( C
}
0 f% z$ b! V* m$ ]- n7 `1 e
' s( D* V; [, C$ q; d- Gint main( void )1 r" E6 h0 @  b2 K
{5 j# S3 }' c, B4 N0 [- u/ M
5 ?4 P4 ?2 C  N
    /* Initialize BSL */
6 ^" z, M3 C( A) q: u  W! @    EVMC6747_init( );% k+ G0 v2 S8 `" E
        /* Call evmc6747_intr function */' B9 G4 @1 u/ x$ g8 H5 m9 r
    aic3106_init( );
. `. v; X& a0 u. k        while(1);  \/ u1 `9 N  I1 r
}4 n) K9 O2 _# H

; `, B. q5 g# _  I9 G( }) v% O& ?5 s6 e. i6 O$ A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: g, T. u3 f# A- P$ Z+ m/* Initialize MCASP1 */
4 r3 g" U- e9 C; I    mcasp = &MCASP_MODULE_1;3 q3 M5 q6 H9 e
    mcasp->regs->GBLCTL  = 0;       // Reset8 @9 f# [' p5 X
    mcasp->regs->RGBLCTL = 0;       // Reset RX! U  K; O4 W$ R6 c( F2 T. l' m
    mcasp->regs->XGBLCTL = 0;       // Reset TX; I6 D6 y: r5 N  ^) N
    mcasp->regs->PWRDEMU = 1;       // Free-running' g  v1 \5 y0 O* b
   // configure McASP0 receive registers
( I' y! g- R$ U; W) t  i; [" C% {5 Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' b0 [6 v. O# b0 e' H/ _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% r9 `4 H! S4 J: ]! X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 C0 f5 m. ~1 m4 h) L0 [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 e1 n8 a( O  \* _2 B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), ^. D) }( H) y4 U' j* k0 c
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 B! h) Q0 `6 p1 @1 O    mcasp->regs->RINTCTL    = 0x00000000; // Not used! u2 O5 r6 G7 H: H7 e
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% a9 k. [* D$ j
9 x/ P* J( X2 n4 i
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 o% A0 d6 O; g; r0 X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" C- K" \4 V  U4 D) o* O0 x1 i# C' f    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) K3 r1 O: w; A3 j( W0 m    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ `( ?+ k+ I2 l' j0 A2 g6 V6 k    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 v$ }4 c) R; x( x0 y8 F: r! k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! U. c- T" y8 D5 A! \
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& [, J2 p7 J- c2 R; L  C; ]
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 m9 ^/ h( u, n  e7 l. v, h
, L5 u+ e6 ]: C0 x0 l/ l/ g3 j    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, t& _! @  {1 m7 U3 }; E4 T    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 Y9 ]' O3 b" x
    mcasp->regs->PFUNC      = 0;          // All MCASPs; ~8 h) T+ @2 Y, y: B
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ E% r! @3 s, ?+ I5 ^7 K5 n

7 Z1 ^% i. i3 D. ?8 }/ r    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 ~6 f! q8 k: f( p2 {' c    mcasp->regs->DLBCTL     = 0x00000000; // Not used! `& P6 T  A6 t1 l4 Y! B+ Z# E! L" E
    mcasp->regs->AMUTE      = 0x00000000; // Not used, M, n# s" x1 g0 `$ z8 L/ f' P+ L

# ?3 J) i% G# f; Z3 g/ y# S0 B/ u9 z/* Starting sections of the McASP*/
* E' V7 W9 p6 i9 _    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ E9 u! ]3 X$ V* q( ^: j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 g! c: Q/ ?9 ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; }! B/ x' V5 h% z! A) `4 o) i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! `- n$ N" [; K, k! F  N8 ^7 D3 ?! ^% O- R% ?# y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # U0 k' F" ^' Z5 c5 J# f5 \. ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 t! z2 e' C2 E  A9 [
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . N9 D) \  k( |, @6 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 s7 Y+ s6 d. f( V

0 F- f1 m  e, O& c& M; W    mcasp->regs->XSTAT = 0x0000ffff;
9 U5 U& j  S" w, H& {' [    mcasp->regs->RSTAT = 0x0000ffff;
, n# X/ [# y- b! r  n0 K: w0 t! I# @- d
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' }' ^9 n: o2 ~1 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! p" G. b% S& n2 N/ s    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - G# b" O2 |: v! {; Q/ k; q$ M1 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" Q, i0 I2 _5 d4 f" S9 B' ~
3 N; I4 o/ y6 t# E) i
    /* Write a 0, so that no underrun occurs after releasing the state machine */! l) Q/ Q8 `0 E1 R; i+ _" ]2 F  W
    mcasp->regs->XBUF5 = 0;9 P+ X1 N* h* L6 l! |1 Y8 Q
    mcasp->regs->RBUF0 = 0;1 Z/ F  {0 D9 s, r0 z

9 d/ N* j3 s4 V( k0 |8 o8 e6 `! B    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 x/ N% r8 i8 @" t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 L6 i# `5 h$ a" |; _
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 W/ e% H, W% C9 E) T4 v* V- b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& x% B: d4 d) u) X. I$ }. |1 _
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! y. g2 o3 H' M# {7 V6 W7 m) K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 K# G: l2 Q+ N6 ^( U# p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' g, I# \/ I9 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. t6 L" v; t% W/ I4 Q( Z0 i& A$ I4 H: \0 {& L1 F0 |
    CSR = 0x0000;7 w+ x+ i7 E0 _
    INTC_INTMUX1 = 0x3d;/ N" X. \+ b* Y4 }- C5 e- F! [" [2 B
    ISTP = (unsigned int)vectors;
; m/ J( K; N2 H! Y  P    ICR = 0xFFF0;  
( W$ ]( ?2 g" O- g' W& d( m5 a    IER |= 0x12;    o; L: y% V( R( G# _+ O" N& c
    CSR |= 0x01;  . i7 w) R0 _2 z2 R

0 K( f% ^* y2 c, g& H% K: c  Z; C1 ^! E' u) e+ E: ?

- p/ Z/ C$ s7 c3 p; V/ A还有就是两个输入输出函数:; @, C) w; N' v  v5 U) `
void output_sample(Int32 out_data)1 b% j( s8 x4 n, l! |! p+ u& m5 }
{+ `- Y, J  Q1 v: [) K
  AIC31_data.uint = out_data;  0 T/ b( t( U! H. G
  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 n' h' @' W* n" e
}' ~* f- l# U: L$ M
+ I9 O: }5 A! V. S8 R* c% K
Int32 input_sample(void)
2 |3 ^" W/ T/ H/ K7 k. P5 E{  8 ]! `- P4 r/ u/ A  @
  AIC31_data.uint = MCASP1_RBUF0_32BIT;' n/ H/ f% w7 g
  return (AIC31_data.uint);  P. Q5 x( R0 Z
}
: s6 ?3 T  ]. m" _6 I
' W4 W7 X0 a3 w" B/ y# e/ ?
分享到:  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-3-18 14:35 , Processed in 0.040413 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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