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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 V2 {. c& z- f' ymain文件:# L/ q8 F' l( {
interrupt void interrupt4(void)  
, W) F& u, J! [4 i0 e8 W, ]{9 }; T5 A5 h. t" L
  Uint32 sample;
% ?) l' F* j. c5 F; v$ [. q
8 m; v6 L( f( Q* s6 N  sample = input_sample(); // read L + R samples from ADC
3 d8 t6 g# d  D! w( ]$ r  output_sample(sample);   // write L + R samples to DAC   I# s1 E4 Z# ]
  return;
$ y+ B- Q& g; S7 v4 q3 d0 s1 O- f( z}# \' q  m8 v' o# r: G/ [3 \6 E/ A. U

) _% R& ~" n  h) g. i% ^int main( void )
* N" p+ p8 y& d4 w{2 B4 v, J: P5 h

% \, u  H. l. q& b4 w0 u$ Q    /* Initialize BSL */
5 T7 F6 N8 ]& Y    EVMC6747_init( );! R1 N" n8 j& p5 ~5 b3 a
        /* Call evmc6747_intr function */9 ?# J6 A2 n% g! D
    aic3106_init( );% N) s5 b/ G' K7 n. e  L
        while(1);$ o; D0 @/ x2 h: [
}
0 f) `& q# _% F3 P. V( l
) \" w( E( U6 x* o- y
: S7 m/ d9 F0 Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 J+ r( D+ @6 v7 o  B/ q# r) ]
/* Initialize MCASP1 */
5 ]. ^6 L0 l0 F6 [    mcasp = &MCASP_MODULE_1;; L- k" N( ~7 O' F9 E
    mcasp->regs->GBLCTL  = 0;       // Reset
  g. A* C, `' T0 U) l4 W8 Y    mcasp->regs->RGBLCTL = 0;       // Reset RX) z! P! b% }/ d1 _
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 R" H- O: C, c) F' n; L: i* F2 A) [) x    mcasp->regs->PWRDEMU = 1;       // Free-running; s- s9 X7 ?/ Y0 }2 k) C0 D
   // configure McASP0 receive registers5 m$ S3 [* e/ p+ f* z$ d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: Z1 D/ T& E5 a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" ?% m0 ?2 c! I" C
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! [* n; T. s% ]) N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- z  C4 m6 Q1 w) U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( T$ I& Y+ z( A: |9 {  i& g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  S; u! \4 ^- F1 K* J; H    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 x+ Z- l8 m+ j0 \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# K8 F; _" O' |8 `2 w) l
* f2 u, U4 K' _5 n
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  C- s# p2 t& n4 a/ A    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ o; t/ _$ I' f  x' J7 u2 _8 |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 r9 _& z; n2 O! |    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' X* L1 d) J) N5 \- W- ~$ P; q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 W* v8 ?7 s+ X0 _9 c
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: F' d6 H8 b2 q$ ]+ q" [    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) [8 u% g8 H, t8 l3 h2 z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( l+ g' q( \5 Q& T
  x7 j. M% A3 m$ N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) g# w9 r5 X% V! ]2 [$ r! V, k( p# C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! k0 a9 s; i% A& Y" b& _5 e7 @; ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 ^, g9 z: F2 Z+ X/ p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, g) P: }+ u6 E% _4 I
- j7 L7 Q* i2 p4 E; P( i& _    mcasp->regs->DITCTL     = 0x00000000; // Not used" _5 N. s- b, l# o
    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 v% k2 R* S1 h7 {& _" S% e% O: w; M
    mcasp->regs->AMUTE      = 0x00000000; // Not used; r" d) E' r  r0 p
  ~8 a4 R8 z) w+ f- o
/* Starting sections of the McASP*/
) a. W1 T0 m1 V$ N- \    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 _& C  H2 v3 q. h" r9 ^6 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  i! u5 D( F( Q. G6 }; r4 A- V! @' [    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ o* I9 `8 E7 i$ j. X# T* h& D6 L: Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& p: r! y0 e1 f

% j5 W3 c1 C5 |' m* H  M* P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! s. ^# j4 Z8 ~8 H% u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" r: h4 |9 f; z- b: x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 U9 M" H4 c# b3 Y% W  k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 I# G, c9 ~; ]% H- U: ?0 N- e# Q8 c0 _- b5 C9 a& b2 P( s/ o
    mcasp->regs->XSTAT = 0x0000ffff;
# ?3 q$ @; ?; D& q4 k2 \    mcasp->regs->RSTAT = 0x0000ffff;
% r( l$ r/ \5 R# L4 E: ^: k& W
% Z5 C+ M  V  O  v3 M* D) G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 J' @# S6 o- }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ _8 B' H* S9 P3 W. f( t    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , z+ @2 V+ p4 s& C) V+ t* x0 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, B* Z, Y; v2 E
+ M  }1 I( I' j+ ~/ ?9 b    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ v# L& c0 ]& l4 n3 F, j    mcasp->regs->XBUF5 = 0;
# [. a0 \! ^& i# L, D, K$ F$ K    mcasp->regs->RBUF0 = 0;
5 S! l: P% T" K* p# z
! u3 }& x6 S) y/ ?1 o& F7 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - j" r5 N/ f/ N- {& x5 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. @5 P5 L( Q5 l3 ]4 r4 Q9 w2 @; C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 r: A5 N0 s  r8 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 |- a/ ~, y3 c& a9 [9 t' W- D; _: V3 l
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : {+ Q  T8 Z0 Z7 J5 Q8 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" Y4 Q( J7 G5 @4 W! y: y/ u, x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% S7 l# o- J+ N8 N8 X  ^% Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 F% I6 D' U! l  a! F% b) D7 ~/ _4 H  H& O. J
    CSR = 0x0000;
6 h: _0 x* ~- c$ y, k2 F, R  ]    INTC_INTMUX1 = 0x3d;% b. T- [- K0 H# b* u. I5 |
    ISTP = (unsigned int)vectors;
' v" {8 U6 H& Z5 w* `+ H8 W* {    ICR = 0xFFF0;  
  U& s; x! I2 S    IER |= 0x12;  
/ W* A6 Q$ i4 ~& u+ q    CSR |= 0x01;  
3 }$ [* |. r7 B# F. Z1 ^
& Z. }& E5 u5 h6 t1 j; M6 j0 V/ y7 S/ C7 B  l. r- g6 P

6 J" _, @4 v5 k还有就是两个输入输出函数:
/ K' F: e2 v1 ~, b0 _# Nvoid output_sample(Int32 out_data)
" m8 G2 C3 e* }; d1 F# X- z- x* l{* f* v' y2 K8 \' j
  AIC31_data.uint = out_data;  & X4 Q+ t% T# Q0 F) ~2 u
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- D, n, X6 H4 H# C}/ i# x- ~; `2 _# m6 X

! q3 C* b2 L# ~4 A: b0 Q( QInt32 input_sample(void)
$ y# A9 h/ b8 Z- q, s( ]1 x2 g{  9 b8 V2 Z- N/ L9 U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;! Z  l& ?2 z4 @% X# J" q9 C( H" V) _
  return (AIC31_data.uint);3 C$ z2 _( D/ l3 Z" v9 x
}! I/ U' H; D8 L- X5 w

1 @3 W' [7 O, O" s
分享到:  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-28 22:18 , Processed in 0.041830 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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