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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 }& A- u7 j0 z$ _/ I: T+ Rmain文件:+ E& G/ p4 E9 y/ W# [
interrupt void interrupt4(void)    b' J$ L( \* _3 [/ c3 w
{3 S! [' z5 U. p) x$ f
  Uint32 sample;. W* d% b( }: B. E$ J% Y# W- M) c

5 k* [7 n$ S8 Q& l; D  r! P0 o4 g  sample = input_sample(); // read L + R samples from ADC+ n0 r2 ^/ c, Z9 z
  output_sample(sample);   // write L + R samples to DAC
1 k& K/ G* C+ B  return;. z/ P; j3 c: U( l. }+ T
}
# ?3 U5 o, R. S( ]9 G
( y, }: O: |+ h. p. Gint main( void )6 {. Z# A- ?" E9 |$ v
{# c6 v; [' I/ W2 [7 o, n3 T

6 B% g: W% f8 I0 f$ R2 v    /* Initialize BSL */
. L* K) \& a1 h6 F" y7 U6 G    EVMC6747_init( );, }/ v1 C1 l9 l7 L! b9 T8 U2 ~1 E; l
        /* Call evmc6747_intr function */# F* K& x, D, A
    aic3106_init( );
, p, O3 v, d  D* @        while(1);
; g5 `3 q# _9 k6 e0 B4 r# U}
: I, _( h. q0 \8 I1 [& j, i$ r: O& N2 j" P) D9 F) n; y3 Y
) g( P% P% p1 q  U- L/ N
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 @' s$ C; \, g3 K* [6 h5 m/* Initialize MCASP1 */
2 T, i6 b) [" Z! H3 X$ o    mcasp = &MCASP_MODULE_1;1 c. V! S+ ?" X. C% W( k
    mcasp->regs->GBLCTL  = 0;       // Reset2 A, J7 [, u* T" M! L% z
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 c8 z1 d% j2 v' o# V- X
    mcasp->regs->XGBLCTL = 0;       // Reset TX  c) R, H( q  Z/ k9 v$ `
    mcasp->regs->PWRDEMU = 1;       // Free-running5 J; x+ s" }% }6 G8 F; l
   // configure McASP0 receive registers9 |$ s$ m6 y/ ]# _. B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 `) P: b! M" U5 ]4 X
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 [$ R/ ~) r$ e$ o9 w" l# X! H* p
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# h/ W, s1 C% i, h5 ]- D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 E. h! n7 o/ Q  _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 w% k2 f( G' r; u& O# p
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ P/ Z; L. L1 S1 t2 c9 N& Q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) }/ h& g* b( N$ z% I) ]$ u3 ]+ u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 B) l" Q- e4 ^, T2 T
: g& M, {2 Q; U9 ?9 `+ g, P    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 k3 G2 {# g6 r9 Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 v2 G8 G9 i8 O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 r) D9 ?# ^3 S! `/ O( s+ a
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# @+ L' w  V. A
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 w7 k) @; G) U3 ]    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, z9 a2 o' S- x- d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 j- }( p8 F% b5 O1 i" @
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 |8 V  i, q% C3 D

: T" R4 u( w/ ]  t( E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  Y# o9 L; |$ t# f# [+ h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 [" g* {6 Z: R    mcasp->regs->PFUNC      = 0;          // All MCASPs
' K7 N" m- J  q6 z  {    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ {, M5 n- Y4 q- Q3 b/ R, O# S" e: K" q
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 h/ |8 ]2 t5 c3 ~0 k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ p  @3 E$ R' b2 W4 J    mcasp->regs->AMUTE      = 0x00000000; // Not used3 Z% W" I) |0 W
. u  t( ~6 e  V1 |) T. u; H. c
/* Starting sections of the McASP*/+ d7 e. \3 |9 [2 d1 Q, S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) |, r" _5 ^1 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : `; f2 s: @% h1 U6 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 k$ @% S; }- y/ U0 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ M1 [2 I- i$ K" u$ v5 v) a& |

7 {) `) I) b/ J. C9 T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. y2 P% y  X1 _' q" q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 d8 \/ u9 j4 P' |8 N    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 w/ Z2 l4 e1 z( M- _+ I0 _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 }, V# d2 P! c$ p) F9 S8 e- `- c" _
    mcasp->regs->XSTAT = 0x0000ffff;
# H3 C  ?' p. B6 j  W    mcasp->regs->RSTAT = 0x0000ffff; ) ?+ q; R2 n% c

+ @4 J" N* e! D+ A: [    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 L: r+ q  T1 `4 |2 _; {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" S+ w6 r5 {9 [% _" u1 }+ ^# b
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* z! Y  @: b/ z* `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. t, V, u/ O0 T1 \
$ y4 G: x) E9 R% x' {% A
    /* Write a 0, so that no underrun occurs after releasing the state machine */7 X/ w$ ^0 k9 b! M1 d( D# g: |
    mcasp->regs->XBUF5 = 0;+ g/ J# g+ k5 p
    mcasp->regs->RBUF0 = 0;
9 ~6 B) m0 S% `) t' \) n, u4 f" j! d
+ a* \0 |9 r) [8 l( I+ M1 H5 @/ p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 h+ ~8 t% q2 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 ~. [+ j7 Z. ^; G6 Q. @
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 n# V& v0 v6 y" h* p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. {: g" p& ]6 o5 G

/ A. o2 l8 l0 ?' u' e) S% t# U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 F5 P- S5 K+ _8 p6 N4 Z" s, a9 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- ^9 l; x2 N( J( M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" ]" e5 b" V0 G% ^; h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 Q; [% C9 ?- S2 D# }
1 i8 R0 p, N9 p, C  `. B
    CSR = 0x0000;
, S1 y1 M/ ~/ g' k* }: {    INTC_INTMUX1 = 0x3d;
9 w5 G$ r( `. ?. \8 [) R    ISTP = (unsigned int)vectors;
; e7 t+ P  C! `+ z8 ]9 Q" ~    ICR = 0xFFF0;  % h& ^; w! R. ?3 g) Y4 n
    IER |= 0x12;  # j6 @7 a7 S( J( L% v9 [2 v
    CSR |= 0x01;  , b! X- N$ G2 M; c1 z
* b( ^9 J& m& P) z; @

4 L) O: Z# Q. U4 {- _
1 z# |: A/ ~; s+ ~0 o. ]还有就是两个输入输出函数:
  V! I& \0 Y- y5 F/ Uvoid output_sample(Int32 out_data)
; c, O) V3 i8 J5 [2 D{3 z; Y# t5 j+ h8 Y) v% n
  AIC31_data.uint = out_data;  
3 j: h8 g) c9 A) U  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" A, m5 k8 ?( K* ^& X9 {}
5 ?4 L/ V( o' X7 e  x$ e. P9 n) [5 J$ w
Int32 input_sample(void)3 _6 Q( g% r2 W3 T& g
{  
1 x9 O5 S+ s2 a8 R3 S5 R  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% d3 W$ P# z& e. x' C  `  return (AIC31_data.uint);
, V8 {, |& ]8 r0 B7 a& J7 D; o}: G$ s, Z; W. ~0 c, T& V
" z; y/ P" T3 ~* r( u& `
分享到:  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-2-22 06:17 , Processed in 0.046680 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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