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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% g4 \6 R, U& ]/ a6 s2 Amain文件:$ n/ ^, \3 a8 u: |; F5 I6 W2 G, H
interrupt void interrupt4(void)  
$ I7 d) F5 R# A/ d& T: \{
8 t, U$ `( h: C1 m) y  Uint32 sample;
- F7 @" I" M; D& S' J# H( l
+ \4 e1 B/ j& B& S7 \4 i. a& s: r0 D: S  sample = input_sample(); // read L + R samples from ADC8 d  Z! @) f: Z4 N8 [2 G* Z" f
  output_sample(sample);   // write L + R samples to DAC - ?- l! S: |' }# @8 j
  return;
7 k' G5 T  M0 i( J& P- `  V}
/ ^- p- p: u8 _/ [2 b
2 x+ O, E5 L% Cint main( void )
* v  o/ w( I1 ]2 T. a8 e{
4 x$ Z- n! b% R7 u4 @
  _$ p& c7 c4 b4 }/ ?" o    /* Initialize BSL */2 L/ V) c. z8 v! e( S; M* g
    EVMC6747_init( );
! F, d" c4 [, V# Y: Y) p& ~0 F        /* Call evmc6747_intr function */
/ [8 p6 y0 t/ C0 v! T    aic3106_init( );, d2 k. j# Q! `5 B
        while(1);
$ ]6 F4 B$ `$ x# ]. A}( `& i" i+ a0 c+ W+ p8 e+ ~5 [( ]
( l2 b3 m" {8 }7 s3 f1 j0 z( ?

  s) ~$ t4 c: R( L4 Q+ z. J- Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 M% j: `/ i0 h& M: a
/* Initialize MCASP1 */1 @% [0 h# q! o" t
    mcasp = &MCASP_MODULE_1;
$ P& c  M  W, O    mcasp->regs->GBLCTL  = 0;       // Reset
; Y1 l. s# n# T  Z: m    mcasp->regs->RGBLCTL = 0;       // Reset RX
- _. ~8 r9 H  V/ K0 ]    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 p& c% L5 h2 |    mcasp->regs->PWRDEMU = 1;       // Free-running
4 ]4 Z$ X$ ^; E/ e% ]+ X   // configure McASP0 receive registers
# _, r4 R' |! g* w  O, y. q8 `    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" p7 x0 R% q! W: ~2 O( q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; H+ b# o4 |. P5 S1 m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' J9 o9 j6 o/ V- ~6 B    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 ?( }6 J5 ^; H$ w$ K
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- z( T1 S- q+ Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) w+ V- N! L, S    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  R! ]' y8 _, I( |( c    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" N# K) _, V. F8 J7 y, @) ?
4 `6 V  F' Z; c3 R+ ?
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 a4 c& x1 w: }7 P4 ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 q; U7 q2 ]! A" z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( X( D/ V- Q- f. W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! M" X. Q- y. ~* P4 z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ {/ f7 R  p3 ?( K4 h  e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 j1 W6 |! }+ X) \! s$ D    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ H2 u! a  J+ i0 R% L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' @$ f( [: A2 A. n
, O9 P3 |0 |) j) U+ X( {2 N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 Y( D/ D: V% @! |# a- s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' y- H) h0 x7 v5 k2 F    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 f3 _1 F. C( O$ ^' y' N    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 l- D8 g! z7 e4 r

$ J) _4 Z/ [& _3 ]# d2 B    mcasp->regs->DITCTL     = 0x00000000; // Not used2 J  l# S4 c% q( l1 w4 F$ T
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ {7 ?: p% Y, T; m    mcasp->regs->AMUTE      = 0x00000000; // Not used3 n% g1 Y" ]  i8 h
4 M6 Q- q8 R0 ~3 D, b$ W
/* Starting sections of the McASP*/
8 K& }, n# v9 N  w* T    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 p% |$ o# W7 X* J% I; f% r3 z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # @. X% Q% b; f0 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( E* ~) i- F7 e5 b; p4 E% t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ A3 Z. d/ Z% A9 |! [; ?5 O. {. t
9 @# X+ E$ w8 ~4 h8 f' o( t( A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ y( V( d0 T, s7 V+ ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- ?5 k: n1 G4 a0 L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 {3 T0 g4 i# U# p' N0 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 E" a6 R- r, Q$ w$ |$ ^3 |, k! p/ V
    mcasp->regs->XSTAT = 0x0000ffff; * z7 U9 D5 m! W+ Z
    mcasp->regs->RSTAT = 0x0000ffff;
2 v8 _; D: R5 G5 v+ j' U
( `# I: T  s! J. h* g% a7 T7 g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& j6 O" Y- H. C/ e1 q' ]" {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 m' D1 e, s/ e8 F% z4 h/ k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 z2 A& r  u! G6 W5 ~; |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 {3 E5 G; t5 @! ~  Z4 F4 H  d5 B& d9 a6 m
    /* Write a 0, so that no underrun occurs after releasing the state machine */
, [4 R/ M- [0 C    mcasp->regs->XBUF5 = 0;* G* |: t' M  Z! S# H
    mcasp->regs->RBUF0 = 0;
3 h* a! q& @, K4 s" W+ ~* t7 {
+ @% Y* g2 ?0 }$ |9 ^" n4 V' B3 I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : ~% C  ~1 {. J) u4 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' S1 C# ~) \6 L$ S' C9 h
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 T! R; _% H  a! X2 d2 ?/ _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* n4 T# g% w, I  N3 C9 i# n0 ^$ n0 g0 Z. @- F9 a! G
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ Q" s0 r  P2 B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! e3 Q$ `  _" W6 ^  K2 w5 v' C- a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& g1 C" q* R$ c" m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 w  w! [# y: [1 h& N
+ ^2 _  }' B6 @; q! k
    CSR = 0x0000;
+ d: K, i# M2 o    INTC_INTMUX1 = 0x3d;% N6 Y; @  N! \  f$ z% }2 {( E" o- Q
    ISTP = (unsigned int)vectors;8 w! T4 |2 N% P
    ICR = 0xFFF0;  % O/ ]7 Y3 B9 k5 S
    IER |= 0x12;  
" d( ]0 X( Y$ k    CSR |= 0x01;  
/ V" g0 B! c; |
: b  i/ n( x' t0 X. P7 h: e; J0 m# y- Z2 _, r

  M! n6 f$ O, e# Y! _; u4 y1 e还有就是两个输入输出函数:
' a( x5 M/ Z, C( b8 I+ L: g/ x' I, bvoid output_sample(Int32 out_data)
' z# x+ `2 B* U: C* e( C{
( W1 L, ?, M" {5 m7 g7 b  AIC31_data.uint = out_data;  3 e5 n) u- m  z7 w2 H/ x  X2 {& m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& u( n0 }0 e" @
}
$ `- h. I) t' {" o& n3 Y
! \1 r7 @: L2 S0 X6 C$ MInt32 input_sample(void)
) X! x+ @; i; G0 ?{  
% q: o; c" p  L1 O8 P  f5 {  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 d) f# J- w7 Q7 c* N# h9 T  return (AIC31_data.uint);
% V$ w4 @# x! J9 |; Y4 w" G) N, Q}
: Y$ {4 O9 X, U' T, P; p9 z0 h
0 h% k6 {9 x, I! b
分享到:  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-2-8 07:59 , Processed in 0.040553 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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