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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" Y+ S7 F: O( {1 K% c/ |$ C# p
main文件:# Q2 f6 F2 ^- R# c) x
interrupt void interrupt4(void)    B9 {, H' @, O4 J, a6 U
{1 @! [2 c) n) y0 s/ D* o1 `* H
  Uint32 sample;
5 k/ j$ j7 I4 [: B- T8 c4 U- A1 q- K8 @6 E. h, ^
  sample = input_sample(); // read L + R samples from ADC
  d  r/ A2 j5 ]* I  output_sample(sample);   // write L + R samples to DAC " A1 @* p: U- Y- i% J0 n( C2 d: t
  return;
; y, H0 F6 z. o}. h6 q2 x6 ^1 a6 E" V
- n( g5 [$ ?& o8 d2 ^9 F
int main( void )
3 l) A$ ^8 i$ E8 |) q5 i{
5 L# Z( d* M: v; B. Z
6 M$ \2 [6 }) A! f7 a    /* Initialize BSL */$ |# M, N& T* L. k9 O, l. t
    EVMC6747_init( );0 f5 i% x$ p) P7 H
        /* Call evmc6747_intr function */
9 P% m3 c# ]/ W2 D' m* l    aic3106_init( );
8 K( g  z8 I* [: m9 i7 C        while(1);
5 s8 t: Q% r6 e! _0 \}
( T- S7 V( v7 S2 ?
8 h/ P6 u: B7 k/ ~  A
+ @2 n# N; w0 A- b: i; C1 I! I8 c' [* }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 T! I" m7 m- L/ k: e
/* Initialize MCASP1 */
) n. ~( Z; u" h$ D1 ]( l    mcasp = &MCASP_MODULE_1;4 J8 y* k8 J( t, j- h- J
    mcasp->regs->GBLCTL  = 0;       // Reset4 Z8 h% d6 e, g4 K
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 b" i5 y/ o- z% V: j8 z1 {    mcasp->regs->XGBLCTL = 0;       // Reset TX  q& ~# G8 \9 U$ }6 h7 e5 ~3 u" `
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 l3 h! C  c3 v5 O) e2 [. K   // configure McASP0 receive registers' R( L3 P" K" j4 N
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ E3 S% f5 ]- I1 I# M    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" f" Q# M& o2 N
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; P2 k# s7 W2 V$ V* o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ B% ?9 I8 G7 B; u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' V# N' A: V( `" A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% d, Q' ]' a: v, F8 _( p
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& @7 U7 C1 G/ P3 }# @3 ^! R* H4 h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: f3 |& G2 K. {1 p
0 A0 K0 d, m9 i& L$ @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 z3 f& Z; `+ z# [/ ^0 q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 Y( ~# V( C( W2 y; d! N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 m* ?( c( u6 O5 ]0 q* A    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: l5 L. D, \. u( Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 X7 H/ b" ^, b$ H) ]
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  E5 T  P$ d: J4 u2 G
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; @9 e; {. m% P# k0 l% f& E
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) ^( |$ ?9 o$ M. v* }$ {$ U2 s" f
, o% p% L3 \8 p; \. y7 N2 b/ o) ^    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 D" v6 z/ }; F8 |- J    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  q0 g  g$ _3 [9 H$ d2 b    mcasp->regs->PFUNC      = 0;          // All MCASPs
* A# P( k4 ^; O4 t& A0 F" N: c    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' [2 c4 I# B9 z2 h
, y6 X8 @. ?3 a5 o7 k    mcasp->regs->DITCTL     = 0x00000000; // Not used/ t* Y3 n8 k/ f6 E4 V0 o0 @8 r2 W
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 Q) g+ @1 @0 ?. y& W    mcasp->regs->AMUTE      = 0x00000000; // Not used& [9 I6 k0 y$ V3 r( L- y" Z
$ Z, d0 {  f% ^" i2 {$ t
/* Starting sections of the McASP*/
: J7 S9 [5 A* ^( M& }% {# B2 J    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# G3 e9 o$ f) r' |; v+ N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. F6 [% p4 x( W! F- }( g7 A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" Z2 d% i+ D, t& D& }7 B8 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 o5 ~1 d7 R2 u+ D
) P) O+ w: H( F, o# m8 ^) Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / G, D( K, X2 F- C! @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( n: S' X7 r" F% p' u    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 x1 j  Z1 C' s: C( C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! Z# ~! j# h* A

) C' W+ }' `& v$ Q4 m9 t) k    mcasp->regs->XSTAT = 0x0000ffff; : R, D* q4 T- p5 q0 r1 _! I+ Y
    mcasp->regs->RSTAT = 0x0000ffff; & ^2 `$ q1 M, v6 a

' b/ E5 [% ^2 d) a0 ], z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 B. n% e  E) G2 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; z4 [6 A. H+ Z+ U! J8 T; T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 a: P+ T* j2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  ~) D" `0 N4 j! d

1 J/ w. ^! `* i, u" B. n0 q    /* Write a 0, so that no underrun occurs after releasing the state machine */6 B* T1 b1 C7 g: S/ C( w, R
    mcasp->regs->XBUF5 = 0;
- B& p/ s: _  ]/ R# `6 c    mcasp->regs->RBUF0 = 0;
: o7 F) x2 M- K# s8 _9 k) X9 R
5 r3 @5 W1 h) H# `, ^* A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 C$ F. l# i% a6 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: v8 x) `; x, `! I
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 F. H! ?' e9 q- p) A- x, N6 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  C$ C% M3 Q+ O0 v6 n% b0 y0 V
4 p8 d3 \+ D0 y) `0 Y* N) @( q0 o% p) t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ e% _! U) E4 _. |& b7 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" Z- ~" _6 q) k- q" J; x1 s
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" n( d' {3 O9 c) y2 |6 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 H) @3 Z6 M$ x1 x4 G5 |* V. }' |) L8 H' C% e; a" E
    CSR = 0x0000;: R. D8 n. {- X* d9 Z
    INTC_INTMUX1 = 0x3d;
$ c: F* K; G0 k3 @& ]0 E: O4 |    ISTP = (unsigned int)vectors;' ^# L& U  p' M# [) D; F
    ICR = 0xFFF0;  
5 ^* K; y" [# p" G    IER |= 0x12;  ; U2 n0 ]/ R, }/ P8 E
    CSR |= 0x01;  + Q2 o! S" Q5 ?- ^6 d% M# [

$ X3 j) S0 o+ T/ |+ E. f
% Q4 b7 J" Y# d; Y
9 g4 Q. I1 q: E还有就是两个输入输出函数:" o4 Z" L2 [& S. m* H
void output_sample(Int32 out_data)7 i! w* g" B5 P8 L( ~( b% I
{
: I# M- F  e% Z+ w  AIC31_data.uint = out_data;  " [2 ^7 X% C6 I6 I1 {) N
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! [# {: y. p. K! O) v}
. M2 \* Q9 ~$ j' [+ m0 O3 d) d, h  L- r4 G
3 U5 m" x& `4 f4 s. m# Q! T8 TInt32 input_sample(void)( W" j. ?: H/ u  z2 x
{    i% |4 L* y0 j( H- @
  AIC31_data.uint = MCASP1_RBUF0_32BIT;- G$ d2 U5 M- @! J/ {7 O
  return (AIC31_data.uint);) m3 u! y/ x# f3 @" m- d
}$ p3 l6 `4 D, E% P0 Y2 A! }; m
% y' G4 E# W) ?! e2 y$ a- [
分享到:  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-19 03:47 , Processed in 0.046832 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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