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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! K! E# l5 c1 `- u3 omain文件:* D& b0 J% `* G* w* d& f6 [! c+ I
interrupt void interrupt4(void)  , V. _7 }4 V5 f
{
  v9 |, ]+ R+ m3 }8 l1 j  Uint32 sample;
1 @/ s- h" K9 f" Y
+ V1 b* ~: r% I  H* a  sample = input_sample(); // read L + R samples from ADC
' G1 d6 V7 ^, G! D8 j  output_sample(sample);   // write L + R samples to DAC ) X7 ?  V6 B8 ]
  return;
, {+ Q: t5 l7 J$ ?}
3 J' n( [# I# c) `5 B- M
+ R7 H7 ?# C/ s8 x+ nint main( void )
, `9 r$ z7 K! u. o{4 W" g: @% L3 L4 F/ Z5 N3 H$ z- C. u2 }

; P5 o5 ]1 v" n  ~    /* Initialize BSL */3 X% ~! t. q4 H2 o; x: x
    EVMC6747_init( );
' u8 g3 S/ A! M) f% K/ A; p. t) `        /* Call evmc6747_intr function */& l1 @' S# s, h. B7 s
    aic3106_init( );7 R/ \8 P3 r. J# f) {+ e: N
        while(1);# H! C( ]$ _- @8 G  g
}
; Z) _3 D2 O' _
+ c/ ]" w. u3 X8 e
& E7 ]# r1 I0 |7 E4 C: vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 a% K$ T8 u* A! P: U- ?6 G& ~
/* Initialize MCASP1 */, z: ]4 d6 T- `6 v: ^
    mcasp = &MCASP_MODULE_1;& q$ T: S2 H. a
    mcasp->regs->GBLCTL  = 0;       // Reset# P" M1 N- v& u7 k9 K% X' k$ Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX' o; `4 P" p: L; d6 q* x
    mcasp->regs->XGBLCTL = 0;       // Reset TX! n0 ?- M' Y: S" K& _5 ?% H4 R
    mcasp->regs->PWRDEMU = 1;       // Free-running3 O2 y8 x! F, i3 M* \9 r& y) e
   // configure McASP0 receive registers
( o4 y8 Q9 g: Q+ }0 Q. R/ u3 _( L) u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, i* f  s% ~9 ?0 n  e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 P1 ?: B3 D  d+ e; X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. K# F% Z1 O( V: I( z- j
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% z. L8 L- E3 N) i4 @9 f    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" w/ ]+ K8 S; U/ y+ N    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. b1 a6 S0 c3 ]" K" P    mcasp->regs->RINTCTL    = 0x00000000; // Not used% X  g. m# }  }3 R. ~% g, z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 [# O3 `/ g9 S& J4 O' K: p  y9 e2 n/ Z2 ^3 l+ h
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% }% ?" d! z# \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! x- B( O3 j: x; p' `0 G
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ P8 {# a2 [7 Z6 [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ g- B3 p: }: R/ S3 m! r8 m9 C
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- o1 b0 h1 G* E3 }0 `    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 P# h% q; P, t" p9 E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 y0 y. z* L# Z/ Y+ L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 S+ {0 R) q' m- e
4 f. K; C$ I  I) P5 l' R    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! e8 F* g  v7 n# B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 R6 I% t9 f$ t. @$ Z  f
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 n+ `. G8 e& @' `: m
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" Y5 k7 O6 o1 G; s* C; U8 @' s' L# f" m. m3 e- m9 A+ `; |
    mcasp->regs->DITCTL     = 0x00000000; // Not used* a1 |& D7 s$ C1 q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 d% L( _* y8 f' s
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 b4 f! a. F$ K
1 Y3 m' X, }0 f, I4 f
/* Starting sections of the McASP*/# A0 F1 l: j% R8 Y2 J& t" b, z2 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; f! m! ^4 Y5 D4 \: Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 q7 Q1 e$ g5 G2 Q# {3 j+ b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) g" ^4 {& i* j) T: t0 m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- D2 U0 h% p$ i8 b2 ]1 z0 |# `+ y' t, Q) [

( r) L0 E1 `+ f& P0 d  N    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ t8 A. P- A  p( y% k, H5 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, L; e0 m4 h: E$ l0 z! C    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 v  \6 H0 |$ r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. W7 N: }. e/ B" B# g. W1 z; W

& S0 J( M  K; U" H" z3 D/ |    mcasp->regs->XSTAT = 0x0000ffff;
0 f% v: l8 r' n    mcasp->regs->RSTAT = 0x0000ffff; ' c  G8 _, y1 h
* e) X7 f; M8 m4 L% J3 l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ q% s3 Q8 Q4 v; g$ m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& k& ^7 g6 a& a- Z9 ?    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  c6 ^; m/ X: S  {/ f; s# r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& ~5 p5 I# V7 a; ?; P3 k
6 _$ x& x9 Y. ~# J    /* Write a 0, so that no underrun occurs after releasing the state machine */5 A9 D% a5 e0 P( N8 ?- ^. Y) A
    mcasp->regs->XBUF5 = 0;
5 O; s9 W0 s" ~    mcasp->regs->RBUF0 = 0;( h7 v8 Q) C1 Z* A

/ B2 o9 |# V6 y/ p+ v1 x* H- |; t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " U  \- X: w0 @- A; b' w# j3 o7 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" [" e+ y% x4 t# p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 o/ E, \8 J- r/ s" [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* S& i5 h8 ?6 E& K! r& ~
6 I* P& L8 v6 k, k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- [- B- S4 `" g3 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 L3 b3 e& a# h1 U0 X" ]4 d- D8 f    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! x- D  t5 X- e% r7 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: s4 D" x* r2 ?
6 K' i7 j& f2 n; O6 l
    CSR = 0x0000;! T: w/ n5 C# y* V* g1 X9 Z
    INTC_INTMUX1 = 0x3d;
2 K) ]% @9 l: I2 q$ s* S# S; V1 ~  s    ISTP = (unsigned int)vectors;5 t9 F" n7 B5 k( i1 w7 c
    ICR = 0xFFF0;  
6 }" @1 f) [& s& s5 l* u* C  E/ D    IER |= 0x12;  
9 E/ x# h5 [2 i; x& ^    CSR |= 0x01;  7 p& q) `& c* ~" i3 X. q

8 P3 X+ ~% p2 T2 O7 Z" C4 {0 I" y, k- J0 _9 ]" E

, C/ R% `0 c% K( v还有就是两个输入输出函数:
3 |; r8 n2 `7 m: A3 E/ ovoid output_sample(Int32 out_data)' c3 Z; C( s# }0 u. K1 k1 p
{9 r( {3 Z" [9 H! P
  AIC31_data.uint = out_data;  - Q& w+ w1 [9 i. K) `
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, s2 G+ c2 H3 O1 c* k8 ]}3 c2 [: s1 m0 u4 h, U) F2 ^3 _
/ H1 K7 q4 T6 X3 G6 G
Int32 input_sample(void)4 X; W2 ]1 r6 ]2 ?2 z
{  
! U: O4 r" b* ~+ @4 p; ^/ O$ R  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ f$ b4 R" S+ d  return (AIC31_data.uint);) }3 l; Z( q: q$ o. l6 i
}6 n# J- o) g: y

1 a: R  t% v$ M7 F4 h6 I+ k2 K
分享到:  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-25 04:20 , Processed in 0.043286 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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