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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ y( |) I7 L0 |9 S, f) Z+ W
main文件:
2 O; G, ^- I1 S- S6 I  H1 minterrupt void interrupt4(void)  , `6 f7 J$ d- D' |& b8 q
{
; ?+ s5 b$ ^. H/ H  d) F  Uint32 sample;
6 q9 D5 ]' A3 v; w% K$ C
1 Y$ i: M8 Q) B+ t1 z- z  sample = input_sample(); // read L + R samples from ADC- R& j# p7 H* c5 ~
  output_sample(sample);   // write L + R samples to DAC : t1 x9 x+ R! Z! u* V
  return;
) f4 K' J9 E8 @( f# A}6 |& k5 j% ~) ?6 D. g3 Y- D) D9 o9 i
" I/ d' u1 D3 \& w
int main( void )
2 A. F; z8 j5 b* H. f) z, |& b! _{$ B9 [7 n. m8 y& P* l% r

; s2 [2 L2 \$ o# {7 _  f    /* Initialize BSL */
" c' a3 T* `% O7 l    EVMC6747_init( );- `* c- f! F9 p' ~: g1 f7 w
        /* Call evmc6747_intr function */" I0 y% O/ B3 [/ T2 f$ m
    aic3106_init( );
$ N. P/ y, c6 C        while(1);
+ f; B0 G1 @  E}
9 c% f# g- u' L: V2 S2 o" w! ~+ e# J6 C' G, T! h  b

: }' |0 n1 s( `; g5 f/ Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ q+ P: B# S4 d: K
/* Initialize MCASP1 */
' F5 x- o  v+ t7 j/ A, P    mcasp = &MCASP_MODULE_1;, K7 P  F- H4 g8 z0 M6 w
    mcasp->regs->GBLCTL  = 0;       // Reset
$ Y$ l( m1 p: w5 O    mcasp->regs->RGBLCTL = 0;       // Reset RX
: O; H( x6 K5 J1 c# z    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ ?) |( l7 ?- T5 [    mcasp->regs->PWRDEMU = 1;       // Free-running
/ q3 b) v' F% N  l* Q& P2 b   // configure McASP0 receive registers, Q& b+ P6 \& e- D& H# Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 o2 C9 t$ @* o) D4 y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 P8 y0 d' I6 ?2 |: N1 ?1 K& C. d    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) o' g/ @6 j' t, \' K+ p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  _! M4 ^2 D' K4 |7 c  H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 i3 {/ R$ O" t; }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  v8 D' I% K& P8 g    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ o8 H/ F8 X. H4 }6 R- X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- @. h2 I" Q& t; D

5 o4 `3 Z" M1 b) D& B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ }/ {2 `! M  k% h3 f4 P: }
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# j: j* p2 {# R1 e2 L0 K    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 d4 X- x- E' c) z0 b; ^! U/ H- z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* h  d9 h5 B$ M# f
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. D( m$ T' C3 z) P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. }8 T$ Z! j$ W3 z9 R. u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% a: B  Q1 ?! P9 F4 O* L3 |
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 f0 s* L7 y$ W5 [. I" Q2 A9 ^: z% a3 ]
* k- T$ m; W' n, n7 W& c    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. M! m$ Q5 x% I7 ~
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" Z$ g) Z0 F+ s9 S+ d
    mcasp->regs->PFUNC      = 0;          // All MCASPs8 S8 Z" n5 b2 m. F
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( y7 v4 f; S/ a" C; z8 l4 [1 b! j' O7 s( c
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 c4 r+ `( y2 f( F8 [/ S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 [  f% ^5 ?! k    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 ^! v& |2 A; h
7 e5 Z" z3 s$ }' l  b6 I/* Starting sections of the McASP*/# d! B) Z) o: i0 \; _: d
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. r/ q7 O: x! q) L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) i, @/ m8 c; f! ]' S7 o1 b8 V    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 X: B5 I4 N" Z7 P2 m8 `; B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 x! \  `& s2 X- l8 k$ T6 f# ]/ e8 f/ j) b! b+ f. B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! g; H2 Y0 C2 y* E) y; _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. E9 H- [1 I/ D  b* D0 x$ g    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 M, V5 ^6 q$ U7 F: H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- K9 g7 S$ @! z4 u4 h

1 G# C- S: l9 y" G: Q3 @% }5 R4 B    mcasp->regs->XSTAT = 0x0000ffff; 8 b3 w! a. i8 ?; o2 j
    mcasp->regs->RSTAT = 0x0000ffff;
' Y6 b6 F" g1 d, I/ S5 r; b# J8 Z  R$ i4 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: D- C, ^3 Y& a* M* [  @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; f) R/ d  e2 I/ O- o9 r3 D9 M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 s) F* w3 X/ x% B) v( Y+ W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 ~' a8 b2 _+ {% [
7 Q0 C  j( J" U$ i7 t: l& Q
    /* Write a 0, so that no underrun occurs after releasing the state machine */) h/ i* J% ?  I8 R, K! X
    mcasp->regs->XBUF5 = 0;
1 X* i0 F. ?/ Z9 U# L/ F    mcasp->regs->RBUF0 = 0;, Q* _; a( U! d) Q8 w

$ Z1 l" B7 @/ u, U    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% r" L4 k/ N$ I; X- K$ ^) G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 ~7 A8 F  e2 a; l6 J  v' C8 y8 @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, x9 I" Y  j. F8 S' W* e3 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( p. o1 _& b( G1 y- o5 S& t
/ {/ y9 u' l* q3 [: w    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 V4 ]1 Q) Y5 I) _' N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 N; ]2 F# @2 x6 Y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & f* c- W0 e* ^$ Q. e5 L, F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& |" d' [9 j, U% d& F3 n  s5 U( ?
4 y5 A0 Y/ K1 C# _& l2 N2 p9 p    CSR = 0x0000;
, p- }8 M6 U7 B9 U, D/ [    INTC_INTMUX1 = 0x3d;
+ w$ z$ [1 d$ ]8 @) E: G    ISTP = (unsigned int)vectors;, t6 I. w$ G! R/ v# }( r
    ICR = 0xFFF0;  
: v$ p4 C/ I. M2 @: ~$ v, E    IER |= 0x12;  2 V' H9 ^" w8 h* t
    CSR |= 0x01;  ) j% _1 s( K) b5 _3 q) N) {- t2 s
+ D8 c7 b  ~/ w% H2 P5 `$ g1 v

) U5 i, }) Q; j% t# @. C9 d+ p7 I5 A8 h: h; Q
还有就是两个输入输出函数:) o0 l4 \6 y3 e) X5 W
void output_sample(Int32 out_data)
8 @) Q; f6 A# N- u# z: W+ F{
% r  p4 M9 q3 s. {5 ?9 f6 K  AIC31_data.uint = out_data;  
' l" t# e4 K7 \2 P  MCASP1_XBUF5_32BIT = AIC31_data.uint;* R( @- S$ }: j
}# h( U; n. y- ^* Z  w9 ^1 v
4 P4 N9 P! p4 j; o# x& Y5 ~
Int32 input_sample(void)3 M) h2 b6 G' h( t6 f2 Y  G
{  ! @8 O" {' B2 ]$ s  B  q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, |# _8 q7 D2 V  return (AIC31_data.uint);5 |& M& J. T4 x, x8 o, e" q
}
0 v+ {" A# b: T' M  S/ A' u
, u' a9 P+ j' E- n0 q/ W: @; H
分享到:  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-13 17:17 , Processed in 0.040486 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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