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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% A5 m' t/ u1 x+ U7 Y/ I  x7 b2 R
main文件:
, B2 v: h' w& @) `8 i9 R" k3 p; linterrupt void interrupt4(void)  
( U* x' i& p/ H$ V( L; a& N+ _{1 \. Y) X9 W+ i0 m9 O: A
  Uint32 sample;
! U5 P( S& X/ O6 a# g- x2 a' P; Y/ W  t3 B2 h% \! P) i
  sample = input_sample(); // read L + R samples from ADC
' A' X1 a# j. q0 Y3 d- m1 ^$ P/ L  output_sample(sample);   // write L + R samples to DAC 2 m, Z; E' N, D- S: L3 h
  return;- d5 e, U7 O3 L: p  L9 S
}
4 C& L' l0 ]: T' Z
8 F4 W( _! y9 z& o' }/ U  i/ Hint main( void )7 o: f3 B% O( H7 ]9 v. R- }
{8 E& M; g. c4 F* A7 {9 m
& n; Z9 {! d( j
    /* Initialize BSL */
& j. b* B& M  @. H- J    EVMC6747_init( );8 q; f  \7 K" q
        /* Call evmc6747_intr function */
  f% n7 s$ }3 f" s* T- E    aic3106_init( );
# Y2 v: ~4 W& O        while(1);
3 J# R( l% \- c8 Y3 X}" O8 O5 y" I( u4 ?- m, x% k% q
, c4 F4 Y$ f# R1 T0 s; \' j

' g0 k5 a3 A' o7 |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- l# _$ x) v* l8 S1 ]/* Initialize MCASP1 */
3 F" E+ N, A) h5 |3 _, S    mcasp = &MCASP_MODULE_1;
- D+ u- b$ |0 `  z: O6 \, ~    mcasp->regs->GBLCTL  = 0;       // Reset5 E& q! ?$ ^: l' j1 |: a0 A( R
    mcasp->regs->RGBLCTL = 0;       // Reset RX9 ]0 ]+ E- d( Y" s
    mcasp->regs->XGBLCTL = 0;       // Reset TX: U0 M# R+ N+ v! }+ N
    mcasp->regs->PWRDEMU = 1;       // Free-running; M2 o( p1 O2 g, R9 b: l0 [& X
   // configure McASP0 receive registers
' M6 ^7 ~* _& L" f- R9 O; ~1 F6 @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; ?6 x! k0 X4 q3 |; G! Z( O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 |7 @  \, E7 M+ Q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ n0 N5 N$ P! O( i    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, ^: C( j4 h$ E) x5 g, S' ~5 a* H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) n& [! P$ G6 n' o; V; J4 S8 k" V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 J5 K+ K# Q2 ~, X4 @4 }5 K    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ v6 H- {" |# U2 m5 q7 o  n! L
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' }3 j2 l/ X, y
9 w: f* b# [0 O, Q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* z4 c1 S4 |9 i0 L5 l    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 p& l. H/ l0 o$ A5 q2 ^6 u4 l& O: V
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' u2 J+ I4 h% N8 \; ?; }2 D9 r) e2 G/ r
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: O1 z/ D" c* _7 g  F# O$ p
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ C) P; I8 v3 L  @6 N6 Z3 r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 H9 `$ {- _% U; v1 d- _
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  n. r3 g; [1 N$ {% Z1 F  D0 M: {% s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* ~  W# b) Z: U
6 X. _) B' p/ C7 l7 ]
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" [1 q% V7 x6 p$ t0 L    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; P4 t2 B+ T' v5 m, E9 d    mcasp->regs->PFUNC      = 0;          // All MCASPs
# b& V3 A$ w% R, s5 x' T    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 j4 _( }6 T) B  p

0 \- u8 [4 w" @7 |4 N% W3 l    mcasp->regs->DITCTL     = 0x00000000; // Not used3 s8 A& y2 G* D/ U, B9 k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" b) a' `( w5 R5 p5 @- Q& f" s# ~    mcasp->regs->AMUTE      = 0x00000000; // Not used* r6 Z# Z$ W7 j9 ?% l
; ?8 r# X0 U2 W+ t5 S
/* Starting sections of the McASP*/
$ T5 E9 [# Q7 C. ~$ z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 A) Q! N' {4 u3 b* Q; c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; M8 b# m" [$ d$ Y5 T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 Y# J1 ]1 ]" K, k+ @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 g1 J! v1 S1 L( Z8 a' l
, @$ e3 [3 a2 i$ u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. \# b2 Q. a! n  g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 o: e3 V% l* G+ G& Z) v: c: q* R
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 P" U# F- u6 D+ E: S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ v: f3 X+ _9 z7 H
  c2 `/ A/ Y6 T% }; E- A& l, B; x
    mcasp->regs->XSTAT = 0x0000ffff;
( O! h" a8 c. h  a" R    mcasp->regs->RSTAT = 0x0000ffff; ! ]5 h& [) b& S1 @5 X  H4 h

7 x7 B* Z, S) B% y* P    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& m  r. |; h; w2 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) E4 [) O4 }+ t/ \* l) t    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; I9 B" D0 \0 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. k% t. ~. l  w: V+ I

5 k7 v: ~0 l$ G" G4 [    /* Write a 0, so that no underrun occurs after releasing the state machine */5 P7 I. m0 C  E# D2 c
    mcasp->regs->XBUF5 = 0;
9 v3 I* |3 U* G    mcasp->regs->RBUF0 = 0;$ {. E/ f* A7 C

$ L- n( T0 i+ O5 c( P9 _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% m9 m' F$ k' r4 Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% x$ B0 C$ v, C: }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  Q: ~$ [5 g: a( r7 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# }& B6 B8 e; ?  ?. k
  D6 N# p0 B, i1 j8 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 Y6 ~! w: l- R3 }5 U5 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 O8 i7 m; u9 R6 r4 M0 P  k' y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" c6 h- j* S0 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 M- d# a# u0 Q2 M0 D. s+ n$ G% g' O4 I" e/ W( A
    CSR = 0x0000;
/ ^9 q, N9 |1 I    INTC_INTMUX1 = 0x3d;! ?! t+ r; c7 q
    ISTP = (unsigned int)vectors;
9 B7 C, S9 G7 [0 ?7 D    ICR = 0xFFF0;    s/ `% P) [5 g) L& Z$ f% q! d: M  @. S
    IER |= 0x12;  . v% l! d5 ^6 J" ^9 F% c* V. B
    CSR |= 0x01;  ; ^. e1 t: G! H" Y" _  ~
, h" r  g: j: P, }/ f. i6 r
% @  J5 f( I- B2 c7 P

. D4 L% u0 L. T5 O还有就是两个输入输出函数:; ^+ b" b, V+ G3 M' J; A
void output_sample(Int32 out_data)
/ B4 k% f- P. C2 ^{3 G$ Z0 a% V  C1 P+ n) N2 t: ^
  AIC31_data.uint = out_data;  6 ~2 i% t% l6 D1 ]7 f% e+ K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& H, R2 R" b9 f  e
}1 [, c7 f: U: ?3 |6 R" w
- v2 s5 y( H& J* x& \3 e1 X
Int32 input_sample(void)
: c, w, A; F1 }, n! E2 k{  3 D# a7 `' o8 e8 ~  L: X
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: T; Q9 i/ n# q. b4 i$ X/ ~
  return (AIC31_data.uint);7 ^; G# D* Z1 A$ W
}
1 l3 u: \: l: q1 m. N4 S1 D) h" b0 ~  i# l/ l' H
分享到:  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-14 07:53 , Processed in 0.046009 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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