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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ `" G- M4 z1 I0 U5 `* u
main文件:
( O3 B6 t4 g  i; v7 i! z% c' Dinterrupt void interrupt4(void)  
) H3 B+ y# V8 Y% \# A) X2 g{
2 V( V# g% e  F! l  Uint32 sample;
2 [* Z/ v  B, O; G/ a4 O; v" ]5 h% q) ?: R4 Z( z/ L  j. |# v& [9 Q* L$ U
  sample = input_sample(); // read L + R samples from ADC9 h4 h# q; Y* G# M
  output_sample(sample);   // write L + R samples to DAC 3 E, ~/ V- A4 v) P
  return;
# f' L2 |8 |9 B3 H- H: X1 G4 ^; B}/ L  r7 |; l1 E0 k

8 y3 H0 I2 a3 j% h" iint main( void )
+ R; l) t, e( d, M1 x& i) d{
# E& U/ d2 ^' l5 V6 ]! Q& ]/ W$ m1 r1 e: J" v0 u
    /* Initialize BSL */3 c  ^( m. F7 O% G* O! q
    EVMC6747_init( );
* c3 u1 a5 ^$ v5 `6 B        /* Call evmc6747_intr function */
. J/ w9 f: u; R, [% `$ X    aic3106_init( );% j1 n/ T/ A" N' ~4 q1 ]1 e2 R
        while(1);
1 g1 G* ?; A! u* D2 X0 `}( a, ~. e/ {8 ~2 K9 Z; Z
7 J* L6 h5 c  {" P, ?% B; ?0 b

* ]2 t' a/ s+ r' n% ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% R& K! u; q* z4 |/* Initialize MCASP1 */
: s' d# T+ n6 \! p7 B8 m    mcasp = &MCASP_MODULE_1;! P; J7 `# g9 ^3 d1 }
    mcasp->regs->GBLCTL  = 0;       // Reset
+ f7 u+ S9 O7 N" H    mcasp->regs->RGBLCTL = 0;       // Reset RX
# Z% W. I( `3 \  M6 W2 H    mcasp->regs->XGBLCTL = 0;       // Reset TX! X5 R9 o' Z$ l: M
    mcasp->regs->PWRDEMU = 1;       // Free-running, Z* p. n$ L( }3 f, j. U
   // configure McASP0 receive registers
( h" ~* d3 ~  `5 n4 q6 F( G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 B* J; j" _- m- ]0 c6 L  }" S    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  [+ a. ]  p" j. `3 y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 {) N7 b2 h7 f& W. Q4 G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 K% r9 ^0 w: J) X1 Y+ q% p& G* H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- _" `( i% [, J( ^' @4 R    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" K7 C. c$ z: B    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. j0 [# r  P" g4 G: k' `7 A    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& r$ u3 L0 h$ C/ U8 x
& ~) H; S) B( ?( x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; b, i: E) I3 o4 H9 K( e+ j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& b" D! V% f$ F. t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 u9 Q( h# ~: z! e/ F    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 M% R/ Z. n7 Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  c$ q" A2 w7 _$ Y' T
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* ?5 x; Y9 H3 ?( I8 ^/ D    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# O9 P0 v8 L* p# ]
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' \3 n6 t% k% _- K7 [8 `; J! ~9 o& H7 ~
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* M; J1 m9 S6 {  f1 \5 h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
6 U3 a* A8 h& v, M& j  g    mcasp->regs->PFUNC      = 0;          // All MCASPs9 K' n$ Q1 x3 l' N5 _2 u' G  @& J6 a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: A$ I6 N* z2 O6 i* k7 l/ i$ ?$ n4 M3 i, `& B) ^0 Y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 E! B& o2 b% [. J/ W    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! N  X  n6 I5 S; z: E    mcasp->regs->AMUTE      = 0x00000000; // Not used
. d/ P% {: y8 H5 ?6 Q8 X
4 w7 \9 c; ]+ f0 \# [) t/* Starting sections of the McASP*/# [! v  @/ y! Z+ W; |, Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 w, l4 q( d$ Z& h+ y+ ]+ V- M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  _9 y  l' j8 D6 f# g& c7 o& m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 ^2 A6 p# I2 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 W0 l2 P# @. ^# c% i
  t& y) x: b* F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; d  }* b5 p. p3 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  R  f( n6 d, ]    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) a1 }% [+ D- [5 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( z0 h4 `7 L9 w* O  h# J; R4 X' b; C
5 y. z' H; l4 m; ?% P% Y& k    mcasp->regs->XSTAT = 0x0000ffff;
2 w% ~  a( d  ^    mcasp->regs->RSTAT = 0x0000ffff; ! F# D; f& D& C+ ^2 l5 f

8 {( r/ D6 m4 {    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% {0 _1 Q* j2 [) L) A( \2 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  Z4 b4 O+ N7 `2 A5 k4 Q( i+ Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 [) h6 Q: F: x6 x5 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 ?. n4 b+ G8 `1 j! c; {  F4 h9 R% o; U, u
    /* Write a 0, so that no underrun occurs after releasing the state machine */
& g7 o0 @( |  N7 o% h4 u% u    mcasp->regs->XBUF5 = 0;, q- z8 m. z9 x* o
    mcasp->regs->RBUF0 = 0;3 A+ @" ]6 C  A. H# X
4 r  `' C" s& i* H
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 \( Y' d# P9 |( J( Q9 g8 k( o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) h( [4 M4 }; k4 D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 e$ L7 `% U. n2 G- h# B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 J8 ^9 A, f+ A: W4 f7 t- g0 T# w/ H" ~+ g# {- ~" d( Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* b% |6 m) [! A' Q% P' k& Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ j. p! \; J# M2 {/ Z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 O* d* v' G; g; e, m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ O9 ]' v, I% r. ^! N5 }! `/ w
4 I& z; A- u" I! b& \% ~. E    CSR = 0x0000;  A& x% |, \$ B0 X2 G
    INTC_INTMUX1 = 0x3d;
- K; B! j4 n9 O3 P$ b& B    ISTP = (unsigned int)vectors;
' H* j  t, S; a' b$ `* ^    ICR = 0xFFF0;  
8 z; p, A6 F! H+ ]$ W& I. d    IER |= 0x12;  
  y+ R) _  F, ?: \% y. m- M. T    CSR |= 0x01;  3 r% X7 ~  P* z, f# G2 o

1 D# y0 b! J0 c3 H$ N9 M3 Y0 B- }! I9 G+ }

4 }  Z* a6 ]% ]% M4 V4 Z还有就是两个输入输出函数:
6 R$ m/ h4 j: r; }' O2 \6 cvoid output_sample(Int32 out_data)
9 k% V4 v  E( A% I{" p+ u9 V2 d$ A+ Q
  AIC31_data.uint = out_data;  
9 c2 N9 }/ I, I1 h/ x0 A3 n  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ p* g/ ^* n2 T7 b( k. z0 d0 ]}1 u+ p: Z) r- `$ S  j* T
4 H0 [8 k+ J6 T: h* {6 w) ]
Int32 input_sample(void)- J# `2 H+ [9 O
{  
/ j8 ?! G2 l6 _% }/ [# X  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. E6 C0 H! D4 Y! `  return (AIC31_data.uint);
; e: O# C1 x9 U7 M  e9 [% q! c}$ H  E" y3 o+ A
' X) K- V2 ]* p3 ?* t, W, X7 n+ ]  y
分享到:  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-15 20:18 , Processed in 0.040537 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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