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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 r1 h7 h+ r9 h4 x$ Q3 S& n9 B/ j+ J# Vmain文件:" {7 V& x6 L3 A3 d( i; i
interrupt void interrupt4(void)  
; u5 d7 m& O& q2 H  @# k' ?' c{
  o8 S8 D  G- j7 G5 m7 W  Uint32 sample;
7 B- P) V1 I" r  y2 g( U8 |7 N# y6 D- H7 X. J2 u3 i: Z
  sample = input_sample(); // read L + R samples from ADC
0 E5 X  g/ u/ S8 q6 V/ i  output_sample(sample);   // write L + R samples to DAC ' n7 T, |9 K2 ~& ~, Q
  return;( B. C# C' Y: f+ _! e8 S( V& m& r
}
7 P7 q" X- W' z; \. E* h! J& P& h
# I1 S) w2 f5 V  r2 Oint main( void )
! r% p9 O/ o. x/ C  H+ V& [{
5 _+ t; l; a# O0 z! F, l6 M; ^9 Y2 c1 U6 S, H
    /* Initialize BSL */5 P9 D6 Z" C2 k2 u0 T
    EVMC6747_init( );
  F( J* b5 z2 d- O; ?& K) \% N        /* Call evmc6747_intr function */5 X1 O/ a& u1 g5 |# P3 p1 O
    aic3106_init( );) r2 r- s4 _; Q$ K, h
        while(1);& O1 N# Y; K5 z1 ?( D# Y
}
; @' ^& x+ N* c( U6 b/ i  J! m
& a0 _( i  N, s, M* o* c
! W- M* l% g4 q3 G& a) [$ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" N& O3 P) {' _4 k
/* Initialize MCASP1 */9 O, Z4 C" G# _: k" ^& i
    mcasp = &MCASP_MODULE_1;
# T! ~6 G1 Y* k1 u    mcasp->regs->GBLCTL  = 0;       // Reset
1 a% g$ I4 {1 F    mcasp->regs->RGBLCTL = 0;       // Reset RX
( }9 f, E8 Y1 C7 @    mcasp->regs->XGBLCTL = 0;       // Reset TX
& i, m8 ?4 v3 n' I0 W    mcasp->regs->PWRDEMU = 1;       // Free-running
, K* g- g2 f7 C: y, p   // configure McASP0 receive registers
3 D  Q( }& |5 o- Q5 o  r: t7 `% J$ q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) X5 R' {- G5 O% o6 }) v7 t& R$ i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  _! s! D3 q0 r0 W5 D
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 v/ d9 K4 q0 q2 W% H" W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 x# w: N6 b* |6 \! M
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% v& W) z: i5 C# y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! Z2 k, w( F4 T9 \: Q5 a
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 g# T+ ~" y3 L. p# C+ K0 h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 c5 T1 i8 `/ a1 ?$ _7 ]' H5 c6 B
7 R7 ]& ], X0 \    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( ^6 B7 E$ O! G+ b* T) [; `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ W. n5 ^* P& S  x- o/ G& g
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! ~5 S( [( D; ]: N+ ]    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 Y' L8 V; L# X- v, G    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; c& }! n9 @' O2 K! t2 j# a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, @* ?- @" s% k7 j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ n! ]5 y4 X2 i( Y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, k4 q6 I- u4 O: N2 J; E  h" C* M- k1 |3 g8 ~
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: C* {+ J1 W7 @6 C% |    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 W/ m3 i0 O/ {1 C& E% t1 ?
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 O3 D+ }. _+ N- L( L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 o" ~0 }* t. e' M$ B0 d
9 r( `7 J! Z& P% D" v3 c5 h
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) e4 u0 o- i1 G0 y) A    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" N2 [7 Y3 v( t; D. C    mcasp->regs->AMUTE      = 0x00000000; // Not used7 O" c2 L( m. G
5 j! o6 k' Z; r( L0 G/ }
/* Starting sections of the McASP*/4 s- e9 O# K# T. U2 G0 s" Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: H) x" C$ V- s  Q/ Q+ k4 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - C1 i7 F, X2 X) I( q/ c$ k
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " x/ D) m& I# t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 ]9 l" }, a$ O% O
: z" K: H* j8 D( B! m8 k" e- y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ X+ `6 A" I" Q/ h: \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 d# y: T% X( O& O" t2 x    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 A: |* A# q: V3 g& H( U& O7 P6 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; n5 E5 r# y. \" |& z( M( w8 i8 d7 b5 \3 A6 k" b* V- m
    mcasp->regs->XSTAT = 0x0000ffff;
/ R" f7 j( [3 U1 [3 \; G* i& ?( z    mcasp->regs->RSTAT = 0x0000ffff; 7 P8 H% _/ W7 [' y: w
& }' Z- E% P7 c7 N- ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( U( u* N( z! ^1 o2 i6 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ q8 y& z" a+ h+ S
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- D  |/ j0 w: X4 v* j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 U' A: Y3 m- h: }% u4 _4 X; W
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* s$ r" m: v8 ~3 a2 {$ ?0 E8 e    mcasp->regs->XBUF5 = 0;: v" X- x, f5 x4 B3 ?0 Z: K
    mcasp->regs->RBUF0 = 0;6 Z* q* K7 z+ n" o
  a9 g! ^% j# Z9 k2 M; U" p
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 E* {1 V+ E! J) M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 U9 P& f1 B7 g5 ]/ c; C! D$ ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ C- |$ V! m6 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 [/ t9 S7 L" ?( e+ {7 q/ r
6 F: v/ t* B9 G7 c3 [    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! ]- W& E7 y  s* r/ {" A0 Z% \9 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 S+ t6 G: I7 p6 R# r    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! G. ]5 q- q3 y+ V4 s# c3 d& a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  P+ y1 |: M$ {4 q9 v6 J2 \$ k4 r/ n- z9 s
    CSR = 0x0000;) q% E4 W" Z- D8 E
    INTC_INTMUX1 = 0x3d;: z( Y2 {* [9 i) }; A/ ?# L6 w# K
    ISTP = (unsigned int)vectors;
, h0 H0 ]8 K& f0 Z$ h: K  g  d    ICR = 0xFFF0;  
' `* k$ K% v+ d4 E! @    IER |= 0x12;  # M9 S/ A+ ^5 p: Y) n' Z1 w6 l$ p& E
    CSR |= 0x01;  " L, [0 ~1 y: @0 U
3 w- o" x+ @: Z6 U

6 B# C8 T. w+ l9 ^
' d: A- J$ M$ o' J' _& w& y7 h还有就是两个输入输出函数:
( ~. j' h: W1 W) X9 H. Tvoid output_sample(Int32 out_data)
( M+ r# {/ X( e  e& v" T" B{
* T9 B, U- w7 C+ @  AIC31_data.uint = out_data;  8 E, R4 E3 e. @  t4 n9 `% R: u
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 \! }, S3 W1 c% M4 f$ x6 d+ F
}
. }7 ^' x* F6 W  u4 q: ^1 E; \" H6 G0 z! v9 a2 h0 D3 \
Int32 input_sample(void)
$ e4 K2 O$ d7 X) R3 ]{  
6 J) T# T$ V  H* }  AIC31_data.uint = MCASP1_RBUF0_32BIT;) |) `1 W% ?4 r& K0 t! ^+ w9 \6 C
  return (AIC31_data.uint);( b- G3 L+ [. T( i6 M
}
5 M% x9 Q  t& A! d* A
6 ?3 j3 `9 V" Y4 ?9 P
分享到:  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-10 19:25 , Processed in 0.039860 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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