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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 z; B3 N0 s$ P* ?& s. S
main文件:
5 H; ~/ Y/ l6 w% i7 }- Vinterrupt void interrupt4(void)  
' y$ b* x  r  u& T, N{# E# e( Y- C7 k: V5 [
  Uint32 sample;8 F5 F& K) s4 @6 [2 N, I& w4 j
& v- M  C5 `- q0 m, Y. h6 u2 H( z
  sample = input_sample(); // read L + R samples from ADC
, M$ Z7 w6 j& N( u, K  output_sample(sample);   // write L + R samples to DAC
. {: I( u6 H7 J& \# ]' l3 z, s  d  return;% ~. j6 C8 T: V/ M+ r
}
' O; h7 P- m( J- Z% T3 x0 v/ b( t  K
int main( void )/ x, I( M  q/ X5 g" ^
{9 R+ f: o" u5 L' `
% t# R  A: Y4 c) [- C
    /* Initialize BSL */
$ b0 F( `, W. ?1 J    EVMC6747_init( );
: H: _2 f& j7 {  z( B% ^        /* Call evmc6747_intr function */
2 |3 X' p3 \4 n; T    aic3106_init( );
: g8 d' Y# z2 ?: @+ z& a        while(1);
1 _/ ?. g$ K& l, a& _}
$ A& W% k# D" W, F$ m- e/ S) [% c3 \# O7 d" o- o8 x" I
2 Q: X2 _5 S- }, Z. Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! ~6 N5 \- T% O, E% I  \( O; `8 o, Z/* Initialize MCASP1 */) x. |1 U& Q( B+ D4 v
    mcasp = &MCASP_MODULE_1;
8 E) `3 }/ ~; z$ D    mcasp->regs->GBLCTL  = 0;       // Reset
( A# h% q6 p; ^. H" m- q) H  q1 z    mcasp->regs->RGBLCTL = 0;       // Reset RX# J* p+ R. C: [* p* K
    mcasp->regs->XGBLCTL = 0;       // Reset TX
4 H" w% `) V. @# Y0 l! M' R* C    mcasp->regs->PWRDEMU = 1;       // Free-running2 E% u) f1 O# T0 A, H/ D5 D7 t8 H
   // configure McASP0 receive registers
" Q8 P/ R9 R, ?" R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; I  R) P+ r- I! U    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 d* g# L$ C  e2 ?: G3 l
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# m" q% k( V5 Y# Z5 M7 E
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 g& p& i0 u# p0 X5 V
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& u, x! K% B" h8 f$ ?    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 e4 v; L- ]. [5 }- F4 l' ]1 N' G$ o+ \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used. ^1 J5 }1 k/ e3 R/ V- A" E* G/ b- j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 {& V% k. z2 V1 K" c! q
; q# [( q! z- J; t, x( k0 \+ q* }
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 z0 L# B) B* o; {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& F" _2 V" B  {, r9 H
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, |6 U( U) G' M+ W5 ?
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* A' g" d& s3 n# m& A. Z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: c2 E" P. F$ y% R! _$ c    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  v7 k- L( F' C9 h4 R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# M7 w* {/ n$ ^/ \
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( I! z! s! @7 {5 Z
$ E- V7 |& Z$ y# v3 O$ F  e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ q. k+ H" y% J) p- Z4 ]- u# r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 v" ]0 [0 _! A& l8 s* j    mcasp->regs->PFUNC      = 0;          // All MCASPs
) V  Q' b) J. c3 t3 I! r! E0 N% p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( W5 j1 f  `# W" V5 V6 F! T  g4 L8 |

: }7 J( I: T  f# I    mcasp->regs->DITCTL     = 0x00000000; // Not used- k! Y  J! k: r9 f; P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( ]- c( j  e  Y# l4 G/ u
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, k( g( Y/ ]# P* b: G% X! G% X
% w: R/ J0 W3 R/* Starting sections of the McASP*/: C! d1 D/ q" I, ]; `6 M* q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" B' ~9 h3 h0 f1 F8 \& a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( t: S- V9 B( d" l/ x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % M* C: H4 V7 M( W  u% d, D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' |* [' _" a0 z+ I$ K) c$ \8 z9 N* a3 I. C: W% u
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 }7 n! D7 J8 W% ^# W: O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! ~# x4 y; m/ h- G: r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   D9 |5 H2 n* Q2 o. q" w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 t. q. ?6 F2 ^( v: n% x" e5 j* Q8 {) W
1 p* v7 C; A0 N% m+ {, Y
    mcasp->regs->XSTAT = 0x0000ffff;
9 E' a0 _2 O% ?5 L6 R    mcasp->regs->RSTAT = 0x0000ffff;
; w* J1 z6 B* g* j) k8 }8 v/ e3 Y- B+ l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 C) Q* ]+ b  P$ ~1 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" Q, G6 [) k7 J9 }& `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) x1 o0 G0 h8 K8 l/ ]3 \* v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 C( j/ o3 s: }* U+ @# s6 V: C
1 P. e. q: c- P& ]2 \- F    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ H' o' [! i, T$ c5 M! B2 ^0 w0 Q    mcasp->regs->XBUF5 = 0;. g  Y1 z1 l. r7 M1 C6 ?# z
    mcasp->regs->RBUF0 = 0;
4 C9 I; S) N6 c
: M7 a  a) F6 U0 J5 W; T    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . D' y0 Y' f) _+ g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& Z' f6 g! J+ d' k* k& C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 S" x: E  y' h- Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ @/ J1 A( Q. a! b
0 P' {  @6 C$ [* ?! X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 h" `3 C' o7 ?+ Y& }/ c3 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 M1 U! O4 P7 T8 `) Z3 T    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 a6 j: R9 z' E9 U6 f' G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 j) e/ E1 q! R
% ], o. \2 V; X. f6 d8 a& w- Q    CSR = 0x0000;2 y! e1 i. P4 }3 M8 F* j  @" Y# E
    INTC_INTMUX1 = 0x3d;
5 t. y, U, U9 h. [0 A' X    ISTP = (unsigned int)vectors;
0 E2 ?; H0 F/ j; n+ [# R    ICR = 0xFFF0;  " h- y9 ^% R* l, _: N3 f
    IER |= 0x12;  2 b4 O3 F! {* x9 {% U, E
    CSR |= 0x01;  
3 m' T8 J4 B5 \$ f# P0 u9 K  Q+ A( l/ f3 g7 ?9 L) h% y( ~
: K0 r5 ^# u! w: ^4 b

( n) Y9 u. U! O3 x/ e; @. S还有就是两个输入输出函数:+ x) w/ q$ z- {2 J
void output_sample(Int32 out_data)' |/ V! U- h: E  |  ^' J, l
{
  J$ c' ~8 ^) M2 M- s- ^2 v  AIC31_data.uint = out_data;  
) N/ {1 V. |- w2 t- w$ }; \* R  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% f' q+ X" D1 E9 g; e& e}
3 c: `! s  }* v+ c6 j
# j+ H" y/ o/ v% l- `8 L- {Int32 input_sample(void)
! @' o0 Y0 H4 P; Y# f1 i# N1 t{  
. Z! ]. l. E! d  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 x! J  g- ?. r; P7 u; @1 M  W  return (AIC31_data.uint);
  b! Q) i( Z; |" A$ F}! T  ^" h0 w$ X9 ]% S! N) ^& a& G
# h7 i, R3 u/ t; Z
分享到:  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-21 10:57 , Processed in 0.046875 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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