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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, T9 ]- r/ G& F* Mmain文件:
4 r: B4 G% h& y8 |  `interrupt void interrupt4(void)  
) s" d3 r7 o9 {, z- }{: `5 u: b- N1 E
  Uint32 sample;
5 |$ ]7 S- P5 l$ z8 p$ b' l
/ V( X2 W: {. w$ {2 T# u  sample = input_sample(); // read L + R samples from ADC0 `% w' V, I, h; ]$ k3 l6 \
  output_sample(sample);   // write L + R samples to DAC 2 Z7 ]0 u, t# s% ?" i* b
  return;/ O$ Q1 U2 T. d3 w. l
}+ c6 y( \- c1 K5 C: u! E

! y5 J" c+ g- o/ o  xint main( void )
0 N7 b% ^5 f% k. ~4 X# y0 U$ C$ p# x{
$ b' e, I" q6 _8 N: z0 N0 o, x
0 R2 V" ]$ R8 o! Y8 i    /* Initialize BSL */
5 _+ ^, r0 e- }) g3 A    EVMC6747_init( );
+ }& ~! m- J3 u5 E6 L0 D        /* Call evmc6747_intr function */9 @! f  w' C) l! _+ ^
    aic3106_init( );
4 Y5 G2 e; ?7 T8 w        while(1);
7 \2 L9 K3 o- i3 j3 u5 `5 }- R}
  j8 v- H$ k; }: m' f+ r9 _7 S- i# X  Z# R* o  @9 d
" [: F) I9 |% }% S, z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  l' u4 a1 i0 J  I2 u: a5 A/* Initialize MCASP1 */; [+ b% C; l$ Y- F
    mcasp = &MCASP_MODULE_1;
2 G1 s5 @9 n- R' X/ B8 A1 f    mcasp->regs->GBLCTL  = 0;       // Reset
9 u2 L5 U1 o5 W0 {# _4 x& }    mcasp->regs->RGBLCTL = 0;       // Reset RX
) R, l4 y5 J$ V( [$ ?  a    mcasp->regs->XGBLCTL = 0;       // Reset TX( A% l8 R! a+ \# |' o0 c* R* n
    mcasp->regs->PWRDEMU = 1;       // Free-running/ i# \, n: V% O& r7 e" P; ~- c$ J* ]. {
   // configure McASP0 receive registers: W: y- s2 [5 A" G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ S: E, E# x; F, H# p    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 y+ G7 q  B' _7 v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* d! Y) g/ Q2 w/ k- A
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 v+ Y# ]( d5 S; W. A; R
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" m' A' ^  S/ @" g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' x4 U. i/ [; m% s3 p, C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 M6 y1 E4 g4 C
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* Z7 u8 u: b" G  x7 s3 ?
: P0 K$ U: U( U8 X- h9 l0 A: w
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. o0 ]( M7 y; P, f3 W* V8 N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 d3 n& w  P& s9 j) s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: R" r/ T/ `0 U& y; F
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' S0 w" K- T6 V( M2 S
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- L* ^# L( b7 k  J6 }# O: n  Q; q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 A0 h3 G4 _0 F9 V8 g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 z  C& u' V& J% ~/ `5 {1 u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' C: B  ?! i" x/ {9 ]
) f: ~- ~% l/ j% A1 J  ~( z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ J" n/ I7 h7 B) m    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ b- ^( r# `" I# h( H    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 u! z5 \, p) m- F    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% f* Q4 I' D! |( F" S

0 `+ H; f3 F9 J# k    mcasp->regs->DITCTL     = 0x00000000; // Not used* I7 K- q# T; I; Z& I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ [! |9 |5 E, x; i
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 O: L$ r  r  b( }6 I" z+ L7 O
, v5 i5 ], T: ]8 \& u: P1 `. H& E) ]
/* Starting sections of the McASP*/
0 U9 L; |  N! K" `1 B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 N& w5 v0 T6 m/ r% N8 Y! z* p  ^1 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 E8 n0 S2 i& a5 w8 e3 q! o    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 C, S: M6 h5 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* e3 P2 y& R) N. g1 n" F1 k" L

9 c! y' Y+ Y  H* {( I! P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 K2 J. P1 Z2 @- m, v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* F. n% W  o, o  G, I; [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 k% @- t8 I9 w0 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ c- j8 C1 H4 z+ B! b
& n5 T; T3 M9 F# J    mcasp->regs->XSTAT = 0x0000ffff; * H1 Q8 l- g$ E0 q
    mcasp->regs->RSTAT = 0x0000ffff;
' t5 W/ {  E) n" k- p1 m, P- b9 n  t/ X& s0 {% G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! g3 n9 O  |) x" H4 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ @$ y4 z6 J7 b1 ^' J! j
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 H# h8 X0 z  m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 T: z5 B7 D/ ~+ @% H# G
. Q5 O7 i4 C  u9 }! M* O
    /* Write a 0, so that no underrun occurs after releasing the state machine */: v# O, `! N% F5 Y
    mcasp->regs->XBUF5 = 0;
, K+ d. d6 r/ o# d6 n/ f    mcasp->regs->RBUF0 = 0;
( H& T, g6 G: j) X; v0 w3 i6 T2 B
6 x/ G% W) b6 E5 U# \+ q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 o7 w, G4 N. q9 ~# C% m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( M: b0 e# h4 i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * x0 d1 D0 A  N9 y6 W* F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, k, x+ W7 `! E& X: K9 Y6 U* ~9 Q

  |  t0 d1 N6 Y2 [# s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 G* C. @/ U7 T- v& K- B% _) @% `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ U: Y3 E" ?$ V
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 B1 T# j2 t! {/ ?0 m8 O7 W3 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! X8 `1 M8 t* w2 ?% Q
0 W, a: @) K7 h+ L    CSR = 0x0000;
" b# Q# K& J. r! s: Y# a! C+ a    INTC_INTMUX1 = 0x3d;" {7 V6 o# B6 a* A3 o. F  f8 d: I
    ISTP = (unsigned int)vectors;
5 _, V9 Y$ r: {/ Q* y6 r0 l    ICR = 0xFFF0;  % f5 X/ C+ p- {  n! a( _
    IER |= 0x12;  3 Z9 b+ {) W5 i# b5 P" j! O
    CSR |= 0x01;  
7 k$ x. B% c3 D0 W: S" L4 s3 X4 q+ [% {1 S. a+ ?  v
  i0 {; a' T! w, l5 H9 n
/ _( {: M. J8 s
还有就是两个输入输出函数:: X+ C3 A! `0 x/ @: }
void output_sample(Int32 out_data)) h" e9 c2 y! q& a+ z  A
{
) m& c: x8 ^. I0 I; p4 i- i1 m  AIC31_data.uint = out_data;  : I+ T$ [- c/ H% U' P
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, f: x! g8 p5 o: H& l}8 ^* ^/ g' v5 X2 c0 T( m

8 Y5 y. O2 E- }7 }- xInt32 input_sample(void), r$ z- o) m0 r0 r. U/ y+ }+ _* c  l
{  
. ~* S( c5 p6 c9 r' [  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ f" a- Z- X3 B# P8 {+ C  ?2 Y8 p
  return (AIC31_data.uint);
2 I1 O5 v& i0 k$ a}
* x2 m, L$ y0 ?; ~& Y4 a
9 A* p9 u4 V  R
分享到:  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-12-26 18:41 , Processed in 0.038636 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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