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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& v$ {7 \- p" F. s- J* X0 gmain文件:
9 p( i; Q# p: l: C0 q) Pinterrupt void interrupt4(void)  ! Z  n& }" e% e+ c
{/ V# C% L) ~6 H, E" N: \1 H
  Uint32 sample;
1 V2 K0 k- D' F2 W7 u" t' A  @/ s# s% V, f( X7 I
  sample = input_sample(); // read L + R samples from ADC0 \2 j) ?$ ^. _$ N' F
  output_sample(sample);   // write L + R samples to DAC 7 c  R% o% s2 ]- d
  return;9 k" a. T  r0 C; ~5 F
}
& ^: ~& d/ V  u
, F7 h+ u* U! B( l( Qint main( void )
$ M- q3 b/ y; ^{
! B2 u2 Z# Y3 a( f/ T! y7 M, J- I$ m. ^! p5 R4 n
    /* Initialize BSL */
2 [. K& f, A4 G7 o% ^    EVMC6747_init( );
1 p, h. o. W8 l, C; l        /* Call evmc6747_intr function */
/ d' ~+ B+ O/ ]; \, q    aic3106_init( );
( J0 G* P  [& P6 j. s8 L* G3 f* t        while(1);% r0 r( ^9 ~8 \' c6 [+ B8 U1 A1 V
}: \. n& z$ L8 B/ K8 ^1 Q4 D
0 l5 o" d1 A: S) n4 U

5 @" \  q/ D5 d/ i+ C1 H% Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ ~; O3 x- A( b5 `2 p! s/* Initialize MCASP1 */
  a; u% z7 f, e% l6 [5 _    mcasp = &MCASP_MODULE_1;
; G! D' f$ ~$ C# V" v$ c% U    mcasp->regs->GBLCTL  = 0;       // Reset
1 h! \2 `! |! W* g5 B6 w    mcasp->regs->RGBLCTL = 0;       // Reset RX# J* A) n2 o. S) C  g; H' o
    mcasp->regs->XGBLCTL = 0;       // Reset TX
) `  M- d' f. ^9 Z- A! P    mcasp->regs->PWRDEMU = 1;       // Free-running" Z0 r# a+ k8 z4 c9 r. b
   // configure McASP0 receive registers
8 ~$ @& L0 T. E" l$ I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ L( y; k, q/ U0 a: t- C
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 N( N0 b2 n5 C0 A/ t  G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 T. _: I$ U2 ]0 }* E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( D( ^+ w1 E6 V# X
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) M6 t& {" t) B% _7 A2 r* P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' t0 G# J3 J! q$ ?0 `: H
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- U. v$ J1 N5 ^
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 o# R3 w: r8 B+ K2 X( \9 c* ~
: Z; W9 G* n) l0 c    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 o( m6 x" X7 R  [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) C0 g& P4 d1 R. s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 V% w2 z3 V$ W1 t/ t) C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 T% ?4 \( G: I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 v6 I8 w- ]4 l" w1 d8 g3 k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* E& J3 k$ z- s5 `: k    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( g5 q7 t5 c6 Q( k$ g/ }; l: u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: H1 K2 X8 |# R# M' F- L/ Q9 b; k+ @$ J$ Y2 f; ^" y) k: b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 p2 F. H& a! G( h8 i6 P1 V0 a
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- e) a  \  R- x" h2 @: R
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 S4 s2 f4 x/ Y9 W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 d' l' S  A# j. `& ]
6 a+ i9 q: P2 W! e1 J/ g
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 H+ T) F& W  D) k    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 w, c9 r% r3 l( |$ c0 f    mcasp->regs->AMUTE      = 0x00000000; // Not used4 y. O" S# ~& L9 G

$ V6 b! d6 ?/ o0 W# O! r, ]8 t/* Starting sections of the McASP*/7 o' G8 |' x/ ~- L( P: X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 Y' V2 a* C' d1 W$ B9 b( b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 W* T9 F4 \- ?, l0 f    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & [& r/ R) w/ ]) Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% L; ^. K' d) P2 C7 v1 R, \& W; o4 a3 E: k9 d5 \; t5 k  t
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 w( T# V. I, @3 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  i4 g! j$ o; ^( P( N) q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* L6 \1 a9 i; s5 a" z, y1 o" {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( C) x# z& n5 x  Y5 v( h

) B5 h( e: I# \: y/ L/ G0 z    mcasp->regs->XSTAT = 0x0000ffff; 4 C, V4 }8 r* z$ [
    mcasp->regs->RSTAT = 0x0000ffff; + q+ x) ?* X* X3 X, g/ f& a# e
2 q, `3 V- x) W9 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- D, U  q) H% s. T, {# K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 V3 @4 ~6 W) V5 L: K4 Y, d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 \5 {: F0 Z7 M1 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- {) q" p8 u5 {. E/ Y  G2 z; K6 K- O: j# n& U
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) A7 ]' a; a  J& S% K2 b    mcasp->regs->XBUF5 = 0;
/ p0 a  C% N. V5 T    mcasp->regs->RBUF0 = 0;) i) d8 l0 I8 q+ [/ c. R
4 f# y2 `3 ^8 G6 M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, s6 N! n2 g3 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: i6 K. x4 p" e3 a# r    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + {+ b3 @5 T# z2 \% Z* ~8 G0 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( d$ i$ @8 A! R7 l  X/ O: d! T# d
1 j, q$ Z1 b* D# `5 @; `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 v: |& X) q, {8 f9 `4 [- v5 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 ~9 b, P  P5 j; T0 t6 g' U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 P$ z: y/ I1 V- `5 B' s  g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  ^3 r% l# y: V' f* k7 U  n6 b
. ?: s  X# s+ V/ {; ?    CSR = 0x0000;
! x6 E5 r; z  s  J6 D4 }5 o! ]    INTC_INTMUX1 = 0x3d;2 s0 k! {" s" q6 V$ ?
    ISTP = (unsigned int)vectors;8 a- \2 C; X/ z" `0 O# J) {
    ICR = 0xFFF0;  
7 u% `6 h. Z' [; p8 R5 z% F9 K, u    IER |= 0x12;  
; U; m7 ~; ~" f& f& c    CSR |= 0x01;  ; q7 m1 J- h0 F2 l# R7 m

- A& Z# e$ u. p* d) [+ c+ X2 \
2 W/ p3 n  a3 i( S' y& M7 X# H$ c8 ~- k, h9 h8 t. y4 S: `5 u  e: \
还有就是两个输入输出函数:
( F! w: v% z( L! u, Qvoid output_sample(Int32 out_data)9 y0 u' ]& r) u4 ~& R
{% J* M" k! l  C  e2 Q
  AIC31_data.uint = out_data;  
9 o8 ^, x& Q2 A: O; m  MCASP1_XBUF5_32BIT = AIC31_data.uint;* x; w; s3 S: W, ]+ L
}
. s8 K0 [, F% P# C, u3 {( E! `2 N+ l* `/ T1 w/ a, [
Int32 input_sample(void)
8 \2 v% s1 f; i, f{  9 M& f* [' w7 x4 e7 k8 \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;- X9 G) I) M: _6 Y/ ~  D. ~
  return (AIC31_data.uint);
' K, s! C6 O& _  F}
6 E+ |4 c# ~( x4 a1 f5 l" N! L; [8 M& y: \' J/ H. t, s
分享到:  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-28 10:19 , Processed in 0.041873 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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