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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' S; L# M6 S& g" s* H1 H1 Amain文件:  U. i: U2 i) R: a) q" S9 g' G: d
interrupt void interrupt4(void)  
  x' P5 Q  P1 m{% G$ D7 Q1 ~1 ~% s
  Uint32 sample;  |/ h  L8 r( _8 S# i' q9 d" j' H

4 c1 O1 T) u" J. |' K0 K  o3 t8 o  sample = input_sample(); // read L + R samples from ADC8 p+ F, ^& T' `) `
  output_sample(sample);   // write L + R samples to DAC
+ J2 P9 }7 m  v* w/ i3 `  return;
, }; @/ M: A- R2 m* a+ B}
7 [2 B* D$ d& N) H: u0 R/ s" t! l; i6 U1 @& X: S; t! F/ I
int main( void )
$ x) t3 w! f8 I: {; v{( [3 c1 y  @* _8 P
, R% u9 ]7 f  n- }5 a& o9 {1 d
    /* Initialize BSL */6 |) U& S) R/ Z0 L( O
    EVMC6747_init( );+ n% J& Q( R8 f+ H/ Z
        /* Call evmc6747_intr function */
5 V/ C; E. ^/ \- d    aic3106_init( );8 t0 B' Y- h2 j3 k7 q$ E9 r4 v
        while(1);
% Q0 N* _+ d4 _' x2 l9 w}# Z# K  |3 o( g& v
2 F, v$ O4 b# w
2 P( r! c) x  |& g( ^& Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 [4 E, L4 L' I8 M' B% p
/* Initialize MCASP1 */
; B. n, V* i7 ?( t. t* f9 [' [    mcasp = &MCASP_MODULE_1;
$ g. \- p7 M; h% l. c    mcasp->regs->GBLCTL  = 0;       // Reset
- j8 M& D& V3 z4 z: p: ?    mcasp->regs->RGBLCTL = 0;       // Reset RX
" h) ]/ J. A( ?$ C% p$ b    mcasp->regs->XGBLCTL = 0;       // Reset TX
  s5 \8 j- p1 C) d9 q    mcasp->regs->PWRDEMU = 1;       // Free-running
7 _: I, \7 V' D1 Y# q" y   // configure McASP0 receive registers& e4 h& v( t/ c* k! F
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 _# s3 Q& @0 u
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 X& T+ J( d/ K$ G( V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 R! k7 F: }2 J; |3 H( C2 ]! s    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ H5 Y: s8 A0 N9 E; L; P! ?0 E
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ L. P1 y1 t4 n7 d3 q  {    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: J0 \9 \$ N$ Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 M5 x, m9 _% O8 ]( ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 u$ `+ N3 ?7 E; _- U$ }
* G8 V" G5 ]) w
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& E; k7 p# }" ~1 K7 A/ a    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ B% F( H% m/ P. p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ o$ b, s2 e9 ^# P$ u) K0 I# U  }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% ]& I! e- a+ O* {7 R: ?8 c    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& D9 q5 q# N, o% P8 U/ q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; U) J. B1 W& u
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% t& Q2 C1 m/ |, f+ B    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 ~) ]  i. [3 L; n

! T4 i$ X2 @/ \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 H9 G3 t8 {% `: R
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ o$ P6 f6 C" H# P
    mcasp->regs->PFUNC      = 0;          // All MCASPs
: W: {* c6 \- O( |% `3 d3 p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 H" e& m& L8 d! z7 R3 Y- y& w4 r+ L, u
    mcasp->regs->DITCTL     = 0x00000000; // Not used
# L# }& f" H1 r7 j" ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% @  M) P, r0 d' F1 Q    mcasp->regs->AMUTE      = 0x00000000; // Not used6 H7 p* }+ O; ~  b4 u
( `1 J8 u) z( E: e7 y
/* Starting sections of the McASP*/
6 S" b* h: I  A" S6 A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + z1 b- b9 ~5 I* Q& }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
% v1 _  P4 r' j) G) {& A0 q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 K3 K3 K. y+ X2 R6 b2 P' q( d$ b  B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- Y* c$ Y9 R9 U
2 A  I6 D' Z; u# o* `9 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 k: O, s* n6 P+ B* A$ A' q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; s. ^! t  k5 F% o$ x6 f
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + n* F+ Z/ y( N. T  Q8 {# n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: o" D+ |% b1 ?( {/ J: V( U
' Q  ]( \: K9 n: ^! M    mcasp->regs->XSTAT = 0x0000ffff; % A0 F9 b% Z5 l0 m; i- b8 Z- U
    mcasp->regs->RSTAT = 0x0000ffff; : |! o2 R  g& Q. \9 f: J. a
7 _& c; o* w: c6 M9 u+ n3 k' r1 {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ A! X. V' `& x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ z5 m9 E9 x2 g- n: u( l( f! J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 A% i! [/ D  _" Q- H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( I" ?- Y7 @0 \& U) y6 h- b% I
$ \8 \% y- i9 V! I$ w. q    /* Write a 0, so that no underrun occurs after releasing the state machine */: D5 q' h7 f9 y
    mcasp->regs->XBUF5 = 0;
# V3 p. Z; \( l! Z& G# x$ H    mcasp->regs->RBUF0 = 0;) |. \6 i2 [! W/ D
1 ^- g9 J9 [7 N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : Y0 G# \, D! o1 |6 x+ |( Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 Y# b: q5 v+ U; y% H  G. t$ h
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# M9 P' u5 J$ h- D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! }3 F1 s) o/ F0 b4 ~
* b, p1 g& A9 n& Q6 C/ ?8 o: K5 _7 p: H- u    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 G' K- S+ `, @0 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 C) |& n, V' K% ~: n
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # H7 q, F( m1 A0 i6 W! A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 }! s1 O1 W* m3 o) j9 p: _# x

* g" |5 i( H! v3 l  e    CSR = 0x0000;
9 K& X" v% C& d. C5 ~. S/ ?    INTC_INTMUX1 = 0x3d;8 Y/ }: E; A3 R
    ISTP = (unsigned int)vectors;8 }( k: I6 @6 p( ^
    ICR = 0xFFF0;  ; B! L  N. w' a( S9 w9 |2 X
    IER |= 0x12;  
; s$ x1 L* [1 W% Q% }$ R; X3 m    CSR |= 0x01;  ' d4 W$ w3 A1 K' S, x3 I
# z5 b# o3 Y* d. i/ `

  A; G' Y+ q8 A- G. e+ E7 g  |
- X; R  ]+ ~% y' t% j. j0 ^3 e还有就是两个输入输出函数:0 k" \7 L: E/ a. j0 I+ B
void output_sample(Int32 out_data)+ G3 j' a/ \% {; d" h8 l9 G8 z' t
{: m- v  w' g5 u4 Z& X6 Y, R0 j
  AIC31_data.uint = out_data;  
6 l8 d* J  g3 }9 ^" D. }  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& C( F8 f. S  S. [9 U}
1 _/ G' b: G9 L1 K" C% K) Z! `' n0 q) i1 g# v! `* r' [$ m8 ^
Int32 input_sample(void)$ K5 `. L& E' d. i3 O" b0 J1 r
{  
; Y/ T" r) F$ f1 k6 d4 M+ n( O7 U  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 x, b: h0 @- s- u/ w" R! w
  return (AIC31_data.uint);* F3 f( F8 G' c4 L' \
}
3 G! B2 y) `* R8 t- r. ?! |5 Y) |  R, q1 X( r, n
分享到:  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-3-3 17:45 , Processed in 0.042442 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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