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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 ]# t# L/ u& O7 w# W
main文件:2 v( E- Z; A8 v
interrupt void interrupt4(void)  . ^* b0 h5 k9 ?) ]' f
{% z" m, T2 m8 U+ l+ E
  Uint32 sample;; a2 r& O" m. S  ?! s1 I5 t
( B; w# d3 V9 t" G# G( }0 u& j
  sample = input_sample(); // read L + R samples from ADC4 D9 b! R; g! a9 s
  output_sample(sample);   // write L + R samples to DAC * F9 `' @' ?  W" c! W$ q. e1 T
  return;1 m% {' |6 h0 [: \! A' R
}
5 Y- R4 _3 d3 ]" }7 n- }/ x8 ]4 O
int main( void )
6 h1 Y  f" H6 R1 _- y  i{
3 U2 \8 j1 U: ~  c9 Q. [1 M/ ^. d* o* J* v9 \
    /* Initialize BSL */
# J2 P* W, u5 R9 k" k9 Q+ `    EVMC6747_init( );+ a/ e' h+ g/ a
        /* Call evmc6747_intr function */; f9 {: A" g: B( {5 E; i2 G
    aic3106_init( );6 q/ V" |+ s2 ]( y7 A- B# M% R
        while(1);; M  }) L" M. ~% ?4 _$ N
}6 N) y/ [; K/ @) Y' Q, F) C
. _, V2 W9 s4 K- H
' D" l7 l: B' k: T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. O7 z7 x% F% ^4 S+ h/* Initialize MCASP1 */* W$ F. X, X5 o& h
    mcasp = &MCASP_MODULE_1;
6 I8 {/ v( [2 z    mcasp->regs->GBLCTL  = 0;       // Reset
3 d( h4 {1 V$ }' H+ k    mcasp->regs->RGBLCTL = 0;       // Reset RX
* f3 d' T, _$ f' T    mcasp->regs->XGBLCTL = 0;       // Reset TX) C, t, W+ R3 c0 X+ z
    mcasp->regs->PWRDEMU = 1;       // Free-running  h9 U0 m% x9 a- ~, V
   // configure McASP0 receive registers
' d2 f& I' B' U3 w3 ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ Z. C& i$ B. a
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 l3 }& `0 L; W4 t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* Q! B- r! e% G) g5 W9 I) q1 {* f
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): o4 D0 ?( ]4 d3 j* K- V5 H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 ~3 i8 Z7 ^% f6 ?* _4 I8 x: ^" f
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 @, t! L# F  ]. _
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* b4 [5 t- Z. U! B* J; S9 m7 ], j/ R% I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 Q, k4 s. Q* S+ b4 O
% D7 v% Z, c5 l# l6 y! {
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
2 K3 Q0 T7 y3 w    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 k1 z$ L$ ], U3 h3 ~# z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 N2 U  T+ Q9 q# Q8 a
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 i+ ]/ O. R8 Y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ U$ Y5 j6 h8 s& o* _# J# Y0 r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 O3 ?6 V5 J+ r" r7 [9 P  I6 d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 w& j% W! ?9 y9 o0 {: d6 ^
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 I. m* d6 V' M. p9 ^3 ~$ v: X
$ I5 D) ]9 t3 K" M+ j5 T$ e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ H: k( |6 T1 a+ k8 @- E    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- J9 @8 X, m2 a% p5 R' z1 _2 t
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ i4 [& o1 `8 W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 [. B# j, \0 H0 O: g6 A

* E& n9 B+ Z& b; e+ c. A, j    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 A% a/ i! Z9 g0 b5 b: X    mcasp->regs->DLBCTL     = 0x00000000; // Not used# a2 O# y- e" |! R$ S1 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used( }  S5 M& I* h: V0 F- W# {

# N! M- }) n, L, H7 A2 H4 X/* Starting sections of the McASP*/
) X; m. R+ M8 b- V5 S* r2 F: W6 I* ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( Q4 I7 O) m+ i0 c2 k& F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . M( ?$ r7 f3 z: X4 I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 T8 X5 K+ S# r" b# M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( o1 L# |4 L+ K5 v2 X6 Z4 V) T, M4 P/ V) j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; I# r& f/ X2 [3 ]- ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' p9 T3 }7 |; U" \% F& Y: u    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' ?5 K! E+ j% V% S5 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: i: ~* I6 \; }
. E8 c7 r5 {2 r$ g% S% |# X* @
    mcasp->regs->XSTAT = 0x0000ffff; * G  {( p6 `  a8 P& W5 a
    mcasp->regs->RSTAT = 0x0000ffff; ; J, G+ y3 |7 K0 P7 q3 H( f

3 k! U- i$ y5 k4 P  U( h    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; j4 }% a0 m: Y% `8 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; F/ O/ Y1 S, Q% G$ Y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # O/ {% h$ D" M4 F) E5 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) f) ?( ?& x  {. {1 u
. b3 ]9 d* E8 [4 v1 m
    /* Write a 0, so that no underrun occurs after releasing the state machine */* v' s8 K% C5 Y0 y; o! B
    mcasp->regs->XBUF5 = 0;
' e% x, Y7 r0 Q/ T0 D* k    mcasp->regs->RBUF0 = 0;. h  _( V' W- t! x+ a
" a! u9 I/ W  @4 p
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 z) O* _  Q. y: _1 v1 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 [6 u9 c% w3 {1 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - [6 V9 g" e, ?% f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 d* |' f7 e3 e$ c& a; Q$ I2 S. d
2 f: `/ i: o6 F* [7 Q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  w7 I! h; b# @6 p: n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 @+ m9 \7 @  z3 w% E( f    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( F( ~- r8 {6 W5 G* i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. u+ |+ \$ B+ L1 }& i3 W$ s% _) A: w* ^( Z. ?
    CSR = 0x0000;
' ^6 P; {+ H# m$ J, w    INTC_INTMUX1 = 0x3d;
; Q; E$ ?. b! @$ O    ISTP = (unsigned int)vectors;) u, g" R+ d% @  p0 K
    ICR = 0xFFF0;  
. e/ j" o; W2 a6 S, B# t% j    IER |= 0x12;  
1 J" N1 M( [3 l6 ^1 f% s( m    CSR |= 0x01;  / `2 u: k/ ?$ _* Z% M! Q: _

% `6 h1 m' I2 b2 S* ?1 i
2 I5 d* {! t' o) q, W  F
: ^4 @: \9 N& x* `7 g6 U/ M还有就是两个输入输出函数:
, {' Y) n" E) b# o" i3 H, Ivoid output_sample(Int32 out_data)$ l/ y8 l, V: [, w" l4 ~
{
7 M7 a7 `; I  h' p& W  AIC31_data.uint = out_data;  - W3 c5 ^1 A) R2 r* G9 ~4 a5 i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;- z4 C" ^2 F: T/ b* U$ @: z9 d% }0 i6 \
}
2 W7 f% m" D) a$ q0 _
+ T  ?' ?5 d% S5 xInt32 input_sample(void)
% O; h# G, R- a1 I& Z' Y{  
3 u) T" j& r% ^  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 s/ G* p. M% u& [* W$ t  s/ a' c  return (AIC31_data.uint);  K: ~, L/ D8 H! M- T& V
}7 m; w/ e8 n+ T& h
/ n- T) p! `( [/ J
分享到:  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-3-15 03:06 , Processed in 0.040218 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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