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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 C8 V( S5 A" V
main文件:
5 Q- `$ G) r/ i- r: [/ r. A  sinterrupt void interrupt4(void)    G5 M7 M: o4 _
{, r) _2 [. r4 {8 x
  Uint32 sample;
/ r/ u. v) `4 a& X6 q. v1 U% }/ f1 ?+ s4 J) h' L4 j  D" A
  sample = input_sample(); // read L + R samples from ADC
6 S4 O; t  Y/ J& |2 u6 E3 K  output_sample(sample);   // write L + R samples to DAC % L4 U  \) A- D+ ]/ m
  return;  }0 p' @& B& T4 b
}
% {: R) s. C! A( B7 v2 f7 |' Z9 s! O& i) r
int main( void )* c4 q. _: R  i) t" ]
{
( v( u2 v8 |& E+ N' T& g  G5 E# h$ {. o) b
    /* Initialize BSL */' Y7 N  y/ A0 ~3 B9 K0 j5 B/ d! X+ @5 @
    EVMC6747_init( );! `1 ]- \1 U1 ^2 S1 }
        /* Call evmc6747_intr function */0 U7 a! c7 X( z4 o% j) t" p( E
    aic3106_init( );7 ^3 `- K( w4 H, p# s1 D8 ]
        while(1);  J3 }: q8 x9 |8 r7 ]* J4 o3 M, \
}
: t; t9 p# `4 a
- c$ P4 [/ x% G! r% Y( a- Q# ]) c
' q2 ~; R4 N" l) Uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 G/ C" L) x* |: s) _; X: ~$ C* N) f
/* Initialize MCASP1 */
! M, g0 h2 m& X  |    mcasp = &MCASP_MODULE_1;
0 G& z8 N, N3 t; y* D( G$ s5 T; }: l$ A    mcasp->regs->GBLCTL  = 0;       // Reset& N/ J. Q8 P* @6 U  P  q. ^3 X
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 f. [" r0 z+ Q( N5 B    mcasp->regs->XGBLCTL = 0;       // Reset TX
; e) S5 W) l) o9 s/ d* {    mcasp->regs->PWRDEMU = 1;       // Free-running
. _% X% S! b$ @2 I   // configure McASP0 receive registers8 B% r5 z5 P! W* y; ^- L
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ h- d' ^. }7 R: R' X: c/ d3 ?, p
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" s* D9 h- A) B/ ]# U3 ]: H8 `    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 X$ G3 z' [( l! F
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) \8 G& \0 s; n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 _/ K" k& V2 S: j  D3 n( X% d
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, C" v/ {% K7 d- X  x5 t8 n
    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 S) u6 T6 v: r2 q! u$ W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; u- w6 g7 Z& f2 s9 ?" W1 W3 a6 Q3 p
: T* J! Q1 ~% C; X# c, w0 m4 X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# W( Q2 P+ ~  _    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& U, j8 C0 F1 e! A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 }7 }! ~/ A% D    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 R0 k' u; R5 |& V1 C5 ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* p- X9 t7 ]* Z! p0 @6 P4 q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ B' h" i/ z2 k5 o+ z5 y6 t/ S! ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 U3 c7 ?+ X- H% r    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! R) G" g5 s/ q
& K) G; S  E5 {0 t" t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* ?1 Z/ k, l; ~7 L6 @5 z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 F. Q6 ?: x' ^: E4 a) W
    mcasp->regs->PFUNC      = 0;          // All MCASPs. L5 m, w- G9 d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) Y% D  V+ Z6 L+ j: j
+ A" X5 o3 \; `  O& n    mcasp->regs->DITCTL     = 0x00000000; // Not used6 o2 X% q* `; U. k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& ^7 a2 r/ x- T: D; g+ O    mcasp->regs->AMUTE      = 0x00000000; // Not used- [1 p5 v* `( s( J: a" ~
& [! X2 [- q( E3 P/ O
/* Starting sections of the McASP*/% p$ M0 m2 G8 B( }$ U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. X" |; G0 k  h' }- ^/ t7 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & ]# X2 O+ m1 j- {+ ~2 y9 }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ o+ H3 F# W% U. e% @" h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- E3 A! X: c  Z) w8 a2 ?
3 M& g( ~- B! x, X1 m/ C. }
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& \' D2 r* F: q$ m8 _6 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% O" U5 @0 \" \/ s! K: Q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # @. n1 T$ u5 C& @6 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 F8 Q0 X7 S0 h$ a" |; Q1 x

% v9 m8 e8 Z" j% A* D$ d8 ~* s" [    mcasp->regs->XSTAT = 0x0000ffff; % U9 S  R6 k( P' p5 G% \( ^4 G
    mcasp->regs->RSTAT = 0x0000ffff;
7 m7 w. ]2 R5 {( ^. A# v2 G( v+ M7 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- {; v5 O( ?- L9 ?+ t/ |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# N+ b5 T& r8 }4 X' Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , N# |. V, P5 Q4 w: j& j$ |5 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" D6 [5 g" |  G* q

/ ^/ o, _. W# X0 O7 E; ?    /* Write a 0, so that no underrun occurs after releasing the state machine */$ r# _$ h1 j) h: d; D! Y
    mcasp->regs->XBUF5 = 0;$ `) j; F: _* ^5 N9 ~+ w. {
    mcasp->regs->RBUF0 = 0;
9 c& L* D+ H: q0 `. T, Z- [3 y* j7 Y- D, H/ ^2 c! l* J
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " Q! T0 l. {! h+ l. ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& T9 N3 U1 F) Y+ E4 [) e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % v3 ?4 _7 G( \. B' E0 |3 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 ~% v7 }! e6 e+ M2 N. H8 N) K9 s9 ], _7 W9 c* s/ G5 E( B% x$ Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 p# T5 Z+ d2 }- ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& Z4 l7 d# l0 C1 K! n3 F. t    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# L: z% y. j9 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% r, f7 e7 z9 f* P6 O- i. [& C! V
# s* u7 d! A. s& z    CSR = 0x0000;
) D; G  B: j6 A" W: O+ t9 h    INTC_INTMUX1 = 0x3d;9 M# {9 V0 b# W7 n; j
    ISTP = (unsigned int)vectors;
$ z% k" B# Z. p% O2 H) B    ICR = 0xFFF0;  
  {9 k) E" T, b1 m( U3 x    IER |= 0x12;  
7 k) [3 G- f/ ~* q! `6 b& S5 H    CSR |= 0x01;  0 b: |* R4 O+ W& z5 j

. V: m/ n1 N; h/ V( p4 y8 t+ c& c- w# N8 O: v8 s% Y! }

; m0 y8 e* J- m还有就是两个输入输出函数:
: z0 \9 K& f4 Wvoid output_sample(Int32 out_data)
$ t2 `, ?' K6 t& Y8 k* L{
* e8 P: K( G. U% a% i* p  AIC31_data.uint = out_data;  
4 z5 n9 l1 A4 k3 {3 f  MCASP1_XBUF5_32BIT = AIC31_data.uint;% t* I, P5 W" ^8 m& L6 p
}
2 c# s$ y% b# a* t
" S( F6 [! f/ QInt32 input_sample(void)
, H7 w- M' }9 ]- w. S  }* B) G: h. N  w{  
! A0 l2 }) i3 f: L) o. b3 v2 s  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 [" B" x8 |0 B7 Y  o4 U
  return (AIC31_data.uint);7 R) b+ U  |) H$ Y
}4 k( I) z4 r$ D# m. A5 S! E

  z3 y3 i2 h1 t' g, e! x
分享到:  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-1-19 23:33 , Processed in 0.038805 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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