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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 i' n' }& P9 n0 h0 j/ Lmain文件:2 s' y5 T$ w" H: P  O
interrupt void interrupt4(void)  $ x7 q- B8 w6 }! A$ R
{; h$ ^2 g8 @! ]8 g& ?
  Uint32 sample;( Y3 G( D* B4 ~6 N$ ^) o
- P+ b3 Q9 F  F. |) B- Y" ?
  sample = input_sample(); // read L + R samples from ADC# x4 g' A, h5 M$ A( ]/ b$ H
  output_sample(sample);   // write L + R samples to DAC 2 `7 O; }: L. k6 z( S7 ^5 A4 G
  return;
$ u+ Y$ n4 G! b, n1 {4 F7 b0 W}
' I" @. a3 H, ^6 {- w* B; M$ _0 C* C4 v0 W: m
int main( void )+ \: X6 I* k+ ?* W
{
; U* y& i  x$ d! k! r1 P4 S* u2 u( X* o
    /* Initialize BSL */4 \5 {% t+ h7 P( {5 B
    EVMC6747_init( );
. C; ^0 P, P% n        /* Call evmc6747_intr function */
* l3 X$ L5 `2 E" Y    aic3106_init( );
; J6 _; u) S- t        while(1);3 F: s+ D/ N) m  e7 X8 _- H
}6 s' ^1 C6 s( u0 M0 Z
$ z; H, q0 V5 h+ T

2 l$ ^- i6 C* ?5 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' p9 h" T0 o/ u1 _
/* Initialize MCASP1 */# ~3 z7 h5 ]" ]& S- n, Z
    mcasp = &MCASP_MODULE_1;
! n0 l( g9 o7 W, n    mcasp->regs->GBLCTL  = 0;       // Reset
# n: R$ M" ]  N) D/ d1 r& ?! p    mcasp->regs->RGBLCTL = 0;       // Reset RX
& n' V3 K! H0 E0 Z/ J  o    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 j' B: K  N, c% ~    mcasp->regs->PWRDEMU = 1;       // Free-running3 h/ E' A* v3 K0 E- |# B9 w1 y  D
   // configure McASP0 receive registers: a1 R4 _* ?- X" T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  h+ k' {0 H) Y1 W* O  h
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& X5 N3 }7 b  O6 n7 R3 H7 h$ F$ t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word" X) g0 T( z" o8 T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 F6 `: ]8 v/ S
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% H+ a! \5 J1 Y( ^    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 J& q$ n' n0 _" T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& S3 m% T2 n3 P0 n- x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ d" Z7 R( a( W7 j
, J5 v2 V, L$ C- s/ B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 u; K7 H$ V$ B# W, i; L1 a% @9 I3 u( J    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# Y0 j2 l: E: S& C
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! v6 N/ q2 e6 R& X9 s+ O, R+ f: S
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) @$ N0 ~) N; B& G0 G    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" U/ b/ ^+ Q& p8 H    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 ~. c( I5 N/ d/ p/ F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 {$ I2 Z+ |! n3 n6 e$ F' _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 [9 G) R' n7 |+ Z4 I$ @" ^) G7 \+ P% @9 A$ j! ?0 `  b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  z- g' h* Y$ D, J/ ~* H2 v
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- K9 Z" D& s, @
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& }3 K2 }% d9 S) O% r- d    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: A3 T& ~5 A: ^1 Y) J  Q
: d( V' y0 d# w0 i3 S& _2 r, E    mcasp->regs->DITCTL     = 0x00000000; // Not used
% B9 a, O. i( S    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 l* W4 V3 d* r; o3 S: J
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& J# j* X3 o' [' o  q( M) h  {
  G, `& s6 ^, z0 k& o/* Starting sections of the McASP*/
2 d$ ^4 r* N5 _$ Z* X2 }    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 ]% ^4 V- R) N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. f0 V1 ^; D+ P* |    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # v1 L2 G" c' H5 z& d3 M. I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; R3 K3 W6 \2 [$ E
# ^: O+ N7 Z' i    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% o, ]# J  }7 I- z; a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ b7 T  p. p# C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 B# B# q7 V) ]6 i7 p& [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ L" X! O$ O) X$ A5 Z
- [0 D' R8 ?, c: _" a    mcasp->regs->XSTAT = 0x0000ffff; ; R; `" n2 S9 m# A- A: @- N
    mcasp->regs->RSTAT = 0x0000ffff; 1 u8 g4 a8 ]& O
0 @/ \; x- f: h) S9 }9 l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& N- D1 G% }1 l2 B9 }: n! j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  W1 C0 @* k2 v5 i5 m    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   D9 W# J5 ~5 T: J: s$ D: @1 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 G* y$ A- ?1 d) c! d& l
+ ^  ^+ a* C8 v* R" m6 b; _
    /* Write a 0, so that no underrun occurs after releasing the state machine */
" R" h  v& J( f7 m( |% z- \    mcasp->regs->XBUF5 = 0;* H  Z4 Z4 B. K
    mcasp->regs->RBUF0 = 0;
) P) }$ \* f3 t# g$ ?+ L' h4 j; X7 d2 B, q. U
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % f2 F# U1 z2 q3 h8 M# Q7 ~% ?# x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 [6 s$ t& \, S    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, d. Z  M0 [: t$ N$ ^3 f2 r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ t0 J& K# F( ^# @9 M+ s" y' b9 j9 H6 Y6 p& |; Q/ S
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ q5 M. M3 ?' L5 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# \6 d: D! \; ]    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& W! q8 F) J! ~# l: g2 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. a0 Q5 d& d$ K& k: u
: l; D- X3 S( z( \- E7 \    CSR = 0x0000;) k* [! h4 l( B  Y* ]
    INTC_INTMUX1 = 0x3d;& o2 z" H5 E8 D8 v/ j1 l2 H
    ISTP = (unsigned int)vectors;( O/ K% @7 w* x1 Z1 Z
    ICR = 0xFFF0;  ; q* H6 a  g5 a1 z; O7 h  [* k" p2 k
    IER |= 0x12;  ; t- p, J1 e& S. E% g
    CSR |= 0x01;  
( i' [* V% c! K# U9 D8 O% C" b; J. Y8 X4 p: n! A/ I

9 Y8 v; V) ?0 j  f/ b; {) O  X% X; @& k9 F$ {: j
还有就是两个输入输出函数:
& Q4 }# y; X9 Y6 d" Svoid output_sample(Int32 out_data)
) E" I  r4 D# t0 F{
0 ^" L! X( z* m; J  AIC31_data.uint = out_data;  
. Q/ }$ }/ p. D. ^* @5 C+ t/ f  MCASP1_XBUF5_32BIT = AIC31_data.uint;) D$ Y" k4 u6 |! ~  K, g- u
}8 z) E$ V& t  F% x
; l; a* r7 j+ z" ]1 C9 k' L
Int32 input_sample(void)! D" x, Y$ i0 c, I* U3 s
{  - {* ]- @) P. X$ g1 \# P# l- e) P
  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ q$ i& |& s  Z
  return (AIC31_data.uint);
; B4 K: F* c$ F, e! f}1 L! q0 C0 `  |4 I; }3 ~7 \% W

) L6 K8 e3 S) K% p, S/ m" K! I
分享到:  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-11-22 17:38 , Processed in 0.040057 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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