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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) f- [' |: V( j/ N
main文件:
0 B! K# W1 y, Q: u, d# Cinterrupt void interrupt4(void)  
/ N8 q* B3 _% j4 \( \{
( I- }7 `6 g# N  s! _( k# ~  Uint32 sample;
; f5 u+ |* K0 O; _8 A" F! c) u8 C: g. r2 p$ D3 ~' b) T
  sample = input_sample(); // read L + R samples from ADC" @4 y  O) s8 p/ o) F2 J
  output_sample(sample);   // write L + R samples to DAC 4 t1 S: q0 N) r+ \& \! P+ _( F
  return;$ u! G' L. S. t
}# L: y, ~) ^: d7 J" F1 Y1 X

/ [2 s1 ^' g$ f- ]6 s3 {! R. b- }/ |. y+ Qint main( void )+ w) z* k3 Y6 l5 |7 {1 O) N* r' M
{
- Y: ]9 K  ~" H9 y# t8 U& s
- t0 G$ C: i# l$ h6 M% Y/ z    /* Initialize BSL */
! S3 Z" A0 L; l$ U' X    EVMC6747_init( );
+ s4 p& a9 y1 u3 o  {: O        /* Call evmc6747_intr function */+ m* ?" e4 l  p5 y
    aic3106_init( );
! R1 d( a8 Y) u4 M# a4 g        while(1);: W* e! q4 ?% h: `' t$ v7 Y
}0 X2 m6 f3 K( ]0 ?

) U; @- D! ^0 ]+ @0 j9 ]
6 ~3 f- N: m; Q! E, s( t/ j2 Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 ?; b5 `! z* h1 J6 Q* L8 ?/* Initialize MCASP1 */  u2 \1 O( J9 Q( M, L
    mcasp = &MCASP_MODULE_1;. e+ m% I, _9 b
    mcasp->regs->GBLCTL  = 0;       // Reset
7 D5 S# t2 t9 M' t. P- t    mcasp->regs->RGBLCTL = 0;       // Reset RX7 g' y5 z5 u" g
    mcasp->regs->XGBLCTL = 0;       // Reset TX# A6 ?0 u' q* |7 [8 A) J
    mcasp->regs->PWRDEMU = 1;       // Free-running' j8 {1 h% v( O% m( _
   // configure McASP0 receive registers- W! C  k! @% q6 C- Q  \% x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% B( W/ A* Q/ I8 o' m3 b# @; O/ Y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, Z- Z' M' i* o) B+ J( j" U- k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; [" k. f! R8 J: S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! A; l7 f* }) k5 [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ |8 c/ y+ z8 P& a' M8 j5 d# q. c    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 O- R7 \! ~* W* Y$ \    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 K5 U6 r+ \5 U9 C$ O5 |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- a* q8 z9 K$ e, r8 u0 R
4 C! e4 k: b* j1 j* y/ h) f5 [: y0 u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ n/ U: _1 e" ]/ z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 C( p" e9 q5 n& g% N) Y) _, A
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% z- [+ |$ {2 p5 D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: F2 c' A% {( l' w( T4 ^3 V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ n# Z1 W/ f8 p9 {' x1 e+ d7 D
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ ?9 x8 f3 i3 M, Z% e  \- n4 P
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ B, A. V; `* C; G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 H  p% U4 T( f8 w! i
: ^+ m, [' I! s; W/ [
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- f* K; }" N% s    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 h( c, X, Z" z" r2 L5 }8 i1 O0 X! |
    mcasp->regs->PFUNC      = 0;          // All MCASPs" L# }5 e, e- T) w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 p( @" H2 d* ?8 S! @- |4 G, P5 N+ n, x- s) k# l: w
    mcasp->regs->DITCTL     = 0x00000000; // Not used" _& E  J' _( H+ M) H$ C. t. y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ h  T/ ^7 A$ w) U3 D1 p; B% q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 A7 J# A0 P2 |1 S2 g& W" e" m. ]3 d/ \8 Z
/* Starting sections of the McASP*/
# G. |. Z0 o" N, N& _; G% d    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 z: B$ i- l# X$ G3 E' V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) a7 S& I3 O4 n
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ h, N0 X) [# P- D/ s6 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ b/ h' T/ t4 N# o

9 v% L1 T9 }9 B- e9 [0 l9 C6 `0 }    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  u8 k& F  y- x1 b+ R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, u, a0 D. C* \) n! P7 ?6 w8 R7 Z9 V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 A1 K3 Z4 n; j2 K6 e- z, Y& a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( y4 ^& ^- |1 h1 |
: a' C; Q! X: L
    mcasp->regs->XSTAT = 0x0000ffff; # G9 ]/ q5 ~) Y9 t
    mcasp->regs->RSTAT = 0x0000ffff; " j+ L) C( i: l  T

+ W, ~4 g# ~# G% E# N' k7 H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, y, k4 Q! F" M4 e- g: z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ H& e* D. I3 K  y+ g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # |) d1 C. i+ ]6 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& Y( ?% W7 m2 S2 P5 @
6 @4 ^! e6 E% }6 j1 ?
    /* Write a 0, so that no underrun occurs after releasing the state machine */+ S4 Y5 ~, p9 b" T
    mcasp->regs->XBUF5 = 0;
, @; g9 T4 o. A% y% b4 M, q    mcasp->regs->RBUF0 = 0;
, I, M9 Q2 T3 h# d% V+ v: k0 B3 Z3 I  _' Z: G! A" V
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* P# E( Y- Y6 y% v$ }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! s* [+ H& R  p5 D5 W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 g$ J; \# O. H: a" ~( t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* `4 l- Z/ D+ g- X
) P, w" P' r. k( e& J    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# _8 _! z3 f- A5 {& f" q7 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. ~/ r% p* f/ s2 I( A
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & P* T6 V) U5 ~/ T( H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" h0 p/ l* x. D' l

1 k& |2 F1 E8 D- N% M    CSR = 0x0000;
4 t" A/ `9 Z0 h  r9 Q5 A5 ]    INTC_INTMUX1 = 0x3d;8 t) c7 n+ G1 j$ r; J7 A
    ISTP = (unsigned int)vectors;
6 u( q4 c( t8 Y/ Y" t4 w# i    ICR = 0xFFF0;  
6 u/ K: p/ }% I; \; M# |    IER |= 0x12;  
' p( B% T& ], r& C1 n) |* ~, Z# @' N' z    CSR |= 0x01;  * a2 k2 q, K4 i- x% z
+ O6 A' f; t# c2 I

! E7 v. F% D& E& `8 L4 S2 P
/ M3 v+ |# ]+ X/ x& e还有就是两个输入输出函数:
- [/ K$ m$ J! O* S9 t: vvoid output_sample(Int32 out_data)+ d# F& {9 {- t6 r
{: ^3 r) Y9 t$ W, c1 ^$ \
  AIC31_data.uint = out_data;  
, \7 L  B6 P( `3 q, j. G  MCASP1_XBUF5_32BIT = AIC31_data.uint;& L) q, X4 m/ Y1 a. O, [
}0 V3 o! q7 P1 }

: G' O% k0 v' E+ I6 n& G5 TInt32 input_sample(void)
; t6 @6 d) u* ?+ S& ]. g. X{  
. F0 G4 C2 B8 J7 f6 q  AIC31_data.uint = MCASP1_RBUF0_32BIT;" M# q1 l1 p' l
  return (AIC31_data.uint);) E. B* M& k4 H" W; n- o' H
}  P  ]; B  a, A
0 e3 c& h( M# n% N4 |
分享到:  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-1-12 18:47 , Processed in 0.041911 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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