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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( p$ {1 y; E! Q9 P1 J5 Ymain文件:
! U" U$ A, R/ c2 S& w7 J' |interrupt void interrupt4(void)  
7 j( B' f! z' S0 x% t% s{: l: K) G* R, _
  Uint32 sample;
$ Q) P. \# m# b, N5 u6 N. |0 N/ B( X% W" K! f+ s1 _( y
  sample = input_sample(); // read L + R samples from ADC
6 C: ^5 H6 N6 ~1 L5 q5 J  output_sample(sample);   // write L + R samples to DAC
9 a% H5 t  _' t* N  return;
! m6 n2 R: a- c, _9 w! O}1 L  A1 x" o+ D+ H; r  ^

9 p  `* H$ M. [% w7 ]5 Hint main( void )
& }# }& V) T. W, g& C{5 S% [; V; A: ]- z" |/ D! q  t' y

, L( J: F0 m! G7 i" C' }3 b    /* Initialize BSL */
( Y6 B, T* u" E0 O, O    EVMC6747_init( );( Y8 b3 @8 u4 q1 A0 N% u( Z
        /* Call evmc6747_intr function */
0 e+ I- h( H* z    aic3106_init( );
, L' |: h0 d8 ]: N        while(1);
9 ~) J- n1 n* u/ a}
' J" m+ L) \* z+ v/ J% Y
+ O, x* v* W' `& ~% D: T: m3 M$ |2 f% L( _4 N' ]& E. f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: z0 e3 s4 f( h/* Initialize MCASP1 */; g  s6 o, k" k$ y
    mcasp = &MCASP_MODULE_1;
: c( p0 r8 y3 d5 z* w    mcasp->regs->GBLCTL  = 0;       // Reset
  V2 I8 `# A6 h- g! a! T    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 q2 h7 Z/ Z; t4 y$ N0 Y$ s; x    mcasp->regs->XGBLCTL = 0;       // Reset TX! P9 s, O8 P) v3 T6 i0 C1 ~0 T9 N. Q
    mcasp->regs->PWRDEMU = 1;       // Free-running- M% J+ I" D' k/ H8 J6 U6 W9 O- }- n
   // configure McASP0 receive registers( y! @$ p! x1 h" W9 r) R: @' l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) d% X- H3 K1 D1 ^1 G- O; [
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 g6 I. D( @9 p5 R1 O; q7 e, o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, |, ~( Z3 K3 X0 t- ?- |2 @& z$ ?/ o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( q2 R6 H0 V: j2 z  [* P% T3 A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ u+ V/ g2 e/ o: L    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* Q- V: [5 h/ p" E9 N    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ U2 _" `' U5 V
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* `" S$ g% r1 h# B* i. L- c

5 z: j. _1 \" ?9 \8 z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
% [& X( _) h; M, g( J% |    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ P4 p' m3 |+ ]
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 y$ o( T/ b% Y- d3 z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 F! c( A: `( x, G5 I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* r/ Y1 i. q4 X) G- D1 a; U    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) }8 j" T0 ]$ U$ A    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" k" X9 A# U' G% P' C( X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 _2 q: A; G% @4 \7 o
8 P  m0 h3 N/ n: a- \; Y  J
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, k) Y+ v3 J9 X" c4 \
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) h+ i( j2 Z- ~. Z0 w2 F5 M    mcasp->regs->PFUNC      = 0;          // All MCASPs8 G5 ~2 z9 M, m# E5 t6 b9 g
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 p# k0 P, Z" O+ V, x* z7 ^

$ S% ~& i% j4 \    mcasp->regs->DITCTL     = 0x00000000; // Not used
" E  D/ v* u/ d! R4 r3 f1 V9 e: J    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ }+ d& F7 G/ d
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: X) k* |$ }/ t! n+ V. c
0 I3 u8 c9 T) W; F7 i2 n/ S/* Starting sections of the McASP*/
4 o, `$ g5 B; q, b    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ ~' b( x9 I! j% r8 F6 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! a  d1 T$ h# [, K* R4 T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 s6 A! n# ~  e& W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 z* X# s2 ?8 r0 J0 h! |
6 f) G9 _, _1 A3 b
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , T9 i7 b* r; D% l. i$ @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. j8 R! X$ z' e5 n# }" P* O! M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" t- t  G0 i/ d; }- x- T9 s6 b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: \* R" [5 H6 k3 `

4 E, D' R. c, i0 u: c3 H    mcasp->regs->XSTAT = 0x0000ffff; # ^9 a% W. X* g+ v
    mcasp->regs->RSTAT = 0x0000ffff; 5 T8 F6 g& g5 `7 `0 b- R6 n+ G

$ \9 E; h3 ^, Q! R! M: n* S* o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  h- j7 V/ \# n, R& a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 E  _7 a& E) }  e3 e( q" L& @# |
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: L7 h( W2 l8 D# Q# \; q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" m, o9 j# A0 S9 B9 P7 m+ L5 E

* j! D8 N8 B- K, ]    /* Write a 0, so that no underrun occurs after releasing the state machine */$ v9 H! c+ m7 n  a: x9 a/ n
    mcasp->regs->XBUF5 = 0;5 N- M+ i! Y# J" R* n3 G
    mcasp->regs->RBUF0 = 0;
2 Y  U% h/ P" f+ h7 S  t" M% H/ f; t! a
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' w. v+ d4 b& v' s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 q" w! \/ l+ Z! k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 ~: S$ Y+ q+ i5 l. v$ L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) r2 o$ K  I- s' S9 E' f
- X+ \' t# \; J8 u% e( T2 {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; ~  {3 i, l+ p" Q! L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 y0 H8 ?3 Q$ t4 S' j2 s4 \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ ]' Q0 H; y! \# ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' p. D, k9 D5 Y6 X# j8 x- U" I4 r

) [" U, j) @/ o    CSR = 0x0000;6 m' D0 G' w( E( b) ~
    INTC_INTMUX1 = 0x3d;9 ]2 K" ]1 C5 h( G1 o
    ISTP = (unsigned int)vectors;2 G& `' }# z* k2 [/ l/ v7 g
    ICR = 0xFFF0;  
! \  F: M; {! y) {/ [2 R    IER |= 0x12;  
0 m: v4 v# {8 R/ U6 K. G    CSR |= 0x01;  ( @/ i) `6 i# z* }
+ h/ u; W' M- t( L4 ?
2 W) K. t. O$ E' T4 Q( @3 Q4 f
: l/ w, `6 V( r1 z
还有就是两个输入输出函数:+ d& p$ U# t) T% L
void output_sample(Int32 out_data)
' y. E) y- g; I# I{
- P6 h- W/ n, M: b& \: t8 I  AIC31_data.uint = out_data;  
" D; u5 g" F5 n4 w* \  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 U2 \% H" D; |5 j( V
}& f' N4 p- m0 b: }0 J
9 k2 s9 l3 C( y4 `0 @( s
Int32 input_sample(void)
& h  q2 p' i* a8 z2 j{  1 l( _- j6 q- y) g8 S
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% G) C3 g, S; q  return (AIC31_data.uint);
: r7 m# o6 I2 e/ m}
/ A! {* Y6 t- d5 K* X3 m* k9 T
分享到:  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-10 21:33 , Processed in 0.040023 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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