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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, S0 M) }) V. V$ S. ^main文件:5 n, R7 Q. v8 ~6 K( ]" S$ ~
interrupt void interrupt4(void)  
9 O6 l# j& I' ~9 @5 k' m3 c{6 |# R: ^% }# _! f0 ?0 W
  Uint32 sample;
( L0 L9 u" z/ ?8 R3 A$ l3 L
, Y% x. ^8 P# s8 g+ X' X  sample = input_sample(); // read L + R samples from ADC! G7 @. o. n" V" h& @
  output_sample(sample);   // write L + R samples to DAC # i, C" A! b1 g
  return;9 _5 }! S: B7 ^2 C* }1 b
}# M0 l0 C3 \8 `' X
) a7 D1 e1 b' k8 v1 D
int main( void )
# u/ v2 i7 j9 H0 f; P{
4 W0 C- ?. q' A; d3 Q1 B; J' H: ]4 j7 W# Y! F5 n0 g  p% ?% Y% U
    /* Initialize BSL */
9 k& G9 ?9 q, I5 q6 s- x* y    EVMC6747_init( );
( o: f4 L* w" v  @        /* Call evmc6747_intr function */
& ^$ z! C- c" E- ^+ f! R; Y    aic3106_init( );5 R8 E( P$ I6 ]3 a- q6 W% p
        while(1);  b6 ^$ t8 T+ ^+ O* y
}
7 V5 S5 t  c* b# K) K
  P( F' w% w' m% X
3 P  s  H+ E* k6 C  X5 d, U0 Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 Y1 G; }" Z7 \/ M8 i/* Initialize MCASP1 */( `( g" U3 W( R( T- _5 Q4 _9 i8 Y
    mcasp = &MCASP_MODULE_1;
6 H; H; X* i6 {4 |4 V: J1 f. X    mcasp->regs->GBLCTL  = 0;       // Reset- H- l4 B9 }* H0 [! H
    mcasp->regs->RGBLCTL = 0;       // Reset RX$ F) z7 D# z+ S. p
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 g# s8 {3 y' H+ H8 r2 N
    mcasp->regs->PWRDEMU = 1;       // Free-running0 x/ T$ N0 C- j" S5 y- r
   // configure McASP0 receive registers
! Z5 `! A8 L, v3 V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ `0 ^: h! ?# s1 ~, P! Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% Z  K) H: g% s' @6 X& u4 r    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 m. W2 |' N. z# z, G0 m    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 q% e3 i8 i. C% P5 C  j    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' W, F% w$ {$ g% e& ]& J2 q  g( m( e    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ h$ D# s" t8 d) A9 @2 R0 b% [    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 S& `/ c7 h* c) a9 C- J    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& `; `# D- ~0 c8 N1 T6 n  I. Y1 O) V! C! y8 E& ~1 i5 ?- b
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 K5 N  Z7 W/ c/ a; ]$ M# p5 s: ]& F    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: W7 u# y5 `2 j* D" j0 i    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* v6 q" J  C4 a    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" X; _/ Q4 M2 O    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. p' F8 {+ {* p# k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ m) }; |+ x; y) h; |    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 l0 z1 D; d# j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: [; }% g( m1 A9 v! \' N: S4 k# l# w2 I7 }! b% i- L
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ n$ W6 ?7 Y  Y' S$ C4 x4 q/ l    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" ^# ~0 v+ u4 c    mcasp->regs->PFUNC      = 0;          // All MCASPs% F( d4 t5 m4 }; @7 N6 \
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 m- I/ @8 X6 r

  |0 C3 |4 X+ l    mcasp->regs->DITCTL     = 0x00000000; // Not used
& P& F+ e( I, x; F( t8 T    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, X, [6 C! I+ x    mcasp->regs->AMUTE      = 0x00000000; // Not used  l' O& i) x5 X, w1 P9 i: S

* o& f: c! C( G8 Z/* Starting sections of the McASP*/% x  }$ N: B6 b, ?, Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 |  C$ @" K  P1 X: m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ w. u  x/ O( D4 F( x) O# B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 L! B; q2 D' \1 j: j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 y1 Y9 P+ U% }2 `( X: o; u4 |* P
0 p5 B3 ~8 S- o0 K
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % b0 K7 t8 n( Y0 R# B3 _' ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 U6 ]9 \# Q) b) @) W7 }8 |+ T
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; f+ A& p2 `  ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 I( I+ g- ?5 @" N9 H: Y" i- q/ w8 x/ `8 F. u
    mcasp->regs->XSTAT = 0x0000ffff; 4 [1 A) c  N9 ^8 I" D
    mcasp->regs->RSTAT = 0x0000ffff;
8 r8 a( D- E9 }) a; u5 B  L% n+ Z/ B4 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 L! K  L* I) d% F. g& x: F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ~6 c7 r8 N! G. b! v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, T; Z. n% V. O5 ]& ^3 W! q% D6 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' X) q8 v. C7 p+ T1 i
1 \" x9 F# `$ u+ `% a, a' N) ~& D
    /* Write a 0, so that no underrun occurs after releasing the state machine */# |: K/ E, U+ @
    mcasp->regs->XBUF5 = 0;
8 e; a0 m6 {# k( N( ~5 L1 R    mcasp->regs->RBUF0 = 0;
% l; {7 b* ^, e$ C$ {+ V
! d6 \7 g  u0 C' i) O1 R3 R2 X    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ m! u! w$ v' n8 T0 Y/ D- ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' O+ @: h7 |& w' S    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 k6 d5 X8 R$ T4 d% P/ p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 g2 v; r% i  a' {7 o* c5 y
) P( z  K9 i& R( u: M* {- K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 t& \: ]8 I4 t$ }  o" U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 C( `+ i* ^+ S
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 P5 a7 b0 X) Q* }0 `0 I4 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. S4 H9 M. x, Q+ X( W/ T2 X# x3 x4 {( i' [! ?
    CSR = 0x0000;
3 [! _2 N" F0 M! k1 Y& K( Q6 ^, D- X    INTC_INTMUX1 = 0x3d;
* v7 m2 d+ o2 n    ISTP = (unsigned int)vectors;
' X! m6 n$ y4 G7 A    ICR = 0xFFF0;  / N$ S7 D$ f$ o2 t7 y3 n
    IER |= 0x12;  . q) H" s1 k5 N+ S
    CSR |= 0x01;  
4 Z& t) _9 T& u  z/ A9 F( @# P
* L/ O! p( V3 i) ?" r( W/ [* G* N7 E* m" L) h! t. b: q. E5 C4 u
! b  s" p' w1 m: k/ G
还有就是两个输入输出函数:4 n: ?1 E& f, h! K
void output_sample(Int32 out_data)
5 l7 i# g1 H  @. r% S' n{) e: y* m+ ]& H7 u0 `3 M
  AIC31_data.uint = out_data;  0 g# |7 V* k! J5 _6 C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 {, @) R7 G  P, Z
}
+ T# u6 c; Y) H! L. M- k; T
7 Q* b" V  t; U4 t0 _Int32 input_sample(void)6 l; n9 b/ y+ y7 K' f; \
{  " p$ k/ a; t" t  x+ ]" D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;) ~* y) l! S6 ?% k4 x
  return (AIC31_data.uint);
- H6 `: ~6 k0 D% T5 P" x  V}
. n9 B- _$ X6 U0 L3 M4 c
" |6 [% R5 r0 `8 V( v
分享到:  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-17 03:55 , Processed in 0.061407 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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