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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 I' x8 _6 P( @main文件:) R+ k0 j& D+ D, H/ u' N# ?7 F
interrupt void interrupt4(void)  
: d1 P1 B. y; c+ ?{% C5 z$ u! c% X4 Z
  Uint32 sample;6 w9 ?9 |" u3 `* q# x4 ^5 Y, }% `  \
/ j5 e1 a8 L3 R1 U6 @
  sample = input_sample(); // read L + R samples from ADC) ?7 j7 ~3 \. B5 a
  output_sample(sample);   // write L + R samples to DAC
3 b# ^8 W7 N/ i9 _; Z% i0 Z) }  return;" W3 \0 `& f0 U
}
5 }" b- ?1 g; R% i3 W2 l- x
1 d( Y) B8 t- w1 f% |& ]  Eint main( void )( [4 v; w! K9 g6 |* K0 B* ~
{3 |5 ^& N: Z: V/ Z, H, l2 Z
0 N/ L+ w7 a1 u% ~: K! E- K/ V
    /* Initialize BSL */  R* Y0 o5 J; j5 X6 r$ _/ Z, P
    EVMC6747_init( );( c1 @8 M7 c( h+ k- h  Q# Q# n
        /* Call evmc6747_intr function */
: }! D0 |8 n* m6 D% [) w    aic3106_init( );. ~1 i4 j4 u4 ^. z* ?6 L% U+ E
        while(1);
3 f) O0 Y! Y: W* v# u}) B- p- ]# U+ U' p, I+ k7 }
9 t) |7 a$ L5 Y% W. \
: a) I' }% r  P  e" Q/ ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 H) D: V9 C% }/ M% j! d; I/* Initialize MCASP1 */* k& _* N9 _- o. [+ Q7 W
    mcasp = &MCASP_MODULE_1;" p/ B' ^4 X2 k* N& L0 ~
    mcasp->regs->GBLCTL  = 0;       // Reset. j/ x' `: Z. ^1 g, w
    mcasp->regs->RGBLCTL = 0;       // Reset RX9 {$ U5 V" l" b3 G0 z
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# @  d( o: L* Z5 @2 H    mcasp->regs->PWRDEMU = 1;       // Free-running
% s3 ]: d. p: k& X$ p! g   // configure McASP0 receive registers1 e4 C3 {4 J% U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ ~9 n6 b7 ]8 ?    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 g  }: H. k9 B. [, }9 @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! \" o9 |. p% v" x
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 p3 w# [8 M- A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* V6 Y9 S/ d! k- D9 P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 ^! U8 t, \8 g  T* g    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  r1 z0 ~/ b1 S    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. d: `% {. E. f! [' Z5 E- A2 k9 Y) @

! k# b( A) R3 R6 r  |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 ]# g6 v* t: W. S  w
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s8 m' U3 S" E: O5 I! S2 L' i$ N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" X1 l' ?+ [8 B$ o
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" ?3 V7 k6 t2 ?. y% |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- G) u# B; p9 O7 S6 ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. W5 E5 n" n' d% C4 A7 [0 P
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: ]( r+ S: B7 V
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& _% D3 B  h. a; r

, K6 _' E4 U7 I4 ]; y% Z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* H2 F) x' U+ U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" N5 \  O3 G8 m" f( d
    mcasp->regs->PFUNC      = 0;          // All MCASPs; a: L2 O$ q7 B/ f
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% _2 i: I5 l8 o  X' H
) B* h0 l) r- x: i5 N
    mcasp->regs->DITCTL     = 0x00000000; // Not used% n8 m: z' j8 R5 B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 n' K/ _2 V* w) I5 G% T; A
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ t+ Q3 v# X' M0 u
2 u3 s( b0 {. @% k/ G' h/* Starting sections of the McASP*/+ `7 \5 Q6 c+ W& o  c1 l
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  n' a4 \; }' V5 n: T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " T$ Y, w" |0 G& _  D0 t( e% S' t# G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* j/ A. L3 R9 g* A% q. R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* p( a, s- f2 {
, x- y; M% D" l% |( j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; O% v; H5 N/ V, ?! T; r6 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( _4 e" T3 g& V' z' R
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( a6 E! D$ S5 L6 P8 {5 i0 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 W5 I6 X* H# C

0 o7 v4 R/ L5 _. _( a( G. B9 y& u    mcasp->regs->XSTAT = 0x0000ffff;
) W/ r, z, b+ R, w% Q6 B    mcasp->regs->RSTAT = 0x0000ffff;
3 V6 b, L+ P% \  j" \
: \. f. o8 B6 _2 [  B: ?; i7 i    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ Y. }* S- ^9 h) s5 |  ?7 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  L* Q! t3 t1 B2 c& B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* C9 N* E6 Z  v2 K% d7 ~2 _  `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, Z' {2 q3 F3 }
& M& \( l$ f. ], j1 d    /* Write a 0, so that no underrun occurs after releasing the state machine */
- n# }0 X; \; P    mcasp->regs->XBUF5 = 0;
. a, q/ |  Q( }7 B    mcasp->regs->RBUF0 = 0;
9 L/ ]; X) J7 L! u3 A6 ]* J0 Q5 p; i) z7 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 j/ P" B2 }: Y* T5 h& k* A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- V5 j" I9 ^5 a    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 @5 t5 v+ A: o2 e( Q$ N) S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# f1 A# _; x9 D
& S  s/ U7 w; Q4 I
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 [  _/ ]/ I$ u) p, A/ z- g! y1 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, M( u/ E0 B  Z# L2 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 o7 h( U! N" H# `2 d( J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* V6 ^5 z" }- }5 O( W6 O7 b; l$ M
+ Q* v/ C' h5 Q) d8 Y4 Z
    CSR = 0x0000;7 W$ O4 h$ w4 A( q  ]$ S
    INTC_INTMUX1 = 0x3d;4 T1 L) j; B+ o- D
    ISTP = (unsigned int)vectors;/ E" b4 ~5 m" s! J5 W1 M4 D. E
    ICR = 0xFFF0;  
7 C# _+ i" ?& P7 @/ }' ]) R. `+ A    IER |= 0x12;  
0 k! s' f5 G% p    CSR |= 0x01;  ! x* t$ [/ s) i+ a

0 Q8 X7 W2 `: g$ p# \6 i
: F0 u6 ~# t; a# f
2 q8 {5 K9 s: s6 [. H还有就是两个输入输出函数:2 m1 [4 b1 G% v- P7 @5 Y8 m7 c
void output_sample(Int32 out_data)7 v: W  J1 L, W9 c
{9 L( w5 z! ?3 L$ o
  AIC31_data.uint = out_data;  % w! V1 S1 d! x! o2 `( s* b
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 i; M% S/ u$ Z: E. {8 Y# q
}( ]4 J: I/ U" m9 c" g  j; V

, w: ~1 @! D7 ]Int32 input_sample(void)# D) u) c$ N' o7 u  p
{  ; V. Q6 E+ m3 [; I1 `
  AIC31_data.uint = MCASP1_RBUF0_32BIT;% p4 F- K) i3 ~1 H* o+ Q
  return (AIC31_data.uint);) h; g4 F$ E7 Y: K
}
, t% `+ }6 d; }& C
4 T1 U% T; ~- o: W$ K2 t- R$ c6 w) G
分享到:  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-3-1 22:38 , Processed in 0.040221 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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