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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' m( E$ Y/ J) d$ A/ m4 Tmain文件:
" G, E; p5 S% \* binterrupt void interrupt4(void)  
/ k  \( Z$ o) m# F; y{7 q" A0 C5 B$ Z
  Uint32 sample;7 C0 T% b; u- Y: W
& `( Z$ V. o, _; p9 Y
  sample = input_sample(); // read L + R samples from ADC# `& E; l/ J) [9 K
  output_sample(sample);   // write L + R samples to DAC
! t; W- x: U1 r# B& B  return;
. X( i% [0 k# a. [}
+ G5 F4 G  J6 H3 h4 h3 }3 L* V/ _4 r: {# A/ m  H- T+ p* d) R
int main( void )/ e) v" x! W8 N+ f
{
8 h6 W" \) i  y8 q$ c( L) d' a& W) Z, M$ ^  o0 D/ t9 q+ n
    /* Initialize BSL */; w+ {  [' [* F9 |
    EVMC6747_init( );: R$ P; M$ `2 `
        /* Call evmc6747_intr function */
* S) p. t5 |" j  z* U1 g0 Y8 ~    aic3106_init( );
1 M- C8 E+ c4 p' {& W        while(1);0 h# ?0 G8 t" {; ?
}" c9 l6 k2 R+ E/ @& ]+ E: ^

( P( Z2 b- U) b+ ^' u* l8 L5 k/ ~8 @; W: |4 w9 U2 n/ V" k$ o; n) I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 I5 t7 d) a, W/ y5 c/* Initialize MCASP1 */
* U( }* P# S2 }) k7 n- Y% t2 ]7 j    mcasp = &MCASP_MODULE_1;7 ~8 h4 Y1 g' {$ ~! j
    mcasp->regs->GBLCTL  = 0;       // Reset7 M# a2 y1 _" ]# h4 z8 B+ t9 w
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 B6 D1 b4 [7 E+ @0 J# q
    mcasp->regs->XGBLCTL = 0;       // Reset TX3 a- Q; O' H. y+ z5 ]( p& p* k
    mcasp->regs->PWRDEMU = 1;       // Free-running
& p" b4 @/ ^3 _: }   // configure McASP0 receive registers
9 s& f' M+ J5 j* c    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! D1 a9 W) U% F( m1 h: F- Y! z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ W' H5 @1 C. t" d8 j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! v# x  U/ {2 a. |8 m8 Z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ G% e) r+ q: Y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ [0 k: O" C6 l- W- C9 j
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; K+ j6 t3 U3 f! |+ h    mcasp->regs->RINTCTL    = 0x00000000; // Not used
% k  x; B6 j; k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( R; i2 e# V7 E$ H
' [* G2 o% H0 e* A    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 Q8 B6 W8 E! |; ?$ |/ q0 q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" z; V1 w% w3 m! v' s: \- x7 l( P2 o# C
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, L$ A6 \# O2 N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; ?, l6 T5 D  \+ v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 `. P* d# ]0 q( n1 G3 V
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% N5 {# |$ g# h/ t- X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! A) F8 Z, k/ h* b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 U2 F4 \3 |& Q9 V. x  _0 R
% [9 R7 \7 a% w3 K) H7 |0 v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 m* c: z/ L: I+ J# L4 k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) B3 s3 O4 h4 F6 [    mcasp->regs->PFUNC      = 0;          // All MCASPs! l! T8 R3 m; s5 t. @" l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, ~. `4 f; F/ l9 I. }0 z

% I( D6 j% e8 E% C# \$ |    mcasp->regs->DITCTL     = 0x00000000; // Not used6 k+ |# P# t; W% i3 c
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 N, v" C' G9 t9 ^$ }) Q0 R    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 W( i- f, b" a0 b) P! V! f3 D
4 ~. ]0 x4 X+ h  b  |4 b( t: ^/* Starting sections of the McASP*/! O* e* }5 Z" o7 ], B' T, p2 L
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( s( v3 z: ?3 z/ C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + C+ T5 c" Q, J/ [+ K- V6 U
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + }0 W5 ~# P( Q* Q5 s$ F6 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( k# f7 y% i) {* ^5 g. r' ~4 W

: Z+ D/ G4 o; y/ @, [6 h: r    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" f& b/ c* F! P, K5 S6 v) e: W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* T+ j) ^: i4 P, P% c# K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 z: n$ v, o4 d/ {* [1 P$ m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, p  f% q+ e; a
, {8 }. S; ^5 H    mcasp->regs->XSTAT = 0x0000ffff; 5 @0 Q0 V- Z7 w6 E: {
    mcasp->regs->RSTAT = 0x0000ffff;
1 F; r, x) g$ [4 j) u
9 O# C8 L) _. t3 v: ~. |$ t- j    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! n# C# B* C6 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& M* \+ m' m$ S* z2 r    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ E; D# F* U3 S& A% B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% x' B; Y  h7 a1 G8 |  q9 m% R- G9 w3 n( T. j/ A$ o8 U! \7 x
    /* Write a 0, so that no underrun occurs after releasing the state machine */  G" X5 Q# C! |& ^- c5 Z0 S
    mcasp->regs->XBUF5 = 0;7 }9 T3 A8 H" E) x( _. @7 {, }
    mcasp->regs->RBUF0 = 0;  F3 t, F/ m) j

0 h! k& C' n1 O! M) n6 s1 M4 X    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : g( r2 h* g* w- S% N; l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( B. k1 J4 r4 E: K9 P$ m! R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% v4 s/ }5 v; E; X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 Q; V0 \$ N& O6 p
4 s/ m' T( i0 f" M, X2 E( f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 S( p9 v% o4 s! ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# p3 m7 R( r  _+ I$ n6 G    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 C, a9 t8 V0 ]" `& w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 o# b3 b& H$ @/ p' h+ X2 K/ Z' J( `0 {. T5 \: p- E/ t, G0 t  b
    CSR = 0x0000;3 P5 X9 P+ y% b3 [. ^* ^, }
    INTC_INTMUX1 = 0x3d;
5 `8 g- w# _$ J% N% \, D6 y    ISTP = (unsigned int)vectors;
9 \' `: g5 y4 m" ~5 h  Y    ICR = 0xFFF0;  
9 c/ Y$ B" M. e$ K    IER |= 0x12;  
; v& U( y7 \2 Y, n6 Y, _    CSR |= 0x01;  3 h1 k# W  f& n8 W- i6 c
2 O5 T, w; h, U1 }' F

- W  x' m" [8 z; R
  n; @4 Q% c6 ^$ `还有就是两个输入输出函数:
$ z1 w8 j% ?  A6 [: }0 A/ xvoid output_sample(Int32 out_data)( A# r8 H7 d) r2 D- U9 K9 f  b
{# }0 l0 A1 C* }0 ]( b3 k
  AIC31_data.uint = out_data;  
8 G9 q% ]' v: G+ O  a: K  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 q' Y) T9 f& ^  B) q: K- E2 k
}
& V0 [  Y4 V2 m# w6 b
; S( C" c: ]( H' bInt32 input_sample(void). B! `2 n/ c6 i1 i. \- `/ F
{  
- B4 @# X4 R: z; G( L  AIC31_data.uint = MCASP1_RBUF0_32BIT;( G: I2 e/ Y/ S" u% w; q3 l
  return (AIC31_data.uint);! {& m6 a5 g/ z
}
. O! z  B8 t* _: T9 ?2 m. v9 k) g9 u( C
分享到:  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-22 10:05 , Processed in 0.038550 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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