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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' w- j3 v% S+ x; U2 [- W$ }
main文件:6 H, c8 C& T/ W4 }+ F' r% K2 K
interrupt void interrupt4(void)  ) R" D. {: {! n+ b  W+ t) m" ?1 M- V  X
{
4 c+ q8 z) C# H; @0 |  Uint32 sample;$ s' k4 V, `! P( v9 d9 n
! a9 k8 ]0 m# K1 v+ r
  sample = input_sample(); // read L + R samples from ADC2 f! o0 N& o7 c* A% q$ k, k2 G- U
  output_sample(sample);   // write L + R samples to DAC 5 j! w' r* b* R( |1 U7 q$ x
  return;
( R: g( J/ I" e3 g$ |) o}' C% V& F- T3 `9 H0 M4 v9 S

, S5 N/ x+ C! zint main( void )
, h$ y. C2 _4 |% o/ ?{' I1 F  M- m+ n4 Y; a4 g( i

) b5 k7 T+ s( W( G. C    /* Initialize BSL */- \- J% `, o0 r- @5 u8 }
    EVMC6747_init( );# |# _* l) E4 S# E
        /* Call evmc6747_intr function */! m& Q& Q* h9 }$ }' ^1 K. t3 b
    aic3106_init( );9 q' d0 l2 @! \" |
        while(1);8 h2 z8 U/ R2 a. t. c5 B  K; A
}& c2 l1 l6 V8 t

3 T) I3 W' u5 ^. [; c8 d4 j+ ?7 \. r" H" x2 j
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; B1 t: d) f- g7 g. L% x( Z2 y
/* Initialize MCASP1 */
- G" |& I9 s" g7 P/ @    mcasp = &MCASP_MODULE_1;
; W7 ], I: E0 Q' J: r: M* [) Q' V    mcasp->regs->GBLCTL  = 0;       // Reset
5 h. Q  s. |- N* Y' Q/ z2 _    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ G  d% [4 B; f. e( G) ?    mcasp->regs->XGBLCTL = 0;       // Reset TX
- p* ^- Q& K0 t4 b" y" H    mcasp->regs->PWRDEMU = 1;       // Free-running
: k7 E" u" R4 }% S   // configure McASP0 receive registers2 t: U) g# l' X  r7 ]3 \
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  z$ X: u: Q9 ^) ?
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; U2 d, v: e  S0 X2 C. P
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, H3 `# q4 i' v7 u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ g6 G1 V$ H! W3 R/ _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 E4 }. B  z( E' Z7 v    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 T- m* e& _" W. O9 k0 U' l
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- M6 ~% H* X( L2 Y9 C: }9 X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% p, A  f! U2 L  S  a$ a  ?6 F+ ?- ~: b- i/ Q' s8 v0 B
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ [3 ~. X0 F+ o! O) e, y/ c
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ t8 j3 P$ r) y; L5 e$ p    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: A3 P. l3 d. p5 T4 S' O8 U    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ V  R& R/ Y! Y7 l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 H8 T* {# c* `0 ^/ ^) {0 m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 F& v! `$ i7 h5 |) q( `5 w    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. j/ ]* e* {1 Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& G, q# W! Z8 I1 ]
' O* R3 o+ P2 Z  W/ V' i2 b9 r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! _% @2 C/ q4 q3 e    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ _6 ~9 E- _* v8 x" j' K
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 Y+ O% F2 d( j" `4 \
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 M0 b  @, a) ~; I" B& T$ k/ G9 g3 s# T; {' n
    mcasp->regs->DITCTL     = 0x00000000; // Not used
! [# x' k5 r# ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 ^8 S  U# A: X# Q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 E/ f4 t2 A& L; {9 z, G- p+ Z4 I* l% G* l7 M' m7 F
/* Starting sections of the McASP*/4 Y1 i8 P, k& ^6 A
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % Q( K6 o& t- v. v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ s  `' g$ o8 \% u4 n    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) m6 i" i1 }& R; L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 g" H- a; p5 E6 f+ X8 K; T7 B' J

% ]8 s' X" U- c( I- c: w" |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) \5 O/ G/ e: q& x! k! _# f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 c# Z( z! ~5 u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # m/ o% y( f/ V" S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* J9 i/ l9 a, `- @3 e  E% e
' m- w2 a$ l; V9 ~
    mcasp->regs->XSTAT = 0x0000ffff;
7 O" N( H+ k2 W* I5 z    mcasp->regs->RSTAT = 0x0000ffff;
- P% K6 y% q* d! @, ~6 z7 L0 ?
% @' `" Y) |: r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ d% D+ K& s' Z6 s1 w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) g/ T* u# ^( D4 R/ a& u  C% @4 w) m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* k( N# @" W% m0 G* F! O1 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; c# o% ?/ K7 g

* D4 q, Q2 h$ i    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ M8 {/ R8 d; g" Z    mcasp->regs->XBUF5 = 0;& R, _: u0 Z! j5 w- c
    mcasp->regs->RBUF0 = 0;
3 h  C4 j$ Y. R: q2 s, Y1 w0 H: D  P* Z0 @5 b, S1 g
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 R, |0 x& R( |8 e& F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' A5 q$ N' w5 U9 j    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ N' y% B: E3 f/ A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ S* C, e& ^& S% R" F1 a3 l

1 w  g7 K( A- G. v* |6 T4 Y/ L- \+ B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 V- x% x5 k) q9 K- o  S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! F% j3 ]' c0 v: f2 f' t0 q! `    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( H' r# O8 x- X8 B" [4 e" A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& Z  p! m  x5 r" V' R, F
1 E2 @6 e/ w. U  h* R! h
    CSR = 0x0000;6 b3 d3 |% G# U. W" D! R
    INTC_INTMUX1 = 0x3d;- F( Q2 G# O0 ^) H
    ISTP = (unsigned int)vectors;
9 _1 c" w5 A" K; X$ r; k7 a    ICR = 0xFFF0;  
4 q1 M8 R/ m6 H0 Y9 I5 L    IER |= 0x12;  & e- C- r9 x4 W# d; Y, h/ n7 v; W; t
    CSR |= 0x01;  
2 @1 k# i" f9 G
+ m$ l) t* Q! }4 \) H7 Q; e) C% o; M% o

% R: c5 B6 z0 v# b! O还有就是两个输入输出函数:/ [( f, a0 g, f
void output_sample(Int32 out_data)
3 y1 s  A. O! o{& b$ @8 |  g! ~) |7 u2 ^0 O+ k8 Z
  AIC31_data.uint = out_data;  9 l& M8 d: u& {, z9 D6 f0 V! k3 o% T
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 [0 M0 p2 S' S8 i: {& t}: u. q+ n; I4 j% e

3 `4 o. v& u  Y8 T( mInt32 input_sample(void)
9 I: ^9 e, ~$ B+ L) R{  $ }+ v0 ^% K+ }6 X
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* T4 Y" T; @( f5 S# Q  return (AIC31_data.uint);1 @3 A( Q  S8 A4 l
}
* d8 z1 m! O, Q4 ~9 e) A2 ^0 I" C! C6 U% M
分享到:  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-9 10:16 , Processed in 0.036221 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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