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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 j, L% Y1 B- y8 ~% ?5 |main文件:. q% P" r3 n) L' t. \0 k# r
interrupt void interrupt4(void)  
; C9 O! Q- K) B8 d% P# J( P' I{
4 o* u' P; m1 p! g. c  Uint32 sample;
4 t( l) E  X3 T+ K# l  a/ ?  a8 O8 e/ U; M+ z' c
  sample = input_sample(); // read L + R samples from ADC$ k4 m+ N, M1 M/ E# j3 Q& ^
  output_sample(sample);   // write L + R samples to DAC " d, S! ^- H! H$ n4 }
  return;
5 ^5 X- ^8 W, `8 ?: O: Y/ q; Y}
# C! A+ O% e0 x5 z5 z2 f
! H" P7 L( e! @int main( void )  S/ E$ P( w" ?
{8 S' \8 w* W/ i6 _0 j8 ~( K! ~
) d# ^  x$ K% O
    /* Initialize BSL */) T/ P4 `: N5 G* ?
    EVMC6747_init( );
& A. U% F9 J9 e0 C2 V( G, L- ^        /* Call evmc6747_intr function */
5 P; M" h9 T: }' J$ ~1 W    aic3106_init( );: o/ N3 a7 O% n6 I  r7 L  E* v
        while(1);' ?' O5 k+ b- @7 [; Z
}
4 k4 g/ W5 f! H7 u8 s- I( w  p' P! }% Z' X7 }

; x7 H. f6 B; M4 taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 K. O) m, ?. y: D' W/* Initialize MCASP1 */
3 d+ M& _) r# x8 q5 S9 n9 }7 a    mcasp = &MCASP_MODULE_1;
" p, F" C0 \1 L. |. _    mcasp->regs->GBLCTL  = 0;       // Reset
$ l1 L- `! |. ], h3 E( @    mcasp->regs->RGBLCTL = 0;       // Reset RX5 B1 }! A6 p, @9 E3 R" c0 q* B
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# l3 H' L/ R0 K' `. |    mcasp->regs->PWRDEMU = 1;       // Free-running
# L1 G5 l: L' N. P$ V   // configure McASP0 receive registers. G( B! O0 s5 I+ J$ I) n3 |  U1 B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ X1 q) C$ o/ Z- [1 `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, j" p$ o0 a( c) \6 k* m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- w8 E* b# N: E$ R- c6 x1 j7 Y, ?) N/ I  h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ f2 p/ a; w% h/ R; i! H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 N+ e( j8 p( O. o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* ?$ T' \; J# _: D" j$ i    mcasp->regs->RINTCTL    = 0x00000000; // Not used
% j; h$ }+ m6 P3 m7 p! K    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 ]6 _0 ]+ d( @6 ^4 @6 Y+ G6 e0 Z' j# l) ?" @- \
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 _& n& y( `7 O2 V8 W9 u; q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( H2 N# u/ F% ^5 S. }: A0 {, I) L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 l6 d: E& d( f" ^+ c( F# q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 i7 f0 e; a, e2 W( Y2 c4 T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ V$ o7 v  k9 L$ {8 k/ {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 K# a& m  q. L9 G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: w5 T, A7 n$ E0 s! a5 t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; v$ n. u4 E8 n. s
  Z5 t; i0 [& }* D
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ C, Y  x' U' I7 q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ o' }7 s0 Q3 ?- e4 |+ _
    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 p" L( }3 Q  L. T6 N8 H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' O& e. `9 R7 {* t6 e
& B4 T' o2 s3 p+ L' V. E    mcasp->regs->DITCTL     = 0x00000000; // Not used- e8 q& Z0 J& e  F4 y1 N) |  I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 M, k* b2 q% T8 u    mcasp->regs->AMUTE      = 0x00000000; // Not used1 N% V4 ?( {' [
6 v9 [: ^  A* n- e" A
/* Starting sections of the McASP*/# X0 g' T8 u% d4 g' Z: T
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' L/ x& q) E* ~- T: }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # X6 U: f" A9 O+ |1 O* J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' ^6 p/ P6 p8 f6 y+ w- a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# b, V2 R$ t5 K/ y
+ p9 p( y5 g/ F4 v& s' {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; \6 o5 q4 ~$ N) Q0 z% _- I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% Z) T6 L9 [2 d8 Q' G    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) t& E& G9 w/ q1 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 a& j( a1 M2 G4 p
7 P" z* N$ d2 ?% A    mcasp->regs->XSTAT = 0x0000ffff;   j9 h) Z9 o$ \3 \4 @4 m% ^
    mcasp->regs->RSTAT = 0x0000ffff;
* d7 p2 F' `; d% [8 y
" P* s7 j8 V9 M9 x    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 I6 ?  d6 X4 k5 r4 q. r8 n1 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 X- N( U  K+ w" L0 X2 w    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ z+ n( n/ l1 T" ^% D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, Y4 ?$ i+ w/ e

0 Z2 {2 m2 c% u: P# s, S    /* Write a 0, so that no underrun occurs after releasing the state machine */- Y# v6 Q& i9 E2 B$ w
    mcasp->regs->XBUF5 = 0;. G$ v. b0 x3 ?' u0 a/ d
    mcasp->regs->RBUF0 = 0;4 H( F. Z1 a) ~4 L

; G! B' J7 F$ Y& H/ P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( F* A  V' A0 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! b) g) f0 x" e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 C6 M, r$ ~5 i0 r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( }" z6 Y0 H, J& v- |" r# w2 t
# H/ p! I1 S- N$ W
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 F( i4 j& X- H* ~5 T& n& m% V6 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 f, C+ u/ h" ^) ~8 I4 E' C7 u
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) W3 N3 c& w! d- `; v8 f/ B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# B$ _) `# X0 U( W0 \! o
; F( X+ d) I6 u, x
    CSR = 0x0000;
9 ^0 L2 Q( i. [8 t0 q    INTC_INTMUX1 = 0x3d;
; [9 t2 {* T+ i0 l    ISTP = (unsigned int)vectors;
/ @4 S. o" \9 H* v5 m! t' f    ICR = 0xFFF0;  2 Q2 Q4 Z. Z" }6 ^; t
    IER |= 0x12;  7 W3 u; u0 m1 X) \! Q. ]; t+ _
    CSR |= 0x01;  ' ~+ u3 R$ n( ~* a, Z
, w2 f# l4 e/ w' N+ X9 i; z
' F. B# l4 \0 s$ ~# `& n  ?0 t

# z% e' `8 _$ `* o1 v: G还有就是两个输入输出函数:! r; e5 h: m1 w! F7 q$ M$ f( o
void output_sample(Int32 out_data)/ d# a- \, z; @! H5 s
{
7 P: G: K) r. P; Z; X  AIC31_data.uint = out_data;  ' ]! O8 P  R; k) n# W5 W& g5 t. g1 f
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 ^) T( |+ L% |+ g}3 e5 @& b% P' M" j+ {1 Y; y& B6 o
9 m- ~4 n: i; B  S- b" A
Int32 input_sample(void)
& H! Q& v2 B; {{  
3 _0 m% B+ r' _/ N% d  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ {. g* _: u/ z- ?/ A
  return (AIC31_data.uint);7 f2 g4 t1 {; I
}% m0 d* m2 Y7 ~
" E. a) g. j- j5 I5 l, {2 t" B
分享到:  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-1-2 01:20 , Processed in 0.039209 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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