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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; j/ {. r& m7 gmain文件:# ?; B, i  l' B  p
interrupt void interrupt4(void)  
. v" d: {, `% A' A& }& Y{& V/ {, f' R1 S9 q) ?& J% ]
  Uint32 sample;' G, S6 _! W  c( @& X

% }; f+ s  N1 ?1 d1 B# A  sample = input_sample(); // read L + R samples from ADC
7 d$ V' L0 `" ~. ]. P. z  output_sample(sample);   // write L + R samples to DAC
4 V* M+ q8 t1 G6 ?1 ?- C: B" r. b  return;2 L/ G1 m; f2 z/ }
}
6 d6 ?' N* J; V* P; o8 b% V% C) A, p* ^5 U' z9 Y) L
int main( void )
  y, i3 i: g1 k" I/ {. P3 G$ H{4 `+ E" ?. ?5 K6 m. o

/ ]; X/ k  H: m2 o  k! _; E    /* Initialize BSL *// }: j5 b, g4 ?) K! W* k
    EVMC6747_init( );0 j* ^  E! R' L3 S6 s
        /* Call evmc6747_intr function */# o% O6 e% A/ Z0 }" V, h
    aic3106_init( );1 T: Y) `; d- Z+ L3 |
        while(1);( i1 j2 H; c" F
}
% ^* ]6 s; j6 \$ P$ [) Y3 e$ \5 S/ ~& b

) L7 {$ A3 c" waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 M3 Q2 q; P2 g+ F7 X3 u/* Initialize MCASP1 */. ]0 D/ p9 A" A8 ~2 `
    mcasp = &MCASP_MODULE_1;* e3 q( k3 m1 {" K- p& h$ ?9 h) u
    mcasp->regs->GBLCTL  = 0;       // Reset. w% ~) ~' ?4 c2 Q6 Y! V" f6 \
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 ~/ ^' t1 W* Q    mcasp->regs->XGBLCTL = 0;       // Reset TX
* n, t, D  Q& c9 |. [' c4 R# }    mcasp->regs->PWRDEMU = 1;       // Free-running
/ O4 d8 \3 N4 ]* R& x/ L   // configure McASP0 receive registers2 P1 c5 ~& M5 V1 m7 M( E5 W6 ^! I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% `6 M7 [8 G: x+ {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- g; R" `, W" Z
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 V+ f& c. J6 I/ s( E7 V6 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ N2 f. Q4 `2 W$ h% f    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. [6 X+ H, N% Q. ~5 {: I, ?( [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ ~: Y1 _& g/ n- r& J. Y; R/ C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 z  {9 }- y) O3 J% e8 S" W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! T% v- w. U7 W! Y6 V1 {- b
8 ]8 y; p4 }% O! D# G; R
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ w/ T. y! C8 m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 i' I$ y. r9 C7 t7 i4 Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! E4 `; n8 ~# L" J# H$ E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; R( c9 c1 c3 Y$ r& U$ g
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' p' n/ a2 `- |! D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ A( r$ @+ ?; A* I
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 w6 ]& H% N, [2 _
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 l) l, q4 `* }) J
1 L. }+ e0 J: ]
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 T* D2 b5 J3 c% d: N& _7 U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- _  [  _1 }% N6 o- w/ d- ]# k5 h
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& {( |# K( I- j0 r; F    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, v* r4 m5 P+ }# W) c) z1 S, J) y6 H
    mcasp->regs->DITCTL     = 0x00000000; // Not used: t  O( o  V, f9 F' a3 g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ [) _: d0 @4 Y. C
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ z5 ], P, [5 J% N/ R' Q/ Y+ P& d

  z! I, h+ Q9 Q4 O/* Starting sections of the McASP*/8 C' m# f9 {# w2 s9 T; g
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! J2 p5 X: o9 [1 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ X) o- [8 o2 L    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 ]5 y9 P2 h) o3 G- A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  A4 F# k8 S, t. \7 g8 f1 T

1 P& N3 F! f) v* z; I  C* [$ u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 F. ], {4 t8 A8 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% \/ y$ e2 }6 _* S/ Q" A    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ j) y: w% E8 I6 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 C: Q% R7 e. B) B+ G# w7 W, P
: K- H$ W3 {2 Y1 W7 h
    mcasp->regs->XSTAT = 0x0000ffff;
  q, ^3 X3 @. V* E    mcasp->regs->RSTAT = 0x0000ffff;
/ W' Y# H  |1 P9 R- c. U2 A0 s9 O2 I, l6 V
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 s% k- \1 s. m. m3 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) x9 |  N0 d1 V7 X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 d9 L3 o# k  x! e3 P: ?; x- _7 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# I, ]9 l4 C: p- L" V& |0 Y4 n
# y; S0 V( d1 B3 W    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ j6 m5 ^# E/ p8 X; v: ^    mcasp->regs->XBUF5 = 0;
4 T' m, d- A1 k3 H, J3 T, c7 t    mcasp->regs->RBUF0 = 0;3 Q+ @. I9 ^2 Y8 S+ P* `3 k, {4 o
2 a* d" C- {1 I: Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * L5 I8 W- H( p1 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ _( }8 t" O% z- J& w# J
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 d4 Q& f& v3 w$ ^6 I+ d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) O% _0 `1 k& m3 x8 n6 W

- N+ J: {. H: U( z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 g9 O- d7 M8 m" U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, y. {* e' Z! z) i- A4 S2 V    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! D8 w. }3 m5 Q! [! W7 J" o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' S: x3 f  Y3 h0 {
4 V* M3 U! ?) k( y    CSR = 0x0000;6 _: p' q* \/ [8 B1 z% n
    INTC_INTMUX1 = 0x3d;
. U! N1 \- J" [, f9 c    ISTP = (unsigned int)vectors;0 H7 C9 K3 N8 m2 O7 S8 q, m
    ICR = 0xFFF0;  & Y' A/ o# B+ ]
    IER |= 0x12;  ! l! R8 o  D  D& n& Z3 z
    CSR |= 0x01;  
6 i2 z4 U+ U1 E0 Z7 |+ s2 I) Z9 x  S9 f1 R8 o

/ k1 j) q* E8 \& l4 W8 g; [4 C0 \4 R
还有就是两个输入输出函数:
1 v5 j/ ~$ f' cvoid output_sample(Int32 out_data)
3 d* g; k( M, m{7 F2 a5 W5 e9 J
  AIC31_data.uint = out_data;  2 g% o& A. P6 s3 ^6 k/ ?$ c
  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 S/ J' ~  J$ |& i) o
}' d2 c" X, R. x3 k- H

9 i( O5 `$ J9 W  T1 C- ^Int32 input_sample(void)
' a' E! ~" w4 f, ~2 b{  / V8 d1 f9 _) u6 P& _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* p, U" n8 j6 M) c1 l7 n, I  return (AIC31_data.uint);' p: M' o' _1 Q* y0 D
}. {; K% ?2 a6 t5 m8 a# o8 [$ d. ^, `, S

3 q. o$ w0 A4 @) J/ _# L
分享到:  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-10 03:21 , Processed in 0.038120 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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