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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, H2 p" q  |! t0 K* b6 {
main文件:
5 b( g/ C* _( _interrupt void interrupt4(void)  
: I- z$ e& A+ i{4 V! B- g$ j1 \8 P, n
  Uint32 sample;
; L: F: h- K$ t$ d7 ^: c! N6 T7 Q# k* }" c8 |
  sample = input_sample(); // read L + R samples from ADC8 d2 ?, [5 J% t; f5 g
  output_sample(sample);   // write L + R samples to DAC
4 i$ p8 }0 i* N6 I  return;% V+ X! o$ G6 \2 R  h) ?7 o# `
}
4 X) Z! C" q1 G& q9 Z, W
( A: m4 x; l8 c: u5 z) Vint main( void )* G. Z, ]$ G8 h& o
{1 c" j/ f/ D+ u
6 W9 f$ l8 l9 ^
    /* Initialize BSL */
3 j# V# ]" L5 A. H  R  s- ?* Y* b    EVMC6747_init( );4 [6 a9 Y! |( C9 F
        /* Call evmc6747_intr function */
- P4 Q7 L9 [1 T! a: l' |    aic3106_init( );& o: a; c( F) b# D4 I7 w$ i" y
        while(1);
* ~" S' l! B( w}* i9 ^6 W- P6 i9 @  A9 l# M. G
' U& h; h( \& O* J! i+ @! ]

' Z5 Y2 g) [# J1 W0 C# H0 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 [+ o; |/ _4 z, e* N/* Initialize MCASP1 */6 W$ [- R) U# U* }# {7 B
    mcasp = &MCASP_MODULE_1;1 d2 f4 r: b, d; B
    mcasp->regs->GBLCTL  = 0;       // Reset2 @7 ]4 P2 h4 t0 T5 U& z2 a$ Z
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 J% d0 ]- [3 q8 r- E9 g6 o3 D. T0 G    mcasp->regs->XGBLCTL = 0;       // Reset TX: E' _3 \0 l3 k- B9 O) Y2 A
    mcasp->regs->PWRDEMU = 1;       // Free-running$ |0 `7 n) q4 s+ K; s
   // configure McASP0 receive registers  w5 m) `: [: t
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ d% r# U: T3 \1 i" ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ A: ^8 J, @8 J2 U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ D2 `/ S+ {9 {1 V% h! B' Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); j" i; c- T" X) p' t! H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( M7 y' O; w9 }5 b    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 {1 c$ \# T- N1 X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! J2 b" t+ A. ]$ e7 U5 |, ]
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, Y8 r( n! _1 C3 H1 |5 V" U8 f  _

5 u9 {( B9 l9 N7 i' Q/ X8 e" ^5 B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  q" T, S  E& ?8 V8 n5 G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- e4 g; Y2 m2 J: Q% B; ~% P) z0 C# E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( I$ R/ \2 K: Q- F
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  a1 M+ F( G6 @$ c# ?$ z# j  ?    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& z6 X& y2 Y1 [1 V8 C( L  ?
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* @7 V* n% O7 H  r* k
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! V" C3 s+ F: `, a: y5 S
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- l& ]5 z: [: y) c, P5 \# m
( |' k* E- `2 y/ I    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" N4 N) L* w$ a) L" Y' [# H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 N2 j" Y2 E4 e: l, h) {: c6 r
    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 q0 _; v# ~4 u* J; B    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* Q# ^5 d6 o6 V: f( x

- H, D5 O  S* |' J% c  ~! g    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 ]6 L, ~' ]2 b  j* \& S* D    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 P) Z, d7 w  J% V" e    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 k$ ~  O3 }9 }$ B8 C/ @! b4 a  D7 Q5 U' f$ U) y+ I  \( f
/* Starting sections of the McASP*/4 I7 A. @* K" r- C* K8 h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + D, Y& g& M- w0 h2 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 ?: G8 m' A( P1 f5 J4 m% R- v9 ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' n3 p0 V5 M2 a& @- U& r. Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 H$ d  j! I9 s3 A, P% m7 d! P
: D- @& M! L. b- O: N+ ~, E" q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; \% y- w. n0 l* e( m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 M* \; u6 V$ G4 W+ N    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) p9 f& H! Y) p0 x2 e6 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, {: ?' A5 r* A9 N; w! Z) V
4 ^- Q0 [: [3 ]. N' J6 o/ q    mcasp->regs->XSTAT = 0x0000ffff; 8 ^/ L! X8 F" A& g- z# o; L- e
    mcasp->regs->RSTAT = 0x0000ffff; 2 j3 f; ]5 M+ t
( T; k1 X7 j8 |8 f0 D' @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 O& m* t5 S* d# P3 _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 n6 }& [$ C- ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & E8 w5 Z9 K* e; C) Q6 x  p; G8 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 B& h& ?+ J* k. p, v! f/ b( p
9 F: o' \9 q6 u/ J, ^    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 ~5 ]8 s' ~) C+ y* H: D    mcasp->regs->XBUF5 = 0;
% N' e/ b* K1 K% T& V    mcasp->regs->RBUF0 = 0;2 L9 P+ m  {! n. @

# {; U, q  @& M& e, o    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 ^$ |, }2 w, S' n6 m  B7 Y! D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 E. B9 q% M6 o3 D3 Y# O4 E! n
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   D6 f8 k- Q- _8 O# `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 b/ w. ~0 k6 c. ~5 x% ^9 \' K
1 E. k% f2 X; e2 |    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : P% V5 N: t( c$ H5 y- Q; r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 c2 c+ Y$ h5 K- ?9 h# g  u/ ]. n
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ {6 A6 ?/ U2 x$ I  d0 S+ d) I; f6 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 l" Q  l+ I2 L0 K' w, Y
3 }3 I5 f' T1 A6 a  X    CSR = 0x0000;
0 k9 |9 J3 K% y& O! ~    INTC_INTMUX1 = 0x3d;
$ g) l4 h: x& I" H    ISTP = (unsigned int)vectors;
4 J9 Y5 z7 Z% q  l    ICR = 0xFFF0;  
: E. U. K7 \# J: h) p& e8 H, j' s7 e3 M    IER |= 0x12;  $ X: Y7 d& t+ ^+ m9 e
    CSR |= 0x01;  
3 S% I  H9 h0 g3 V' h3 @
* A& ]6 J" ]. T* r0 |8 I
; g: c1 K* F4 ~2 [, S- ]4 U
6 |+ ^* r/ h1 c" n6 t% f' ^还有就是两个输入输出函数:
" j% y3 V& I  Y+ Gvoid output_sample(Int32 out_data)8 \' H( Y/ o9 Z  \
{
1 V3 d4 I+ ^5 n  AIC31_data.uint = out_data;  2 V* z: I( Z# r: R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; S4 w6 q) ~/ R0 `. W4 E" `% a}* q" `5 I+ i' J% b6 d

4 Q2 A0 o4 x2 z, k" d7 z" bInt32 input_sample(void). R' @  |& x; z, v4 z4 s
{  1 `. Y+ G4 R8 Q, O7 X& |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;" p6 S! }/ w) S$ W
  return (AIC31_data.uint);
* h0 L0 _& U# m2 m}
6 N) p; m6 n) Q
. x( K; e9 B/ S/ s; |. x" k* V9 e
分享到:  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-3-9 22:47 , Processed in 0.040212 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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