C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* B; g- @; y5 f) C' y  [main文件:
( w7 E' `. V* R  ?& Ointerrupt void interrupt4(void)  
1 p& Y' T9 R& F{
% r6 w; I/ K0 F) X6 H" K  Uint32 sample;
$ C& v2 x; L* i  t3 d- I7 r% f! H8 e4 P% t  Y
  sample = input_sample(); // read L + R samples from ADC4 u8 Q- T3 e6 \
  output_sample(sample);   // write L + R samples to DAC 5 s, ]6 x1 q2 D7 i0 d- I
  return;
+ d1 ?6 }. }4 z, M}3 y8 e7 v: f- E  g
) V# i" H& n. ~, d; X$ V& g
int main( void )1 ~5 ~$ |, [4 q0 m
{
7 N' u6 _9 Y, H: ~* H* B5 C- g) b7 z7 j: X" V
    /* Initialize BSL */' ^4 F1 b' V! e9 n$ E. f
    EVMC6747_init( );' \: e& n$ D$ R% B' H: L
        /* Call evmc6747_intr function */! ?* w: c1 [+ ^0 t# Y: l4 T
    aic3106_init( );9 u7 u; P6 k5 }% e. H" H
        while(1);' e" G5 I5 H7 o8 D8 S
}* O0 E( m- z3 O( ]8 ?+ z2 l, }
" F) M" ^8 t& l* b7 }9 C% v* r# N
$ j% ~$ B% V+ ?5 Z- O5 {% @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ l* b  R: j, @3 n- C
/* Initialize MCASP1 */: ?$ L8 y3 ^' ]2 S' W
    mcasp = &MCASP_MODULE_1;
  }5 B' y, D! V3 U5 {9 `    mcasp->regs->GBLCTL  = 0;       // Reset# D/ T$ x0 b& j! Q0 \5 @4 w; i& q
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 |" ?' R( m5 e3 A; T5 H    mcasp->regs->XGBLCTL = 0;       // Reset TX4 [. B; V% c/ s+ w
    mcasp->regs->PWRDEMU = 1;       // Free-running  O+ G3 v: M' P1 s' {+ c
   // configure McASP0 receive registers+ ~$ ~( T4 s  D. ?, [; V' r# e6 b" a
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 [: K$ }) ^8 n4 D' ^, |    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 M# a4 Q- N$ Y$ ]! ^' P/ e
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& q! `# ^6 U. O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ n, a9 x6 R0 A# l. R" z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ \4 t3 Y/ a; h, M
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  `+ ]" v. P; R5 z, r# s7 |
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; u6 ?7 _# M' |; x& P
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( _; q# P! R9 }( U' ?- B( X
5 c" I) {$ {9 D) |% W7 Z
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' B. V( E8 W: X; q# G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 j9 Y+ \1 n) y. p" U" X, l" P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ q5 a2 [. H7 G9 F3 J
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% p; u2 f! h2 y! Q% y% p& ?
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% g4 V9 e$ c+ J: [+ P( f, _/ c1 V    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; f4 Z% A! a4 s! M6 [
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 S( S: s) T. g! \* _# I
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- j& _8 I' s7 ]6 q+ t+ p
. R5 B  m' O* _+ V/ j
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 B7 o5 M* I) a) a3 i  L8 U- s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" k8 @% h% _3 [
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 m- X8 R2 K$ {( H7 x5 t" R8 t+ |4 ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ T6 E$ g, I$ H- ^: E$ n
- g  W7 Q( j+ ^! ?, M    mcasp->regs->DITCTL     = 0x00000000; // Not used. j! X; z( v+ G4 [
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 i* V! \  k& d: Q0 E    mcasp->regs->AMUTE      = 0x00000000; // Not used
  Q+ b7 ^: d4 ~( K' e2 R1 \& d+ r
' i! q$ b. A! |6 F9 Z2 ~: l/* Starting sections of the McASP*/
* V9 B1 C9 u( U5 e9 w8 Y$ M    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( L6 `3 ~; }+ D. J7 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 |" e. z- z" E2 ^; P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* f9 W$ _0 a# \6 a6 P6 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( V7 w: M4 q3 J# ~9 u) T. s$ c5 h4 w' f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ G  U8 l4 W( d+ m+ G; r1 f% g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# O9 _) }: {# U( H& S7 ]  P% g. {    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 @7 X+ Z% K. ~( `4 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* I; F" D) D* K9 R8 Y2 s* E; l/ X2 s3 L* D: q  N& I
    mcasp->regs->XSTAT = 0x0000ffff;
8 e, ~' o" `( a! P7 r6 I5 R' u( y    mcasp->regs->RSTAT = 0x0000ffff; 2 ?3 U) j6 c, j1 I
. I( f$ X# u9 h
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) G9 F& d+ n0 ?7 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ N5 m* ^: S2 t' H/ }& F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! n3 L. [* V" g# B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 o$ l1 W  O4 T! b

' \' s+ w0 }) `    /* Write a 0, so that no underrun occurs after releasing the state machine */$ T$ T" s, _% z8 d: @( K' c% \' x
    mcasp->regs->XBUF5 = 0;  |! @6 h6 o: N# `
    mcasp->regs->RBUF0 = 0;" v) r8 d( H/ I% X4 Y; W  r  \

+ N8 @! l7 W; r0 U+ j7 {    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * `/ I0 _: o; y, Y$ _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 d5 G* M+ f4 N% ^! b    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) g2 U2 q& L: x  _# F# a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 G/ v! o2 O- ^3 [* N/ M
( O  }4 q( Z7 Q' W3 V) N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 {2 @" m; i( F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, K6 @$ O" r/ a* M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 y# V/ n" q5 T# Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ ?6 Q1 x: L$ g: u8 I& e' _) f
7 Z. K# E4 T& Q7 p; d$ _7 ?+ A    CSR = 0x0000;
' V6 l, J. y8 x1 A: S2 P$ x& c    INTC_INTMUX1 = 0x3d;
' b5 x2 b& T+ Q/ V" N+ F% R    ISTP = (unsigned int)vectors;
2 E$ R1 C+ [0 `& I    ICR = 0xFFF0;  
5 N3 H/ Z5 U1 W/ J& e& N    IER |= 0x12;  
4 d$ f7 g: ^6 O% C* `4 O. c. ~% T    CSR |= 0x01;  
& ^6 [; w( b7 o. L2 B/ B' Q* c! d( m6 U% U/ P, N% p9 W1 L
7 \3 @- K; L& |1 n
3 R, R4 J& W6 E) _' l
还有就是两个输入输出函数:  n" ]  d! ?/ K3 T( J1 V6 o
void output_sample(Int32 out_data)
, \# H0 A( m: r; x7 W" o# U3 X{  T* N8 ^# M# N& s5 r
  AIC31_data.uint = out_data;  : u' x1 ~6 Q/ G" o3 B/ ]  i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, p$ c( ]* G2 X' a' u7 X
}
& b0 P" H3 }/ h0 h! d4 k* D& d" D
& Y; J. I6 K. J. E; X; M; QInt32 input_sample(void)
( r. L; s. A3 M0 a) }# H' |& [{  
* z6 ]8 [! h. G" z9 u8 b% _$ i  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% }: L* k* Q  h% i' U) Y3 [  return (AIC31_data.uint);7 \; q! L4 P3 I0 ]
}* a$ I+ d+ h6 I( b7 H9 g
5 ^! L' W6 @. b
分享到:  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, 2025-12-11 18:23 , Processed in 0.040339 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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