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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! z2 L* `5 [' E/ U# y' z1 B# c' @
main文件:
+ Z9 x% `  S  w6 j" B% uinterrupt void interrupt4(void)  
+ z: Q8 b% H# `8 i{
  G* U( e3 _; i) Q9 W  g$ O  Uint32 sample;% W. v: J6 @) M3 D0 ~, D6 K, b
+ w. x% i, l% h- i. R. ^* ^
  sample = input_sample(); // read L + R samples from ADC1 ]- T1 `5 L. q) D$ ?8 {7 z
  output_sample(sample);   // write L + R samples to DAC
( t( F8 `  C: ~' Q  return;2 a. l0 J. a" h( a
}6 Q6 \7 A2 Y; J3 C; G( }
5 p3 q& W+ ?+ w' |* ^0 |
int main( void )
  E- o6 X( Q! r+ Y" t{
4 r( `: U$ u: i% R! G7 N" ?3 w( E( W
    /* Initialize BSL */, a# {- g  c) P" k
    EVMC6747_init( );
5 v+ a3 F- }8 h        /* Call evmc6747_intr function */- @2 @/ j) ?+ q+ w7 b. G! i
    aic3106_init( );  a8 `9 B4 l* \
        while(1);3 s" x9 w" K8 P+ p0 u* K/ I8 M5 E1 X
}
% k# s$ y- P# }6 Y: `. Z4 R! P- d8 \; W1 Y- w# [

% z3 a6 Q) o/ ?: O4 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 G  a  Z5 f# t
/* Initialize MCASP1 */
7 B. z0 V7 k  f6 t    mcasp = &MCASP_MODULE_1;
8 f. o0 w7 N  `! i    mcasp->regs->GBLCTL  = 0;       // Reset
( i% Q. n/ ?& {( X    mcasp->regs->RGBLCTL = 0;       // Reset RX
; @# Q, ]. n$ z    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ `, u9 w9 v8 z+ V' i: j    mcasp->regs->PWRDEMU = 1;       // Free-running" ?0 z) A  `8 r& S8 m
   // configure McASP0 receive registers
( b" H  L7 C; E    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ ], \; c) L4 }. \1 n$ r7 K5 z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ U8 I" T/ c' s6 P8 s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& A- T, z6 M' e3 k2 J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 a  H" Y/ l) c+ `+ e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 C; c- F+ _) B' [3 `4 h% K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 a/ F+ G6 W9 w6 v( Q2 B
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; c7 `5 J# `6 ^2 x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 o1 r/ t. N3 {5 }& T9 D( h: Z
& [" v5 ]% @: ~. f/ [
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: O8 ^: H) s; |! }; L! Z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ ?# }* `  l; S  M4 m. ]: n
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& {* _# }5 I. Q2 y, @9 N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, M$ F8 O2 K1 f, \( B    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 I4 _6 X$ d4 `. }, _+ \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# [- U* K! I% }6 I8 B5 w0 F- z, x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- T+ f3 X- F+ l" Z% t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  a, X3 r$ o8 C0 n' x

" }$ A' l4 d2 [+ _* U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* A  q  u+ _$ S5 ~
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& }8 r! V' H! F* X& _& t: N! ^8 Y    mcasp->regs->PFUNC      = 0;          // All MCASPs
* I3 b* c2 }9 U2 t7 K" N5 G* S    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; y& J1 D' h7 z
; n; g0 ~* Z. H' a# v
    mcasp->regs->DITCTL     = 0x00000000; // Not used6 [) m5 Q1 w/ J+ P* G5 J
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- m& m: h( R. R( F9 B, g    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 h) x% e! _  H4 c( C( U7 a% J2 [0 J& I% b  b) r1 S1 \) A
/* Starting sections of the McASP*/
* c" c  K- j' r5 O$ P# `' o9 [    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% R) b0 x4 z, K1 `" V% ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* w- Y, @2 C' R0 x8 q1 [+ }    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" \. ~$ C" E) x# Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# W% c& {9 t& @4 K
) S* H5 D) d5 I4 H! x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 l) u  v4 A3 p! A* F. B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) _4 h! a' _' J+ K/ I% S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ b, |# ?* Y" ?' n% M1 {4 {! ~+ Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 e7 d& }! G6 X' V- O8 j: {" L$ s+ y) f5 t
    mcasp->regs->XSTAT = 0x0000ffff; ) [) @* f, g. l( S6 u/ l' X( D
    mcasp->regs->RSTAT = 0x0000ffff;
3 S) {+ O( Z% P7 ^" g: f, x( d$ @% |0 k" x. ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- V: u% ~) ^' x' \- c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ o, L) [5 R1 \3 N    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' `) D2 V  r# W+ n8 Y2 {% A( j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 V& h2 V$ w% }4 g# ]
( X+ _' A6 ~3 c. h9 L1 {    /* Write a 0, so that no underrun occurs after releasing the state machine */
: |: I# h# ~, X/ ^3 d$ A1 g- p# D    mcasp->regs->XBUF5 = 0;
. h9 a* s$ n, o5 v5 d5 g    mcasp->regs->RBUF0 = 0;
* x7 M( l$ I) g# s* Q4 L2 `  r: K- d3 W% \& B+ q/ o7 c
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- Q/ O. R9 W, y9 I+ Q- l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 d: }% }2 q! k4 U0 ]6 d6 p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ Q. T) \/ Z9 v* h8 z' L! M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* M6 c" G' b  S9 o) ^# g9 |& ^4 y& f  h% C/ Q5 l- `( b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - q) w3 \6 a: }/ j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, f4 ]0 V4 ^/ N% ], O8 G; @4 g6 |/ D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 |0 a! N, D/ ?- Z9 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ L! {1 r/ G7 ^) e% x3 u

+ Y  G9 ~& w. F! {% H- @    CSR = 0x0000;- k. ^5 H, |7 N& Y# ^
    INTC_INTMUX1 = 0x3d;
1 r3 v1 q( Y- Q' _$ z+ X    ISTP = (unsigned int)vectors;$ ]% L. Y" K, j- v# x5 X5 t' s2 x0 Y
    ICR = 0xFFF0;  ' _3 X' a* i. w7 R) J  y/ S8 K
    IER |= 0x12;  
& w% U: t2 D3 V( m/ A    CSR |= 0x01;  
3 l# @8 L5 v; S* Y6 t! I
, K) ^3 \. e. i  q+ E& c+ m) l2 b3 @* N9 X4 c  E
/ g* z3 I2 x) B0 Q6 G9 F
还有就是两个输入输出函数:
0 x1 `) S/ g$ Lvoid output_sample(Int32 out_data)
! e2 J9 ^' }4 W' K# ~- [{$ ]: R% j! U+ \* b+ J. [6 r
  AIC31_data.uint = out_data;  
8 T  q8 o/ w! |* |  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 R0 i# s( a( M4 f( Z2 n( y
}2 }' K3 l. S* z$ ?
' L4 q  |" ]3 t9 j+ A8 V* t) `- p3 c
Int32 input_sample(void)
/ R) z; P3 |4 k  L3 P{  5 g7 ?; [7 b. W( M/ ^3 T
  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 P8 x1 w" F5 M4 b
  return (AIC31_data.uint);
5 V# ]$ m- x  H) x5 v: Y6 A}
4 Y$ |0 K$ D1 }" z4 W- |
( f0 r$ }. ^' y( k; j
分享到:  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-14 11:38 , Processed in 0.041334 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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