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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* M7 A' A6 i+ n% x1 Lmain文件:
% t: U( c" f* f; O$ f* _4 @/ finterrupt void interrupt4(void)  2 j, |2 u1 b  @+ F! H
{
. s% m7 D9 D' H  K  Uint32 sample;
/ M4 Y" W1 Y4 Z" p# ~. M0 M/ p, j/ [! R6 J
  sample = input_sample(); // read L + R samples from ADC3 I' w7 K* W/ q! e) v
  output_sample(sample);   // write L + R samples to DAC
  p+ m* X* L, H  o; b& f6 Y5 [  return;
; ?! S% W0 D& P' p" U& w}
  C" P8 Z5 ]% d( ~, R
$ G! d  H7 @" ~( }- ]int main( void )+ d6 s* K- A: H( @0 g: V0 W5 c
{
- ~( [( [9 f  p$ `) I& m4 Z5 h( b1 {  l
    /* Initialize BSL */" S: k7 \# _4 f0 a- [' }
    EVMC6747_init( );9 E9 b  Z1 [. F1 ~! V& d) L
        /* Call evmc6747_intr function */) `2 z$ m4 B  o% z2 k; A
    aic3106_init( );
  }+ m5 |  S* O& Z" P- B. p        while(1);# }9 N: v( n& r5 i: ]! r  x
}* X  n6 Y  M+ u; w9 X
/ D6 l; Q5 x/ D
/ m% N9 i% T# l9 {( |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: ~4 P) `( `6 e" G/* Initialize MCASP1 */
2 W) y# f$ ]% j    mcasp = &MCASP_MODULE_1;
; F! D. {3 @5 a7 P7 r3 V    mcasp->regs->GBLCTL  = 0;       // Reset
* p7 P' M  K" v7 P$ m' g    mcasp->regs->RGBLCTL = 0;       // Reset RX
. l. I4 f6 p! Y# P$ j- J* W/ S7 k    mcasp->regs->XGBLCTL = 0;       // Reset TX  g2 B) t- `$ Z. w. u4 G: H
    mcasp->regs->PWRDEMU = 1;       // Free-running- \2 C/ \6 R; n/ ?' e% M- f
   // configure McASP0 receive registers
8 D! B7 h' ^/ k+ M) g" H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: i& p: t. b& p) o, E8 X
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ \5 f3 |, X6 L% |# |4 q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& i/ B  |2 L0 ~; @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 P4 b3 }: u! ]# r$ u    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 y& j& d; k5 z" K, {2 H; R    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  g- c) B. U& D+ I! R1 Y' Q% K& P
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! M$ x% S8 Z) V8 v9 h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% S( w0 }  s' O- ], ~! }2 l- s
5 ]' \: e, z4 h* e
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& N% g& a& M% L# |3 E8 g; a
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: J3 ^6 n8 ~/ y8 `
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# G& Q6 A+ w) i+ y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; [8 ~+ K4 e* R. }  ~' w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  T- h* d' }4 [# W    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 W8 q+ o5 ~, {: y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; K# ~) X/ O5 Z8 L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ v2 U" i6 h6 x  |- f
, w" B' B* j7 Y9 P/ ~    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  G# M- r. E4 j; R" O* i- p  B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. {$ V8 s- P' R( f% \    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 A" n- @! |' Q0 w0 ~' ?- m    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 I; f8 h8 r: g; @
4 @" O+ L) _% K+ @: X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; l* m: H$ b1 F  U: m: D- ?: I    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 u+ H: Q: _, e% F; w6 X9 @
    mcasp->regs->AMUTE      = 0x00000000; // Not used
! i8 {1 c$ c, M, q- t8 G5 d
# [. l' k* y! q! j" K3 _# ?9 O/* Starting sections of the McASP*/! G- @( }7 S0 b4 I2 A( z* G! P
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 k- W8 W6 k! u' L" c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 F, s$ F1 Y6 s, P8 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + t5 g+ c3 |4 d9 ^* f5 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 ]6 p9 F8 b) ^! q- t. q/ a) l- \* A! |' r
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 q8 _2 E+ n0 N4 ^" C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: ~, Y& p' e, \+ r% X. H' Y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 G. ]. h, ^! K9 |% ?2 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 z) Y9 P0 t" H$ }& @

; A; J+ T' S; T  a; O" E    mcasp->regs->XSTAT = 0x0000ffff;
4 a' t: t) C' [% o4 u# M    mcasp->regs->RSTAT = 0x0000ffff; 2 T1 }2 t  x3 f5 \$ X) v2 K. ?

2 k: ~. `7 B4 c% e' e    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 @! |* {: A. e' M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! H4 r" k9 g- a
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" I! {- s5 Q  F5 t! F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% n: c6 U$ y8 C! J) e1 |0 A2 ?+ P0 ~* x9 B8 z8 i: I. l
    /* Write a 0, so that no underrun occurs after releasing the state machine */
, C4 Q5 ~1 q/ ?- K    mcasp->regs->XBUF5 = 0;' q5 @& M. }. m9 A: Z' I
    mcasp->regs->RBUF0 = 0;* Q& h9 L6 R! J" \! c

% A  v; m8 I3 V6 F1 X. @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) a" r: O/ @! ^& L; C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: q9 R8 G$ w& c$ v- p# l, R0 l6 i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 `. w$ I8 _2 ]6 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: z9 X' U6 [9 G# c
, M. ~( N- q  {  O, c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* o6 }7 H" X* ?) [$ Y6 i. K0 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ G% ]% ]8 }9 G. Q/ _5 H" w4 W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 f* @; o  p3 Z$ X% s# R- O# i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& t. w4 i: T, \# J% f( z
7 N$ M) v. j2 z% l0 _    CSR = 0x0000;0 _. P5 i5 p4 W+ }; O
    INTC_INTMUX1 = 0x3d;5 x/ u* B! N$ ~3 ^
    ISTP = (unsigned int)vectors;  r5 E9 ^1 z6 \7 N* m4 V
    ICR = 0xFFF0;  2 I( \" B' y* y9 w! }5 k$ I; x9 b+ p
    IER |= 0x12;  
4 r4 X% Z' K( \: g1 |    CSR |= 0x01;  / j) S! l: w( U# _1 U5 i
2 ^2 ~' x4 L% d) _9 Y* ^3 b, L

& V) B, c) i2 Y2 l1 c
3 H1 w* P" a" i还有就是两个输入输出函数:; D9 o( g/ B' e( o) {' D# Z$ \. d' [
void output_sample(Int32 out_data)
" o. q4 n5 D4 |; V  P2 ~# H: N{- |- r9 V3 V! l1 b( `
  AIC31_data.uint = out_data;  
  A: ?) d& X% M' G) [& c: f  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 b6 `) t2 W) B: C}3 z% T' Q1 C* k/ O# ~) N4 X
: @; U$ [! y# f. N# f; I
Int32 input_sample(void)# O, K) g0 s& l
{  
, S8 y" Z1 G7 N. N6 I3 ~% g% l) [  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 P( j+ G# l7 m( p2 c! Q( l
  return (AIC31_data.uint);
! L/ V. n" N& H" J( q! E! j}
: C7 D& ]: T' [" l: z& V4 z
4 c6 K" r+ u# S& {
分享到:  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-8 03:24 , Processed in 0.042989 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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