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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% J6 h. s+ p0 P% ]. l/ jmain文件:
8 [8 c4 z" G8 x+ \; e2 Y$ X9 Yinterrupt void interrupt4(void)  ) d/ I. ]. ^- y/ K' F! R
{$ o7 z; l+ U# ]8 i$ ~% C
  Uint32 sample;
8 ?  R' x/ E% X3 m  B% ?5 k9 R* U& p6 J3 B
  sample = input_sample(); // read L + R samples from ADC
  v# m; l2 \, H6 i8 f1 U3 Q+ ?  output_sample(sample);   // write L + R samples to DAC % w0 j4 K- z+ d; ^
  return;9 B. {) w- `, L4 D. _4 `# w
}
+ z& e, D* r+ x- Q$ p6 T" G! u+ e& Q$ p8 K( ]
int main( void )
% E; \: L; c+ i. _+ k5 r& ]+ Z{3 P$ K+ h5 U- c5 D* O

0 U4 f8 z* N2 g4 R5 t" S    /* Initialize BSL */
1 R( W3 I4 y3 u: x8 l+ S# z- r    EVMC6747_init( );, c+ R3 J; O: E3 u+ w. m; ~
        /* Call evmc6747_intr function */
$ l4 W0 h3 b; I% M  E" g+ ]+ ]7 N7 X1 ?    aic3106_init( );
: ^  f# ]: D" H4 @+ Y% ~        while(1);) S% N3 s& k: t8 k  l9 Z! w
}" p& s% N2 g5 s  w

) l% `- a( s8 L. C# c6 F
) @  U# T$ ^/ j9 s$ D4 ]4 baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) J; m1 N$ s& ^. ^% ]* z1 a8 E; m3 u
/* Initialize MCASP1 */6 G/ Y( W# R3 @) Q4 Z
    mcasp = &MCASP_MODULE_1;2 r) ^6 _5 M: b2 o( m8 V6 i- I
    mcasp->regs->GBLCTL  = 0;       // Reset
3 h2 o* F( [4 h/ }9 M; v    mcasp->regs->RGBLCTL = 0;       // Reset RX6 _9 S- ^) |3 O! q6 h! x3 g2 f
    mcasp->regs->XGBLCTL = 0;       // Reset TX3 X' W+ I/ k. _. p5 Q2 M
    mcasp->regs->PWRDEMU = 1;       // Free-running! Y* ~8 r. y) m
   // configure McASP0 receive registers
) F" h0 t5 B1 R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 U. W# b' I. l) c
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 D, d4 s3 y1 m
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& M! g9 c$ O8 a" q* \% h" |6 }* i    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! z: h, h/ h, E4 u" N' d( B    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 m+ K# u6 a; l2 m, M
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% o7 D  k& W: Y, q4 u% P) e    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  j$ ^- A6 Y1 i# y+ }$ f    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 B. Z1 S) s  P+ G& L# U' B
! P. `' ^! ?2 k
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, c& P$ e# @5 O, C! h, S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 l- Y, ^$ \/ s8 U0 u    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 ]  q5 c! r7 e: p* P5 _
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: J( Q  P6 M' p4 r
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: Q; \1 ^9 ], o6 \3 \( F7 i    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 n* |6 }$ H( k. r, M: v1 L- ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& n, V( R8 w) a: N8 `( w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ?4 s6 a7 f9 b( c& v3 @
  o+ s7 S6 E8 D    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( L. j2 T  P4 ]8 C2 w" A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" B( A3 s5 w: g
    mcasp->regs->PFUNC      = 0;          // All MCASPs
  U5 n9 D) y% p, n    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. i; z7 e# A8 s" r! @9 \: E
) S, ?, q1 B6 r* b% y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 X" e# N* y: ?1 y3 V/ P( L8 s    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ `* q7 Z% {( f% x3 h    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 G  G% @! Y" x2 E1 W. h  w/ Y0 O2 R% _& x/ P! A
/* Starting sections of the McASP*/
  b% Q* d9 c% r" @; g    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 Y5 Q9 r' L' c' i& N3 I+ ~' ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 ]7 P% S8 j, n+ z+ K% E, U9 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
8 T& }9 i3 U" H, a3 G# S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, e/ T- H5 h' s$ r6 [9 W! l$ H
: R8 J$ Z2 V5 R0 T" P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% a1 E% O( s' m( s3 y' r0 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" Q/ n4 O4 e! l" @, X1 U! w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 v0 J9 O$ y. z4 `+ F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 H* L, T3 C1 ]5 m) b( ^- v3 I2 |
7 j! v; i3 l# b8 y5 ?    mcasp->regs->XSTAT = 0x0000ffff; " ~: [# c+ u6 E5 O% ~+ |! Z7 w( O
    mcasp->regs->RSTAT = 0x0000ffff;
5 E0 z1 h& ?& [5 M% u
% n: w- q9 Y* z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 i( l' ]! j! k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 F  |! A5 \% L  [  \) A9 I  T0 R
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 n/ `0 ~/ h2 r9 [' J4 B/ q  \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ [+ n  u: ^8 [& ~4 v
. o  F7 l0 R  ?  u0 I- v0 a: e
    /* Write a 0, so that no underrun occurs after releasing the state machine */. F1 o; }/ h  ^4 P5 j0 [
    mcasp->regs->XBUF5 = 0;4 a- P! Q  q+ Y3 q
    mcasp->regs->RBUF0 = 0;
, d# ?# V- b: q) Q: T  `0 B  I& j. h% P3 ?7 u! x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; g1 w# H  V# Y) z2 z+ \: Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& K% O$ I4 T! Y5 r2 k+ z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + K. C# m  U% U" ?8 ~/ J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 t5 W" {! E+ Z) U1 H
; ~& ?+ x1 H8 l2 o& s" u; H% Q5 U2 q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # `7 w: O0 M0 e# B7 ]) ?' ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 k: x% |8 g4 \. U* r* W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & p/ n3 z/ b; @+ \% o8 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- ?. s) v% I, q: p

. y8 z1 w3 o. n4 _' l  U6 m    CSR = 0x0000;" P$ C; [6 l6 o& ~8 u6 I2 o. a
    INTC_INTMUX1 = 0x3d;
9 n$ {/ t' }$ y/ Y% `    ISTP = (unsigned int)vectors;$ H- W4 L( y* x
    ICR = 0xFFF0;  & l/ s! M/ B- V, c! C
    IER |= 0x12;  
2 B7 @! q' P/ {. p! Z8 ^    CSR |= 0x01;  ' \" i# M0 _( e5 V

) L5 ]& i+ f2 T. v2 y: t* v, \5 I8 K
  w$ [6 U, t1 P- q
还有就是两个输入输出函数:
# p5 t0 ~. _+ [8 c, Fvoid output_sample(Int32 out_data)* y* t* \# l' v  J& k9 B0 G% |
{
" Z) p' z1 l4 q; ?3 m' W' d( V+ R0 m  AIC31_data.uint = out_data;  # S4 C/ p" Q, u1 W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: T: Y. D: `* z% _( e$ @; N}
2 i) {+ b5 v$ l
" o- L" ^+ u8 I6 Y' P+ ~9 K* p1 vInt32 input_sample(void)6 W* z! @$ G3 D
{  
- {+ i6 \2 n9 \& q, X9 @% _: w  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ H# v/ i4 ~6 Z5 ]8 _+ o$ _& n
  return (AIC31_data.uint);0 D; R1 l$ L' n
}
# W8 s8 E( ^" @$ A
6 V' d$ U8 S2 p* u3 K" J
分享到:  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-18 22:56 , Processed in 0.042314 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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