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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ c' |/ t0 A+ Q& [8 W( F
main文件:
; {3 t1 V( l. F+ ?: v9 ^interrupt void interrupt4(void)  
2 t) v5 j4 U5 d{1 S; }7 G8 Y9 N) C# p% n* F9 u& ]
  Uint32 sample;# B6 E# c- C! ~- E; n, E' `
* n! e0 l1 Q1 ~4 v0 b: r
  sample = input_sample(); // read L + R samples from ADC
, g% z7 ~& o* ?0 A. P" j0 N6 }. F% c5 a  output_sample(sample);   // write L + R samples to DAC
  }) p# c5 M. F) _+ q  return;0 P3 M5 y, p; z: t! \$ d# e1 b
}
+ L  s7 Y* U) [- d8 q
) p% b( \4 v1 m, x% D  `0 q$ s* t8 Gint main( void )
8 ^- e. Y5 H  N# y: |9 |{+ f7 h$ q, r1 v: G) T  J3 ~

, p% x- [7 W$ w  |    /* Initialize BSL */
' r; g, |; r" R, L8 L, n/ [    EVMC6747_init( );" D/ f8 r# H4 f! U  U
        /* Call evmc6747_intr function */( M# Q( f- w! W- B
    aic3106_init( );
5 d  |$ j& t# ^! m3 e        while(1);
8 v$ W" f( z  G# T}" ^& N5 R, {" T3 Y0 T1 Z3 Z
, k5 L$ T$ O+ Z4 f: J

( g5 G0 a5 u) L( H" \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 `7 W2 q. X- X6 D! R/* Initialize MCASP1 */
$ ~9 n- X. b4 {2 M3 z. F2 M    mcasp = &MCASP_MODULE_1;6 r1 M# A& P0 C4 u
    mcasp->regs->GBLCTL  = 0;       // Reset
  K/ ~2 G6 k' X/ b    mcasp->regs->RGBLCTL = 0;       // Reset RX5 p4 @8 A7 Q3 ]! ?
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# N$ ?! t8 g3 N9 U    mcasp->regs->PWRDEMU = 1;       // Free-running4 \$ r0 _5 y" C6 |) b
   // configure McASP0 receive registers
/ A. I! |2 v0 G: v; W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% B( E$ G, R! B* F$ v
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" O; R$ P) f: e7 R5 k    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ ]# k2 g% I$ `( R% v4 Z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# i. d! `! @) @# u/ t) t6 ?    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 V& i0 l6 s6 x/ A2 ?    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ ]: s1 P  E/ `  j' x. s: s- n8 y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 R( y& V; D5 q/ j4 M. k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 @) r' p9 H" h/ }8 S/ O2 S6 w. t+ G
* F2 |( Z( o5 p( ^! \
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; E& s) Z5 b' N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! ?& o/ L2 B9 u2 J+ |    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 P1 n3 D4 {- M    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, [! A- z) P% Q+ U+ d5 |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 W% S% P( R( L1 w
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) l0 o" f+ w, Q- t2 P3 r# m+ b
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 B, K' d5 k% z1 L  d4 j% i0 B9 u4 d    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. t* N/ z5 u( e  {4 [
! k  ^% E+ P6 D+ u0 S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 x3 I* n2 R* U/ ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* C0 W4 ~* H6 l  I    mcasp->regs->PFUNC      = 0;          // All MCASPs1 |/ d2 x" R) G  c. ~) E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. Q: \: Q8 f+ s3 A0 P& T4 J) f7 e) [& V* R' P
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ m+ s; a( ?) I3 Q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" E# Y! q/ Z5 z1 m- E    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 F) n; [/ i, s& S7 ?8 Z& R- U: p4 E
/* Starting sections of the McASP*/
3 f3 g+ h& V: a) v: K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 r1 D" s0 J. D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* u( I/ V5 P1 I& A: }& Q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  H1 B! E) m( A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 j+ q0 L& y2 A$ T' x$ }8 F7 v
) L" R  w4 ?, F3 l2 `5 C+ O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! J5 ?; V( _) i% }: {7 ?/ ]% O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, i' f' d3 r- n7 l' _+ x! r* k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ M& W8 J) O9 c; t. q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) h. J! |/ r; H: b+ N
5 d1 \7 c0 U/ G0 e/ Z    mcasp->regs->XSTAT = 0x0000ffff;
3 N0 a) h3 o8 y7 Q2 A- H9 @2 O    mcasp->regs->RSTAT = 0x0000ffff; 7 Z2 B! Z1 E* O: q8 F& u( y

" A3 Q4 ]  X( m7 X% b9 v# W% v    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 Q* F+ n4 q$ C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 U1 o. P) [) i' M& O8 Z4 w
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 o2 I( a2 @# \8 T3 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# v6 A9 [5 Y! F) h" R4 W; N5 _" |4 m5 D9 Q' b
    /* Write a 0, so that no underrun occurs after releasing the state machine */
: r9 Z: }) ]/ E    mcasp->regs->XBUF5 = 0;
, W$ b9 K5 g+ {) |0 o- j7 W( O5 E* Z/ H    mcasp->regs->RBUF0 = 0;
4 g! d- E+ u! N% _  q2 u. d( p5 ]8 j4 O) Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 k, ~4 F- i& K( F/ L+ m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ m2 t6 K* m+ e, f$ I8 T8 N
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 q$ p9 T4 s4 [- q" S/ n8 w9 X: s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 @7 `* D7 |5 L5 B& a

0 G4 |, f/ S; F( m% C/ c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) V. f0 O3 F3 {, f9 R, g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' u" K( d+ b- f" ]( N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) l# h! x: y" {% d- X7 ]9 m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 |# Y& i! l/ P: [0 C, b4 O5 R# b8 f) D: E. |) G
    CSR = 0x0000;
/ `& b' T) N% B6 H0 w$ u' U    INTC_INTMUX1 = 0x3d;
3 i: h- O2 F1 ^1 o  {    ISTP = (unsigned int)vectors;
- [0 D2 n6 C6 i& ^( F8 X" U# I/ p    ICR = 0xFFF0;  
1 k5 i$ q8 v8 z# m7 [% M, I    IER |= 0x12;  2 _3 h' q0 {& S" v
    CSR |= 0x01;  # B: a2 {/ L  b/ D1 h
; k0 J$ \% k1 O

" a: M  l, H: O1 }4 m* ]( Z3 N/ s
2 f; d! I& }' }% y* v3 A4 Y9 q& a还有就是两个输入输出函数:
1 |0 F# P* {! n; R; p1 `$ {void output_sample(Int32 out_data)
* t0 m5 |1 y* P/ ]. n{% z& X( y; ?  y5 I! ^
  AIC31_data.uint = out_data;  3 q( U' E- U' X( H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 L+ x: _( ]/ Y}* x* f3 T# k! |. b( W# W& Q; ]+ t
0 b" _+ z' V) p( X, P' i& Q7 L
Int32 input_sample(void)
+ o7 O/ V/ O2 p9 [0 f* C" Z& m" W- a* F{  $ B' F7 P( A, P( g# m; |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 w( D$ k7 J; q1 c8 m
  return (AIC31_data.uint);6 [1 Q; r3 B# t( p! O/ ~6 k4 l- {
}
! \9 e( G, i6 G7 k: ]
3 t6 k$ W" {3 u2 a$ g2 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-5 10:58 , Processed in 0.039035 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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