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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 U  H* H# t% j* ~  T" w
main文件:% m& d2 }: G' a- w' B0 o+ X3 k
interrupt void interrupt4(void)  7 A  I' |4 n0 U( d3 ?1 ~: M3 s6 X+ a0 X
{9 t% e2 e# ?  ^1 w3 q
  Uint32 sample;
! ^6 S3 j! ?8 B; c% B4 ^) F9 T" }: K) Z  N4 t) @1 l3 J4 P3 `$ e' E
  sample = input_sample(); // read L + R samples from ADC" Y5 D) W0 l% J1 ]' o# z$ \
  output_sample(sample);   // write L + R samples to DAC . z4 w# O" b0 O
  return;
4 o, D& ?& `  {; x}
" L. t3 O2 ^' T; R( L& W* {/ j  L  w5 Z+ M/ s+ _2 O, N% F
int main( void )
1 P' z+ e1 ?* t3 b; i{
/ D( n& M, C0 Z$ p4 I7 Z4 j
1 M& J8 }# u$ M# m    /* Initialize BSL */
# M& H- d' B- i9 m+ K5 ^4 q    EVMC6747_init( );; _' T- \0 F& P; w8 W
        /* Call evmc6747_intr function *// H1 ]. D  \( t8 O# r+ K1 s
    aic3106_init( );
/ Q) j/ z4 U0 F. _8 @: f        while(1);
# E4 V6 s3 h4 K7 `/ F}5 N7 w6 {" {1 B- V' E
' b' D3 x' p% F9 L) B# [' U
5 B/ M, H& |+ A3 d  C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( m3 V; ~0 E$ R  r% [
/* Initialize MCASP1 */5 [& {6 D8 a8 f
    mcasp = &MCASP_MODULE_1;3 C0 N' }& Z7 _3 X- p0 k
    mcasp->regs->GBLCTL  = 0;       // Reset9 x) A" z4 N6 ^  K# A7 [+ F
    mcasp->regs->RGBLCTL = 0;       // Reset RX: o/ W3 ~. w( i) A" ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX
, M9 H( g/ m0 L    mcasp->regs->PWRDEMU = 1;       // Free-running9 j: Q* W$ T4 h+ U* q, K
   // configure McASP0 receive registers
8 I: ~3 w2 w2 P' O0 E  {; |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& `) |2 d4 [  [0 Q4 D, S
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 x5 x8 c1 U  K& S* M' b2 ~* R; z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ l# C5 z3 p* _: K) ~( c& S. R    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! j! `1 e5 l; c- c) {6 m5 t
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 N6 m& J/ G) e3 @8 l9 Y" P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) h- r! ]2 y5 h) x# a' f    mcasp->regs->RINTCTL    = 0x00000000; // Not used, l/ E% |2 @9 ^
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G8 I% ~( x1 G$ x( c( l6 b. x+ q1 b6 r1 n* V9 M) K
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ D8 N' h, w) b3 E. |8 j7 Q8 g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! [! K% i4 }' q: z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 [& j4 M2 y& O- }: j$ ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 L  @% c: N3 r  l    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& p, M4 {* W2 j$ j' D* p+ b
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 ]: @% j6 ]0 {) |* m
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; J2 y2 p7 J0 D3 x- D6 ^: S* _: ~    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 u7 T9 ~9 O+ C- I
: L' J; [9 _& U# j8 `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) j* [1 f( Q# J. f$ k' z5 |    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; ?) g; u. w. I5 _/ }$ c
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, _4 @# X- Z+ q* U; [    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- m6 e: Z2 a/ T0 m- Z+ p

9 q* R6 u1 x: s( P    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 h( [3 b% ?  Y; O    mcasp->regs->DLBCTL     = 0x00000000; // Not used) ~/ h, h- ?5 ~* @& z
    mcasp->regs->AMUTE      = 0x00000000; // Not used, I# \4 U6 R# O; X5 S( Q+ F4 b
- f0 y# r3 J% o$ J2 f6 e1 ^
/* Starting sections of the McASP*/
# \/ O# M+ J: Y  _1 N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! `0 q" r9 a% `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, s& K/ [0 g  r7 w    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . ~6 {; V2 N" P' o3 y% x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 R& q7 N+ ^4 G8 L- {; Q1 c: Y$ A: f3 u! M4 l; f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- \+ w" @, a1 K1 i( V3 D0 z4 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' K- y6 t! T( n! C- V! f/ n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 O3 s# e# e. S6 d, ]: D6 w+ P9 X; c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 Q& }% S; h& ^/ u5 ~0 I

2 l4 V8 f$ C& o# w    mcasp->regs->XSTAT = 0x0000ffff; : U* G5 K" |! m; ~4 W! R5 j/ U0 |
    mcasp->regs->RSTAT = 0x0000ffff;
3 e6 |, j; ~! F5 E+ t! I
$ |3 A% L$ C, G3 d2 ?' w0 I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 i; D  q' X0 V* j- a. N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" `2 v9 Z7 x* c. Q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ j) o1 e! l  A. f, k* \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" D# `- R7 \# {) C0 F+ _
$ V; X% T. t  F& Y) t% {6 h" M1 A    /* Write a 0, so that no underrun occurs after releasing the state machine */! x+ L! _0 ?/ V( P8 S
    mcasp->regs->XBUF5 = 0;6 d: U) i& R+ ]8 [1 _
    mcasp->regs->RBUF0 = 0;
! S% q% H2 t5 e7 P4 V* Z* a0 l+ i( i" D* |( K7 [
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % j) ^2 @$ \7 ?7 I- p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: l( p1 c1 a* W5 _# L! U7 I: d' Y/ o. M4 E    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 T8 ^! s/ G7 g- F3 |8 R* \" X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" X" d/ H1 Q6 T0 ~$ w" Q" }" K& h7 R+ {1 l) a3 M$ W5 r
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) l7 p; U, S, M: ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' Q6 q5 O9 O6 n. {; K    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( }3 Y, ]: m- A2 u6 a; m( x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ J+ \$ W* f5 n3 R8 F: B4 y2 {( w( u
    CSR = 0x0000;+ D0 F/ v6 O2 E
    INTC_INTMUX1 = 0x3d;! W  M# v, H/ C1 N  V( z" r/ N  x
    ISTP = (unsigned int)vectors;
) o1 t; e, _! {8 m    ICR = 0xFFF0;  5 u& Z7 r* V, g; g0 K
    IER |= 0x12;  
4 E# E( k, t2 p+ d: U" l2 |    CSR |= 0x01;  8 m" ^' Q7 I: r$ i) ?( j+ P; u6 Y

3 m$ ?* C2 Z* n9 P
$ Q# v( v5 }( F& w) y8 k) i; c9 ^+ a8 w1 x- M( b: [: d5 q, H" C
还有就是两个输入输出函数:  b0 D3 D3 i: U; v( `1 k6 B
void output_sample(Int32 out_data)
. x; H$ e8 P) T% O3 r2 L2 }3 I{* Z7 [' F5 \) [# S
  AIC31_data.uint = out_data;  # _  P) E3 G; e& M% E
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& c5 h2 m% i: D/ a+ O$ m7 g, u}
4 x3 ~2 F* I/ Q; N' @3 D7 b, W+ O/ U1 ?% m+ b
Int32 input_sample(void), }; l+ ^0 y; N5 L
{  
- v! O5 p, {3 Q2 ?& m  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# q+ h5 s' O4 f% C  return (AIC31_data.uint);
7 `. r& v/ {( H5 b" L}/ U  |/ y% k! |
2 R; d- k! ^9 E' u5 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, 2025-10-14 06:02 , Processed in 0.038741 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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