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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 w; U& e7 L& w( r0 m
main文件:
" G1 }1 E+ b. m$ i+ s# f  b: `interrupt void interrupt4(void)  / X6 i" z) C, G% ]# f& c9 h: f
{# O8 v3 B1 Z5 N( ]1 g! E
  Uint32 sample;
4 G4 F4 M0 s3 H4 a" y7 L" O& ~+ e1 J$ q# n! d
  sample = input_sample(); // read L + R samples from ADC
2 K; ~1 c7 n' y: \- S- _  output_sample(sample);   // write L + R samples to DAC " f2 o' k8 B1 e
  return;
  y8 B: L9 D. T$ ^$ K}
8 e" M$ n  m/ ]3 h4 Q
7 y' H) `( ^& W" d9 T3 w( C( f( M3 Hint main( void )
; N" r) _2 `& z+ [{( M$ u: X: n  |# ~5 Z1 J

- {5 \- d4 z) z0 G    /* Initialize BSL *// I0 \  z. f9 N8 A4 }
    EVMC6747_init( );
, ]" B# |* p1 G8 M7 |, }        /* Call evmc6747_intr function */; y0 P' G% `. C- |9 o% _
    aic3106_init( );  O- Z: ?5 O8 j
        while(1);; K3 C: |4 `; V% \; L  B+ }; X
}
" w& n8 [. N) R: l/ [1 S7 S$ p& p% @% z9 G# y' U  r
3 I% {5 n* r, P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* x$ l# @9 o$ N& L* ~( p9 ?9 ~6 U/* Initialize MCASP1 */5 J6 l/ p5 S3 {* ]- H- ?
    mcasp = &MCASP_MODULE_1;
/ f# Z6 j! _/ }" m0 O1 d    mcasp->regs->GBLCTL  = 0;       // Reset$ C8 S4 q: `5 g, x% a. I
    mcasp->regs->RGBLCTL = 0;       // Reset RX+ ^# }' {$ k7 V7 o& \- c# E0 m
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 q3 n  \1 N: F1 u8 F    mcasp->regs->PWRDEMU = 1;       // Free-running( W- ?2 f. m4 ?- F  c
   // configure McASP0 receive registers
, C3 t' ^/ M8 Y. C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* W5 U% g3 W- N9 M& }, S
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, E' f! e( L* r' C. c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ p) z+ h( a- J5 A% Y3 ?0 K6 k9 P1 m    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) x2 _3 l3 b7 f& B5 r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( R' \1 Q5 ]8 M/ h8 l: R5 z. I! Y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# L/ X0 P! w" b3 a
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& l. I1 L8 l1 K( e+ R' @* \6 `
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, O" z: h: ]6 _) W7 I5 [6 `
  o( F  Z& m# V# [/ P    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 x0 o7 o! [1 k
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 A" o9 p& o* _. G
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* U- m# {+ p5 N* l( b+ u6 N/ L- b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 w+ o4 l6 H' H0 s6 b9 ?. E- D: \* p    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 ^& V/ |& L4 i' Y! x4 m" q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* }* o8 l+ s; n* C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 e( p# P$ y4 I2 S; A5 Z; x
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, ]5 E0 w5 j! s& K0 ^/ X

# d9 L9 Y+ l  k' a! E) P" C/ g    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 Q- o0 ]9 n: p- Z# c4 u# L
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 X! Z8 v' H  _5 A( G    mcasp->regs->PFUNC      = 0;          // All MCASPs3 R( v( y, N, v& T$ j! a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 k1 r: L# ~4 X' ^  w& h

3 K& V# M0 A2 l% k% b" X    mcasp->regs->DITCTL     = 0x00000000; // Not used4 D5 X0 u4 c# L' P* _
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- @& d' L/ D- l3 i' c    mcasp->regs->AMUTE      = 0x00000000; // Not used
: }# C1 l" P+ m- A8 n/ `: j7 i$ w  w6 ?2 N. J
/* Starting sections of the McASP*/
/ v) R3 V5 s$ I! I! ~    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- ?# Y6 {' G2 i' q2 l! K; h! Y" \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  a! z! z: u6 o" i* G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - e, E  x0 @7 m, K$ b' ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 o, P4 U# e) f! j) _% m* r( Z. J: y4 T- Q. n1 N1 d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, v0 K% w1 A6 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 K2 S7 Z/ W/ v8 n4 H4 w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% C( a+ o$ f" l3 h, O5 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 `$ a( A& P) [9 _* o8 _* ^+ l" ^3 x* T, Q/ a3 i2 O6 H! R& l: c
    mcasp->regs->XSTAT = 0x0000ffff;
2 w* n  W, X+ r6 }5 T% Q  S# S    mcasp->regs->RSTAT = 0x0000ffff; 7 u4 u* J9 T- ?& w
6 p* |! I5 j% Q/ M3 v5 f! F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 ]$ P0 B2 ~9 w% N5 r! ^) k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. @) ^$ M% p- y0 q" A    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - w5 w! V2 u6 i& p& n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- K( M% b) R& n6 v4 w1 q
1 g* K1 Q# E: L4 d
    /* Write a 0, so that no underrun occurs after releasing the state machine */! G5 b" R  U' R, D" q+ w6 M% j
    mcasp->regs->XBUF5 = 0;
7 {: p$ W: B, ]0 C0 a6 b$ v    mcasp->regs->RBUF0 = 0;5 G5 j( Z/ @% T! W  B% ~

8 W. J( a, ^9 Y3 I( i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# c# V" m* J( _. M' z. V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 G$ `7 H5 D; J$ x/ J! Y5 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : a, |% h. s) C/ D+ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% {' c! g, A/ e8 z1 U
& H8 G4 H" t1 O
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " \9 R: R  _- i/ G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* f. ?9 C  E) T- O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . a4 ~# s7 C, f# {! l- ~( O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 U( T( ]3 R5 M8 `& H9 W3 A1 W9 y$ h  I, M9 W
    CSR = 0x0000;
( s% f! L  j. `( R, M" w8 l    INTC_INTMUX1 = 0x3d;" |5 j7 v4 M% `5 G: l8 ^
    ISTP = (unsigned int)vectors;% [; c- p7 Q# [3 J, F1 l
    ICR = 0xFFF0;  
% a( c5 s2 Q5 t( ^; T) e    IER |= 0x12;  3 f: |5 b2 w4 y: e
    CSR |= 0x01;  % x0 G" B7 d7 |( C
6 v, ^8 X1 l6 ~

% Z3 b5 D7 C: H% n+ ]1 l4 c; m; u
% k/ s3 P+ K9 H: k; z8 \" p5 R' b% D9 u还有就是两个输入输出函数:9 A  n; S, |4 |4 d
void output_sample(Int32 out_data)' y$ T5 e% `% T7 T/ N% d9 ]* r+ U
{5 u" g' o4 Z* Q3 T9 D3 N; V: W; A
  AIC31_data.uint = out_data;  ) |. X, G2 f/ c: b/ J! ?
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ ]) }$ [& P: Y9 Y$ f}' u3 {+ M/ h) ^3 z! m* `1 F
9 j& A. h) F5 {4 d
Int32 input_sample(void)
; x- D+ X1 N; X% N0 ~6 ?{  , `8 b$ ~3 z# l- _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;) x3 e  y; |) B! @, C1 k
  return (AIC31_data.uint);1 {/ S% ]0 u% Y
}# Q3 {5 K5 w2 z5 b

2 z2 n- s; [; [6 p1 u
分享到:  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-7-6 06:20 , Processed in 0.051503 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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