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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 O% E4 Y, I) R; U
main文件:% D, l/ j! i8 X
interrupt void interrupt4(void)  . i3 ~- h9 S0 x2 K& v
{
  w( E4 ?$ [$ P$ c  Uint32 sample;2 Z  m/ a' X" B# @; d

. s% F1 \2 j, y2 B4 }( _- e0 y  sample = input_sample(); // read L + R samples from ADC8 X: Z$ \3 O" v7 T
  output_sample(sample);   // write L + R samples to DAC
) y, ~! o* L/ u9 }9 \  return;/ Z1 f# [+ |! ]& Y( \, [) l
}
: ?+ _* Y( b* {; @% ?- }+ x6 @$ O& D7 o& ]# ?  j9 r
int main( void )4 _) T- R! l8 [% b  E, q" Q5 a
{. O8 ^6 |" R* J. r0 p  S/ c

& A$ x2 o- s0 ]6 J+ W7 a( k    /* Initialize BSL */$ Z4 u; N! s, J. S; u. |
    EVMC6747_init( );  i+ v6 ^( G: |4 ~+ h; C4 S
        /* Call evmc6747_intr function */% N- n. S  X6 R& T: k
    aic3106_init( );7 |. R6 j. r6 f4 l
        while(1);$ X9 c/ ?" N) F/ I, N9 m, q
}
, o  H1 ]) j* ^3 r% J* L7 L# y+ H) E1 ]$ B: y+ l

+ l0 {, P8 ^% T0 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 y0 ?% r7 D8 U1 S) `
/* Initialize MCASP1 *// i1 w% ^2 H: e$ `4 h3 u; c' M  n
    mcasp = &MCASP_MODULE_1;
8 {! K& `; P& `$ k( h    mcasp->regs->GBLCTL  = 0;       // Reset
6 U  x, A1 y# N5 k& m- V    mcasp->regs->RGBLCTL = 0;       // Reset RX# ^  Z1 {9 k- i( [4 s
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 p! d9 ?( \0 |8 q. t' b/ J- o
    mcasp->regs->PWRDEMU = 1;       // Free-running" p2 `8 J8 s$ Y- d% C4 O) M
   // configure McASP0 receive registers5 t5 n& y# c* G* x. s7 e' Y* O/ D
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 i& Q  E( F- {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 N) z5 A9 l( r- T/ f  f9 S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 g: u1 T& t" w8 T: U* S, X
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* [) p: s. d( F& V' X1 Q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( R. q9 o2 ?3 J) f' W
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 s7 O, i: U9 \5 m' W9 b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, E+ D2 ^; U5 v8 J. D7 ^, f' j* p0 M: W7 p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, O: G. r, Q/ c. C) H  _# k4 z. Q. A8 p, T  y* B/ g0 [
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: T) o$ Q" v+ J3 [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ f2 g' N7 _  G
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) W' U) Z& X6 J+ \& ]; V    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ U; q4 z  |% q# h( Q9 W$ z" Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ y% o/ }% C) w
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 T6 B) m# [5 J7 y, [
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 I/ j+ D% D$ y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 e( H# U" C, ~! ^$ K( [, ^* Y0 [# U4 }% Y; T* B. T- f1 M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* r2 r2 j* H+ e" C. X1 p
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ V4 n3 t* F/ G  E' i    mcasp->regs->PFUNC      = 0;          // All MCASPs% L' f% N: A3 N- n  S! O' L* y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  H8 j, y9 h+ u' x8 Q9 R* y! f  f) q+ m9 b4 k
    mcasp->regs->DITCTL     = 0x00000000; // Not used' y5 h! [. d% ^, s9 ~. Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 D' B. b; x0 w- d: n9 _    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 T; a/ Q$ M! u) D/ g
/ ~) h& Q$ E4 |/* Starting sections of the McASP*/
4 e, S7 p% j/ |4 ~- Z! O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( ?8 {8 g+ H* X6 v$ l/ _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 t$ ~' P( Y; o  E1 A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 K+ R) x$ \. a8 z. p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 r! g. p) [/ c: _% f3 D
+ N; R5 V: |9 X3 p0 [$ H    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : Q: m: q( I2 b- o' w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% Y: T9 p. |/ n. h4 [3 f
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 }( y3 ^7 T8 c! U  u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ Q2 h* u3 G+ c, E1 Q/ B0 C7 d' z1 E' \% }- }  V
    mcasp->regs->XSTAT = 0x0000ffff; / j+ i8 [7 a, N0 ]
    mcasp->regs->RSTAT = 0x0000ffff; . e. U0 l1 k% w

! s) M8 R. [0 F; u8 p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 ?4 \& T# r, Z* d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 D( Z/ J2 _# m& X
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 u/ P9 ?4 F; L0 ^% G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 w+ m1 g% H/ z0 H) h- p( H' N
8 s* I/ V* N7 b5 J    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ S7 N  z. s, J8 u( p    mcasp->regs->XBUF5 = 0;
$ b5 `- ^7 m' N/ |/ q    mcasp->regs->RBUF0 = 0;! t+ F2 M! G7 i% s, ^, _

5 o! C- }' ~- h- j- |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 v% m! T6 l5 D3 J. i1 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 [+ l. N* c% S2 j+ b
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 z+ N$ F6 W, ^8 R  b! V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) [" l! O6 I. b( {
% z) d! \! U( A( o6 i    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& I6 v/ p0 I' A) k% i, i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. f8 e$ l2 x- d  `* o4 X
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 D. b2 B8 |- H/ m1 T8 ~3 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 @. }7 b; K0 r. g
) @* \) A0 B# P3 W    CSR = 0x0000;7 ~% Y$ ^. T4 Q7 o, Q6 U
    INTC_INTMUX1 = 0x3d;
. o8 c; O/ b: e* Y    ISTP = (unsigned int)vectors;
0 T. Q4 u  m" \5 K$ g/ h/ s& ?# N    ICR = 0xFFF0;  
: }9 O' t7 x. `# U! q; C8 g    IER |= 0x12;  
# y9 T4 c! {% ]- |0 \, y3 Z/ d    CSR |= 0x01;  
2 j! d; g9 i, h  ^. F; M8 e, }# n) s" v( a1 g; t" L) o' H

. h, \9 H  ?- r! j9 P
) \2 `0 L8 K0 m还有就是两个输入输出函数:4 P; w" _5 l3 t* _+ j( l) H
void output_sample(Int32 out_data)
  r. B9 `6 _2 j# _$ _{# E* h0 l* Z" U5 x( }& d* |
  AIC31_data.uint = out_data;  
! E. H5 t; Q6 s7 O  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ n+ |# s( b) g+ e% q+ e# f8 h
}
3 c0 U# G# R) Z2 D' o/ G$ P
6 ^" @8 i4 G, H) A! P" oInt32 input_sample(void)& n7 L6 t7 D8 y1 x% y# S
{  4 u: c( k% R) J2 j' p& ]
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, l2 g8 g4 E5 I; n  Y" P5 y  return (AIC31_data.uint);
, _$ V% }8 v2 T}
' A+ x( E9 N1 }' i( Z% e1 j; e. s2 }1 W+ t  L5 m8 E. _6 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, 2025-12-14 11:44 , Processed in 0.038473 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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