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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( A* `# n  W: u' hmain文件:* b( M+ r  F5 H  a
interrupt void interrupt4(void)  
% L. n* v; g- ^/ Y1 l7 S{$ c4 q# B2 Y/ e7 o: H
  Uint32 sample;1 c; |! F3 O! X$ ]  t
  a+ L: B/ W# k' K/ M
  sample = input_sample(); // read L + R samples from ADC8 X* h5 m( n. w4 m8 o  R1 V% z
  output_sample(sample);   // write L + R samples to DAC
' M% _0 G+ v4 ~! R/ W  return;
5 m& Y8 z: W: V( _) S5 S* m1 e( o9 @& K}
' D2 m6 h; A. h# g( Z7 K; j
8 b9 @+ P7 F: }' s% h# hint main( void )
7 I8 p( U. t6 [/ K, e. ]{
, Z8 S, Z0 F6 O, q  ~& ]$ H
  Z* a# J( ]& L; P  I( ~" g    /* Initialize BSL */
6 p( |) N; t" u  ?/ }2 @    EVMC6747_init( );3 c: L  f2 X  U; X/ ~
        /* Call evmc6747_intr function */+ w- V9 J2 L# t) r9 B: ?/ _7 m( V
    aic3106_init( );
& I5 f; v2 D& d% U) O+ H        while(1);
7 U4 `# ^: ]1 R, F0 R8 ]}; U  `7 ]3 P% A5 S) v
4 k' {% c$ F% {. \$ |  _

& C9 P5 G5 @+ R8 oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: u- M3 P2 [9 z7 q4 U. ~
/* Initialize MCASP1 */
# F7 C5 U' ?) d9 K/ i    mcasp = &MCASP_MODULE_1;& O7 y" R( d! Y8 C
    mcasp->regs->GBLCTL  = 0;       // Reset6 K3 O. D3 d0 {# c( W( w
    mcasp->regs->RGBLCTL = 0;       // Reset RX$ i- \$ f) w4 ]+ g. s; g
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  A6 k: G/ q, N7 M, U    mcasp->regs->PWRDEMU = 1;       // Free-running, j- M* h. \, u" h! J
   // configure McASP0 receive registers6 _# a9 v$ ?9 e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  X/ s' e& d' X3 F+ w6 @  j  x; P# q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 P% h! U& F+ z7 r3 h
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, L' {" q* P4 Q( R9 L+ N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 I9 V( v, ]- j. I+ @4 E) U, v  p& p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ m& V. y0 t+ Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 m! Q1 v$ x& f' }$ G2 {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) z' i3 U$ C6 c$ Q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: @3 a) I( w4 M) ]

: c9 K! B0 b; s5 S6 ^3 N( B. O# P1 A    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) h5 U7 m" [5 u  A# H9 F    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 R8 R* X/ Y, T; b2 B$ ]8 [% f    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! @& ~2 p4 u9 U7 L" `7 G/ y+ W0 t
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( y  l# G7 ^* V
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 b5 m& W$ i$ ]  f/ Y& G' C" q. ~( x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 C4 Y$ D% t8 }- g2 f* O; P! ?6 S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- J+ L2 ^" h# E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ g# d) X7 s* T4 F  W
5 d( O% ~2 z2 B; q6 Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 A  P; `# T* t+ D% k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" A* ^* Z; ~7 s; I, i+ _. z
    mcasp->regs->PFUNC      = 0;          // All MCASPs! ~0 {; m* E; ?9 y. Z2 l0 P# T, ?9 n
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. J5 v0 g& j- H9 }1 g8 @

5 U& M) c( b+ q, E7 J    mcasp->regs->DITCTL     = 0x00000000; // Not used
" P+ C5 V* j/ g5 l( F5 ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. X7 y6 P+ C2 B    mcasp->regs->AMUTE      = 0x00000000; // Not used1 B6 u  P$ G" p) z7 s( q0 H( m
0 _4 y2 e% H3 S# I( _8 L
/* Starting sections of the McASP*/: c, z; f$ b, ~+ S; _/ |) V
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 F- g  e/ Z- c8 A- a8 h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    a/ J6 S7 R/ X' a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) C3 {# i2 j) x' s# m# P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% P% }$ \2 k, o/ G0 n+ t' C
# T! C# y% f$ p" Q9 B6 _    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) ~; n4 R- B3 ~% d( u' p) G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 K) F  g" ~) U7 T. }1 g) W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ X+ T. q5 C# \! b  d: s" R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  o& o* x$ p" ~1 Q! M! l0 M
- K0 w' G! a. Z4 v% m/ h" J    mcasp->regs->XSTAT = 0x0000ffff;
) b. G  k8 O# F    mcasp->regs->RSTAT = 0x0000ffff;
. ?( I7 J! x3 W' ^' q+ |6 W7 k3 ^  s1 k2 ~3 m. S: j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ?6 M( Q- f6 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" ]- O" E( E: {
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" |6 V4 }/ a5 m7 ?- w% ^/ C2 _) e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ [; b: s& c# _
& t- u/ ?1 V' R+ a8 n+ |    /* Write a 0, so that no underrun occurs after releasing the state machine */0 u. N& I, e$ q( W" z) n
    mcasp->regs->XBUF5 = 0;; e4 N2 O3 u9 a8 Z% ?9 s# l5 e
    mcasp->regs->RBUF0 = 0;
# ^6 e" w+ @6 }3 v- G6 O+ d4 ^0 E' P2 w; W. |! y8 E
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 l  L: Z0 v  y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, b! t3 B0 I! v9 i( O8 j: I# V
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : o+ Q! K. l" d6 d& [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) O" Z0 `7 ^& [4 [" a( H5 u: c" K7 [6 ]( p/ h# Z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( b3 U( l& `# e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 E* m* ]2 u% Z4 d    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  F1 b" ?$ R7 [: w: p/ R2 P$ U# a( q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- j8 q/ K$ b6 {" T* S8 g
# A% C: A3 r9 h; ?$ D  s
    CSR = 0x0000;
& k' Q. C# D; Q/ I6 B    INTC_INTMUX1 = 0x3d;: Z' d, `! g# M; ~2 I4 B, f
    ISTP = (unsigned int)vectors;) g# W; X- i" F- S7 K* Z* k
    ICR = 0xFFF0;  
$ y3 Y4 N! M2 b9 s$ ^    IER |= 0x12;  
) G+ L6 k7 \; s( c. j, `0 {4 k  |    CSR |= 0x01;  
  K# e- ^. P5 }5 H  a4 E. t
  E7 L) J6 N( f, H1 t' v' r# |6 l" J; O: M2 @( [7 t, {4 G

3 C) Z1 J, _# Q7 ?* s5 \. s还有就是两个输入输出函数:4 T7 F: X% q; n8 I) m" @( [; S
void output_sample(Int32 out_data)
; ^' M8 h5 S7 q0 l{2 p/ ^8 G4 t4 y5 v2 @  b: C
  AIC31_data.uint = out_data;  
, Y0 s/ [% T8 z6 J  MCASP1_XBUF5_32BIT = AIC31_data.uint;' S& q& R3 J+ V! y& q
}2 N. D( }$ B0 \% z1 D

0 o1 m! J& K% }8 TInt32 input_sample(void)+ c& Z  Y/ d& c1 E
{  
$ z( _$ ^$ B  E. H  AIC31_data.uint = MCASP1_RBUF0_32BIT;: F: \4 a( t8 D
  return (AIC31_data.uint);
+ d) Z$ t( `7 X4 {& \' X  ~$ `}( Z( b  b: b8 E

9 ^9 x- z" Z, }3 c& f
分享到:  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-31 12:03 , Processed in 0.043192 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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