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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; P# C1 U. H& M6 Q% G) `- imain文件:
- i1 ~8 Q) d9 x4 _0 P, c8 Rinterrupt void interrupt4(void)  
- |& W% K& j5 @) Z5 L( E{% M# U( T1 U' O8 x) \3 G. ^
  Uint32 sample;
0 o/ e& z, [: Y) L& D/ T6 v( C" s: e5 E7 U. |
  sample = input_sample(); // read L + R samples from ADC
% G$ ~3 V% ^% X% C' l  x, X* ~2 z  output_sample(sample);   // write L + R samples to DAC
$ x" o1 |0 `4 f# p! x# a1 z$ P# P% E  return;
! d% c$ b( @0 W, D. [. Y6 s* Q4 f}, R1 M7 x& z( z! k2 L2 `9 K# e
" n( q, N' Z% w, J5 s. ~
int main( void )! y9 a: o$ D; Q* E* q
{. F, m* A9 h$ d8 F: c8 a
& O4 O! P0 N6 P8 s' h% l
    /* Initialize BSL */
0 s+ A7 d, A/ n+ M8 e    EVMC6747_init( );5 G, a6 `4 t6 n3 l
        /* Call evmc6747_intr function */
, J/ O2 f* K5 |    aic3106_init( );# p6 ?! v$ C/ R6 @$ ~6 n
        while(1);
3 `! k+ Y' p( a. G% j5 b9 m+ }: f}3 [! k* }9 ~" W& N8 p) \' V/ |8 U

8 J0 e4 @# j5 s2 f* ?$ y
9 {, T! ~3 e% m# _% Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ ~3 A1 |2 K! o6 H5 }# C0 a/* Initialize MCASP1 */9 e. e. c( P. A3 q1 ^  c
    mcasp = &MCASP_MODULE_1;/ Z7 S$ F: ?$ c. C5 Y+ [
    mcasp->regs->GBLCTL  = 0;       // Reset7 H7 i2 {; M% ]* F' x
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" h: m! F% ?+ u" I    mcasp->regs->XGBLCTL = 0;       // Reset TX
; ]' c3 m" q* N    mcasp->regs->PWRDEMU = 1;       // Free-running
8 U2 s* X6 v: V   // configure McASP0 receive registers, {9 z3 D( k7 H1 z- i* e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. |4 ~$ r  u" f+ h& o, G% Y6 H' J    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" l$ W/ n3 j. F' Z
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# ]' Q" E/ \1 A& ~5 ~( |
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 E) t& q- u: [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 L" @" D6 {- s0 K, \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 i3 G+ _4 R' _9 ?6 @' b    mcasp->regs->RINTCTL    = 0x00000000; // Not used: z6 V4 X& |. h$ Q4 q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 x4 @' m, T" u2 H- g: k, ~4 g: l. e$ c, v" |- E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: R) v- ~; x7 Z0 [    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 @% |9 s7 W  `0 Z- o& U* d' O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# A! b2 R5 B- X" E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ t+ U  i! k2 D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 r6 e# ^: j8 ]* ?; M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& N' C& t1 k7 D! O# r    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  p; N" o7 ~! z9 Y" j& k* u# a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ x- V" r+ e% E9 E) w( j) c* m

2 a% b" b9 A8 J* k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 J, {# c1 W& R7 _3 f# W8 b+ D' R
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 s/ g3 y3 \9 ]! \6 J; `4 P( q
    mcasp->regs->PFUNC      = 0;          // All MCASPs# ~* f8 `( Q7 ^( p" q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& y. Y; O) h4 R% ]
& S2 G$ i3 m% \, a  e" v    mcasp->regs->DITCTL     = 0x00000000; // Not used4 z* ?% g2 f! Q0 G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* t+ ^7 d' H# f    mcasp->regs->AMUTE      = 0x00000000; // Not used2 ]  a1 y* J& X1 }4 m3 |
  R& m) A* o& ?, H1 g" D% z
/* Starting sections of the McASP*/" S' C% r9 H2 r) Z5 j; f- p6 Y2 s
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- S; v: k9 y# }+ D' f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ m* V& O: t; u# z3 h+ ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 O. ?3 D/ M+ W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) P" d( @! e: _3 \

  _9 ^! \& M1 a4 k2 Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ u" A% `( E4 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 Q; H1 G( h7 g. l! \: X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ ^( c8 _9 V, E7 o, f9 f/ @( i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( e4 f0 j2 g4 T: Q( s

- Z3 \+ l% k% U3 p" L1 ?9 H, H    mcasp->regs->XSTAT = 0x0000ffff;
* U, [( Z, N8 j  T* X4 ]' H) S    mcasp->regs->RSTAT = 0x0000ffff; % G7 q5 }$ _2 y. l$ m
5 z1 w0 M- y( n. i6 t+ I% f
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& f# r/ J9 C! Y, V: y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 t2 E+ ^# U6 c3 v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. m$ p& f+ i6 @5 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ Y8 f' Y% |, x! D# j- d
' Q2 N# G, ^1 ~( M% I
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# M% a0 @! i- @. @! g    mcasp->regs->XBUF5 = 0;
; d4 y! J6 H" o& F; o3 C8 q, }% F) s* A    mcasp->regs->RBUF0 = 0;% O+ @; {% b- s, j3 W( V/ @0 A
( q, @3 R. G7 q; d- q$ W% ~+ P5 C
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 f0 W" ~* ~1 Q9 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' h# @5 ?. O: M8 R; o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % f( m, k1 q7 g% \  X" x; R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 B$ k" j8 c1 q$ Y8 Y

1 \6 C; @! s: s/ Y. e$ p. w3 m4 n6 z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# }, F* O" }2 t6 @/ s; L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 U% [" e5 J1 \
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* U, C3 ?' D0 G% ^" V, f% _/ t& G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- [0 e+ k) l- a

. E6 S  L7 W7 E    CSR = 0x0000;
3 I# F2 K6 e. `! ~5 y2 a/ \+ O: x    INTC_INTMUX1 = 0x3d;
* N1 u$ S5 {0 W$ I" d. q8 U' i" N    ISTP = (unsigned int)vectors;8 y: H; r2 g& \' i1 ?
    ICR = 0xFFF0;  
7 o- M8 g$ W! @  K6 I    IER |= 0x12;  2 C+ ]$ K1 u, S! F; p  P
    CSR |= 0x01;  
, A. w! Q3 {! p2 o' j# n! F
6 h$ n& r- w4 `" M  h$ K1 @
0 ^* w9 K; X+ `  t" F% D0 ^1 l: \- I: \. c0 a: U: \3 v, j- U" m0 l
还有就是两个输入输出函数:3 A6 D: l4 \' p, }' e
void output_sample(Int32 out_data)6 u& `6 U' L, i
{; ^$ `6 ~9 @- W0 P; R
  AIC31_data.uint = out_data;  
3 x8 T! ^! u  b, ~0 m7 `: ^1 b( m  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 {1 ^' g" h, `3 o# b, y9 K9 J}
5 L  ?: W( T" i* I
7 v! M6 w* p2 }8 p  V& Q3 M5 gInt32 input_sample(void)/ g' o( x2 o/ @1 A& y
{  - O' q1 B* P9 ~/ h7 A& I( z% Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ h$ r0 J1 O4 ]  S7 N
  return (AIC31_data.uint);" e5 z0 q- c( G# w
}
$ K% q! L8 m: X: K
1 R7 g) ]& b. w) w
分享到:  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-11-21 08:05 , Processed in 0.037609 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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