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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# |% p- }4 ~+ Q7 H2 N# K" imain文件:) ?2 A8 b' X4 p. L5 {, l3 x& b1 Z) ?
interrupt void interrupt4(void)  
: c/ w% y* T" `$ p  b& G% P  j* y{- }+ g% q! p% X/ {/ n) k
  Uint32 sample;
  p) e+ H. O$ ^( i9 y  [5 c! F* K& K+ Z$ Z5 T) t+ }1 ]) K
  sample = input_sample(); // read L + R samples from ADC2 f, U  L0 |, @: o/ n2 K( r2 `
  output_sample(sample);   // write L + R samples to DAC 7 ^6 M  j5 j5 @8 D. I6 h
  return;
( _/ c- L, M' `) y}
$ M# o. k6 @* h' F9 |5 O! S1 \9 t  }2 h) }
int main( void )
. g& ?# k4 w% ^; |6 \& j/ _{
3 q9 J) r: B( a  S$ O% W. C9 {
    /* Initialize BSL */% B/ \" ?' w  L6 l( w
    EVMC6747_init( );% G/ g( K6 H' p6 q+ P
        /* Call evmc6747_intr function */
9 c3 m% ?6 ~0 ^( v    aic3106_init( );
; d& I$ o4 \7 T5 F        while(1);1 {+ p1 M2 J& w- k
}
# n: R4 Y* p: o( Q% X
( F& M( H) u9 ?4 m8 l6 M
  @& f) ~; g1 `, z- V- T3 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, p9 h0 j7 \2 a2 q' H
/* Initialize MCASP1 */
$ t; H/ Q; v$ a6 k' ]    mcasp = &MCASP_MODULE_1;
. ]& G2 }6 |9 U+ U( N6 O" C$ e9 a    mcasp->regs->GBLCTL  = 0;       // Reset/ O0 o7 y# i0 u/ ^1 g$ E
    mcasp->regs->RGBLCTL = 0;       // Reset RX( W' f3 W- ?" ^5 b- {- }: g% G2 U
    mcasp->regs->XGBLCTL = 0;       // Reset TX
, a7 L; I% ~' O. f1 {$ E    mcasp->regs->PWRDEMU = 1;       // Free-running6 h' `3 _( y: I) f. f; k) T7 _
   // configure McASP0 receive registers) T; C6 X, L9 N* E7 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 z7 I! b7 t0 s. e/ y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! U7 ]# C6 P: z, R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 C6 r/ a  L+ o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ r& P! F+ _2 C# W# w
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* K2 W  w9 K, r, k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! q1 @4 g) F0 x( |    mcasp->regs->RINTCTL    = 0x00000000; // Not used! H* v' k8 \0 k9 c
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 T( S- R( u$ v/ l
! s& Y( L* k6 s4 C6 G/ C( R    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% O. ~9 h' t8 |) M7 E
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) m6 E9 E8 s3 y/ \- l/ M
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 U6 i7 Q$ Y- L* x
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 I' o+ ~8 V  i8 b5 U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ k$ ]6 X4 g4 t: k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' z8 i* C. v; _8 \, }" g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 p# c# t5 @8 [* u! D* j  X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' p  F# h" [; H  d7 [1 g9 K

9 Y) I5 i% y7 F    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- n/ r9 V! T2 ^* }8 a4 L# o1 F    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" h8 d8 ^0 ~3 J! ?( z& z2 j    mcasp->regs->PFUNC      = 0;          // All MCASPs: R6 [# q" V, [! `+ }8 N. e# h& v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 G( u; p. F& }0 o' l

; t1 p) P/ i7 _1 }1 E    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 \' @0 A" S) y7 D( D  x8 t8 e    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' W4 m4 u: r5 c0 ~9 V/ o    mcasp->regs->AMUTE      = 0x00000000; // Not used
: y: x6 w4 D3 ^
$ ]& @) @5 g  k/* Starting sections of the McASP*/
! v# c) g; Y8 {3 q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # i6 g. L  i6 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ c& g7 s! F- i3 s7 f" _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 r( C! h+ E( S4 n8 a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: T6 r- l3 m2 O5 O2 r6 Z
; M7 D1 O2 S. C  Z1 i  j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 j- n7 s% m; w( m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ f- g* d: J1 p1 F0 l. W; q+ n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & V2 @1 h; c& C7 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, E( d2 |- T0 y! b; N9 [, y+ o

7 a9 p% `8 b: d# F# s    mcasp->regs->XSTAT = 0x0000ffff; ! {7 h; M; s3 y: h
    mcasp->regs->RSTAT = 0x0000ffff;
, p5 F% [" l# ]5 C/ S8 a. p9 b- P6 U
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 R( k" _, _' A/ C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 [* i+ [+ a; n9 d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 T4 i* c7 |7 I0 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 |" n; X4 ?( f% c1 X" C0 j  r: ]* O/ u: l# O& C" S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
% F, j8 r2 P! {1 O    mcasp->regs->XBUF5 = 0;
( u6 ?4 t, V/ T5 ]" U. x: b* W    mcasp->regs->RBUF0 = 0;
: G( E7 y- E) _% K7 L. r" J  G8 b  D( G( u6 U' P$ @0 n1 ]1 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 m9 b: }0 J6 j" `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 c1 M' ]6 @9 c  D6 m; L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : w, E  L1 X$ M" q6 _$ i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 S1 G) ]2 \9 B
7 Q! U; d2 {1 e, D# `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: G# |' \: N0 V( v3 Z) j4 \  K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' b7 U" _  Z, T, y' X4 u  \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 r4 _& V+ m2 C% b: m0 }6 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  y! y# C& X; j7 N  \" {( Z/ P& }/ ]0 h' G6 ~  v; U& h
    CSR = 0x0000;4 w2 |* H; n3 S; u: K" E( L
    INTC_INTMUX1 = 0x3d;" X% S5 h5 @1 E5 f
    ISTP = (unsigned int)vectors;
4 i: Q5 W) E# y: {& f$ D" U    ICR = 0xFFF0;  
3 p" b1 }  k0 u1 g+ o' B    IER |= 0x12;  0 ?/ s8 Q) y$ R9 V+ G
    CSR |= 0x01;  
$ k- J; J* I+ |+ O. `6 D# X# a; M$ R7 P; l& S

. q) M/ \& ^3 B1 V# p1 d3 c+ J+ l9 R! Y& r( \2 z
还有就是两个输入输出函数:
% x- C* \6 p0 z$ s! {- A* \% _' Pvoid output_sample(Int32 out_data)
( J  Y1 k" W0 {3 F$ M, F/ x/ Q{0 \" T( [) q1 K% }" t0 J
  AIC31_data.uint = out_data;  
- a, G% \# c# W0 Z2 B$ m; x% G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# v2 r. [& D6 b5 T9 V9 W}* D6 v6 `: A8 G) c* C1 k3 M: {

6 b# {6 i+ L5 u, ?4 A' j2 r1 VInt32 input_sample(void)
4 L# Z7 Z8 H4 Z5 r7 ~+ B6 O{  6 n4 }  ^4 Q- d; \" Y$ Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;* `9 A7 V' J0 n
  return (AIC31_data.uint);
, e8 j% G; t9 f' w4 K" j}
" g1 h! l( L2 d1 O3 z0 s* L* H+ O2 w$ E& m7 F8 }
分享到:  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-12-21 08:43 , Processed in 0.038064 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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