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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 z8 e* o: x6 V6 K
main文件:
# ^: e; u2 Q/ k3 `4 M" n' Ainterrupt void interrupt4(void)    j) L  b' w0 v: X0 G
{
. B) m( f- o3 T* |& K4 F) t: w  Uint32 sample;" R# e; z6 P/ Y6 ]
# g" ]+ y9 ^: x4 m
  sample = input_sample(); // read L + R samples from ADC
- i* h+ D9 q* t; S  o, e* s0 q, \  output_sample(sample);   // write L + R samples to DAC
9 f/ K; X) o1 d0 S1 d' H7 @7 I  return;
5 A$ v  I% c7 _+ g* d}
$ Z6 {0 o2 Y& _; e
& n' v4 v2 h8 i) O; r6 fint main( void )3 |; l  B, ~# s: h( b; M3 V. i
{
' M5 d" `& z: G
1 r$ V0 [& m+ u    /* Initialize BSL */
& u2 q) c, l) U4 S5 m    EVMC6747_init( );' z. k8 x  B' }* u
        /* Call evmc6747_intr function */, C0 e+ v3 r2 N
    aic3106_init( );3 D* b% a! W. C4 B! B3 e8 H
        while(1);
  L; i  {+ N9 K; |9 d" {* n9 A}
+ J: p! ]$ n0 _3 g. F; S! F- R. S" u5 a  T) R' l6 c
/ i! b8 w, B5 S: t- D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* p2 V  Y% [+ `/ `" }+ a# Z
/* Initialize MCASP1 */2 [  o) B; m4 c& T% u+ e
    mcasp = &MCASP_MODULE_1;4 W+ l8 Y) S' n. P. t2 q
    mcasp->regs->GBLCTL  = 0;       // Reset
* l: D1 n: l3 M) k+ j) p    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 h* g7 |; G! ^& e& |' m2 w9 z    mcasp->regs->XGBLCTL = 0;       // Reset TX" P5 L, W6 _! x4 C3 @) \! @
    mcasp->regs->PWRDEMU = 1;       // Free-running
; K  @- j/ \! z9 ]+ m   // configure McASP0 receive registers
. Z7 m1 g% \8 ]+ e    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 k, r# t5 u4 ], u) u    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ Z% U4 l( H% c& o* j% o! K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, w* v( f/ S4 |
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). B* Z0 u2 F' A) i6 J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- ^1 n8 D4 {- U4 U) J    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 P3 K) B- r5 p$ C+ `. _5 j/ \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* U. R6 {  h3 x& B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& E( ?! C( r2 Q- a( j
1 B0 E/ m* R& P7 |" _3 I$ _, X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: F- J( e' R2 t. ]4 k& X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 ]. Z, p. B  X% g7 J& `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 a* d* T% I: A! [) ]    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. x3 {6 h/ Q9 |$ B1 [" z" \
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ {5 }- d( l% I; a: @1 e# r5 m/ N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& c' {4 e# _! p; s2 X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 q  t+ d! k/ l. L( _5 R& e
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) @: K1 e8 W' y" O" t

5 ^% u; f' J9 P! B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# W$ \& N6 w; S0 O
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* s& i; o3 u6 `1 l: J& N
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 ?. n. q: V; ?
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ I# o5 s, ]  o7 o: g
0 l, O, u3 u# m' o- n1 {    mcasp->regs->DITCTL     = 0x00000000; // Not used
! D8 J+ _' `, w2 l4 X: x! B    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( x6 P8 v( f9 G* ^  s# T  }    mcasp->regs->AMUTE      = 0x00000000; // Not used
! ?0 R7 s; u9 X, }% Q; h7 g* v  {& X+ J% L
/* Starting sections of the McASP*/
7 R: ^; Z) v+ b    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 k+ U9 W' u5 c- h2 o. G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 @  Z5 h1 c9 \# F$ U
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * _$ R" s7 t, j  [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  M: }. Y/ x6 Y8 l# Z! a& U

4 V. p4 ]# d% c, n6 _3 |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 E7 n) T( \; u0 Q5 G" ~3 ]3 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# A: N  W; L+ O% L0 O: N+ t* w) S& ]1 a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 D7 ^6 D4 i) i4 M+ ?' m" y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 C- ?' w; a7 j; j7 D
; x/ z7 u5 D1 B
    mcasp->regs->XSTAT = 0x0000ffff; - Y* B" |* S4 J7 G
    mcasp->regs->RSTAT = 0x0000ffff; 6 X* {& m/ I! q% u& s' @/ K

7 c/ v) g  t0 }, o- t, T    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 u8 a5 }6 `2 X' ]* p. I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# b- k' b9 W5 m+ ]! N0 O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; d* k9 x9 g4 d+ h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ D) X+ u2 i6 y9 s8 D. b# Q% e* ^4 ^; c8 j3 _
    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 N; b: t7 R/ S- c$ a$ m    mcasp->regs->XBUF5 = 0;
$ @/ w+ s/ {- A  K8 z    mcasp->regs->RBUF0 = 0;7 i9 n/ M% k. P1 i, n, o8 @- d

% B$ ], m$ x" N+ h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % b4 F0 m# P! G9 s! H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' ~* a$ S; v+ s& w    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   g# ?6 u  g7 G4 u* F; i  |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. F$ d1 D1 I3 S9 q+ j/ U# i
2 ]& C$ z- y/ y$ F    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : p3 j2 L" V9 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 M% b1 Y# X  ]- Z7 {    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 @5 S/ l. M$ s. O+ n0 J% ?! I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 \6 Q7 S# H+ R* `: L# n9 P5 U/ t
    CSR = 0x0000;
% C* l: h. |- w    INTC_INTMUX1 = 0x3d;9 x7 Z, ]* U7 R2 P
    ISTP = (unsigned int)vectors;# j/ d- p( O% P4 g7 c
    ICR = 0xFFF0;  2 m+ h0 \1 v1 {+ |# z% i
    IER |= 0x12;  9 |7 U- l/ F/ R
    CSR |= 0x01;  ! c0 \3 T& v9 Q& e3 L; p

; \( }$ y) e* E" A6 p/ C9 r
2 \- L5 V5 k1 q
; j7 V- T! K! G0 B还有就是两个输入输出函数:
9 X. \5 J- T# J1 s8 k3 {) n, x# C0 Nvoid output_sample(Int32 out_data)6 A3 @  z, A+ i$ Y# ~; d  k
{
3 ^' y  y3 _6 ?6 z3 A$ ^  AIC31_data.uint = out_data;  
1 ]0 `, u+ g& m: ]1 a  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ f1 y7 e8 H' P6 ~}
$ Q0 G3 e6 S7 W" B  i4 p0 v6 a% W5 u+ P  ]
Int32 input_sample(void)
; O8 y" t8 A% w" [9 `{  
, b; P: e, Q, q  v  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# H9 ]+ S4 S" u/ I# A1 U3 m0 q  return (AIC31_data.uint);$ j+ c. Q  |; r: i* ^5 m
}
( f2 s/ }3 V5 H7 U- [
, c8 L$ r$ I* P% q
分享到:  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-4-3 16:47 , Processed in 0.040752 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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