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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 t% z; H3 O* m- ~main文件:
2 V1 Q: y1 x4 R$ L6 zinterrupt void interrupt4(void)  
$ u6 s3 {& D# B$ I{
8 Y1 m: [9 [- T, a  Uint32 sample;5 f. D; {" \( J$ k& v, I- [; i4 F1 d
# M% F6 r% @7 ~7 w% t2 L
  sample = input_sample(); // read L + R samples from ADC
3 F$ \/ n" w1 m7 Z5 t  output_sample(sample);   // write L + R samples to DAC
( n7 i+ n% |! W* n' \% X  return;( n- ]! T* y  ]% a6 l4 y
}
  E% @4 Z$ y. a! X1 A
3 B8 K4 L$ t& z+ y$ Q4 _6 Dint main( void )! N3 z+ v+ q4 b
{
$ l& Q" i+ a7 x* B" }6 S8 m5 A) c+ Z; ~1 D; U7 ?9 G  v
    /* Initialize BSL */
% M" V; H) h# p% u    EVMC6747_init( );" v4 f; R9 X" Q; {
        /* Call evmc6747_intr function */# A& A+ [3 n6 q2 o$ `, i( y, M( p
    aic3106_init( );$ [- b; n4 E  Z6 X/ ]
        while(1);3 x; `% H1 v; ?
}7 K$ N4 j" Q3 g+ r, k5 L" X
3 _" T. I1 t8 t8 z. _" r
  _  R4 N- q- e7 k$ r/ }) z1 V9 ~
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! a# \' A, D& U$ y, A8 K/* Initialize MCASP1 */( J. o# e  i# U3 j
    mcasp = &MCASP_MODULE_1;
# u& d* G% D/ t4 E    mcasp->regs->GBLCTL  = 0;       // Reset+ S* v! F- C4 D9 z& s
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 R+ Z% l" F2 k' T    mcasp->regs->XGBLCTL = 0;       // Reset TX
" H( v8 h8 Q, e9 v5 I* r    mcasp->regs->PWRDEMU = 1;       // Free-running
* k9 ~; W8 A0 R   // configure McASP0 receive registers( o7 p" q, }4 [9 s
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 N+ a9 a. h  |6 i+ J8 R+ o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 s5 O# |  j) v) v8 X
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' }7 V, P  Y% d( R
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% T+ z: A3 C) F, G, u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! ?5 l6 E/ B& B
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 R% s3 V3 h4 h: K7 ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used  k0 k$ z* B: Y8 H$ N
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& N- e' t5 N, h# `5 M$ ?5 I7 c* G0 U- J5 S
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, ~: v# u2 N) Z1 b+ b! R# {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 X9 |" ~: E( R0 U' v
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& h; ?( X! M' p5 N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" J* _/ P1 I3 Y4 u. n4 h. y' B% |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 P4 i, N3 K1 C+ ]; o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ I* L" t; @2 I5 X4 r    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 P, `$ b" Q7 S& H! Q; b" Q- M' ~* h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* S+ U! o9 k+ ^$ a
4 J" J) j% U# q6 D    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# }$ |/ v  P0 {9 R/ _0 c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; ]; b. Y2 Y( ]; g( M
    mcasp->regs->PFUNC      = 0;          // All MCASPs
  F$ T+ `+ X+ t% I. C6 _6 }    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 G3 d; U* B% _

* W. g) K1 ~9 S- x$ B8 t# n; V' w    mcasp->regs->DITCTL     = 0x00000000; // Not used
  u) _, a' e3 l6 `+ N    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 k0 j. y$ a' ]* {$ g
    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 `: V: p. w+ K; i5 i& ~# [% R1 o7 _/ I$ x2 Y: b5 ~7 g4 U+ Z- v
/* Starting sections of the McASP*/
6 a4 e! j) v/ X! S; i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" l8 A1 E" T& H( q  |) S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 t; c  V& l  K5 t/ `) ^0 E( i    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! W. @7 W7 a6 m. u( b5 K) ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* {; z# u# K1 d( k7 w' m5 b

0 x9 \" O& O6 g& g    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 B, h2 H  i+ f% e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: k$ f& K; I# k# Q# `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   C9 c1 R) V2 v  L; l- {4 W0 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: K0 B- j; ~$ ?0 c3 Q/ S  J& ]/ P' @$ E, u( |- V/ e! q$ @/ z
    mcasp->regs->XSTAT = 0x0000ffff; / z# d* R7 e( I/ g/ q
    mcasp->regs->RSTAT = 0x0000ffff; 3 U: @8 i& L3 n* K

9 g' s, v: z! y9 c, x    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% u5 u; b5 V$ l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: c" R. t0 y! ]' E4 _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 ], O7 g; r4 d- k( P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& Y0 ~/ c$ _2 I( X* I, M2 @4 D5 c
2 R/ H( B7 B3 K    /* Write a 0, so that no underrun occurs after releasing the state machine */
( r6 ]  W/ W) ?  o7 I8 U' h4 g    mcasp->regs->XBUF5 = 0;
3 q' S% n  o3 Y4 S% ]    mcasp->regs->RBUF0 = 0;& @7 \3 `" R5 {

( e7 d' W$ \" v; h6 W4 R6 [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, r: \) A4 A- ~1 W2 V! s! w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! q" i% r( p8 @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) c8 @/ ]2 K" _$ i* ^' K! i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 h! m+ v% F& O) b9 x3 u9 Q2 M" V/ j. Z$ B: @( ~/ D: Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & ]' H' W/ X$ A2 l/ C8 s# E8 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 a# I& o( M" ^5 r- s% o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 t. t! i" L0 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' u+ p5 M( s& V2 G* o% W0 \( J& K0 d4 Y1 c7 I1 ^: g) T  d* a
    CSR = 0x0000;
/ W- r0 S( j( I9 H9 s    INTC_INTMUX1 = 0x3d;8 a5 l1 W. Y" X) @
    ISTP = (unsigned int)vectors;
8 j$ ?6 b; G4 R7 w3 ^+ d. _. V    ICR = 0xFFF0;  
6 R8 o# p( _6 R. C& y, u# q    IER |= 0x12;  ) b' q9 O. e; {$ O( U2 X8 r
    CSR |= 0x01;  ( B/ A9 O) F6 m7 m! d! Q1 x

( _* @; l  G0 o& c, S) u4 S* ]
8 l0 z2 z1 L: O0 [/ o
- }# L0 U2 j( E2 \+ m0 o还有就是两个输入输出函数:$ Y$ ?% x' l" C7 q) K6 w5 ~  ]  g
void output_sample(Int32 out_data)
  u/ o/ A* b! |- Z{+ D% {5 N9 ~5 M& u3 o+ W1 c7 e5 ^4 p- b
  AIC31_data.uint = out_data;  - h( M5 i1 m/ J. m$ v
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) \# L5 S- b( S  r# _5 x+ u9 ]9 n}
) T1 I* S- c. n; u
# m! E0 G+ Q+ T7 ]7 C! |Int32 input_sample(void)
. B2 J" v( ~7 D+ X$ X{  + X9 Y4 w  E8 C9 H& h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
  G! [6 O2 @4 W/ o  O, l  return (AIC31_data.uint);& A4 k, W2 W1 f5 J& }
}) h6 y& r. K( y1 F- Y
+ ~8 S( ~4 ~. W1 s* 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-11-15 06:00 , Processed in 0.040381 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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