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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' H2 M% B# F* d& Vmain文件:
5 J- K, M4 @6 F* Finterrupt void interrupt4(void)  7 c! G0 p; a* ]  i9 q& }
{
$ L9 m( o6 i- c7 y- i: ]  Uint32 sample;
3 v/ |0 N% q( G. n
& T5 n) }' w1 Q* q/ V1 N/ |2 |  sample = input_sample(); // read L + R samples from ADC
# Z# w- z7 @8 N, `5 }' u8 S  output_sample(sample);   // write L + R samples to DAC
( B% S- k2 |% l* Z, n  return;
) R) A! [- s3 [}4 c( J9 L5 e- R5 C2 e# c

8 k* w1 n7 G' U+ O* l0 V: rint main( void )+ e# ^3 X" X% R1 G  v$ Q0 I, O
{
6 O* r$ ]1 g5 c: L0 v% p, f4 d3 b* C$ ^8 ~. e# e
    /* Initialize BSL */
; K6 U9 M/ G# ~2 [4 z( i- v9 g; P    EVMC6747_init( );" d5 i% b& a7 ?2 e2 J7 V: \& g
        /* Call evmc6747_intr function */
+ y* j  ~, Y) S6 X# l+ L" c    aic3106_init( );1 n; |( Q# G' Y- D4 X" [
        while(1);
9 K; Y+ M, @7 p! O}
+ P: s8 _" ^( N" j# D" [! \8 Z; X, H5 R% F5 _4 B) I  x

& r, [5 g* Q* {4 g8 t) z$ s3 C: Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( ?& I( A/ ^% \% A/* Initialize MCASP1 */) l: a# J# X6 m' s$ n1 e$ n' I
    mcasp = &MCASP_MODULE_1;+ M; s- a; j5 T* Y
    mcasp->regs->GBLCTL  = 0;       // Reset
+ _4 @; {! i$ b9 U( L3 x    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 w: ~5 V7 d: P8 Z    mcasp->regs->XGBLCTL = 0;       // Reset TX& K# O7 \6 Q$ e  T1 G9 [8 G' F- ~
    mcasp->regs->PWRDEMU = 1;       // Free-running
* m/ ~% r& P+ w. _" z6 i, L; t1 f- `   // configure McASP0 receive registers: Q$ R. w3 l- f. K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: h8 C/ F4 S: K3 n/ L- u& m    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* v2 W. f, J/ h- ^. S- b
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- F  a' _  f; F$ [/ F
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: k% F; ^: Y+ I/ f    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 o3 d6 j' {  @9 z, X4 u; T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 z2 U9 A3 T) j# X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( l9 q/ u2 }  U4 T! g. T    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* m  ?  }1 N2 y5 ^, M9 B7 E) W! z! w: b, u" t) J1 r0 Q+ H
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; L; {* V6 ^. u1 ~
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! m3 |, i: L7 e! x. U# W2 y/ v$ Q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& V( e1 m8 y$ A7 g
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 M  W/ C3 R0 b+ {, D: b# i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 K8 I0 E, \3 S; F$ V2 c
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, M/ O7 g8 M3 t0 S: B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* I! q; T$ h. x; g' f/ M1 r  i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 l8 A9 n0 C, g$ T7 A; ~+ C
# F) [; G7 C& p5 F- n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 x) z" L0 V) `+ \+ l5 F* L/ n( Q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, Q2 e/ i8 D- _& [' b* c    mcasp->regs->PFUNC      = 0;          // All MCASPs
  A2 u  _3 _; A3 z% `1 F; x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" A( q$ P8 U7 O+ R3 |8 P/ {2 y5 c

/ _6 W1 o0 X' A2 O, S& e: |. Y    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 i; I" ^2 C& e( C    mcasp->regs->DLBCTL     = 0x00000000; // Not used! J. j/ a$ p$ A
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 d3 K! a" m+ v7 e3 Y7 S. ]
6 [& u) C1 N' z$ o( t
/* Starting sections of the McASP*/
2 T/ I0 w0 }3 R; b9 @' I0 m! U    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; A3 M% o: j1 Z; {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ b- r8 A" K' F1 v7 _  U. d4 o: b, d5 t+ r
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 w+ x5 G/ Z( v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- I* [5 r9 {1 T( L* t3 O( \

/ p- x/ @- b* _0 n7 m8 `; d    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   z0 I1 x- J" g9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 M5 W* M; T! O; A0 _  X' ?9 S2 s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' |- i( U9 V/ C6 k  a8 e2 U3 Y& {0 D( k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 A2 _! S; Q3 H9 Z! g( s  q5 O
' S8 F1 L# N7 E( K  \& o3 r    mcasp->regs->XSTAT = 0x0000ffff;
: P% F4 \- d, b    mcasp->regs->RSTAT = 0x0000ffff;
9 i# k9 _6 n& A) A) A
2 o0 I, S5 W" ?( X. U    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. G- o% Y+ b6 t/ S. c' J$ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! J! C! g& u$ z0 I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 I8 Q. v- M) z3 ^" H6 R9 I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 ?& j( t1 v- ]6 b  k- X8 Y/ T1 u/ e
    /* Write a 0, so that no underrun occurs after releasing the state machine */  k- {# @3 @/ M# s) s, R
    mcasp->regs->XBUF5 = 0;
% o- L% }" C: Y' y    mcasp->regs->RBUF0 = 0;
1 G2 p* m7 K( @
# h5 j" v- U! K# \. R/ N    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) E& O1 d, V* E. c4 {* p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 h3 M1 R0 X3 y/ ?' l1 D' d6 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ F& |% J4 a. a' `% x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  T% r6 B9 i4 [/ m: h1 _
: p! z' M' T* M' t+ ^$ _4 c: h
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 s  q. F- p/ n7 E9 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 N" F% P: B, h3 N$ J
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 K8 x, }; Q( r. `, ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' ]* x. j- o& T; c# a- Q3 v+ C
4 v1 L; r8 c; W  C& ^1 r& z7 x  w    CSR = 0x0000;
6 E; e! Z6 R5 Z9 Y" Q& b' {2 p! u    INTC_INTMUX1 = 0x3d;. q2 k9 \7 v! p) N6 m. M
    ISTP = (unsigned int)vectors;6 _6 w* D7 z- ?; O
    ICR = 0xFFF0;  
" m  S6 H# h+ Z2 p* s    IER |= 0x12;  8 [* t7 P7 H) y: [! v: G* P$ e
    CSR |= 0x01;  & w5 k4 W4 X$ T# L: w

% Y/ g2 X* B4 ~7 R5 v# h/ p, W/ A

& W4 \- Y0 u. e9 F4 A还有就是两个输入输出函数:  D+ T7 h- y% I' x3 z! V0 G  X
void output_sample(Int32 out_data): k% I8 }- ]" h+ x$ p2 C7 U
{+ P1 W% w4 O% h
  AIC31_data.uint = out_data;  
" |5 I( h' A, q5 C0 g& s  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. a0 X2 x! D2 P5 \$ W& c) V}6 e3 T( [% M' P6 J
' b% P6 N' M% E4 ?! `3 H
Int32 input_sample(void)( J: j+ {* u5 I2 @
{  
& A- {& ~5 `' u7 k  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% \0 k( q3 h% A" C1 G5 N  return (AIC31_data.uint);
  i) b, w$ K1 }- J$ R7 j5 Z; f}
9 D4 L! Q  d( G# L; L6 ]% P8 S. w8 Z! p; E" F& g3 e6 x3 l  B
分享到:  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-23 18:43 , Processed in 0.042738 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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