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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. F6 z1 I; D  E$ s4 Emain文件:( d# k0 _( A8 b
interrupt void interrupt4(void)  3 k6 c, ?  P9 [; G, P
{6 a* J4 X( B+ a5 L) e" }1 |5 W- Y' i4 f
  Uint32 sample;- N; S: W4 k/ o! _& x! b
4 `2 R1 e: l  ]1 b
  sample = input_sample(); // read L + R samples from ADC
! J: }6 P- |! ]  output_sample(sample);   // write L + R samples to DAC
: q0 B  ~( o1 z5 \$ G  return;
- K5 o# z4 `5 i2 @}/ y$ r& y" d4 |5 s

' e* |4 Z4 m' G$ p4 zint main( void )
- w& z2 I. j* t4 `# a{
2 U8 z& c) @6 Z( |* r- s, \
& K9 b6 G- z( W! s: u    /* Initialize BSL */; |" B4 M4 Y$ J* ]
    EVMC6747_init( );
- f; k$ ]! {% s5 _$ t        /* Call evmc6747_intr function */
, F  r5 k7 e$ _8 f3 f# p    aic3106_init( );, i  J! ?) D% N3 G
        while(1);' b0 l, f. x, y6 G! o! s& F
}
0 ~/ X; v* ]1 L; B0 p# R% B, T6 e0 [, b) \+ [. B5 ?6 h/ B7 B
' Z$ m: [% W+ J: [9 C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' \  t$ W# G) f0 ?/* Initialize MCASP1 */5 B8 r1 p2 ~# b) ^+ d; q$ S- L. C
    mcasp = &MCASP_MODULE_1;$ Z! K$ T! v4 y, F
    mcasp->regs->GBLCTL  = 0;       // Reset9 M, W9 q7 C) ?
    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 K: E3 p% g) ]    mcasp->regs->XGBLCTL = 0;       // Reset TX5 C# G, b4 ?' I. i# M; R
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 Z0 g, B: J: _8 _6 w7 ?   // configure McASP0 receive registers0 ^; R: c0 W1 |* O; w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  J, x7 D+ v7 g1 }! i    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( _) [% B. K! H5 ]3 N
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; F8 Q- }0 U2 R, h7 W  Z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! e4 t4 E8 u) [9 }    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 Y0 j* A9 r$ e
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 @7 }' B! P- V2 Y3 U8 c; E) _
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' p! K* M+ q( w0 U! @$ q/ _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" n$ W5 x& |3 ?- N
/ }4 A' w  r+ f/ m) d4 U9 v
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) K( n+ g- d! D8 J2 v; R* D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ Y8 d% W, c& }. R! e
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 [' @+ z7 ?6 X- J! h7 J5 B
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# f* B1 w- K5 P; q# ], l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 D4 |2 l- N* b" ]( {, B9 a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, X' [& ]+ R3 D) {
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 i- v; R( I/ F: C$ c
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  w5 a% ]% X: O- M) w! ~

2 H' Z5 U" R# f; p    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ h& w; p) s  T3 N0 Y8 P1 H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# a# `" [7 q* i( z, z
    mcasp->regs->PFUNC      = 0;          // All MCASPs
( i2 a, H, V. J    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ `  ?4 _+ E. y! S: c5 \9 T
# s* s2 Y$ `" \" v6 q, G# e    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 X( ^0 ~, f" i    mcasp->regs->DLBCTL     = 0x00000000; // Not used# _6 L' T4 o- D. {3 w  ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 v4 `8 [/ m7 r6 p+ Q+ A
5 k3 R1 I, j5 v' n- [
/* Starting sections of the McASP*/
  Q  x( U5 Q1 M* ~% c! U    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 a# @0 U; ~$ T0 i8 l7 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! F1 b! H% r7 W2 Q, h, H( q* T2 s
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # S* u- l( Z  Y3 }8 H+ t- d- u: h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- e$ K' ^- b8 I$ H. ~- d" Q3 t
% U% o8 \& j5 V, n
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  G+ \8 ^+ F6 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ Y) i  \2 N# O% }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 w/ t9 U. K" I0 @( j7 b7 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. n8 C4 [( h: m0 T' K$ P0 j9 \; @/ G
    mcasp->regs->XSTAT = 0x0000ffff; : ?& ?+ f) P3 l' m8 d: j" t+ d
    mcasp->regs->RSTAT = 0x0000ffff;
7 G/ I' f5 y- l# a; q: e
* b. L3 ~8 w% b0 d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 c2 _6 T3 Q: e/ F5 C$ s  i5 y) C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ k" i* J6 C' `5 _' G    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 B) Y# k- Q8 ^) L) G. z, S* F+ s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 }( [1 h! ^- W

% G1 C4 J8 g' V/ h    /* Write a 0, so that no underrun occurs after releasing the state machine */( Z- f- M' I/ @% j( g/ r6 ^6 G
    mcasp->regs->XBUF5 = 0;  p! h8 M+ m) B/ `  y
    mcasp->regs->RBUF0 = 0;
  z6 k1 M$ B2 P. ~( Z3 b) }3 q- T( z6 P2 V% B4 k4 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % H9 B  F+ W' c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 x/ n% Z! M% D, X4 a& ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 Q# |+ B# i6 m" b& }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 K" X+ c! V5 K4 W$ y3 k, r- R. z! |6 j; V( @+ \. l
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. i" \7 c. f* A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' ~2 _! M* X9 d2 w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / }7 W- }+ T2 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% Q0 E) _2 ^* e; x
& u6 P+ R8 O! C! v- u
    CSR = 0x0000;: }- ^" g  y1 V! A
    INTC_INTMUX1 = 0x3d;
$ E! Y- Y1 n3 h; H  I5 y    ISTP = (unsigned int)vectors;0 G& N) {) P2 ~2 M- Y! R
    ICR = 0xFFF0;  
- r8 i1 a5 o# @1 d) M- R6 }4 s    IER |= 0x12;  . b* o9 s' F7 ^  o9 D
    CSR |= 0x01;    ]) P. O/ c- t% W: z8 ?3 k! A

$ b8 }6 k7 d8 G! A
3 Z- r5 s4 p1 ]4 e/ }( ^! A
5 d9 U8 N& R9 C3 n4 z还有就是两个输入输出函数:
: z8 C; w/ r  Z2 Q% L8 ]void output_sample(Int32 out_data)
1 K: p4 J* p. w% z5 O' I{
/ s/ X2 `5 \/ c, p9 K: n3 m  AIC31_data.uint = out_data;  2 {- l1 G+ p; I' k* G+ i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. \  {+ R' c2 p' c% A. V
}+ t5 w) q7 G  P9 v

3 ^- S  F: `/ e* K* z) Q0 ^Int32 input_sample(void)
1 o1 U7 [" }7 ]9 Q* p8 _% p{  3 o% G, ?& v# G  Z; f( ^- L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 ]! O6 H8 z: ?4 Z( x8 j
  return (AIC31_data.uint);
5 A! `* ^" p* }! o}; e0 R' D9 c6 z! J, c4 t7 v

* _7 l. X2 L( r2 ~' t
分享到:  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-5 20:30 , Processed in 0.041401 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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