C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 k$ L3 T( ?5 [) bmain文件:4 W! b& Y: o# u
interrupt void interrupt4(void)  
* T4 _- o- B" s/ u1 I/ \, \{
) n; @. C" ?* o; K5 a  Uint32 sample;
* X3 ?0 W% ~/ T& u* Q- ^' J5 l1 M
/ k  r, P3 d7 _  sample = input_sample(); // read L + R samples from ADC
+ C" C" I! l7 N  output_sample(sample);   // write L + R samples to DAC
( a% n% @  X: E% _. Y5 ~$ u  return;+ m7 g: p) D1 @. ~# g
}; ]% q7 h2 Q( `  W* ~/ |# m
% g/ ]6 A+ n4 L0 E+ G
int main( void )& R% Q& o* u3 R
{
; W. h5 Q2 s, b3 g  ?  S8 M& k  _: H! o. ^4 k0 a
    /* Initialize BSL */
, X: Q. N) n( \8 i+ ]0 O+ S  s    EVMC6747_init( );$ x* D( J  F, c! P& a' i; y
        /* Call evmc6747_intr function */' E6 w4 v. d& v  g; Z$ N. o
    aic3106_init( );2 K& a$ u& b5 N( U  K
        while(1);
+ J  r, O' x' ]2 v: n+ \}4 V- B2 I7 X* Y; }
- h: y) n0 R  {6 f# G" N5 ^
& k5 w. I1 ^( d
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& ]* i! S8 U0 Z! q3 L/* Initialize MCASP1 */7 s& [. F8 f$ v& _) c! U) m
    mcasp = &MCASP_MODULE_1;# {& o5 O- B+ |! b
    mcasp->regs->GBLCTL  = 0;       // Reset$ c9 l8 F* M, M3 D
    mcasp->regs->RGBLCTL = 0;       // Reset RX: W2 n* ], F- l7 ^3 x
    mcasp->regs->XGBLCTL = 0;       // Reset TX
: S. R7 X; I, _+ L& i0 F    mcasp->regs->PWRDEMU = 1;       // Free-running
. f' o  G% N7 @8 R, ?) f9 A   // configure McASP0 receive registers
  h! q) C/ P5 n( s) M: K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: ~( _+ T, V/ B' [( e. U/ _8 f% p
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ {- j6 r3 c4 J, Z; {  N* ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 `' f2 F8 R  h- d/ v1 N
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* u8 `) b" I, B+ @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). [. o" k! R( U! U0 J; g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 L$ r# U9 l# u  p    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, e0 I/ r* S3 _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 J9 I+ P' h  W1 J; _6 y  T
/ y( d/ ?2 C' S& f- B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" l1 M! ~! M2 ?5 c) O3 e    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" G# s: K. U' E4 V% A7 X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 Z) i; T/ ~; x7 ]/ s" Q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 j2 R# `: ]( V& K" q$ ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 M# A; P% Z& L6 [+ [: q; M+ @! k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& `6 M  @: d! H2 d: A
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& Y8 j0 F2 U+ N4 u, Q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ n% B+ G/ R, ]' n& y/ X# i

5 V. f, W. r7 P) x7 e1 _    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* |( x$ o% X; p5 e$ I% @. y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" `0 V, E. [& H    mcasp->regs->PFUNC      = 0;          // All MCASPs
- ]9 s& {! ~, d, ^5 x% Z: w' e    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ `  t. Q' K8 c5 ^+ F4 N
) @, E, t) ~5 p, j7 ]; P
    mcasp->regs->DITCTL     = 0x00000000; // Not used
( j4 K' M- H. a2 s- k2 B' x: \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; C- H8 b$ I' r0 ~& H    mcasp->regs->AMUTE      = 0x00000000; // Not used) u2 A* \5 e: h$ i
1 P5 A3 U0 X2 C9 U6 Z  u" H5 M
/* Starting sections of the McASP*/
+ J6 U3 M' F8 t5 O# A# a! M    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( N, P6 Y$ t' f, b9 I. u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 k: Q4 h; _" Q8 D' \- L) ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- P: n6 y* _+ @3 S' f0 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 r% }  G* B6 b3 }- g
: s5 U$ O- s3 K) P/ B. t4 @, N- u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 J/ y" K5 H8 P1 o: I$ l0 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& i  m7 F! L! H& ]/ j# {, N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & e( K1 n! {8 y, f7 Q1 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- z/ U" f, h2 ]6 S
  V8 R% F& }# z' ?' D1 M  ]( ~% R
    mcasp->regs->XSTAT = 0x0000ffff;
$ o, H# W5 D4 [/ z3 k    mcasp->regs->RSTAT = 0x0000ffff; ( {" B% n2 T( F2 U  b0 S' r9 m

; Z7 h7 N8 i$ P& K+ |6 ~7 g' w    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( e) j! H- n" I- A) F9 s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& H- W. v" m8 Z) C( U. v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 C9 S8 ?1 v/ |6 n8 x, [3 A% T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ I$ H( _, i# b- ], S7 p+ i# Y6 ^" ]/ Y, t, `
    /* Write a 0, so that no underrun occurs after releasing the state machine */& L) O$ s$ g+ s1 m, @# B
    mcasp->regs->XBUF5 = 0;- Z+ y. ^$ z$ ?" @
    mcasp->regs->RBUF0 = 0;) h; Z# k- A5 F( K( \. c

( d2 Z; @" @6 I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 N+ O7 @; l; d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 l0 }% }; {$ t, F$ l/ {! ^, N
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! U8 o" X& d3 @2 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- O% h7 R$ O9 i# c3 J2 k8 k0 E& d7 g- r4 k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ n1 Y$ a9 T* I, q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% S% ?: }0 t( E0 E* _8 z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 U3 l0 K5 {7 S6 J2 ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! k) z8 B+ U6 O: Z! o$ ?+ m: U. F! I3 ~1 j
    CSR = 0x0000;
& Z6 l  d! r3 m) z8 I    INTC_INTMUX1 = 0x3d;
2 o0 m# `3 V9 c/ h; W    ISTP = (unsigned int)vectors;
2 i$ b/ @$ j3 Z. ^* y) t8 ~- P    ICR = 0xFFF0;  
- m. L1 m& Y" ?2 W( ~    IER |= 0x12;  6 w" F5 R8 s" ?: \
    CSR |= 0x01;  ! Y: A3 N$ D+ ?1 y, U
$ w! @! R0 M$ c- G& `
/ b7 V6 v! R, F% r

- Y& z" i$ S2 l0 R1 J! t4 q8 t还有就是两个输入输出函数:
. L* d! [( O+ J0 jvoid output_sample(Int32 out_data)! O- H% Z1 O# L% a5 H+ T
{# Z# X4 N$ t; [: d
  AIC31_data.uint = out_data;  ; |4 {, o8 C, ^. K7 w* x
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ Z' J, g0 s* {( Z( _8 H}1 I+ N7 c5 ^5 }

; C" I! U8 [# h& g# @2 m2 KInt32 input_sample(void)
4 I* q6 m! F) F2 {{  ' F9 d2 O3 H, m# h6 a4 ^& W+ j$ O( }
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ A% a$ R5 |1 l  G  return (AIC31_data.uint);
. E% i  n; v* H0 B/ S}5 y5 K* a% w7 T$ P6 ^# G+ Y( L

8 I$ e- o+ C+ Y& ~+ |0 E
分享到:  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, 2025-12-12 14:42 , Processed in 0.040111 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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