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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, J5 n- v' s. v% ~) S3 e- K
main文件:
1 W7 K+ R! e* \interrupt void interrupt4(void)  / y4 S5 m/ e: @, V0 H
{
* u) l+ m3 ?" ~4 m" n9 Q  Uint32 sample;
8 @" E" Y# [" G$ ]1 \( I; G2 {+ D6 x' Y( D! ~0 j4 K4 T! r- S- x
  sample = input_sample(); // read L + R samples from ADC2 E5 q0 D/ l  ]; e& w# X) P
  output_sample(sample);   // write L + R samples to DAC " I$ R* Q' Q2 T- l# u2 W3 b2 P$ K. q+ @
  return;
& K; i& V3 ^  B, |- O+ Z}* Q2 E6 K% W" t' B

/ e& E( X: t) H9 L0 ?$ h, B2 uint main( void )
$ K: `0 R: C0 R) K3 c- n{
2 t- v$ ]1 s. |; [# F) M) g6 ~$ z& ^8 p+ k
    /* Initialize BSL */5 A, M6 x6 G$ i6 d; |! y) `
    EVMC6747_init( );" p1 c, A: j& j7 g& @' M
        /* Call evmc6747_intr function */8 T- s1 _( b# R$ n0 {/ n
    aic3106_init( );
7 V+ p7 L- y. I: w1 l8 G        while(1);2 U2 s' A! w. H
}$ L. g) @( S6 I! _

/ W6 J) @" r4 \9 ~3 Z1 l" p2 I& B, }
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* L7 m! q7 Y% I' K/* Initialize MCASP1 */* D( X7 Q0 S0 B% p
    mcasp = &MCASP_MODULE_1;
4 L/ W2 F- Y4 R- \' g, f. a* I    mcasp->regs->GBLCTL  = 0;       // Reset- j$ k/ s2 d% l. \: H1 I
    mcasp->regs->RGBLCTL = 0;       // Reset RX( e8 X+ U7 e( }: L- g
    mcasp->regs->XGBLCTL = 0;       // Reset TX0 z3 f) P2 O( C4 W, E) \) M# Y
    mcasp->regs->PWRDEMU = 1;       // Free-running- ^  v3 A6 o1 x( B9 f' h
   // configure McASP0 receive registers- b" ~, Q/ D2 v$ \$ `( n; [) f
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  w/ S' ]2 F. `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 I. L: e' T5 _2 w& V    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& b# ?7 D7 v5 J; {3 T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  r* I9 [0 N% F! _5 \6 h( r* Z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" d% f$ L% [7 c, N  F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 Y' P1 Z4 j# Z. }) f    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 X9 {, }8 S2 N( \, g  A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: }! N' f- m6 ?0 B$ t& t9 i3 f- O! b) i, `; C
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: [  u& S( k8 L; L5 _- F
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( m' i8 O7 L1 Y& U0 V! Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 [. L; n. x( a& \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  ]6 P1 q  {5 r3 i/ v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: {" z; _5 r1 c$ h    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 `9 Z  M) X+ L$ g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 q" [; t( E) O5 l3 ~
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ b% |7 ]* b: E- X
1 n/ ?, I- P& y5 ^
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ q" e& D4 e% c9 o0 ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 k# F  P. k& w: a5 J+ M* A
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; |- j6 S; g& m2 L0 L/ R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 {3 _. o5 z8 y- m, C: M8 F% |* h% C" h
    mcasp->regs->DITCTL     = 0x00000000; // Not used& J/ v7 I5 R; Q/ x2 I( h$ h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used% P6 p7 \# G8 F. K, @. y
    mcasp->regs->AMUTE      = 0x00000000; // Not used: Z5 U- E9 T% l* ]) {* j" Q' ?

# o8 @, f+ q! K% E/* Starting sections of the McASP*/; a6 q" E: t8 ^0 d" V- e
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 o1 n2 l; R. k' ^1 ]/ D+ M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % D- f; A: L" |
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % x+ ~" S% i* a4 K1 {; Y3 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 |- g5 q  U: J7 |1 T. W
+ @; E5 I: x2 `1 b" B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 g! K' y/ P) C. Y- l$ ?2 n( V4 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, u( _3 x* V. W  O
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ B2 ?: k6 T8 k, l( G" b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% z9 f% f. J; p9 F) ^' U

6 h/ {7 _. G0 O& l" V1 c" D    mcasp->regs->XSTAT = 0x0000ffff;
4 ~/ O. f: p9 p- m3 K    mcasp->regs->RSTAT = 0x0000ffff; . E; M5 X9 ]' r) y+ u* s# }

7 _; {' S* a" N" q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 Z/ K% q& C6 l' h( m; J9 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" S; |( R+ a  N5 S5 c7 L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 f9 E2 X1 z8 w% N$ \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 m( U0 @3 K$ H" f: d6 A) v$ L  b; W5 g; y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# Z! p1 V# B' Y2 N2 A    mcasp->regs->XBUF5 = 0;1 O$ ]- O, S/ @3 e) K' P/ T% M
    mcasp->regs->RBUF0 = 0;9 Q4 |' T2 d: s0 g) B8 u

8 p4 v3 E! z( x. M7 n( s2 ~    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ y+ G! g8 s8 x# ^; `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: N9 c' M; W- A' O% v0 K7 Y- R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Z( U+ [4 Y( o* p8 q$ _+ [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! l/ v4 s5 }$ n0 c3 F. w) U
  ]* `; N4 N1 b7 M9 U; X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 e/ o& Y1 ^( e& Z/ [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' J% @( C& U0 ]! v( Z# j1 M7 \" D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ |. m; Q* I5 u+ a; ]* a" Y$ P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. r, R! }) u' T! S+ w+ o, x
2 G1 X+ ~% F8 I' J) I9 _
    CSR = 0x0000;
  w! i& O7 U" D7 ]3 s  ~. _    INTC_INTMUX1 = 0x3d;9 V" A8 r+ |% m. o* K7 n
    ISTP = (unsigned int)vectors;
, x- }8 W( V$ Q7 H1 {, W    ICR = 0xFFF0;  ' g! C; ?! p4 K- i8 F4 V; ~- c9 W
    IER |= 0x12;  
& q% m+ u4 D/ N- o* K8 Y    CSR |= 0x01;  ! r% N; k; f( Q  N: ?; E
4 W( E; N2 i. C0 i% X
7 g! F/ F) D4 T+ P

  Q. Z1 E! \. f8 q" J还有就是两个输入输出函数:
3 |) ^8 x1 ~5 S3 W3 e! Wvoid output_sample(Int32 out_data)6 y1 g, G5 I* P- C2 V
{: Y; d, I2 C) `1 h: o8 E" j+ {- _- R
  AIC31_data.uint = out_data;  + a3 r' m0 I  {) P4 ~) K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 C2 q& n. M  ?* @, L( p}
$ z+ r0 H) u) N) J7 F7 ]1 l
9 q" P+ x0 T( {; f% t# g4 P- o, W) uInt32 input_sample(void)* S& U9 x% g+ Y: }. G9 l9 q- `% z9 _
{  
+ R  q6 C' k. y' V, c$ Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: p- \0 G& I# [  return (AIC31_data.uint);; ^- n2 k7 J; ~2 m* G
}
- p4 S! H. M/ O! D6 o% h# f) R  f, U2 b) I' K- 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:07 , Processed in 0.038616 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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