C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" H8 n: I+ r; z* {main文件:
/ E" v4 A4 D3 U/ M0 F0 Ointerrupt void interrupt4(void)  ' Y$ A5 [# S; l( w4 _, o% O
{
: k. G6 F2 V$ m, v8 q  Uint32 sample;
+ c. H+ o  m3 S2 L2 I9 R$ D0 n. _: Z4 \& O+ y4 L/ s
  sample = input_sample(); // read L + R samples from ADC
/ \6 g4 b5 f; y  Z9 }: p  output_sample(sample);   // write L + R samples to DAC ; b1 t! M& I& G/ M! c7 p
  return;
  ]8 G- z4 D# A/ V* @/ \}
) m/ r) c/ y! x* n" W: X9 V0 h' \. y# o' V1 G
int main( void )
# Y# t* {5 F4 A( C  j# _{
$ ~  U$ o9 f" n! U+ b( n: ^
, ^8 u5 y- d$ _- S4 e" w, e    /* Initialize BSL */
4 D: w9 @3 g# B! P1 P& f; F    EVMC6747_init( );
2 U' K; I1 u! m5 ~6 C+ u        /* Call evmc6747_intr function */3 g' {8 c* x+ m9 ?2 M& A1 _
    aic3106_init( );0 m1 A5 C4 M4 _4 X+ M
        while(1);9 ^# e. j& N, K7 q. G. b
}
. u# h, U7 \% \# w6 y3 D" D* k; S0 M2 n3 B* J0 W

, B6 `" [* z5 B* oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 g0 F3 C- F7 u+ I
/* Initialize MCASP1 */
) R" L: ^; R0 Z& ~/ a4 o  z    mcasp = &MCASP_MODULE_1;
: H$ O" n, e. X- O9 G. p) n    mcasp->regs->GBLCTL  = 0;       // Reset
4 \, x: i/ g" Z- c2 A: y" E) ~    mcasp->regs->RGBLCTL = 0;       // Reset RX
; x4 R' q9 v  q6 C3 b, R  r/ B    mcasp->regs->XGBLCTL = 0;       // Reset TX4 [* Q. ?0 D8 n0 {% {
    mcasp->regs->PWRDEMU = 1;       // Free-running; M* B- W: l- ?# U/ u: f
   // configure McASP0 receive registers  x' H9 N$ O) [4 i0 B' v. C7 b
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, D+ z- K' D& |2 `. i7 s& M- M
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 C. f! L+ K; k* G
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- L: N& t) E. `% M6 ^. j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 E8 ?) D1 q2 ], |5 }5 C. J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). q$ n- {, g' G* Q8 @' @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( R8 z0 A7 ^1 f! t/ W$ |$ \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! ?; j, q% W) z# R0 U    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 w" l7 i. h& j2 F: A2 P
" O9 c" T! J& j+ P" D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 t" Y( s4 ?7 Z9 X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# J# f- K( b+ w    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 i  U1 |8 o& N* F3 @! i3 i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 x, u/ v2 r1 M+ K3 T6 l; G    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 |2 J# C( E$ |% J3 A0 B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 y, t$ }$ y  X8 a
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  F9 R5 O% h' D) s# b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, X/ L% N" t; g  \, [- n% ?& v/ `1 Y

' x' {- i$ b: E% P' f- c: q( E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! w' L2 r5 t2 j. A0 U1 K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) G5 R" o% B- ~9 n, U  `
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 S5 c. L: f0 N( V2 N7 g, X
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. y8 }- V6 k) H' M8 J/ ^, Q
. S) E4 C+ Y2 |' Q, [# h. t) s    mcasp->regs->DITCTL     = 0x00000000; // Not used
, E- n7 P8 s4 i+ n    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ e0 p1 p4 ^$ Q0 j! k" L, f( F    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 I; e/ w1 b7 E3 P) m4 m
; S1 \$ @7 U% _/* Starting sections of the McASP*/
: K1 \' w& I7 O( q5 A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 F- o7 ]$ l6 @' J+ a, x9 W: I  ^; c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 S. Q0 \! j# M5 m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 @# P0 G) g& a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 k# B3 ?* }) S2 v" h/ }/ X$ D( y- o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 h" a2 s1 U! x4 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 \1 R; c  O7 B; L; g( `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  G; z- @5 P4 O# f6 |8 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# x9 r! y+ X) l7 b. ?; y
+ i+ M) k( o  z4 y' [6 t1 k* H    mcasp->regs->XSTAT = 0x0000ffff; . b& e/ C9 c/ y" K. a
    mcasp->regs->RSTAT = 0x0000ffff;
' g* d# M' v% O' [0 M0 ]# _' l% y3 x2 e3 O5 {- V/ G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 b; c3 {, |- X6 y. m# |' r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 A2 O1 u( l5 Y* u
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 ?2 [$ Y9 o$ b  }* ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# T( ]- P* I- Y7 A8 T+ h0 C
5 \0 C  j0 t/ V
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 Q% B# c1 V, A. v9 y2 n8 y
    mcasp->regs->XBUF5 = 0;6 x8 }" M/ W  S* C3 e7 G
    mcasp->regs->RBUF0 = 0;0 F$ C% a6 q) E

- \! `$ p( r2 v5 I  z9 r& ?; r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 ~/ Y0 `) \+ Q/ a) T1 Z% d" I- R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 E: [  B6 C/ b2 S0 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / W  `4 r" u  L( P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  @8 _$ B7 ~7 t. {/ m, l- E
# S7 n& r+ @% l+ ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 ?/ X- Q' Z! v9 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 M, S. C& i& k& g- f    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / Z' I" p! ^* ]: e) C' Y/ F2 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 B' A+ {" l- N8 ?
- p2 l# n2 q) g  K2 P
    CSR = 0x0000;
4 `6 M$ O% N2 Y$ E    INTC_INTMUX1 = 0x3d;3 V3 j, K0 @6 Y8 H
    ISTP = (unsigned int)vectors;8 T3 e" M+ K1 o$ O
    ICR = 0xFFF0;  , u  S! l. b0 n
    IER |= 0x12;  
8 g% N! m4 M% L) \( \- J3 P    CSR |= 0x01;  
) Z7 ~) b; T' L9 n, t
, Y" f! j+ ^3 i  }8 t/ x% m+ e
/ Q; s  ~" f; ~" E/ u8 P) y: s6 @
- X/ W5 N4 |1 L7 x# s$ T还有就是两个输入输出函数:
# A, M8 F* n* Kvoid output_sample(Int32 out_data)
7 _# ]3 G( e- u3 d% ~% l: W{
7 N8 F4 K- U9 F- i" Q  s( S  AIC31_data.uint = out_data;  ! |: g; R9 ^2 Z4 \- ?+ T1 w' S# e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;! R- W! {- \2 k7 Z& ~/ [7 F
}
/ T. x% Z) F1 J4 H
7 c* u* v# i* n" K' G" D% ?Int32 input_sample(void)( Z+ y# R2 ~' b6 `2 `2 D$ F' N
{    W) s) D) {1 `: r8 \  i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;% B7 V( L* n' c7 J5 ~5 G
  return (AIC31_data.uint);5 r, R/ V, ^! a8 X- C
}1 q* F+ B$ r1 @6 Y5 W* H* K; j: p; H! R
2 K, S3 J- \& Y0 m! \$ }& i
分享到:  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-3-31 18:35 , Processed in 0.046807 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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