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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 w7 k! q7 a0 w' _main文件:4 W, s% S4 Z) `8 M# c0 q
interrupt void interrupt4(void)  7 ]1 w1 R, ]4 ]: A
{
1 {' v, x& w: P# u4 }4 d# ~  Uint32 sample;
% w  `, J  y8 p) [# c2 A5 Q
7 e# W* t+ s! n+ L0 i- L% q1 a  sample = input_sample(); // read L + R samples from ADC9 V; {% t% N1 \+ g1 `
  output_sample(sample);   // write L + R samples to DAC
5 J- e4 c1 q3 I8 B$ ^2 h# X  return;
- L5 b8 [" P  U  R) H3 J}
4 R& Z3 K# O3 ~9 x  [2 n/ [+ W! |, {; {
int main( void )' C% i& {. n, v( [2 F
{+ j$ d' o: i* {) N/ [- s6 r) H
0 B- \" [- `: F% w/ `' }( k3 W
    /* Initialize BSL */
# n# I' f2 ^1 ]) o$ [    EVMC6747_init( );) h6 P- G; _) }8 G8 i
        /* Call evmc6747_intr function */7 h' B! {5 }9 E( |- W
    aic3106_init( );
" F+ h- y; |6 r5 N5 E7 n1 `, r6 o        while(1);
8 C# v+ ]/ O& N, Q5 z- V}
1 h. l1 D; S$ |9 l( [( S& P: \7 g/ H: I2 ~; A+ u+ J

2 d  x' Y$ x& X- {1 J: z7 H1 Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 T2 {8 O- _; [2 Z- K1 j4 n/* Initialize MCASP1 */! B0 K1 k* S! b. Y! e) X& `+ `
    mcasp = &MCASP_MODULE_1;6 m1 ?4 v" f7 H/ N! j+ I5 e% n3 ]
    mcasp->regs->GBLCTL  = 0;       // Reset; S/ G7 E* p5 ?& J
    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 _& d9 H6 z  W# Q! `& S    mcasp->regs->XGBLCTL = 0;       // Reset TX2 T, a0 u3 g9 K; h4 a) K5 ?
    mcasp->regs->PWRDEMU = 1;       // Free-running" N: A2 v- P. @1 u. q6 l' J$ A6 Z1 \+ _
   // configure McASP0 receive registers
1 i* H9 `' j6 t: b8 S0 q! [; L    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 S: o$ Y( @$ }6 d6 T    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 s' E/ R  e. m7 ]    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% m- f3 B9 P3 ^& _( `    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, k' q: v/ c- R! p7 s( O; r    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: I5 k$ x: j( t" D* N1 y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 T, f7 }1 ?; Z( e! X, G  G    mcasp->regs->RINTCTL    = 0x00000000; // Not used! `# V' f' B7 t# \, A) g
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: U1 e& g! q& x% }  _! [

: d7 x/ t# x, M. h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& o3 ], y6 B5 B; {! ^& u    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 }; N& ?& w7 X! n3 N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ _6 d; h+ }3 E" z$ }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ i* M, z) R$ t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 x, v! ^, ?" Z3 s) b" C% }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  \3 A. U  A2 v; D( \- k    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ K) P9 M) p; q: @3 F$ J& @
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 d8 J, F1 V. l- b

" b% n5 s2 D' F% Y1 O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( X$ q9 n" M$ V- _    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 e; x* J  u( A. u1 L  P
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 a# x5 d4 A' d" [8 F& Q& H9 h    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  X& C( w' X9 N9 S* c. v' _' e

' |1 E9 G/ {, m1 R4 ^# q; x    mcasp->regs->DITCTL     = 0x00000000; // Not used) M. ]6 M& f8 i* m2 G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 N% w6 D  o$ W1 D1 r/ J4 f  B
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 b3 h7 @* W" K
% J& _9 j$ k, S9 d
/* Starting sections of the McASP*/# E6 a/ z2 J6 A+ |# Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  U: Q% V- T( E- o/ R! G$ D/ b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# x/ D# B9 u" v    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 A1 k2 k0 A1 T' y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 W  _3 o$ s: @. i; J. P7 z4 y" N, I' D* B& m0 T" c- I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % H, T; f9 i. N$ V! ]# |7 d! ~! D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 g& T5 t  Q; }! q2 w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; D* H. o. v+ I6 a5 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  {! R  N% C& n7 B! V0 S
. S$ q/ l5 a9 M& P, U    mcasp->regs->XSTAT = 0x0000ffff; / u/ a/ s2 x4 c# g& |/ H8 \
    mcasp->regs->RSTAT = 0x0000ffff; * Q0 w8 Z6 C8 T1 j+ o
( |* D8 P, G5 A- b6 l2 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  Z. y5 H% j% X8 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( U) ]3 R$ m7 N6 F3 L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 h; e# q; ^- M6 V6 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* V# j8 J2 _# U; X; I- F* h3 A0 J! T& A: j1 J" o
    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ U4 I9 ?3 k6 o+ c0 K% z    mcasp->regs->XBUF5 = 0;$ r/ g- q/ R0 s9 L& o, ]5 J9 x
    mcasp->regs->RBUF0 = 0;. ^' x) r% s$ h& W8 J  ]
3 U7 @. M0 T# [) _$ j* {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 |! G  q; e) R3 I3 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 v  r- [( {. U$ ?9 ?5 e1 z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / |* g; T$ Y" r' b9 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 i6 y5 E. i( p; }3 H' \, M
" I6 Q7 R0 S0 x0 [. c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 V6 z- E9 @: }4 R2 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  m2 J2 \' k- j9 |( _    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   A! \' Z! T2 w' f- R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 S2 D  M( A8 w! g& l+ C% p& p6 \3 I
' f" w. r+ Q& `. m5 Z: B- s4 S* |    CSR = 0x0000;+ ~6 w6 J3 M8 @& d1 h
    INTC_INTMUX1 = 0x3d;
" c$ O  y- o" R, I    ISTP = (unsigned int)vectors;" f# }( [2 G" X% Z7 y; b, [
    ICR = 0xFFF0;  ; H; Z$ [4 T  ^
    IER |= 0x12;  8 F9 K4 y; ?% Q
    CSR |= 0x01;    E9 i0 a( T. m; n5 F
6 N4 [  @4 R# \; d$ p8 d

3 ?# y0 e7 ]. O& [$ |/ m" F% ]1 ^& I$ P, H4 G1 S3 V' f( |# X0 V
还有就是两个输入输出函数:
# L8 A2 N5 Q2 m) @  a4 n2 d2 @void output_sample(Int32 out_data)' A  ]$ q8 ~, r) }3 f
{
3 a4 u. ?$ J4 Q8 A% K/ _0 b  AIC31_data.uint = out_data;  ' w* m2 I; {. C9 y7 _; o
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) [* o  c! V6 @! r}0 m7 b: \/ [1 {0 ^2 g+ I) P
( C5 }; C, W) {2 L+ q
Int32 input_sample(void)# y8 d3 D- M4 O$ k
{  
+ \: }0 t' L) B- H2 `  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& ~" \9 v9 X1 d) [5 L  return (AIC31_data.uint);# d" }* R% g5 {* W; y
}: f) C! l# [. a) p+ h

1 X/ _0 r* j' V1 }
分享到:  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-1-15 10:54 , Processed in 0.039787 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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