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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 Z# R/ X, i/ f2 Umain文件:
7 S2 u( ~2 ^* c0 R% zinterrupt void interrupt4(void)  0 H0 S; }2 M# L, Y* m) C# X: G
{& c' J* P" }! M$ n
  Uint32 sample;
8 Z0 O9 G5 ]) k) I( \3 {: o4 m
& m2 t2 M' B7 @4 }$ ~  sample = input_sample(); // read L + R samples from ADC
7 Q9 d/ d6 f6 i  J) a2 }9 c  output_sample(sample);   // write L + R samples to DAC * S4 _' n: q( t; r- l; D
  return;
( k' N  h7 S& B- L$ x& U}, h# [/ V: p* Q) O1 U3 b
* k4 {. X) Q$ O8 r+ v/ M. Y' X
int main( void )
  t/ [* G2 D5 G, V+ W4 y4 y  z{$ W' G3 D, w) u+ v+ G

: j: D4 |+ g) }$ d. w' Z    /* Initialize BSL */& l2 H6 t) o/ T2 |
    EVMC6747_init( );
& T6 h1 c3 T3 d" u        /* Call evmc6747_intr function */# j7 F% J, D% U8 b3 t# |- {
    aic3106_init( );
2 L: }; v4 \6 M1 {' X        while(1);
: u) ?; N0 H. a. ^1 n* d}
2 C. F( i5 m1 y# l/ A2 D
1 N% S& r0 o. F7 {$ c" x3 q3 G) A- Y6 O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, T3 ~) i# I$ s& L+ j8 B9 z/* Initialize MCASP1 */
. |  W. P) [) k' F, X/ j    mcasp = &MCASP_MODULE_1;
1 O' ^; }& H+ z* z3 R/ V) A    mcasp->regs->GBLCTL  = 0;       // Reset; a6 B6 F* n& p- F  M8 |& G
    mcasp->regs->RGBLCTL = 0;       // Reset RX
  P) S8 K+ i, o3 I7 W1 \# U    mcasp->regs->XGBLCTL = 0;       // Reset TX) q  x4 D) D5 b, w1 v( {
    mcasp->regs->PWRDEMU = 1;       // Free-running. @$ y2 E9 H4 O3 M
   // configure McASP0 receive registers
' `* n+ O8 {6 Z, F' j    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) o8 o3 _9 ?/ V4 C& Z. r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 k) R) J! r7 i2 Q; R    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 U* @) X# m* p7 K. c" C; l) w- H    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 k+ Y* b5 F; W% F! W+ a    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# w% A# h2 J) t( {( j, o! G2 v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 G! [- l, T) L& v- D5 c' T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( S; P$ M- s/ E# _4 y! _: E. J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 x( T$ C3 d1 Z$ r9 ]+ b

, F2 N3 ]. s& j' o6 w3 B) q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 D6 K0 A0 c" E4 u* {2 v    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" q! `% z8 }# E& W  R' e" T& D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 }8 z4 t" ?# _  k, F' L
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ N* u% a0 H  }0 f% [# R9 O    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  y3 d, u/ `2 D0 x, B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 V9 H" I# c/ R; Y1 ^% ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* w2 z, _: c3 p4 j& @
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: V! k+ i4 z0 ^, H  v: e
" M  C; ]' h6 S6 w, \; x. E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% W6 w- h' `4 }+ ~1 L
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. b8 F; y+ F3 N: v* S& w$ q5 i; o    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 Q4 n* T3 Z4 u# i( r) h) X    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" G; z& F0 `5 C$ @: B5 e3 ^
, m; x! A+ }; N9 r; e8 B7 G. y
    mcasp->regs->DITCTL     = 0x00000000; // Not used) d( ~4 C& y. G; g/ k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 D# T4 b% I; t& h- v/ E
    mcasp->regs->AMUTE      = 0x00000000; // Not used) m) E3 L4 \- I3 H. o+ o1 M( w

1 P9 E- ~. j0 |2 [/* Starting sections of the McASP*/0 _9 p/ }8 \/ Z" i4 Z6 J% y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " P+ q0 Z9 }1 {. k6 p5 v" V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . I$ f# ?4 z% H# u7 q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " x8 K) w( `0 a( P2 M% [5 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 s+ T5 K, S( E* h

) X4 f/ B8 ^: D" T' F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; w3 a" E5 g% }& m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 F, [5 n' h3 w& k1 U6 y3 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # g; l+ y0 S9 G. |$ X9 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 K% k3 t, ?8 T6 N8 O3 O7 f; p! W, [9 W% L
    mcasp->regs->XSTAT = 0x0000ffff; 5 X. V; |2 A2 |5 H
    mcasp->regs->RSTAT = 0x0000ffff; 2 E! i* r4 v8 B+ d9 B8 d) h9 e
9 O) _7 W1 |' ]0 l# |, R
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. E7 V4 ^/ m9 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( l# B0 ]0 c; T$ W7 N4 T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 ?& C  {- ?8 {, A5 v9 |2 p' w8 Z+ ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' o$ q9 U. O/ F2 z
$ q% v; L2 z* l1 q/ p; s. r- r" R) D
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. E9 g% M. L% l    mcasp->regs->XBUF5 = 0;
$ Y  S, a: I, B, S    mcasp->regs->RBUF0 = 0;
8 ^. k% ~4 g3 I
: _* S% F% V( E. u* S    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, t5 s1 B# M# L" \6 g' E- }7 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 X- o) ]4 m  q# K- Y7 \, k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : r3 N; p& N9 @# G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' ~) f0 ]4 t4 m1 e. j' m

6 V; [" E: b; I. J9 ?$ U# |# b( s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' s1 a3 l; X; d" p7 B- \+ T; m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 {$ p/ N, h" A- ?( t0 _( \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* K$ j' |# Z& O3 H: m8 ^$ J% I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, z% [% b9 u7 v; N7 b
; K5 Q' y' l+ W4 {% Y. O: e1 f6 y1 g    CSR = 0x0000;
: a; y' J' O6 n& x5 A9 a) k- z    INTC_INTMUX1 = 0x3d;
! k+ ^' V, O' U# d" x7 j    ISTP = (unsigned int)vectors;. V$ X- H9 X0 J' j
    ICR = 0xFFF0;  8 P  o' b( i& {# P
    IER |= 0x12;  8 ^6 E  v; t/ H9 z! v9 L
    CSR |= 0x01;  - A+ H5 [" {3 G* ]8 J

  p6 V; A( U! `6 W( R$ n
6 P4 h# L- T: ~$ F' ~" E6 o% u: F1 W7 A0 v: B- l9 ]
还有就是两个输入输出函数:
2 W' N% [3 `: q2 }7 |! Gvoid output_sample(Int32 out_data)
* I4 _" M/ }; @/ O: C9 n1 L{; ~4 X5 S5 A! `2 o* c; ]
  AIC31_data.uint = out_data;  
8 _, _: N# d5 w% O% o% {0 k( `7 R  MCASP1_XBUF5_32BIT = AIC31_data.uint;' M% u& `5 N5 M( h6 ^1 C5 s8 @
}
# |. a6 m8 n1 c% D- {! h$ x
# r* K) _1 ~' F5 s; G" TInt32 input_sample(void)
; U) Y) `4 m: F( u: t/ N8 {& q{  
7 N2 q# g' g, P( h  AIC31_data.uint = MCASP1_RBUF0_32BIT;; @' e1 }  M5 y2 a  L% t: D
  return (AIC31_data.uint);
0 i  Y2 k# d% w" V' A7 g}& ^* A7 B6 v) s( B  [9 \

% Z  q# r1 J! i2 u" m) r) h3 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-2-3 21:18 , Processed in 0.041389 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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