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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' U" g( X* ~' z8 g
main文件:
. i4 E' p3 A3 b+ S  l; U7 i, S8 o: Dinterrupt void interrupt4(void)  ) A; v$ z7 u! ~9 F' o: r- p
{
4 e1 A1 Y4 D& l, _  R  Uint32 sample;
4 i" f$ D8 A% L( [
$ N# v0 `5 J0 e  sample = input_sample(); // read L + R samples from ADC
3 f- J2 C. ~' y( x7 f5 s, B  output_sample(sample);   // write L + R samples to DAC : \, W0 i7 a8 I' D1 H
  return;/ ]* G- B9 S1 [5 E
}6 W, H5 R! \5 V3 W) {2 ?8 O+ h
8 I5 f: z* v$ A9 g, M6 a, ^
int main( void )
8 @3 T" L2 w) i{# Y+ H; A# c% L! G9 e2 F
" s0 p8 [4 h( |- M  Q% n/ b
    /* Initialize BSL */' v  W3 F) y& @  x6 L4 {* D
    EVMC6747_init( );
6 p9 Q6 ^0 p/ e& ~% C        /* Call evmc6747_intr function */
6 n! |+ N# H9 y+ M+ R2 Y  u" q2 p    aic3106_init( );3 Q  p* H# P4 |4 n/ x' h
        while(1);, m4 {! E* u  Z9 V4 k
}/ f) t' F; e, r( T0 |1 z6 g

' v. N5 y1 _, n0 U) M% _* Q: E4 x7 K/ o8 v7 Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, A1 T; z8 i! e: k, w
/* Initialize MCASP1 *// ^! }8 n7 Y. w- u7 ]6 w7 ?
    mcasp = &MCASP_MODULE_1;  M  J9 L8 {3 d% |" y( _5 |
    mcasp->regs->GBLCTL  = 0;       // Reset7 H9 r7 l  z8 |: u' @  Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" K4 H& \; n$ O1 w+ o    mcasp->regs->XGBLCTL = 0;       // Reset TX
' x0 k2 `8 ^- Q8 R( X/ E. s4 l& h    mcasp->regs->PWRDEMU = 1;       // Free-running
' l+ }, y4 a4 ^) B4 e' }  a1 A5 e- Z   // configure McASP0 receive registers
. O7 B0 E# [, O8 ?+ ~/ w  w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 b6 o' E% A) Q! n! {# \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; C2 [4 }) j# c& H( q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' X2 v) h# Q2 g( U' N" {    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 W$ L$ C/ B: i, q& m7 X" D    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% f- s5 z9 X0 r& M
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( z$ `2 ?9 k! P$ K7 r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 ^/ c7 ]1 [$ T& K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! A) s& y$ D( x
: {/ I" r/ J; Z4 T/ V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" C; c+ N. o6 Q" t0 N, t9 T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& A# U3 L" N  E' S& E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' j4 V7 S# p7 [# F) p    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ T; q: w$ y7 e( R. R
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 {: X  ]  Q4 U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; Z$ ]1 o+ w. l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  }& r' X' m( Q; x4 A# s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 n: p! _) \' A9 i# D/ v, e& P

2 P6 G6 N; d+ N( ]* \1 }4 k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% I+ `  L9 N0 v! H; [    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 N1 k2 {, g. ]; l: x* i* S! j6 a
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- B5 {& y& Z9 [    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, v7 f6 R5 o9 p1 j
6 k# ^9 b, W' C0 d    mcasp->regs->DITCTL     = 0x00000000; // Not used
; z, J/ e. T- d+ t    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ _% o; ~6 g7 }0 O$ @    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 m: B5 l  }- P" O1 L% F
( f8 S, ^% ]# `+ g/* Starting sections of the McASP*/
5 ~9 ]! {7 N% C& r1 j- w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ \' L! x0 `7 J5 o3 K: F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 i1 T; V* M: l' W7 V
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 ^: g9 C7 ]+ v) s! P$ b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 ^& w% N% L* R0 e/ }7 c
& w2 o* d0 ]5 O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. a8 D4 d8 }6 g- V! b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ p) g' h4 I" @* H2 I    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & K& y+ y8 b2 E( X, J. M, P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 F6 p% l. k9 b) ^! z/ @. Z: |/ g+ c& i. r" V6 `* L
    mcasp->regs->XSTAT = 0x0000ffff; * O% _' |, D0 K! O7 _
    mcasp->regs->RSTAT = 0x0000ffff;
7 B. a0 J$ U( w5 k2 D- G, y+ @2 |; Y! e0 ^& ~, y0 B
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  k% M2 O+ b& u" i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# x# L! a8 v8 f3 T! E5 z) K    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : r' \2 W6 b6 h9 }! f/ ]4 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 Y, h; ?0 ?: u2 J
- u* O' B* k$ S1 H& g0 f+ r3 Y    /* Write a 0, so that no underrun occurs after releasing the state machine */
' e) i4 |. O+ \    mcasp->regs->XBUF5 = 0;3 ]0 D% E% g1 o
    mcasp->regs->RBUF0 = 0;
5 ^1 M# W8 H6 }: O) M- ^& Q: o% [) J% p/ g3 D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% n, j( I) X( |% t- ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 V" p* a5 n% g    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , i: j$ |: O: u5 v; F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* T, Y6 M  A8 e
/ L$ D: b3 _' D; U! Z4 z6 |% c, t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; j6 y3 _1 a- F$ x% G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ v( r" b" }1 J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 l: C: P1 P6 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ A4 c3 f5 c, @) n; M7 i

4 l) I5 j0 F4 P1 U  n    CSR = 0x0000;
, Z6 j. A& J( R# ]7 n: o    INTC_INTMUX1 = 0x3d;, W% f0 P/ i2 X( X) W& J  S
    ISTP = (unsigned int)vectors;
  {) d2 ]" d$ E1 k! q) \( n$ a    ICR = 0xFFF0;  
. d# ~2 \$ e: u2 b) m    IER |= 0x12;  3 W6 n' Y- I) l& s/ [
    CSR |= 0x01;  3 k% I3 k) Z' P( c* k+ W; e! c2 e0 H
8 o6 p5 Y% f: {

! N( k5 i( d& A. B6 `) p9 p
% F% b$ h. `7 d8 y0 G/ B8 D8 G还有就是两个输入输出函数:' f% z& i( \# z& O! a( C* R, |
void output_sample(Int32 out_data)
+ p( Q* q4 M* x% E: j! R" ~{) d  F. g7 R4 o/ A( ?8 ]) R& o
  AIC31_data.uint = out_data;  
! C6 `8 C$ b3 t' ~( S7 W  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 s, p" @7 a. M$ b3 e) p6 U% B' Z
}
1 V+ U1 j6 C5 B4 c( i
' T  y: }- f5 R1 G2 a) [% V: TInt32 input_sample(void)
! ~3 d7 w1 ~0 X' k1 D# `$ w{  
0 ~6 `. Z, e6 ^! @8 U  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% X6 M8 N1 ~8 t( z% @  return (AIC31_data.uint);: t; Y2 t; y' k0 B
}0 i2 v  i. N) `# B7 z% [9 C
# W& V8 k" ^& e% i
分享到:  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-3-9 13:37 , Processed in 0.043364 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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