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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! B$ c9 a9 z7 ~1 r. xmain文件:3 ]- Y; U; J+ [$ u1 f  S
interrupt void interrupt4(void)  # W: _! H; s/ \' ?# S  N# f4 C
{2 |& d( ^; [$ N# U4 `
  Uint32 sample;
# H* d3 S9 G+ M! Y, a$ v) R. ]5 R. p6 e$ b
  sample = input_sample(); // read L + R samples from ADC$ Q. h8 ~% C# S8 {9 V( i
  output_sample(sample);   // write L + R samples to DAC 1 I  a  i; X9 E- v! I5 r" R
  return;% z& P9 h/ w" U0 ?
}/ o, t( L7 m; D/ k! @

) l% n+ p! H  |, V  }5 d$ Z7 iint main( void )7 T- j) d. N7 w0 T/ W. \- y& l
{0 u$ Y6 H! b" I, `: d
# }( _  q' i! f& H' _' [
    /* Initialize BSL */
4 V; q6 D  [: s$ d) N' ~5 ]. M    EVMC6747_init( );9 G6 R" C, {3 O  B
        /* Call evmc6747_intr function */" G( A$ ?/ `' O  B* o6 ~' K; v
    aic3106_init( );. \4 p6 m& y% }8 g3 s; i
        while(1);- P! F9 b+ r1 t/ f  l: v) V
}
3 r5 l; `2 B1 B' c2 o- U7 _
! P; N6 ?& i+ p$ L
6 A; Z8 D- ^3 U  f  v( r! r. P3 A; baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 m, c; U; }, g  I# ~; m9 Z/* Initialize MCASP1 */
9 P$ D2 J, t) O( P  k7 R/ P    mcasp = &MCASP_MODULE_1;
( ^8 |, K. C2 T) I0 X    mcasp->regs->GBLCTL  = 0;       // Reset5 [  z" [6 j: i" a/ Z/ l+ \! P5 I
    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 T9 l# \- z# P/ B7 k    mcasp->regs->XGBLCTL = 0;       // Reset TX- D5 x. P' T5 K$ Y! c
    mcasp->regs->PWRDEMU = 1;       // Free-running8 I, ]0 e! V* {5 o- G
   // configure McASP0 receive registers
! _; X& j% @. F( I) |# m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 W3 N1 a) {" J, B! R
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ a3 e# b, G1 i
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  [- t6 h2 D& O  {
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ U5 Z5 [% s3 P' \: o, I6 y% D
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 Y+ }( m- X3 }$ ^5 @, \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ F) g- g+ D: v" |
    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 P! Y' Y9 g" l! b' b) g
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- _4 P* a/ @3 a$ h; ?' H( t/ K
, H* v2 {9 P$ w, |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ m, N3 s& C5 W3 e  [    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  X, [, j& i4 o; ]0 S2 E% q# w& X( R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: B' V. T; y- f' u( @  `" t" Z: }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) }- z- F& V; }. N3 f& O    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( O+ P2 C& C. [5 n6 D6 w/ p
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% g& C3 H, q' E3 u2 m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ W5 ]$ U/ p/ ~0 Z* M3 i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" T1 b) e3 F+ T  O! [8 L5 [1 r! K$ k/ O' {" E, A5 d+ C
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 U3 y5 F" q0 C& t2 Z- j$ W( L
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 S/ Z- x! o1 O/ j, I
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- Z* l) L$ v, ~" p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  n5 V$ o" S+ F/ |

5 F* W3 ?* K; O3 ]/ |+ R- k    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 P8 y8 h6 A/ ^  e5 S* t    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 |" Z0 l1 @* E5 D! @( _    mcasp->regs->AMUTE      = 0x00000000; // Not used/ X, N- _) q" A( K8 S
. L: d' |5 n/ }: V; N, w
/* Starting sections of the McASP*/& O* m+ I! M* @, r$ J6 n7 f" v9 g
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  N' R* i! S- N) h. ~0 E4 K& E) L7 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# [, P" U8 G7 q: n- r    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 _6 ^6 T* Q* i% Y2 B, o- r& j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" ~, q3 _; B4 {) |- p
* u+ W' ?. n# P% i2 O& ]$ {
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( q# ^6 L1 H* T6 O9 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# G5 D. S3 n: G9 `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , H9 k# }* D6 a. d) Y7 w. ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  m2 z  `0 q4 t
5 c" G+ g- W% R7 T( g( \
    mcasp->regs->XSTAT = 0x0000ffff; 0 b0 y0 [4 s7 N, P! I
    mcasp->regs->RSTAT = 0x0000ffff;
) y2 s: a- R7 @. k7 B3 `9 e' B; E2 w& A$ k0 s; ]2 `5 K: n
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" S. l5 x" A) T0 b4 c! ^. I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 \# F7 }1 j8 `, @# L' v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 E7 D6 I5 H+ k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ k! U! A# J3 m/ [

) T0 V- `  d; C  ]7 X    /* Write a 0, so that no underrun occurs after releasing the state machine */2 b3 m4 X9 Q( v* n- ^0 W* p
    mcasp->regs->XBUF5 = 0;' K9 Z3 E- @# z+ B5 i/ ~" Y
    mcasp->regs->RBUF0 = 0;$ U! ?0 |/ o0 q' f: U8 O

+ L% e0 H! d) o3 ]/ a$ d+ V    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 B; ^7 ]4 [# ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. p, l3 `' F( s8 K    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 N3 N8 u  I8 f. o) P8 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* p: A1 ?. c6 m3 N4 w" v) B! B9 W% @4 I
8 [/ |! n8 W( o- S
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 [' h' d7 ]/ D5 J+ @2 U9 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# t/ ^  U; N; z) W0 U    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " t1 ~* b# W2 l! c2 f. b5 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" p1 K4 d! w2 q  g7 Z$ @1 P5 Z$ n0 h+ T
    CSR = 0x0000;
% e9 ?( j* x$ \- a    INTC_INTMUX1 = 0x3d;
' O- {3 j4 [8 J    ISTP = (unsigned int)vectors;; f1 b8 f3 u1 w2 e
    ICR = 0xFFF0;  
# X4 O3 g+ X- S8 g    IER |= 0x12;  
1 A+ w% p" b; D! {    CSR |= 0x01;  
+ t6 }. K7 z* V+ D+ t( l! T: m
. Z7 J% W+ q4 ]; d/ _! x6 X0 p3 q; ^2 {' ?2 b! f: u

& f. S# _/ c3 }* f9 G0 k  G还有就是两个输入输出函数:
2 u, I% R# I2 {  w* Z8 n1 `2 kvoid output_sample(Int32 out_data)! t5 }9 ^0 i. |+ H- W% p* w+ J4 I
{
1 B! f9 j& @# P+ L: L4 t  AIC31_data.uint = out_data;  ( Q" o! }. {) a# Z0 _
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( S7 ^% @4 L; O/ p6 e, _/ ^5 G# ]}
1 {. R$ t# ]+ b' J' l% ]( d* {7 c5 |$ P5 b* S8 Z
Int32 input_sample(void)
! ]. v, q8 V% Q, n4 x3 y# ^{  
. u6 {2 T- r9 \, h) O3 W" s  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ V8 p  g2 w: ]7 V' ~. c
  return (AIC31_data.uint);8 l# q& m; h; v2 ]* o1 S0 Y) w
}3 w, W% T: G9 X2 D% R! a
  Q2 A3 l3 U; i! J' j
分享到:  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-2 03:34 , Processed in 0.047039 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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