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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" m7 I8 v+ P) n) ]* ~main文件:
4 X. O7 U( @) |interrupt void interrupt4(void)  
3 t  h, D5 a; T0 j; r' c1 |{- h4 S8 S. u5 X2 i2 H
  Uint32 sample;
% V) }. X. [- B& r9 t6 K4 o5 ]
* W! J* O4 b. a& G9 F) L  sample = input_sample(); // read L + R samples from ADC
# H7 G0 W4 n3 P8 C/ l  output_sample(sample);   // write L + R samples to DAC 6 d1 R& l( S) M8 d
  return;* A8 K/ {- v( z6 d$ k# H0 \" \
}6 v" \+ R" ~4 D: S9 g
) `$ B* K) [# y7 c
int main( void )
8 a' x4 i5 q/ D6 ?4 c" R6 v! m{
8 L* e* C" z- I+ c* m1 |& V! K4 k- `# {( l3 a* i6 T
    /* Initialize BSL */
  P, ?' H& b6 L- Z* c    EVMC6747_init( );
# C' U  C  C! X6 N2 s$ \        /* Call evmc6747_intr function */) d5 G1 [5 j3 Y% o' P
    aic3106_init( );+ h/ v5 \: q7 u8 o1 s
        while(1);
: P5 t* a5 n, w8 _+ j5 C}+ y) _4 ]4 \2 M6 e
, f0 V6 N& t$ X5 t4 V. ?% C: S

% p" H: m3 C% n8 S+ L' S% w0 }+ U* w: faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 Y* J; J, l) V3 R
/* Initialize MCASP1 */) x7 `" }) q7 t
    mcasp = &MCASP_MODULE_1;
2 ~  I- r/ T, x4 j7 }. ~    mcasp->regs->GBLCTL  = 0;       // Reset% J8 U" p; ?1 W: e
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- l: c, ?. t1 O  [  Q    mcasp->regs->XGBLCTL = 0;       // Reset TX. t3 B" n) `) c; L3 v5 V& M5 U
    mcasp->regs->PWRDEMU = 1;       // Free-running
- A1 C& k" B) P9 f3 n   // configure McASP0 receive registers
+ J% S# C8 [0 n( l: W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, @4 A9 n3 t! z4 Z# E$ Y$ g9 A: h
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# i( z. A$ I( |3 X3 O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 n  C4 T+ |! S. a# g4 z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ a% c: h- `- x; O    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ s) H7 @% A' I% k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 e; \& c4 g. e+ v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" Z! i& P- c* j! B3 O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- \2 d% L) d5 W2 J4 E. C( ^
" f! N! @" C& J5 X! ^6 ]+ C* ~9 G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' Z5 K+ ?8 Y% e: Z3 Q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% }+ D1 }( o  }" h    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, q4 F+ v: I& Q0 C( |7 Y" |% x" h
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  o" O* s: e" M7 N0 I: I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" E1 C% r# E) m$ o3 ?( v5 K
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 s4 S) x+ u* P5 h0 U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 Y  V2 D2 e2 b. Y& o6 J    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 b6 y( l; t& {) C! L2 `; J# x% b; ^( m2 O" g5 U7 E7 [$ f4 p( s
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 q5 {7 n) K7 C5 t: n
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 e8 z2 w" S* ~, l
    mcasp->regs->PFUNC      = 0;          // All MCASPs! w1 s! n* q* u0 R. ?& f# l0 s1 [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' x% y7 E% R; {- p# t1 h7 w) T8 Y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 }+ w8 N2 V/ q  W3 q( }2 V) I    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 R# I5 `9 }; t, v/ g4 o
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ W& J3 S* V% B% K1 n1 i6 z( ?) @2 ?

# M/ L5 ?0 x8 r3 C+ A/* Starting sections of the McASP*/
2 e: j+ @9 X! N/ f0 K0 v    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) R! t! d/ _: w; d; d- z. W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( k: D4 H0 U& E' u; L1 I! z; k  R
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + f4 D( H; A2 o0 t) B" F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; z: T4 O3 h, T/ I& A

& s, X5 y8 E/ |* Q: e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" T2 j( n, L' ?9 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' e! W5 J3 q# V$ U/ e* o    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 }9 {6 w$ {( j4 H$ ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ G1 Q0 z! l6 t2 [9 E* w6 Z- u# z/ o
$ h3 ^5 z: V* r& @3 t% T, {: ]    mcasp->regs->XSTAT = 0x0000ffff; " X: J. j+ ]: D4 K: ^6 Q
    mcasp->regs->RSTAT = 0x0000ffff; . u7 P" _' b& s( l0 |
0 ^* `! k5 @. ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ t& D( Z; T4 E! Y" }; K. V# [3 s4 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# k3 E6 C5 e5 g% I+ e- p
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ Y' u2 `8 c7 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& i% e* d& X$ ~

% k% N, `* c& L- o( ?: H' u$ r    /* Write a 0, so that no underrun occurs after releasing the state machine */
, z: g; T0 [+ U. X* ?, z    mcasp->regs->XBUF5 = 0;
& e2 R4 M  I( F* i' H! t    mcasp->regs->RBUF0 = 0;- k* Y% K3 ]9 l1 h+ U, r' e
8 ~. t2 _3 d$ Q- f6 a% q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 }2 [' \; }4 a5 o( X* {4 M0 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) w8 A- `3 m0 i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # d4 `  {) j. n' i' t: ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( _# W2 L: f  n" Y& v5 T

5 |. d1 e, _( p+ l8 e  F    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . p4 E, V& W2 W/ g) r) s2 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- f. a2 x! \; ]# O0 @, g
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! M& ^4 ^5 V6 V" O1 }6 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# x5 L  s* r/ u8 Y" A- [: Z

  B! t) ~0 u) f$ r0 \$ |    CSR = 0x0000;$ D! B6 d, H$ z5 J) J; }
    INTC_INTMUX1 = 0x3d;* F9 @  U3 x0 @  Y
    ISTP = (unsigned int)vectors;
; @' d. A; C8 a! l+ H. T% [    ICR = 0xFFF0;  
; e2 b* L3 v. \- Q+ _$ h    IER |= 0x12;  
( m- f" C( @" E4 C    CSR |= 0x01;  
' a2 P: r- n& f9 a  I( o$ a+ v2 Y/ m- F( i
% e1 D: X0 j9 M7 q, e" _

. Y- Y) K6 R+ W/ J8 r$ m3 Y+ ]0 B还有就是两个输入输出函数:  \, m. M* }! a, `
void output_sample(Int32 out_data), O" T( R1 @/ f& l, Z9 K0 x% w. C
{
% [0 W" W- F1 r  AIC31_data.uint = out_data;  " U! j' K- z" `. d
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 i9 U; q6 s" D2 E}
9 |8 S# v& B/ Q6 F! e+ m* X  g- Q& T
Int32 input_sample(void)
& r& m( R" k" u{    b" n- o3 ]6 O# [7 I
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. e& c# G( j. T- k  return (AIC31_data.uint);- E) \  D6 d1 U9 O* d/ v2 D
}" z% @7 {* d% `9 {0 I+ P' ^
( w* V' t; h9 d7 W. s" p5 h
分享到:  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-31 02:09 , Processed in 0.045424 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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