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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 E" O1 \1 g0 J" p8 i2 w3 Q/ H2 cmain文件:
% `5 p4 P2 h% q/ zinterrupt void interrupt4(void)  5 s5 J: l  |6 h& x/ R! |& G
{" _: L4 O2 R2 }* t1 {
  Uint32 sample;' R7 W! E! |5 a9 m

4 ?( t  h% p% W' a1 f9 ~8 u& p  sample = input_sample(); // read L + R samples from ADC# N# W* Y/ D! S5 S& f
  output_sample(sample);   // write L + R samples to DAC 9 T  T* N! u# u5 r
  return;
  x. o  n2 t8 g$ C- Y& d0 ], d, l}& Z. |) N( n; B9 F3 [% m. y

! g! x. E, k1 `$ i+ S( K2 \int main( void )4 d1 `  K1 ^+ E2 o
{/ ?  {; E: T1 Z% k+ ?  W5 u

( @# c4 y- t8 h    /* Initialize BSL */
  w0 Q8 I  ]( n1 t" @    EVMC6747_init( );1 C/ Y$ B1 G* m/ v  Y/ D) M
        /* Call evmc6747_intr function */5 l& e% F  j3 z* `
    aic3106_init( );
( Y; j" Z8 x) S& p        while(1);
1 X4 |+ E2 E! q/ K' E( N" r% {2 v}: c* g4 A4 v8 K+ J  N
* k& e/ B5 d8 d

- v( f8 M+ m  D& }- J5 G+ laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 a/ J2 a. C( ^2 @- ^: E
/* Initialize MCASP1 */
8 C5 {7 w1 m4 T$ J. g    mcasp = &MCASP_MODULE_1;; A* `2 y) k2 o- Y7 \
    mcasp->regs->GBLCTL  = 0;       // Reset8 |- l# y: @4 l) O/ m
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% y% P6 N/ x7 }6 C* R; r    mcasp->regs->XGBLCTL = 0;       // Reset TX' g4 b3 }/ `2 w! C  N  Z6 H* `! L1 A
    mcasp->regs->PWRDEMU = 1;       // Free-running$ G" c9 p- Q8 w, n
   // configure McASP0 receive registers
# Q0 v) X+ O+ g+ \7 {- g' K5 }    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 G5 \! O; e) R2 }; u    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( U5 Z( B0 Z- w; Z. j1 k    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* j6 K+ }# I& s+ Z, t. H+ Z* v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. m$ H+ V, Q' @# \3 ]    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" m) x; ?/ C8 H/ W4 Y2 X; O
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; Y6 Y# X$ a* d6 U; u4 y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: s' W5 p9 u9 R% t# j* y- U# u6 a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. y2 P5 G, P( X0 v6 e; c9 a) C

! M2 e* \4 d1 k0 E) a9 j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ W2 t; E9 X/ L$ F    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& D( u* X$ Z# |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 v5 Z7 z# i2 Y1 m0 W% T& H4 P$ L    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 R  E: _# I; V+ D9 G6 F, l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 J9 n" ]4 z% {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  X7 L% X8 {& s8 F6 ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; P7 `# |0 O4 G8 h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% _4 a  x3 j1 y" s/ |, N
7 h6 C- r6 ?+ t1 P" C' v
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; P/ P8 S# K- j  P& S; k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% D: h% }3 T- S: [    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 V3 W; I; m* T9 g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 t$ T3 H# r" c% P/ ~0 |  G" A
2 ^8 q8 E1 ]4 w  w# d    mcasp->regs->DITCTL     = 0x00000000; // Not used: ~$ t6 e, z+ O% u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 j8 H4 m4 B# ^$ S3 z    mcasp->regs->AMUTE      = 0x00000000; // Not used
. Y3 a$ S, T/ ~. R
7 E+ D. H; q. X2 L7 m! d! v) V/* Starting sections of the McASP*/* }% s7 ?# i. V; U: H5 p! g
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; `6 Z# A; A1 V  ^9 Q' D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 }3 M* M4 f3 j2 l" _4 i# @. M7 W
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ H9 m! d7 o" @; l+ a. Y' E9 x; s( c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" J/ r' ^5 v% H8 N4 d2 s* a6 N! f5 E  b' \% }: k+ C
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 `3 D8 `  v& s. c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 O( ~( c7 L; Q0 F3 \& [1 ^9 H; x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 b  n) Q* }( x( z! \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# s) D  s( h5 W4 |( V; A& X2 k

8 E- U* l: H2 |7 W" p    mcasp->regs->XSTAT = 0x0000ffff;
. u, D" ?4 C& q' P! U* i    mcasp->regs->RSTAT = 0x0000ffff; : |3 _$ ^, k; {4 Z& t& _, Y4 b

: E1 j  A' _) C; s    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 S! g5 }/ Q2 t% A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 W$ ]' U& O" g5 v* x    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: _( S; s! k6 |" P3 r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* S. |( N5 `2 G8 _0 n
3 y/ d! Y3 _, p4 r& V" C5 J7 o
    /* Write a 0, so that no underrun occurs after releasing the state machine */) g5 |1 O$ u2 J3 @+ {* }. n
    mcasp->regs->XBUF5 = 0;
6 L, |: H1 [& m    mcasp->regs->RBUF0 = 0;- f1 D9 H  u( [* c+ M/ Z' W$ n9 S

9 j+ j  s0 N) j    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 E$ o# ?3 u# o6 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 q( j& i4 X9 a$ \" V
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 t& ?; N' O) C3 h& h' r% Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 B+ L6 j1 ]. o) C

$ r. k/ ]' U* d/ d$ Y( l8 C5 p    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 ]8 q* b3 L! m: @1 ]  L) l$ e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ~4 ~$ b* B( U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ H- L3 b& r& c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# ~; e& z  B6 l2 n/ G7 N4 A9 A. a$ E% S$ x4 ~' H" d5 d
    CSR = 0x0000;
# Z7 t* X! R; \" J! j6 A" k    INTC_INTMUX1 = 0x3d;
* c4 B% _: G/ G: z    ISTP = (unsigned int)vectors;5 D4 i0 A4 a8 N
    ICR = 0xFFF0;  
% w' N7 j. v4 q8 Q9 K, y, g    IER |= 0x12;  
3 q" a6 @4 ?" l2 I    CSR |= 0x01;  1 L; Q) S) R4 R
- F0 Z2 s! k( s( q6 d8 S
* b$ W4 y/ v6 m; R# x

. B2 l& h7 T- Q+ ~还有就是两个输入输出函数:
, n, C! E# L6 X% Bvoid output_sample(Int32 out_data)! b: n; p+ j/ T9 `
{
( E: |( z6 E. Z  AIC31_data.uint = out_data;  
2 J  m; K3 F! L4 f  MCASP1_XBUF5_32BIT = AIC31_data.uint;, t, P/ ]1 Y9 j9 ^
}+ b7 I. w! o( r

8 b) u# S9 V! r7 ~Int32 input_sample(void)
/ K8 }8 g  P+ S/ ?2 o{  
& k: w- G; H) p9 u% S  AIC31_data.uint = MCASP1_RBUF0_32BIT;, e. ^) l0 o' n( u+ V9 e, Z% x
  return (AIC31_data.uint);
1 S* z# u3 G) v6 a5 j$ Z& M; {}2 z+ Y1 c/ @+ [* ^
9 D+ O$ ~+ ]4 ]( j/ B% [( ^
分享到:  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-14 08:26 , Processed in 0.061063 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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