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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! S+ l5 B+ ^! X* ~$ m( I! b
main文件:$ Y! \$ B$ A$ A8 z2 B; v& L
interrupt void interrupt4(void)  
% Q9 _% V3 `3 u, ]- u7 h9 H1 r" c{% H; E( r, a. f$ b' v6 u3 c: G! l' G
  Uint32 sample;
% B" t0 D& `, G
/ {) ?7 e+ i+ T, @  sample = input_sample(); // read L + R samples from ADC
0 O9 a3 @' Q4 {4 A0 }4 }' n, N  j  output_sample(sample);   // write L + R samples to DAC - X: p/ e1 G/ U
  return;' j5 r& u. F. t; M
}& t3 I! c. Y% u: W- C! Y. H5 h* _

- i- ?) F  m$ X4 ]9 {int main( void )
# x' g( m4 i# u9 x  _( n' S3 Z; r2 L{0 o, H7 W5 ~3 N) C7 P

0 v. F( w0 L/ z' J& Z8 @1 `    /* Initialize BSL */
# o- Y( w1 ~# S5 }) D4 _    EVMC6747_init( );
% r6 q6 G5 A5 v  p9 u' E        /* Call evmc6747_intr function */. L; `, Q! O1 }# ^1 V$ i, z
    aic3106_init( );
% ~4 p" J+ o1 x; y6 O# n8 k        while(1);
" o! U$ \! K: `}2 e5 l2 c; U- e4 m4 v& i/ g' V
, q+ d6 U- T' C) r

3 g& Y  f; p! X/ Z/ J8 ^1 m+ B" Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 v0 u1 J2 B* ?" u& z
/* Initialize MCASP1 */
! E- c% _" m) W" f    mcasp = &MCASP_MODULE_1;% J, Q% g. ~/ q' h% |, |
    mcasp->regs->GBLCTL  = 0;       // Reset
" @1 b( n# ^! V/ U4 z3 m1 P    mcasp->regs->RGBLCTL = 0;       // Reset RX
) ^1 _- H: d' W) b    mcasp->regs->XGBLCTL = 0;       // Reset TX2 Z' G( t* c0 R9 c4 c
    mcasp->regs->PWRDEMU = 1;       // Free-running3 w: |6 \: @6 ~+ Z0 R# g$ H+ ~
   // configure McASP0 receive registers
  P/ I; I9 J; l4 K- H( X2 [1 e    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 s; m! @9 f7 J! v$ n/ ~4 P) M; H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; W( M" K' i3 o9 t; U+ t) `1 W
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ S5 n9 g) O! F. C) k3 k8 F% Q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 p' g) }3 Z5 Y) @$ v7 q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& p2 p, C2 v4 E- T8 u, f6 U. D
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- T% g; V9 X$ F9 |1 c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& h3 B$ u6 ~. G5 D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 s+ z5 [# {  u0 t/ U3 ^' k+ o: C2 M( c5 s1 @8 t
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; Y5 w/ @: G3 U6 d- p    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: |" d' _, j" N0 F. `: b" |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, A8 Z: ~$ \: B8 Q+ D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" ^: N1 ^) T$ J+ p4 w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: u. b/ I, {: x+ t4 S    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' k7 n8 t% Z, m6 d) j8 R* `; g7 [
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ V' C! C. L$ n5 e0 N$ u: U    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 T- X/ u* w8 \2 C' ]

5 k# V* X% W9 [. R; a8 j! U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# B# l" I' |0 y  y" E
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ x+ ^" R* s8 i( N/ V
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ D$ M$ J) h* `% h; [- A    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 ^2 O- O# @' e, V* T. Q% e& y
7 t- P+ u8 O% ^, ^8 m' H' i; H! K    mcasp->regs->DITCTL     = 0x00000000; // Not used. u% h& o& e: k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used  T& y( h  d- k% }* r. G8 a
    mcasp->regs->AMUTE      = 0x00000000; // Not used& Y; P# W6 y8 B5 B% ?

/ E2 W6 U0 }0 ^/ _/* Starting sections of the McASP*/! G1 r! G3 F, t9 S' h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 }2 _" @. @# m" g  V$ v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 n! c  Q# d/ e% V0 W
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 I  x! m' s; o) b3 e4 u1 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% U+ C" C+ G4 ~$ I# A7 G% N; @
/ e; I) x4 B' u
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 o8 x5 X1 r$ V* d3 c! N1 G+ k# c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. g1 {% U6 p9 v( W
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 A8 n: b4 H2 ]. W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  ]2 H+ N1 H3 J: t8 Q8 g3 p& V9 H& \; l/ w4 \1 q4 J5 d. o0 l& u
    mcasp->regs->XSTAT = 0x0000ffff;
9 S  b. h0 H" r    mcasp->regs->RSTAT = 0x0000ffff; % z2 ?4 Q1 N! i. M2 b. W& A4 L
* N' q" n# C* z' B( O& h! M' `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 E" h9 F5 h0 P. W& S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: @4 \0 @" q, z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& N" h3 b) `, e' g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; c1 A. V2 x3 X' m6 n# R: O& m) u+ i# O9 g5 n( A$ f/ m1 s
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' P& S4 V: k! q+ {0 w    mcasp->regs->XBUF5 = 0;* a) ]5 |$ m/ O& U" {, _) S
    mcasp->regs->RBUF0 = 0;
' [3 ~9 G2 [' @3 T$ {
$ Q3 P6 t8 D; q9 k- [% w    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / n8 p3 }: l2 X# ]# N% o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, P' f8 v+ Y; P# k! Y9 q0 O    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 k3 V0 ]4 ?7 w7 L7 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& a9 x# L+ Y: e

% }; K& D2 ?* K9 `" k9 R% E; ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ S+ e2 ~7 s) u$ N1 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! |7 k+ ?) t* ]- {" K/ \: \
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 W$ d* S' h! s/ k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 x0 i: |2 V. b/ E4 ]  [8 j0 G1 q6 B: [; [! U) m& r
    CSR = 0x0000;# A, ~1 k, h  G. A/ O$ u4 v& }
    INTC_INTMUX1 = 0x3d;) n  H- {2 S0 C0 {
    ISTP = (unsigned int)vectors;
7 k' U5 Q3 W" w# e/ C    ICR = 0xFFF0;  $ O/ I1 N& M! v1 S- Q+ U) {
    IER |= 0x12;  
9 ~( }0 ^! \# c    CSR |= 0x01;  " `9 u! }/ C5 B; f5 ]) k9 Y
1 ]: H% }- H" G8 X8 o% P1 J1 T
5 w- L5 t1 v% A$ b# z$ @3 r

7 y2 H$ Q8 w; _* R还有就是两个输入输出函数:2 j9 D- s- {' m( l* x
void output_sample(Int32 out_data), Z7 E" h+ @* x0 v% p- O, S
{
7 l* ^6 J5 m& h1 w  AIC31_data.uint = out_data;  
5 R: k0 d3 p/ ]  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 B7 v- ^% M  p* K- Q1 v8 U}7 X, n) o. W- n+ L0 G5 j

, T8 F5 q2 K" \  YInt32 input_sample(void)
4 n% |- {* E! k& H/ V5 ~0 |{  4 p! s( b9 x+ j; X) g0 n4 o! h" j
  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 g0 m' P  F) Y5 |# ?
  return (AIC31_data.uint);
4 b6 n7 i- Y8 q1 U8 i/ u}
1 Z. I& `/ q! `2 W$ Y8 Q' M! \& o8 t4 p2 }+ t0 p
分享到:  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-20 01:11 , Processed in 0.041014 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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