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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 d1 j/ K) \3 W' y
main文件:
! x" n; Z3 g, K/ T5 O7 g8 |interrupt void interrupt4(void)  
8 D: l" O1 ^1 t& C6 V% _" b1 N{3 z* E9 f' I6 [* |$ R4 V) E* w7 |
  Uint32 sample;
8 E5 Z! c" Z: z/ b
5 l& X8 X2 T1 E8 t  sample = input_sample(); // read L + R samples from ADC4 w& o) S4 s: n% k
  output_sample(sample);   // write L + R samples to DAC 6 c9 U& D- B- z/ p' K
  return;$ ~# J/ m3 l, U+ f
}" {+ ~* o4 N, F  o

: B# q/ h+ M+ `" b- Y6 `4 {3 aint main( void )
0 W8 h- @" F/ `8 K, C5 k( z3 V{& u  b, H) n) T! [3 U1 m

2 t- k' s) d3 ]& C3 X) x    /* Initialize BSL */' z" M; ]  }6 ^, l
    EVMC6747_init( );2 d/ ^- E9 L/ f& a
        /* Call evmc6747_intr function */
2 H) O9 l% L! l. Q2 l- W3 [1 U& A    aic3106_init( );2 J" Q! ^9 K, X. E" a' E6 [) V& G! V: u* B
        while(1);
: E6 t$ b4 ~" ]4 H; ~: N+ g' N}
5 d, ~  N) c2 o# d( r  A2 o" Z$ y. N* ]" R7 K: Q

4 r9 @2 f$ v, F0 o! ~6 u! ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* O! t6 }1 S- i. D4 C3 u& p6 u
/* Initialize MCASP1 */- `( f* i8 b. y
    mcasp = &MCASP_MODULE_1;
) Y0 s, G* n+ J% r3 j" Q& |- k, f( P    mcasp->regs->GBLCTL  = 0;       // Reset
' y2 R( {  k: t5 Y+ }    mcasp->regs->RGBLCTL = 0;       // Reset RX. @# h2 F- g- B7 |; A
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; R7 y( w) i% t4 |/ f( i    mcasp->regs->PWRDEMU = 1;       // Free-running1 [1 ]% Z6 r5 e1 X9 c
   // configure McASP0 receive registers
' K0 |, ]3 A3 I" C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- f1 [( y: `, V3 T' R7 E: z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 H" @$ f6 m8 `/ o5 t. l( I0 T9 c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' y4 a4 x* m9 M$ v7 M
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 x6 s7 i- w3 n6 `0 e: ~
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( _1 v, M! P  \+ p    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ `; V: d/ k- p2 _
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 K+ p, G( X# h: N    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 T7 ~4 ?6 R# w6 h3 E* \; u5 N

0 r7 Y- |7 b- W7 F; e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. l; f, |7 j3 T" h' q( y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, J( Q, Z9 X+ R5 I& H" B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Q4 h  B! q; r+ w" n
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& M1 B3 I- C+ b: q7 q, f
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ a5 _7 o2 k6 [7 Z9 u' L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( ]9 B: }  x4 O  N2 R. Z    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 x2 N6 ~& L3 z6 b( y) \& U6 e" r8 @    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# ]3 g8 F8 R- C% Z1 @! i+ R) E" ^4 H8 i8 x& [* T2 U
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( X) {! W& }4 ~7 Z: G5 A" L; N
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% N. p8 O( T! Q5 v9 l
    mcasp->regs->PFUNC      = 0;          // All MCASPs" ~5 V, M# ~. U5 g9 c
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 |. ^, U+ W- J; t2 M2 O4 ]
! w6 U. ~2 ^5 ]4 S) a8 ^' ?  T
    mcasp->regs->DITCTL     = 0x00000000; // Not used8 [, _# l' z3 S7 C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( G3 R/ I4 p" G1 `( v
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 J! V) P: D8 ^* O6 x
, @; n( R; p$ Y5 m0 X) I' W/* Starting sections of the McASP*/
( E; \* Y& \; O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 k# w0 J+ m7 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + x  L; `& I. F% G8 Q- T. M4 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' t& y9 U; s9 P1 m% E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 b' a; U# @. U  m
/ E9 s& c" R6 W) H* E( z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , t- t, U  _+ b# I& y1 S$ ^- x3 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ Q$ F$ G+ s* [9 Y) T% M9 q: ~
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ O7 o% b* b# v4 b# U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 }" `9 q: u  S. d) Q, @" T0 W9 c; K
" {3 @" O1 [, i& B* x0 g! i    mcasp->regs->XSTAT = 0x0000ffff; ! D# Q; p6 n1 ^. A
    mcasp->regs->RSTAT = 0x0000ffff; 3 w0 @$ F3 b: @: r8 N! {

: R( y) u: f4 z$ O2 i/ W) a+ _$ V! \    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, j6 n! N  Q* N/ {  Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) p7 K# V* O8 {4 ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 x8 @7 d9 H& t4 p( u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ E* I7 N  M: z+ m3 W
) F5 Y' o! k2 e; I0 H/ V4 N! r
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 ^& Y) ?: G9 O2 U
    mcasp->regs->XBUF5 = 0;% ?6 r" p( T' H) T  R
    mcasp->regs->RBUF0 = 0;
; y! U+ T  L! a
1 n' I" E- p& h7 X+ h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 L( Z) U2 i. I  O" N3 h! B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 `% _5 E0 h! h; T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , O2 K* s' I1 [  p8 H0 N) U1 I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 n- K* R  p7 ?0 E  t# s4 l$ B0 D( j: T4 j3 l4 ~: B8 O8 v
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 m6 f( R# y$ g1 ^6 _* y5 a; X- a& k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 b9 T& C2 n) A( _7 X  q+ t% ]    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) q7 P' V' O! A5 c6 I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. Z1 y1 Z* W* ?" V9 P$ C

9 v* C4 t' Q$ X' ^4 l1 ?    CSR = 0x0000;0 x4 K. M, p- q: g4 m$ ?# A
    INTC_INTMUX1 = 0x3d;: N- q* M  h& R, x$ @0 j
    ISTP = (unsigned int)vectors;
, ~9 B, N, S, c4 z$ E    ICR = 0xFFF0;  
. Q. M, T' S/ F0 }  \- Z4 X    IER |= 0x12;  6 n( o1 G$ x& m* R2 `5 D
    CSR |= 0x01;  
8 S2 Q  r" ]% G5 ?# k+ C4 C  \- c; [0 T6 l; v! P* h1 j

6 t) P- E* j' _! W; A4 x# p  Y$ u. S  _- ?
还有就是两个输入输出函数:
& B1 h: f) }* f  b4 mvoid output_sample(Int32 out_data): d  B( X2 L* U% d* ~) ^9 {
{
" R( |& n4 x! p. y2 G( k" \* N2 h3 y  AIC31_data.uint = out_data;  
  u* `# A; ?% {+ l. O  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" q. G+ B4 C* I}% d$ \, \4 N! F* w5 x

& W6 o+ E5 l/ x* {; L7 a8 B3 N0 iInt32 input_sample(void)
' I' \  X! |7 ~0 ^) o{  % {- F6 E7 v1 q* V+ q9 A
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. s$ S% {0 \+ W  return (AIC31_data.uint);
8 e% B( n/ S3 m2 T" p7 s9 U( W}
; z' p' {3 B2 |! Y$ I  @$ e# N6 e" r$ F1 |- v. m5 U# i
分享到:  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-2-17 20:40 , Processed in 0.040651 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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