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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! |/ V! C5 W: J# n0 Lmain文件:
; y. k6 q. h1 U9 [3 e( v6 yinterrupt void interrupt4(void)  
) ^5 @" r: j4 k3 e4 a4 T{
- d/ S$ @9 B) [  Uint32 sample;6 G  L* \, Q% g2 W: l. F
2 S; S; O+ ]8 g6 w0 l/ ]9 l& Y3 M
  sample = input_sample(); // read L + R samples from ADC* J# I6 R1 ~; E% V0 z7 A2 ~2 U
  output_sample(sample);   // write L + R samples to DAC % R- D- Y  v/ D; g
  return;
; e  q7 j% }2 d3 z9 p! }9 F}
5 b$ G6 {$ N1 x: H3 h/ P5 x5 k( q
int main( void )
' T( l( h2 r9 I* x! x6 m{! g% ^8 G9 d) y; z

# ~9 D) W2 _; f' p    /* Initialize BSL */1 \  ^9 ~# J5 [' L0 k
    EVMC6747_init( );
2 E* o+ Y3 w/ c/ T( m6 [! r        /* Call evmc6747_intr function */( ~' d% B7 X6 `- H0 v2 `9 i' f2 Q2 |* a
    aic3106_init( );2 h- Q3 C" X- ?; W9 E) I
        while(1);
, B' f: q( c" ?. c}4 [) J! B- ]' A3 d* m, J% d
2 R# v2 U. o$ `$ V# t) ~

; x) @2 ~: T$ C0 J- t2 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. _" e$ S: a8 M% P4 v0 B3 B& Z/* Initialize MCASP1 */
% {, _% U( }% K- @) t    mcasp = &MCASP_MODULE_1;
) F$ d" b: H8 w& Z. \( H! m    mcasp->regs->GBLCTL  = 0;       // Reset
# @2 z( v" O4 g* I% k/ x    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 v$ d. k0 a( X2 S* r    mcasp->regs->XGBLCTL = 0;       // Reset TX3 `7 ^1 Q7 }# y* S. Y4 w
    mcasp->regs->PWRDEMU = 1;       // Free-running4 l3 @7 w% G0 x" ^8 D$ b: p
   // configure McASP0 receive registers
8 p) U+ U, S3 Q' G. N2 B5 ^4 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# b" y3 Q7 b0 p3 A9 `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 O; w8 ~7 l$ V) n* Q( `, a! K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ P. v# X3 W3 c( s
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 W: Q2 _, F' K: x- S5 ^" e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 @6 H$ X3 i- p5 _+ |3 |    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) M: d$ n) Z( |    mcasp->regs->RINTCTL    = 0x00000000; // Not used, D6 J) e4 |( ~9 u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 j' v. e& w. t! p+ B
4 m' X6 w/ G" X1 Z0 \: f" [1 A    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. W  E6 y- G6 f* V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: Z7 h1 t8 P* s5 I$ T- E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 B7 L) v$ e% c; q, N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! f/ i. q2 d- a- L5 |- Z& q2 ?+ c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" j# M* u' U: t8 E/ I    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 k! l, ?. j9 w2 [4 ^    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* G) r* {. A% F! {3 X5 i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ C+ P+ z- Z5 P' L$ _

! R, F4 R# k- a% p" o( K' O0 d$ o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 W) U5 p. i* s+ E- y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 t* L9 {- p. {2 n
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, p0 j0 T3 R8 i0 W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ e" b* Q6 x  m# y  c5 L

0 Q/ t5 k! x: D4 T1 I- ~* [    mcasp->regs->DITCTL     = 0x00000000; // Not used2 v4 u" D  ~9 `" c0 Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 `" F- ?  a" g# s  N# Y0 s7 k+ K
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, E0 N. n4 U' h7 e$ M6 E& F
- b/ |/ c9 w: O1 n+ |/* Starting sections of the McASP*/
& o% Q2 O( z! F- t& f' w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 J; u" d# `/ a, x, _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
% t' }( l: f: z# P7 G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' f/ z: b+ `2 W! W2 h6 v4 Q8 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 |0 M& i  P) c" b3 n5 m
1 u' t: g$ g+ Q2 |' b+ Q3 ^7 T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 ]! x# o  w( w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 p" f# c8 J( l1 U: J
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   l4 {- k3 d# N! g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& ^2 f0 e5 p! [8 q. {$ i* O5 r
7 [7 A" s3 [) s6 p; U    mcasp->regs->XSTAT = 0x0000ffff; 2 `; C3 f5 R# L4 L0 O5 d* J
    mcasp->regs->RSTAT = 0x0000ffff;
- Q/ j2 I- q, f6 @4 s  C# {8 M$ l9 f& U9 }. J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( v( ~8 h9 ?; \1 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 y0 c; G. J9 p# h) f+ E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 ]# I* J" o& Z" b; {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 h  f- n) o7 }1 r! `4 W: g- H, L
+ T3 v% f8 V) N6 m
    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 h+ ]* _2 y' [$ m    mcasp->regs->XBUF5 = 0;
& b% \) u3 A% Q7 R4 A: q. M    mcasp->regs->RBUF0 = 0;
8 [( ~6 o# \  z3 J' T. D8 Y) b
) q& _$ |  i  [0 `: g  E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 [7 A+ z& H2 V% o. m9 ]. {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 G* e4 Z* w1 u3 ~# {& ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ K! R' @& H7 E6 L/ P3 @5 T  G; ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 J: z# P% y* H& ~3 U% J) P6 I; j1 g0 z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 I$ N$ ?  i- x+ g& ^- |- K7 d" P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* H, T! b/ L5 \. J& I* X5 Q9 K) D- P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & p1 x2 ~0 p+ A4 e9 i* v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 F, e, Q4 \" {' Z  I- M

9 G; S; W. T5 J9 h0 N. J    CSR = 0x0000;* \3 f& O: H2 F; ~0 ^! a% r6 F
    INTC_INTMUX1 = 0x3d;
' x- i/ d6 f" G5 D& F8 j    ISTP = (unsigned int)vectors;4 l7 R* {; Z* D
    ICR = 0xFFF0;  
3 x" c/ K( H3 w! W    IER |= 0x12;  # g% T9 n& X2 b+ \: \# w8 J
    CSR |= 0x01;  & z" ^4 Z8 B+ G$ ^8 h$ m

! h# D# Q: w# ^1 e# T
1 d- O8 h9 r) r) G
; c% i7 Y7 B5 ]- U  E还有就是两个输入输出函数:
, J+ L" J( T! \2 x! T. uvoid output_sample(Int32 out_data)
, ]& I% j9 k: r! t{& R, _* f. f/ Q) X
  AIC31_data.uint = out_data;  
& V* B/ a' _; f; T$ r9 J0 r( n( w, N8 Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) b+ v) ]7 d' g# W' Q7 z- V}* Z2 }. a3 o  M" Z  {* O$ S0 v6 n* D

" m) B/ ]( B6 BInt32 input_sample(void)
- }1 N% ^; V( k8 ?8 L6 t{  : u' k1 T3 ], F, I! A& w
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# ]8 x& O$ B0 `0 I0 Y  return (AIC31_data.uint);" ~2 F+ e+ ~0 O& V) K5 z
}& V! d! `* p! p; q' u/ m2 d3 F
: T' `# u3 r  z
分享到:  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-11-17 06:10 , Processed in 0.039420 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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