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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ K' m1 d2 x% v  G, O8 M9 hmain文件:0 z/ ], c! H/ [" z, D/ b
interrupt void interrupt4(void)  1 k# O' o, T- D+ l
{7 F% q9 V' q0 Z$ p4 z9 V
  Uint32 sample;- s: v) @5 M8 W. }; Y/ i  q  g

$ o7 o4 k+ H5 _# f4 O! B) O+ E' {: h  sample = input_sample(); // read L + R samples from ADC
# G. O5 i! ~/ t* \' `" p" w8 i0 ?  output_sample(sample);   // write L + R samples to DAC 4 e9 o0 i4 Y/ q  U7 S! R
  return;
' \2 J  Y+ D/ L}
+ |8 @, d. C! w$ C. y
" Y% S& M& b. j6 K* Fint main( void )) V, h! ?! S: m7 V$ |) [
{( R/ [8 w# ?# f" D

3 {# s! r* ^" y$ @    /* Initialize BSL */
5 J$ A; ?3 C% ~) m* ]5 K! }    EVMC6747_init( );7 B6 S. @6 l0 m/ T2 g8 K! }$ V
        /* Call evmc6747_intr function */3 O, b) D% M8 i( m" K1 T
    aic3106_init( );
, o5 h% t2 D1 E+ [3 o5 S  Y        while(1);
) d/ u' T1 |  k+ P  z}
( X" x- w0 N9 g1 o8 y( a% w1 p! b. a$ h$ I5 S+ G

9 [; K: C. _) V6 M( qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! A* n- s& A/ ^/* Initialize MCASP1 */$ a3 x. Y% c  Q6 s0 _
    mcasp = &MCASP_MODULE_1;
, v: k- y9 p; }% j( u* Z    mcasp->regs->GBLCTL  = 0;       // Reset
; R0 F1 B( |( m    mcasp->regs->RGBLCTL = 0;       // Reset RX" R/ @* i) [" O1 p7 I2 n* b/ y
    mcasp->regs->XGBLCTL = 0;       // Reset TX  T+ Q1 h* R" S; w, j! c) Q4 b
    mcasp->regs->PWRDEMU = 1;       // Free-running' q3 m3 f/ ^5 X
   // configure McASP0 receive registers# ^% F- i( J  M
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& v$ f9 u% R, y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, W' Q8 L* r& P( K) Y' n
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 L9 J/ J' }6 N3 d  }    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 |7 a2 L. o' y& O: D+ h0 L    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* @6 b) ]  @9 ^9 N9 @' N8 h0 Y* l
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ T4 M* D2 I7 D1 c, R. n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- {- o, a, q/ e/ D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 B3 g8 w1 F# V. _; _. J
+ k& r1 `5 e. k. {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 P0 r( D' @: P4 Z8 `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 x, |- ~+ N! l  h# P* x; m
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! S5 p4 Q! y& F' p. K9 S& Z/ |    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% {$ w9 E( \( `+ b' {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 {: t6 z7 J0 r$ d7 w( O* J: h    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 v$ x( q& H$ a+ t/ ^3 ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, }- I! c, J' h* n$ J( X+ d    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* K' [3 R! H5 t& d. h" \
1 `. F' D: u# x5 E0 \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' p& t6 y5 \4 ~" v) i3 S* L- h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 p; E8 ]9 E- y% Q+ F    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 w0 E, D; A* a    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ f& i' ~6 u' y: t% y- h7 ]% q

+ D. c. N. r& }! b3 @6 A    mcasp->regs->DITCTL     = 0x00000000; // Not used7 T  u. k2 n' w
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 `/ b9 b" ^% q! U    mcasp->regs->AMUTE      = 0x00000000; // Not used
! {8 T' W) t9 N; `  f! h/ a
3 i& B' j2 B+ Z' N: q! X/* Starting sections of the McASP*/# j" I0 R/ @& [+ _% u( ~
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 `) O# V* a8 o# o8 {6 S5 x  H* ~1 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , Z& f( y& N5 r- Y3 X4 u
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 U3 p7 G& K7 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# D" L  W: ^9 w1 ?

/ b( P6 h" G) \- V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 W* I# D% X! s) f$ I3 O7 G: S1 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! {1 Y, L+ j. C# o" R6 i+ v, }" ~    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# @+ Y) p0 T/ \' m* ^; N" {( E% s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ Z- d/ ~4 z; G$ l: C$ i: [% R# }" e/ N9 w' N! ?* r0 S+ V
    mcasp->regs->XSTAT = 0x0000ffff;
! A& q( P, ^, c5 @7 M    mcasp->regs->RSTAT = 0x0000ffff;
8 ^& E' s) n* @  v) Z6 B
; z: t! G6 J8 e! N7 V7 y3 q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ [& f6 f2 S" h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, N. y1 r' S2 e* W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' p% Y7 n) W0 Q( s$ B+ K& I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ X4 ~4 }5 [/ f) J$ `- l
- |) S1 M) N3 N
    /* Write a 0, so that no underrun occurs after releasing the state machine */
% ]5 E% u% k& S    mcasp->regs->XBUF5 = 0;
# w, o/ H/ H% i- w    mcasp->regs->RBUF0 = 0;9 Y$ |3 _4 k7 [
: L( G! ^; s8 Y) P# J" g8 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 o* Q! Z8 d7 N; m6 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 h& O& X& R, ^! M3 m: M$ D    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 q- i) R, S4 b7 V, c/ t( z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 r' [$ s" b. Z" s
; @8 @7 W4 B3 ?6 Q! }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 C! H" c( n% ~1 \- a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* O  {( _& A/ I+ d
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! S4 O) g( G1 @& y, L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( B; R% [+ A! l( h% l- @5 c5 m0 X/ ^
    CSR = 0x0000;
) \5 q8 j8 v5 o5 V) b    INTC_INTMUX1 = 0x3d;
4 K9 f$ _7 a3 k) O    ISTP = (unsigned int)vectors;8 E9 Y: k+ F: ^( X
    ICR = 0xFFF0;  
& q2 o' ?& v- ^4 }7 _    IER |= 0x12;  ) T* u- k* Z! L$ L" W" M
    CSR |= 0x01;  
( \4 F+ G( s! Q3 l& ~: d
6 U( O' q  y- Z2 B4 A
. Q& }8 b5 M( M$ Y9 ~- C- c6 _( v( Q9 g
还有就是两个输入输出函数:! p/ S+ t+ {8 p* \1 B
void output_sample(Int32 out_data)$ o5 o) f5 i  e5 a1 y+ v7 _
{
% @9 L$ P7 P9 D: W  AIC31_data.uint = out_data;  
" R# ^7 x2 f9 g$ O' y' j& p5 I  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 Y( r6 B0 m( R: f" K' l0 y
}% s- ^) [. ~; ~$ R8 w

: F9 P6 @9 i" L/ D  ?8 S) i& TInt32 input_sample(void)
) [3 d6 n- h2 C# c4 F' h3 }{  ; R) w; L: [6 [! f. d; ~
  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 W9 S( u" t3 s9 q$ u
  return (AIC31_data.uint);
8 T0 f4 q: m" O) _* R2 d* z) U; j}
, ?9 g+ x7 x  v  h  z
* ~, w5 `0 Z/ j5 o# C3 o/ T* L& z
分享到:  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-1-23 03:32 , Processed in 0.062164 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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