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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ O  ~' c  U( \, i3 Q! R
main文件:
4 W# u6 ]! l6 P& Q0 cinterrupt void interrupt4(void)  
8 T$ h" I% E; R# B{
! }6 F" X! R* W  x" l  Uint32 sample;
* q8 o; s$ @2 U
+ F4 v& c* Z: R: v2 Q3 u  sample = input_sample(); // read L + R samples from ADC( X: H. `+ \: M
  output_sample(sample);   // write L + R samples to DAC
" z9 ]8 K+ @7 {8 D5 V4 G+ |  return;* I) _5 s* ?7 U8 V0 \! c3 N
}; \0 J" b2 X. C
$ q  p3 u  l3 z: L5 J
int main( void )
- K" f% p9 ^+ c2 V, m& s# `2 a$ u{8 Y1 J" `# g# N$ |6 U/ f

4 Z# y7 A/ c4 D    /* Initialize BSL */
+ U* h7 A0 B8 @, ^- e    EVMC6747_init( );
2 |- k9 G3 K& X9 G" H7 S        /* Call evmc6747_intr function */
: i- L  {+ S0 V& k9 h( [3 h- g    aic3106_init( );4 m2 e+ H7 E8 h9 r% p7 l/ ~" ?
        while(1);& k; g6 T  ~) j$ M8 J3 o4 b
}2 N8 O3 s3 [, D1 `$ }

- P* F  l1 r& g: Q- R# o( Z" \1 |) W# e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' l4 K- J  a6 C, D& c% y1 |( z7 X
/* Initialize MCASP1 */
+ h& |0 J! H/ z- k/ ]9 l* B    mcasp = &MCASP_MODULE_1;& R3 x  N/ u1 L
    mcasp->regs->GBLCTL  = 0;       // Reset
3 M9 z' O( L% r! @    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 \5 n* D9 ?* g0 j8 p+ \' G. n    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ Y6 [8 M) H2 |: F    mcasp->regs->PWRDEMU = 1;       // Free-running$ I; n$ a  F9 O/ Z. R# g% f
   // configure McASP0 receive registers6 F& v% @" H% ]' ?$ X" |. S
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) _4 U" a! e/ s; v. E; p& O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: V' f" _# i* U/ n/ ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: k# w7 q9 z; D    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# Z6 A, E$ L: S3 `" P' C7 E
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ S$ y7 H6 K! B. W5 m    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ j9 M7 x9 D9 H1 O+ D& ~1 |
    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ F2 ], W( z6 I( m# L
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ H7 J& o7 B. O! m9 x2 ~% H; f

+ c; U8 @' j# g4 P  N8 B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ m. q8 Z% \2 U0 R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ ?) Z5 E# h+ n) ~2 C    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 ~% S- c8 m3 O; h4 f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. u3 t( Y( a1 u0 Z2 Q, j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% r8 R! d6 ^3 X7 {( O% U0 i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ E4 q' O/ f/ \8 L0 {1 x0 [, V* y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! t* m( v' i8 D1 ^
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) y% c- V6 Q( o- n8 l( W6 u# ?- l+ l0 V% m8 Q7 p8 Z4 u$ l
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 Z; [5 V6 d9 \' r, Y& y4 h9 b' D
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* J, A2 h* y9 D& I. C( Z
    mcasp->regs->PFUNC      = 0;          // All MCASPs
! u- y, i# v. X: I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; i  I. Y- f- R2 J$ @* Y5 E

  r; v8 C2 \: _9 ~9 b. a    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ b* z% w2 Z+ q1 `& }& Q9 ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 x* W. k0 E" P+ E1 x: z    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 Q6 ~& k. T6 Q: i, @1 t$ W$ S7 I" ?9 z) ^' [
/* Starting sections of the McASP*/
& h( x, Z" T7 j6 ^/ X    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# e7 ]% f; w- v$ d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  y( w* Y) H& |1 u0 d* D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: n9 j2 a, r9 _/ U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! V9 T/ |  J6 O5 o4 T" q
$ J/ w5 E* {% A* w2 q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( h% _) u4 O4 i& C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% u* i4 g) F0 Q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 W- ~6 D, B% C! H- Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 x1 k( K) A! o0 [$ N$ B4 G  U& q$ M0 B0 b: X
    mcasp->regs->XSTAT = 0x0000ffff;
3 V  N* W7 ^; b  p8 r; W3 j% n    mcasp->regs->RSTAT = 0x0000ffff; / _; R. u( R( K5 P2 e; P# N6 n) O& s% q
$ Z7 ~8 Q2 R, U+ i9 d4 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- m4 j$ c! ]' S( ~; j9 D( P# T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" M  z8 f5 E9 ]2 |9 I7 ^% E# h    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 I5 {8 V( T* p$ p1 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ R0 o% P, r6 t) \3 \6 }7 q  j0 p1 W
0 V9 u  D0 c" l, N8 m
    /* Write a 0, so that no underrun occurs after releasing the state machine */
% e7 f# T/ C; ^; c6 }    mcasp->regs->XBUF5 = 0;- k/ Y( S' w: J% c* |
    mcasp->regs->RBUF0 = 0;# Q, ]+ G6 P- q( q4 t8 {, f
; }2 p# U6 b& ~1 g; }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; P7 g+ G) u9 P3 k: w6 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" _7 M( d' ?, ^+ G5 o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% P- U# t& o: J5 q  q( @7 v8 ]" n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) d  y' I% M( l0 A
+ r$ s* o# Y( c+ C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' D, h6 e8 j+ d; z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  b! `: ^$ r/ F5 }    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # O. l- O! H2 f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% h. D& E. p+ e" w6 h- X
5 o  c$ k& X2 X6 X- Y& j    CSR = 0x0000;
, v) W) {: f+ U) M8 `    INTC_INTMUX1 = 0x3d;
3 _: Q- V* ^4 t    ISTP = (unsigned int)vectors;
$ ?7 n9 h; f/ O8 X0 E    ICR = 0xFFF0;  1 T" f1 v, G+ {3 Y4 [; Q; _
    IER |= 0x12;  
( \- i# a/ {6 U, f& V    CSR |= 0x01;  4 p( l( d8 ]2 u
# d! c5 t# t3 p5 z

1 l4 C1 @* d" c" d- w# K2 e6 s6 B9 r- w7 U& J% m1 o
还有就是两个输入输出函数:+ j, Z7 l, {3 {7 d  Z
void output_sample(Int32 out_data)
' I3 y6 r% \  J0 J9 |{0 [& {# I( n: ], z- L2 N+ L3 l$ H
  AIC31_data.uint = out_data;  
( D8 g0 c# B$ X% |4 Z: B: h; L  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  G" G) n0 W1 Y: n( N; k0 i, p}
% R1 A6 R$ |: t7 z1 q) t$ O$ _- ?/ B- @
Int32 input_sample(void)
, }; j$ u2 j6 m' C" F7 p* L{  * g  o* m( ]+ y+ P- H0 F
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( l" W7 ?' y5 X
  return (AIC31_data.uint);
$ {, q$ D% x' o) e# R7 K$ J}
, t: r  ?6 V0 _/ i3 U, Y4 t" X
3 i! _' s/ Z4 j, {
分享到:  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-11-14 23:48 , Processed in 0.037610 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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