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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: D1 L! \! F. A) Imain文件:0 b! f/ H2 X1 n& I
interrupt void interrupt4(void)  : K+ t0 h4 e2 B# B% w; |/ C
{8 i  D$ J+ R0 e  }7 E2 q
  Uint32 sample;/ I/ v; P  K5 M3 D0 N; A
0 e6 D; r6 }0 d3 H* I
  sample = input_sample(); // read L + R samples from ADC6 u% E) T9 g( H' M
  output_sample(sample);   // write L + R samples to DAC 1 f% v; V7 [+ l* D
  return;
0 m& B4 L+ V8 e/ V: x& z3 a- \" |}" N+ p" W: ~+ n. ?- l

; f2 ~9 o$ [' [' J+ b7 x& I8 e& @int main( void )0 `5 l: n1 G: @% r0 r
{. t8 q) ^9 g; t3 h

! A$ p+ C* L; \  J7 E  x, j7 B+ ]    /* Initialize BSL */
/ G, s4 K7 f" q    EVMC6747_init( );# ?& Z0 \+ d: `6 b4 r% B9 f
        /* Call evmc6747_intr function */
3 A5 b- k1 p& m; J    aic3106_init( );. U, T' K0 M  [- L2 r
        while(1);
( H* q. m, J, J3 b. Z}- u+ C1 ?8 T; Q" f

6 C) F+ E- ?5 P0 R& ~0 b: L% M
2 @8 x/ G: O2 ]+ R" X5 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ T1 q  t1 |9 j; Y/* Initialize MCASP1 */
& o. p: R  C( H5 i* h    mcasp = &MCASP_MODULE_1;
- S' U0 j& g/ d    mcasp->regs->GBLCTL  = 0;       // Reset
* `1 X8 L3 X* w8 L3 i2 D    mcasp->regs->RGBLCTL = 0;       // Reset RX8 U- l3 e+ g8 Y  z
    mcasp->regs->XGBLCTL = 0;       // Reset TX0 P1 B9 C( }: U! C; R: D$ {6 s
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 ]7 |, @) A1 e# a3 _8 I   // configure McASP0 receive registers' N5 E# S8 D: M$ w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 N" S9 a8 S, a3 ~' V/ e. Q& R- _    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! d, e- W. E  ^9 W+ }0 ]
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# o2 q& u7 V# k% M5 v$ K0 g: @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 \  p/ u+ y7 I" O/ o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 r- \! W2 x& P, \4 x, _) y* N    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& n0 D  o8 M4 b$ r6 ?6 a. V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' j7 }5 I0 Z7 u3 d3 k4 _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, q3 z6 x0 ~% Z4 w: @
8 m$ J9 C% @! G2 \    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) X& C% ]) z8 [* l. u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 b8 S' k; r8 K& E$ x1 p( _% ?    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 k+ y% [; s6 m- \% {- S    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 R, O$ `3 d0 _7 z$ c+ j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* F& ?& M. @- J% F/ i! A
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; @. W3 v6 a: l8 C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, f9 B1 w* A3 A' g" I! Z' I9 t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( X% V9 w; K. u: X+ s! O5 i

5 c" w% w# Y% S( t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 R$ j4 q# N5 K. r: n    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& A& k4 k5 r: m  G6 ?- K8 m
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ D" {8 T1 z( D* x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 S7 v, t' s/ P
; y) Z+ q! L1 o+ p5 s
    mcasp->regs->DITCTL     = 0x00000000; // Not used5 d- k0 A2 J. c
    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 K' N$ g) S+ D' Q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: M- r/ N1 ?7 n7 F/ d
& F* o' N/ s: {/* Starting sections of the McASP*/3 y+ j3 b/ ?! R2 Y% u% g% Q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 C+ u% N. V& W$ z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 X, h! L0 z- ^7 u! }" @    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # R+ G. b* Z  P  G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, E0 w: f1 A5 }8 V% R
8 V3 q4 |/ I. o- I# P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . [" L8 }( k% g& w% _- z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 u- K& Q2 g0 ?1 A0 a) |1 L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " j% W+ q# K- v  u- W: q( Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  ^# \, ?1 o. j% Q( Z% ?! X
2 ?) J4 p" I( Q! I. v$ A    mcasp->regs->XSTAT = 0x0000ffff;
7 [7 L, }  s/ A" g  B& ^5 [    mcasp->regs->RSTAT = 0x0000ffff; 5 a+ @6 y9 U6 l
0 P1 a) v$ z) ]0 I- X
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 Y( b  l+ `) ]- s% f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 c' [7 y: M1 i% d1 p1 t
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . u5 ]7 N4 _' m# |' e8 T$ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' K0 @1 J  S5 n& C# e% N# T3 l+ i9 b& x; U' C
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' w) |4 C1 H6 _3 G    mcasp->regs->XBUF5 = 0;# x3 _2 M. i4 w2 P
    mcasp->regs->RBUF0 = 0;! R9 u! r% O% o2 ^  U& x: ~
8 J$ E) Q( g  R( v+ e8 a8 `
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " w% Q3 K# m3 f4 U3 U+ g/ M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: p3 m2 X* c* _/ z% i6 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 T% `2 m& c+ k- ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. r4 M  b7 D6 V( M3 \0 }+ n9 ]3 r: R9 p0 t2 q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# N& B) M3 ~, x% @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ T: f7 {2 {9 ]% o& g/ e' u) V    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ t; _7 y  p0 c8 h+ V1 c% V& O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! c( i" m5 o& a

' j+ w% H6 Z  E+ k    CSR = 0x0000;- H. N# q$ y0 G4 t- b  Y
    INTC_INTMUX1 = 0x3d;
9 r8 ?/ G" s$ {1 M! I    ISTP = (unsigned int)vectors;& A  V* z4 [+ S3 j) P! v, U# z
    ICR = 0xFFF0;  
  ?. u7 o9 Z) I$ z( r9 h0 F8 g    IER |= 0x12;  * k- q4 o( T) h$ m/ i+ v! t
    CSR |= 0x01;  
% d* F* L% H6 P! G9 H5 m' T' _
% R* T3 `. g7 c% y) {; R& t$ O1 J9 m! r8 |; z+ X7 B! x6 h& r; U
4 C1 N' N4 x8 n" e
还有就是两个输入输出函数:' V  q6 j' R6 E. ?9 m- I
void output_sample(Int32 out_data)
& N# L3 J, G( w; T# m4 j" R{
8 Q/ f7 L1 _) L! f8 S( ]4 A4 g* k; T  D  AIC31_data.uint = out_data;  
' p7 w. l! n7 u( d+ _. N, u  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& F5 M- c4 f0 G" R8 {6 c}# Y/ C3 c! G- C9 K" E/ v

! [+ m# q& v5 E# w* |Int32 input_sample(void)
/ l- Y9 ^! R/ b/ j( d5 T{  
2 [  `. C' T, C  AIC31_data.uint = MCASP1_RBUF0_32BIT;- L$ F1 D& i3 C9 O: |) o
  return (AIC31_data.uint);. x+ @: E4 U* i4 ]5 ?
}! t: {6 ?1 s* m3 T* q% p
: A+ m+ z( X3 S- R# [
分享到:  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-3-16 21:54 , Processed in 0.041061 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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