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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' W& }7 {* `" x) x! S/ u; s, u1 Vmain文件:& i. p- H; _+ T- A" y
interrupt void interrupt4(void)  
7 w$ Y9 A2 W2 Q" Q6 [, G/ ]) M' ~{. V* i# |) z+ p
  Uint32 sample;2 A$ q4 a; Q4 L2 a% R( Y+ b' M/ l& V
9 a1 u+ n, n7 \. D
  sample = input_sample(); // read L + R samples from ADC( B  p( }4 u/ T4 s. d# D
  output_sample(sample);   // write L + R samples to DAC
7 a0 o2 u; r- G5 g4 u8 ~  X& D  return;
7 d9 W" j6 T) t9 O# ^4 m% z( j: N$ Y}" j- Z% `( N: h; ^, |# K2 F4 h) g

# p$ Y, n8 _) M& d7 o3 Hint main( void )) ]6 w8 b$ s5 D2 M
{
  V! n  l8 V- O8 m, U
$ ?  [8 D* \' S2 D) d    /* Initialize BSL */) w) p& q' T/ ^7 Y
    EVMC6747_init( );
3 a# s, v8 f1 G, L  V0 J* w" x        /* Call evmc6747_intr function */  K8 U: ^+ L8 H, ^% D+ o6 L
    aic3106_init( );% t. o) H+ [* G9 }
        while(1);* J4 X3 w, i; @6 w: q! G0 l6 V+ I
}
  a' M) I; S+ H; p- v
. n4 I. G3 T! ]% g
4 X+ N( a  M: O8 J" E: R* k3 Naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ B/ }5 `: Q! H: y; I! b8 R
/* Initialize MCASP1 */' k5 P6 D9 e1 b1 D1 G4 O
    mcasp = &MCASP_MODULE_1;4 K) I, T8 S  w
    mcasp->regs->GBLCTL  = 0;       // Reset& {, D( g8 O1 N1 O5 ^
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 ^" x" R/ j( X3 |! J+ [' @2 `  |
    mcasp->regs->XGBLCTL = 0;       // Reset TX1 c! S" j' R9 R) K; t
    mcasp->regs->PWRDEMU = 1;       // Free-running% c, r# T% p7 g# }; Q9 L: ?
   // configure McASP0 receive registers
+ T1 M- {" L, h9 Y$ b8 \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' W9 m6 |3 `' k+ |8 N$ P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 C. e, _5 M/ Z/ m1 E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ j. F* a3 t, P: A' h    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ t$ E, \# C1 l" t
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 I4 A# B0 y) Y0 \1 ^! l    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  `1 v- G) ]/ o* |% G% \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) W# V) z' [! S7 v  h: Z" r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( ?4 K. R9 `2 V
  l& U2 B2 q. E3 j. V* Z! ]
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* M! l# m) ]+ g    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( _. I7 P( g- K3 a    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 z: \1 \3 R. `: d( Z+ k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ H) M6 Z2 d0 E- I: B& C3 k( P    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  I' B5 j# z2 m8 d! ^# \3 x9 O9 u" i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. s2 l( H" V  `& s; }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: H) K  R& H, x" O; x    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ _% Z* K( C. Z' ^
& M- s5 }8 _: [/ e4 j    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* u# ]( w5 t6 T( U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! ]' n" E% G. ~& v8 G2 S    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 k- L/ A- e3 J8 ~3 W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 P" S- z7 D) l; E. A
% b) l! A0 b1 @4 D' u2 y    mcasp->regs->DITCTL     = 0x00000000; // Not used
' x( p# w+ G: ~7 S4 P# N9 W    mcasp->regs->DLBCTL     = 0x00000000; // Not used* G7 U2 C' V! |+ X
    mcasp->regs->AMUTE      = 0x00000000; // Not used* I! j' x# f; U/ L3 _" H
& b+ ?$ A  O7 ^- I, h
/* Starting sections of the McASP*/
/ s, {1 i& @1 b1 J! A/ g* Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ L; _3 u# p- @1 B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & V0 e, A: F% D' `# k
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 E1 n: H! n( h- ]  W7 b0 u2 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! e2 J! _0 Y$ E8 o7 }" v

+ L1 o# Z( {1 M* Y, R/ P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) D; e* s# R% R: N+ y4 [# e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, _# \0 ]3 h# Q8 F- x7 q2 `, R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( }: w2 w" ?. l+ c7 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- A: }6 `8 R2 F/ e' N0 @8 ~7 t8 p

4 V6 C: T* [' p" g! S    mcasp->regs->XSTAT = 0x0000ffff;
* _: R# B1 q+ L8 f: O( j% w/ V    mcasp->regs->RSTAT = 0x0000ffff; $ ]6 S" [! M2 u2 E8 y: u2 [  g

: j2 M6 a! p4 r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! b  h8 G0 |1 S) l9 v9 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ V) z  @7 q5 l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ J5 [: d$ v% F5 n: d$ b- n! D$ b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, z! z$ i) S  O  F& m. |6 U. V/ h
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 K7 _$ }! f/ y9 N) [  @    mcasp->regs->XBUF5 = 0;
' N# L. ]. ]. q  T+ o) n    mcasp->regs->RBUF0 = 0;7 h2 X' F, ^5 J% _
8 I. x9 n1 m; z7 ?; F- ?5 e/ p
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 O, b  ]9 X9 e7 s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' ?7 V# E/ L0 r( }$ I! H
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 q8 L! X8 w! A1 n4 z) Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 g9 C1 j2 I( j/ t& B. w0 h; g
2 G# L8 W$ f. g( |0 t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% }" p  r3 w  o" {8 C2 P+ Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, y  {7 z! D) s% n# x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: T1 e+ t1 Z, z1 k& J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: V& E7 y: C0 z  ~, P2 x, j* ?( p% j
    CSR = 0x0000;) i2 x' y& B4 U9 T! a* f4 o/ w: Y6 X
    INTC_INTMUX1 = 0x3d;
2 q+ J  T) A% L1 y    ISTP = (unsigned int)vectors;
6 s+ m$ c& ?2 I) S. E    ICR = 0xFFF0;  0 K5 {- Q$ }' C) A- P1 D' z
    IER |= 0x12;  
4 ]- M0 T3 K! M3 H    CSR |= 0x01;  
" B3 W! P. \7 I( u4 C0 Y  l& C0 L# @: [5 w6 N8 o* N

# H, J3 M% f6 p+ [; \
. r0 ?% S: E  J' _还有就是两个输入输出函数:
: a& P# o" W: o+ K7 \void output_sample(Int32 out_data)
8 T; n3 M0 f4 {+ X4 _* R; a  L- H& M{
! h9 _9 Y3 N* b7 p+ S; D  AIC31_data.uint = out_data;  
: p/ K+ {$ `4 ^9 i3 f  MCASP1_XBUF5_32BIT = AIC31_data.uint;* }" h( N  _9 m% ]0 X
}
7 e7 Y6 a5 I% k7 _1 M+ j' Y$ l. Y+ N9 l
Int32 input_sample(void). ^+ M8 _3 ^8 N! w8 `+ Z
{  3 O/ f& K. F! U7 q& K+ v9 ^2 ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 ?& x/ j. p; l2 `( O. P  return (AIC31_data.uint);5 G8 M. G5 A* P/ l- B# e
}6 p4 h; Z3 w' j) |# D% M: G  D5 T" Z5 S
6 x- e+ T& D' |. j: d) O0 e4 W
分享到:  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-14 06:34 , Processed in 0.042340 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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