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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 ]# R" M" C1 g- F8 S; H4 nmain文件:2 p: |0 ?( o( {% k- {; [
interrupt void interrupt4(void)  7 p- O& V7 P# A
{$ ?' }4 a2 K  L3 N' W
  Uint32 sample;
: d& N6 J* J) i- s' o
7 G" \2 K( Z. p4 f( s  sample = input_sample(); // read L + R samples from ADC4 [% h; c6 V8 j" t: i8 L5 b6 A- J8 C, W
  output_sample(sample);   // write L + R samples to DAC
; [: J! g9 J$ C- b# q  return;8 X" ^7 c- J3 E: a2 d+ A3 l& J/ C
}
* ^1 B/ |. a/ r+ ^& G. U
" O5 l7 G% h6 rint main( void )
9 U9 I" X6 T3 g% |' p( S{# j3 y  _4 w( I

  J( _) d' l0 f& G4 y3 B    /* Initialize BSL */
+ L# \9 e" G1 R    EVMC6747_init( );& m" U9 x  ]9 `; E8 b
        /* Call evmc6747_intr function */
$ a, W6 X5 G# N( Q3 O    aic3106_init( );
; m) Q0 i# U- D( h6 c+ N        while(1);
- j2 k% `3 L; t3 {& d}
7 n( V5 f% e- N( S3 G& G3 W
: Q  ~' K7 D- ~) l' H0 h( t' J/ B- L4 u+ V( s, ~# ]( N% a0 E0 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  z5 \6 T1 H/ D: \, [: L; g
/* Initialize MCASP1 */) f3 G$ j* R! Z( R% j
    mcasp = &MCASP_MODULE_1;
+ ]  o( `( y- V+ u; s3 e; q+ O    mcasp->regs->GBLCTL  = 0;       // Reset7 |6 ?/ l; O1 e/ E% `: X" A
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 E. N( Q; H( {: s2 j) k5 Q    mcasp->regs->XGBLCTL = 0;       // Reset TX
% T: [; F# v' r, ?7 @8 q, n    mcasp->regs->PWRDEMU = 1;       // Free-running
1 p: P! v/ L, @) q; c3 x1 E. D   // configure McASP0 receive registers
8 J, o6 L) C& b3 _( ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* N0 M; y+ Y- Z" ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* A* V. J& U$ s/ U4 F    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* ~: F' M$ a& A% [: V. X9 O" N; ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- l" A! e1 Z; M( P% Z$ R  Y' E" B    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  w8 X& ^, L7 V, t0 w$ H' I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ t! `+ ~, V  _  f8 V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, E$ x8 K- d" {/ h* d/ ^    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 \  p' Y- L/ U& `# E# c
  G* D& k9 a6 P" t! B$ k
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 ]9 A4 d& h3 P) k+ l; S4 n
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% R  H9 [/ d4 `' @6 q& F8 R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. P8 }/ A' T3 s0 g2 @: |. K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ j2 p0 a5 E% J$ F6 k6 X    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& Q( f3 q  L4 h8 s! B+ r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 I. u7 V  ~; _/ y- i1 {
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 t  N  P/ G8 I  X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 @' n8 q( a4 E2 F9 m+ z3 M+ U+ M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 N0 `; g1 g$ h% W% m5 Y* C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) `8 G7 C3 b' A/ c3 n: A" A    mcasp->regs->PFUNC      = 0;          // All MCASPs. {4 q* J* ?( m* Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 x8 H+ Z; d# [3 v" t: w  K% X" t+ B, e
    mcasp->regs->DITCTL     = 0x00000000; // Not used
, U7 {8 U. t5 p( w1 y" ?. M$ I. {    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: D  L) `) c$ H5 Y# a' T: U    mcasp->regs->AMUTE      = 0x00000000; // Not used3 H/ b7 ~2 ~, l9 v8 H

% P- w# z6 u0 S% n0 D/* Starting sections of the McASP*/& }/ X7 T: h$ ]# r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! P' h# F9 G! q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ O  m9 c  l, U+ R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " Z* ^3 G' r# n& O, u. ?5 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 b4 a9 e) y4 o8 J) S( C

7 l* q$ c- X% n3 B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ J- p8 |6 W2 v( X3 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 x3 j- @$ }/ M! r: O9 V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; N1 V: `; s2 T+ U) k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; B& p* ^+ k2 W; X8 m8 q
- U4 m1 q  |5 i& H, t7 K+ q  P    mcasp->regs->XSTAT = 0x0000ffff; ! x( _) h6 n% t  M( o; n
    mcasp->regs->RSTAT = 0x0000ffff; ( z2 \. t7 l6 \7 N& x& b, E
! ]' J: g  }8 F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% |2 ]- B& |  u" I$ x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; o; _. Q, m: I& X, G0 {    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ a3 r! S: g3 Y; j8 ^, u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: q; `/ |8 y# |/ a+ u) S

" _9 z* ~! w; B8 F' N    /* Write a 0, so that no underrun occurs after releasing the state machine */4 _, f& h& t* A- a  P4 k4 i; J" B; D
    mcasp->regs->XBUF5 = 0;
. W, o7 F  c/ @6 L" x    mcasp->regs->RBUF0 = 0;) S( t0 U6 K( i3 S/ J* }% A1 M! i) U

; {% T" ^/ t/ ~$ ^* J) O3 }: [. I; p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & ]  v5 \1 d  J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 E& Z& d2 {5 [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 c$ S: E+ G  J) e1 h; k# P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ G. T8 O+ O& d
- z9 K+ i1 I1 p* L$ b# I    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* r$ P/ Z7 U8 }! L# s: W* r9 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; h0 B1 Q- z$ ?* S& I    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 g* Y. R& M4 r7 s7 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, v" @# V0 y( b: O, ^

7 g) F( o) s, i. [% P$ \" [1 d- m    CSR = 0x0000;
; [8 ^6 N5 t, [; X6 V) D    INTC_INTMUX1 = 0x3d;
1 h7 D, u: y/ h' O( r9 T4 t    ISTP = (unsigned int)vectors;% c* C9 i4 |, L) G' ~
    ICR = 0xFFF0;  - \7 ^' f% G6 N: W
    IER |= 0x12;  
* o- ?& A5 o0 ^+ Z* _% Y    CSR |= 0x01;  ) f  T, l7 x3 l( m1 M& ]  k

+ g. d* Q" W0 F: {' V5 G$ u1 X& c: r8 I  _# K5 A1 L3 J* L
; s. ]: O5 s5 f8 i. Y4 G
还有就是两个输入输出函数:
. |: q# E, ~+ X; o; U+ i8 @void output_sample(Int32 out_data)9 Q9 v3 u5 O& ?1 A( i
{8 I" D1 i$ o- J
  AIC31_data.uint = out_data;  5 W5 w3 _% X) R0 E7 y% _, O! O' y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 c7 t4 u0 J; g
}/ x9 v( {+ Z7 f) @9 p# F

9 `% n6 c* w' i/ q% m5 B$ CInt32 input_sample(void)3 y( P8 [: k" J# i
{  
- ^' C: T% G# S3 L  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ b1 n4 Y$ W7 ]  return (AIC31_data.uint);
* c. P" Y) C/ R; M  N}4 D4 p: H3 _. ~; v

- F4 v$ d& d! q7 K6 w  E- U; Y
分享到:  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-2 23:21 , Processed in 0.046106 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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