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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 g5 H. h2 L5 t$ T! y) o+ w2 C( |main文件:
! o& w: q2 d; x/ k+ qinterrupt void interrupt4(void)  
0 n6 w& z  v: D4 O{2 z" k! z. h. }  c# d
  Uint32 sample;  }5 ]5 i  E( [8 J$ s% E# b; E8 }

  L  b$ f8 T: x0 ^  sample = input_sample(); // read L + R samples from ADC
8 [) p% B! d8 l9 q* X& |  output_sample(sample);   // write L + R samples to DAC
1 [' U) s+ d3 G+ d4 A4 [9 P' h5 h  return;
3 P0 w0 G) |) q! G; U}
1 W8 l: m: U7 w3 {2 J# Q+ W% {
* K1 m7 q+ q$ M: j1 vint main( void )
: V3 Y3 L" j$ w# m; Z6 ~{3 {0 n1 h- t& _- f5 B% E, o- B

6 L3 r9 a6 N" m9 D6 l7 l, D    /* Initialize BSL */: q0 e  V: c, f2 g0 c% e0 v7 P
    EVMC6747_init( );* }! N7 `4 @) o3 r$ Y# e
        /* Call evmc6747_intr function */4 Z% V; q& f  a2 d8 E
    aic3106_init( );
: \& Q4 q+ s# l+ o; O5 {        while(1);
. G# D$ N" P4 E) a- R' `}0 i+ h  {6 W( [8 }; S
  v& b+ b  @/ z7 ]/ N
" B5 D8 s  C7 _0 z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 Y: V3 Q" s% S) K8 _
/* Initialize MCASP1 */
/ Z3 G! S8 U3 [) X    mcasp = &MCASP_MODULE_1;1 c6 R  t3 D5 a  |$ J
    mcasp->regs->GBLCTL  = 0;       // Reset
  O  a. }5 [, ~- Y& K+ b    mcasp->regs->RGBLCTL = 0;       // Reset RX. R3 H+ ~/ @+ ~+ W
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- m/ j+ j7 L# _/ Z% f2 v# f6 S    mcasp->regs->PWRDEMU = 1;       // Free-running. q. I7 I1 E( Q  q" ]5 `
   // configure McASP0 receive registers  r5 s4 P. W- }4 [' K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 b/ B" c5 W2 S+ |/ v% K6 j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& Q" E* v3 J6 F: N# f1 j, y3 q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! A7 N, Q- S* q  Q5 H
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- w# A) b# A! J& F% @3 {+ N% F
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 @; i4 u1 O% g$ c. u2 \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- {% ^! f( }# w9 E, Q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ W* |! l! a$ d: y( D. n
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 P9 L6 w' T5 H1 }
' N2 P/ ~/ [$ f! g5 t
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# j! i% \9 g) T/ l& S& A  ^! m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- n4 L  a5 m& X% t) B, S: I
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- V, l0 ]- L" z' J6 E) ?- _* ]    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* w% ?% [- O0 N+ ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 f$ d( k. I- P, I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 ^4 J% ]; M  L* R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 }0 h2 ?! Q0 s, ^& d7 Z8 g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  B9 n: X3 V1 c+ N; T8 \. }# z
2 @+ @7 ?. C* L# F
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 m1 M6 }+ z$ m    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. m9 _8 C( Q3 D: V1 B    mcasp->regs->PFUNC      = 0;          // All MCASPs$ h4 L3 p! i0 G: e8 K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 _) o9 M' n6 Z% [9 M, \% C: z; E( ?
& E% ], h; o6 n; M" a" E; g    mcasp->regs->DITCTL     = 0x00000000; // Not used
* t" R: c, C. \5 K5 c    mcasp->regs->DLBCTL     = 0x00000000; // Not used; |/ [$ B2 ^6 U0 J: G* ]8 \
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- M1 v/ U& N* Z. z8 n2 }! Z& u% }2 T/ P5 C: s8 C- C8 w
/* Starting sections of the McASP*/
5 s/ X4 f) w; k% D, F8 Y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 ?  `1 O. v5 K  R7 `# c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# ?" L0 r4 _6 y/ K( l! N" B    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( A- P+ E( {0 N4 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 J/ g7 S% {: [  b6 x

9 P3 w$ T: O$ u3 s0 X; e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 A  h% a: N2 i' _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( g) Z+ W! q1 b: @; f1 o
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 F6 U" y' X& [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 K' e$ A/ E( {" D2 c4 T! K* N1 |0 {& L: Z. m. ]
    mcasp->regs->XSTAT = 0x0000ffff; / S$ E1 p' \+ q( o9 Z. \
    mcasp->regs->RSTAT = 0x0000ffff;
0 c8 O* Y( z2 h1 u
% d" h$ Q2 l! @    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# p/ m* u) y3 y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 N# F) [! N1 C  m; h* s- V
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 d, L7 C2 V% M9 d: J. n  ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* q# O% T/ v1 h8 z/ M
! D* L6 e$ M; O# t) |- t2 m    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 I, E/ F3 W/ y    mcasp->regs->XBUF5 = 0;( n* d9 X0 ^: A) J3 a3 X  ]
    mcasp->regs->RBUF0 = 0;/ u$ ?! z' \% ?) D- h. W  p
! P2 S0 K& K  C. @
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 @8 Z( o/ O! g3 [: e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 g0 D0 \, F# M- W4 k, p: F1 q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; O3 k5 p! p3 R6 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 g6 K4 |- s4 M$ X) S, g% F" ~+ B- ?3 ^7 |7 D. I
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % R1 E- R; A9 L) E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) s, O& y& t, ]# M3 E- r/ A    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 S+ ?' Z/ i( B! K" W8 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 Z) M" L: E, T
' |7 g/ E9 V8 J: y* w  f  F. j
    CSR = 0x0000;! j5 w) ?+ q& j' m7 c/ `
    INTC_INTMUX1 = 0x3d;
" ^! g) ?2 A- R6 b: ~. [# j    ISTP = (unsigned int)vectors;& o& }6 K% o" p* o; z1 z6 I  U1 P$ q
    ICR = 0xFFF0;  ' `: x8 f0 C. z  ?  P
    IER |= 0x12;  - x4 y& r  D# q7 G) n# C
    CSR |= 0x01;  7 p! k( g3 H0 C$ F; S
, d4 d) b* n! C) [$ u+ l0 }$ i
$ c7 \! G3 A" |2 p$ Z

- E. R: w& G1 t还有就是两个输入输出函数:! k2 v$ Y9 ]# p
void output_sample(Int32 out_data)
: w2 ~0 D) }; l( I: _" V  ^{; e' b; q' f( O5 p) D
  AIC31_data.uint = out_data;  
! `  @6 g1 m5 b1 w& P  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 R# W1 x1 y# ?- r# N2 M" Y' ~
}+ V' Z0 x$ q) A7 V

3 V+ X1 c7 ?1 p+ f$ v$ X# PInt32 input_sample(void)
# m( D: x& z0 k/ N: Z0 o7 ]{  ; j! m5 }2 d. s" A
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. S0 j9 ^1 r$ ?. `& S, ^; n2 S  return (AIC31_data.uint);
8 r3 j& T$ k' r8 o# C& D% \, h% Y}
5 a) [0 c: }+ _/ O
* M8 M' Z: [( ^+ X6 `
分享到:  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-4-3 19:43 , Processed in 0.043630 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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