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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 t% m2 Y2 O7 V1 c3 Z2 [5 x# y7 Xmain文件:
/ L! O, m' I0 {0 p- Tinterrupt void interrupt4(void)  
! ~: o0 G( @9 c7 i8 s2 u# ^{
5 d" \7 a% v, V5 W6 S2 O  t3 K  Uint32 sample;8 L  n; A( x' ~$ ~
: `3 I8 U8 ]4 c
  sample = input_sample(); // read L + R samples from ADC
" t( C# \3 Y# }& ^  output_sample(sample);   // write L + R samples to DAC   U9 H2 \+ m! F" I. q' j
  return;
) G9 w8 ~, W4 F* ^" h8 U  |! T: `+ r' w}
& r1 E2 D2 y4 o0 t/ {0 e
9 q5 i9 ]3 s! Q. S: \, _; W+ d0 f9 xint main( void )
+ y) p4 Y6 v) S7 N5 p0 x{
" K' j! [7 ~4 L( e6 @7 W' w
  x# H/ o- N# {( \: ~$ }4 T    /* Initialize BSL */- ^+ }7 \! c: W
    EVMC6747_init( );
! s! D4 ~, o% N: @% k( x' n        /* Call evmc6747_intr function */; S  P& Q! N6 ^# \* Z& @
    aic3106_init( );
8 U* n: s$ v' i- [. Z6 `        while(1);! S5 J' S, x& I
}
3 J7 c+ {- K. [8 Z( r. I5 e) J9 ^$ [) h& A- M3 E
' D& m2 F: g( ^* h9 y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ b* Z3 X" w1 P4 U% u6 w! L2 }
/* Initialize MCASP1 */) x8 ~; U& ?7 H% b+ M
    mcasp = &MCASP_MODULE_1;
! u6 v( G7 ~! Z$ c+ q    mcasp->regs->GBLCTL  = 0;       // Reset
! {6 r( k- ^' u; {6 J8 ?    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 x9 n( O+ v4 k  W* Z    mcasp->regs->XGBLCTL = 0;       // Reset TX
' b3 ^" f/ j8 ?    mcasp->regs->PWRDEMU = 1;       // Free-running* I$ ]% X8 D7 y
   // configure McASP0 receive registers
( ~% D" ?0 F6 u# O    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 u2 Z: H/ b7 c6 E% j- ^+ d) C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' s4 E2 R. g$ D" Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ j9 j2 F7 l/ ~0 y% m' T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 T" E$ a- `; e: S" h: ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ u9 G# d6 j# G4 ^    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( D. @( I8 L, }( E( [& l9 N, ]
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; J7 w) [0 o7 p2 ^    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ O# D* \( ], m$ r; w
% E  i9 c4 s  ?& D1 K" d! a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ X8 }& c" S; Q8 p4 A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 f3 ]% L0 g( m& e0 D
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: O, f2 j% H/ ]7 `# U
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 S$ v1 d3 a( p4 ]# n0 v4 Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
9 R$ L5 E( I/ u7 X4 k: V! j  b3 m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 P. X& E3 u4 q/ a, H) ]- C
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 t" Q+ \6 ?1 j$ e% Q4 p
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* `, m% H& T& R- w' s: L- `6 Q
, u& a& V8 M% f% P) U
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# {+ Y( A( H$ J" c1 Y' e1 B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 A7 d4 i. p+ I( [8 A3 q& K
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 x+ N* I5 i: y% _& g& a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: A/ W8 n8 z+ A' i, }$ y+ q9 @$ T/ U& a( \8 F( W6 Y
    mcasp->regs->DITCTL     = 0x00000000; // Not used9 ^+ t+ k# {& |$ v3 M
    mcasp->regs->DLBCTL     = 0x00000000; // Not used  a# A' }- D0 c3 ]# c
    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ G: a/ v! m0 j6 a% p* Q7 P
: k8 ~% j3 [& e( v6 W/ b/* Starting sections of the McASP*/- w) `  x' D' {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. @% ~' B9 ~# Q" r$ k1 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ d# F7 K: ]# T' r/ G" x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' _# ?" D* R2 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 a% I8 J& [& _! c3 K7 p- z! x1 g* w2 ~, i0 _
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 v9 e9 c% x3 }) S9 z/ i. p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# \* P0 f$ c6 T! P' X* P5 |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * {4 Y& _4 o! `; [  |- b4 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" ?9 P4 L3 u; ^) `/ G4 f5 Q* H3 ^5 q/ s8 J
    mcasp->regs->XSTAT = 0x0000ffff; 9 a/ Y/ M+ R% `+ Z* X* q8 S
    mcasp->regs->RSTAT = 0x0000ffff;
  m6 n; `/ O0 @+ y* T2 Y
6 [0 l0 z6 z, k! s5 \+ s0 u    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; u: }* l4 T$ e- b% l. v0 M# k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ v' L4 p. l! D  g# n& a& W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- Q% ]  N' i! B" R, O  T% D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ a0 I+ D; B1 d$ l1 l/ L% N
4 \% h+ l( {+ Q, [2 Z; f  S, G    /* Write a 0, so that no underrun occurs after releasing the state machine */7 _2 N7 e- T: n- V  ]
    mcasp->regs->XBUF5 = 0;
) B3 q" N5 N) X3 {% b5 K    mcasp->regs->RBUF0 = 0;
, @; a' e6 @3 `2 i* E- P! c) C! |! O1 X6 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& U3 ^2 }2 F; J7 s6 Q" W2 X2 r. ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- a9 C) o6 z% o4 I
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& u2 }' P5 R5 a# K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ W: Y: n) I7 a

' Z6 x) m+ i# b; ?    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# U/ I! ^9 q- I- r3 k1 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 c1 Y% t0 x0 z* ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % l$ w: G: b+ ?+ A3 N( Q! u( S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. ]1 \, c$ T( A( V. A, F$ E& ]
! l* y( S4 s, P( R8 H8 k
    CSR = 0x0000;. v& \* p! f2 @" R, G: n" m1 i/ `
    INTC_INTMUX1 = 0x3d;" D0 K& p" K" _9 F
    ISTP = (unsigned int)vectors;8 B. {. a$ C9 u! T
    ICR = 0xFFF0;  
0 c* r2 L! z# z8 r    IER |= 0x12;  ) n7 P8 }/ Q1 z2 q) ~6 V+ O6 Z# O
    CSR |= 0x01;  
4 ^& ]  ^& P5 c# C3 b% u3 w! B
; A, b& Y! j% b. ?3 Q
+ o1 V. K+ F9 p# \2 G  ?; w, ?, }4 l  f7 m. g+ O8 n" j
还有就是两个输入输出函数:" }8 _( h$ I& W" P2 W
void output_sample(Int32 out_data)# {% J( r. [, I2 O
{4 q1 A) k2 Z6 P" q3 y: T
  AIC31_data.uint = out_data;  ; B' A% v& k. D9 w" l* y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;: g' t+ s( V4 ^* `" w" k* K
}
; X0 N% D$ J; S3 i+ b: j8 i5 f' O; _3 }0 C0 y* Z- _7 S- p$ h
Int32 input_sample(void)
" ]9 p* i3 ]' ~: f( e{  ) o; n1 X! y% _& l% n& O$ Z. K$ k
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ l. [# N0 G. ]  return (AIC31_data.uint);9 y% \9 c! \) V* H/ P$ ~9 Y
}' e9 x0 T1 I( ?: E: e. h

9 ^( d0 y9 h8 ~) D- B
分享到:  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-1-9 02:17 , Processed in 0.041821 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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