C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% ^& R; ^6 c  k( _main文件:, C( u$ b9 m; k% ?$ N  D2 Z2 F# ~
interrupt void interrupt4(void)  3 f+ z2 _$ u3 O( n0 o
{+ c& U+ ?- H7 D
  Uint32 sample;7 \+ \" T& ~8 t5 {9 V% j
' E5 i" t# s" A" h2 {* ?( a. t
  sample = input_sample(); // read L + R samples from ADC, k, C3 Y: Q8 v, H4 o9 R5 v( J* R
  output_sample(sample);   // write L + R samples to DAC 4 G/ _9 n% E( `. Z
  return;+ ]  o( k! w, l1 k4 E: S; Z  f" x* L
}; g3 V" {5 Q6 M, r. S
* b2 q0 l' g6 m9 q3 L
int main( void )* q3 C- V  Z# |. p
{
& h0 U8 g6 O3 I+ g) A" a
& P" A) H( A6 A% C1 B9 f3 @    /* Initialize BSL */' Q9 h0 i  j; r2 Y& ~
    EVMC6747_init( );! `. |9 Y% O+ t( C
        /* Call evmc6747_intr function */5 s, c! {  D# k7 M9 w! i' s0 z
    aic3106_init( );
; C3 C* q9 H, F        while(1);
( b: {$ p4 R$ H5 K" R( I) G5 k, L" c}0 Z( {1 `" J; M  l" D
& u6 P0 s: I3 q! m7 r! h
; N8 a. e9 G2 K8 w9 J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% Y# [" B3 ~5 ?% \1 o9 e
/* Initialize MCASP1 */, A& q1 H. i6 K. u
    mcasp = &MCASP_MODULE_1;/ w! l! i% y' q- Q" B3 y8 B! j/ R
    mcasp->regs->GBLCTL  = 0;       // Reset
/ ]1 H3 {* b& e0 l# ?" N/ X8 N    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 h0 N  Q% R; v( M0 i9 y  {    mcasp->regs->XGBLCTL = 0;       // Reset TX) g8 |7 _3 e2 Y1 X6 g
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 u" _9 A4 f5 q$ v: o7 b   // configure McASP0 receive registers/ r% t. p$ E7 G9 B) b; ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 {" t5 J& C2 R5 [2 L
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 B5 s' T1 B" u    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) o2 D' ~9 w, G2 q: `
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 ?5 ^: f, \: k& m, g: U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 c# w+ ]/ q, N; W9 \& ?- o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: Z+ m: W# S! L  Y! S$ }- ~: |    mcasp->regs->RINTCTL    = 0x00000000; // Not used( P3 @* w# x  c( w% F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 N' U" E$ ]2 K5 ?3 i8 t( W1 x; l- v0 G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" \: E& t; N& p
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 G) l2 V- s5 O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" D6 K: U7 z' K: C( K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 [& K# m% `; N9 {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ [3 w# l4 F4 l, L, a- A$ _
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ N7 |7 ^4 g, q3 W( R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( R' w  E/ p# _1 U    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& Z; m* D8 a( T- C
1 b3 j0 z$ I  e7 A' ~/ L9 y7 Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) `1 M5 }& I+ e' _1 n* C1 b
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' m3 h$ T: ]) i
    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 R: O4 d# J+ S# I  l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 A0 }. v: @; d7 F
. u/ Y) E1 M) f/ q- q: i
    mcasp->regs->DITCTL     = 0x00000000; // Not used5 G2 }+ H! Z4 u; q# E/ N' Y) w
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 q& V3 P, Z9 [6 ?4 l2 b
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: x3 W" D$ k- u$ v* v9 _" P% I6 N& h5 ?
/* Starting sections of the McASP*/  {4 {2 W0 O6 S; E! W8 j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   @8 z$ u) [" O* E; y3 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / E" i6 p4 O) i- c' ]6 t; C: R
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 L% l1 U, h3 f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ K" @* X7 L$ m) m& d$ X; X( }- P7 ?8 X6 [
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; s/ h* o5 n4 X3 x7 @8 C7 J" R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ ^5 Y$ J' l, E1 ~) h% z% ^+ D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; g" J6 J& D) P/ G1 R9 G. g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! x" M  q& |; B. w# H6 y  H7 r1 W; _1 a: b  N0 I9 O, v' h
    mcasp->regs->XSTAT = 0x0000ffff;
6 L) a0 b- v3 V4 M/ m8 R- r, p    mcasp->regs->RSTAT = 0x0000ffff; : O8 `  `/ l3 y, ]0 a
5 C- h6 p9 b5 s! h
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% j5 }1 \# C+ V# q6 Q6 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 X  g! k  U% Z4 u
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) Z" E+ g$ Z! g0 ?: A# _4 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 b' w' j4 t# B* w  c% f

9 \  G. {. Q! p% c3 O5 W    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 c# ^0 [) b: c8 ^( Z* T& k# w# n/ }    mcasp->regs->XBUF5 = 0;
' ?! V: [& p; z4 i    mcasp->regs->RBUF0 = 0;# u: w8 p/ V. M5 ]

! o( l+ N3 P& [1 e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   Z$ ?# `8 \. {4 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; `2 a: m; q/ g. U9 A
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  }5 N& D9 Z; `* Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 C8 R8 j/ y2 E- c
( {" \; W, p  E* W) Q4 _2 |$ I    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 e5 E8 v' S  s  H' d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 _% G7 \" N$ Z* r6 G) z: I: E$ w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  v$ g  w6 _% W- N6 T2 Q. N+ K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! z; n9 i" b: H" J- a9 R+ w5 _$ w( r) T  ^7 T
    CSR = 0x0000;0 K8 Y  [6 W- l/ o
    INTC_INTMUX1 = 0x3d;
; G4 B7 R% ]5 J) a    ISTP = (unsigned int)vectors;9 ^" T  N" c/ }+ J0 c0 c6 h
    ICR = 0xFFF0;  , j, n/ Z) C$ w& |$ D- _- x1 Q
    IER |= 0x12;  
& s! ?: s7 j( N$ k" X5 r( j    CSR |= 0x01;  ! b4 d( M/ n2 F% c/ t
5 {. C" y( P7 E
) ?4 M; ?8 L+ W1 A+ q* T$ ~  d
" v; [2 X5 @! |1 }
还有就是两个输入输出函数:2 l  o6 i8 V+ s+ q
void output_sample(Int32 out_data)
7 q5 L+ e5 a, G9 H+ a! L{$ V! ]4 a5 c/ V) k5 z; s: Y: E
  AIC31_data.uint = out_data;  & F# G7 f$ b3 f( @8 I
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. q4 ^, V" I( z2 P2 _9 Z* K* K}1 F% ?0 v1 |7 S3 t

0 [* [$ y( v) g0 M  Y& S/ NInt32 input_sample(void)& h8 {/ ^9 X& K* q6 _8 C: Z! ?
{  - s  }9 N0 f% Y- y% O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 X/ r8 }- q5 k6 N5 G0 x1 {
  return (AIC31_data.uint);. t- G8 s" M+ m6 h
}5 a- q5 R: w+ Z

* d  @6 ^" l. C" P5 e3 y- `  M
分享到:  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, 2025-12-2 11:38 , Processed in 0.039425 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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