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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 @7 i& x% U3 e% t" @$ Mmain文件:
3 ?6 j4 H! |/ @3 f. j6 u( c5 _interrupt void interrupt4(void)  ; I" t' V# X  J
{
( b' a  P4 l" i/ {: b( h7 |: n  Uint32 sample;
) J2 J+ S8 |/ B; l% e$ I0 i; m
$ R9 H$ p: T' ?  p1 P$ A* L7 \  sample = input_sample(); // read L + R samples from ADC
# k0 T; P% ~% Y1 y8 }* Z. x  output_sample(sample);   // write L + R samples to DAC
6 Q, y, d4 H7 s/ J* O  return;5 f4 [8 ~6 \1 E  L/ j
}
7 h7 G. V1 w, v# M! m2 A3 y
1 ?* ^! v5 n, _+ x& _! b( Lint main( void )
6 g* j& v3 u" R' a{
" y/ v5 I: [$ I: Z* \6 f) b/ B+ N
! g6 o. E& O7 H2 w4 C    /* Initialize BSL */
  g6 j$ ^% Z% z8 z& h" ]    EVMC6747_init( );
5 h! g& ]. Y' j3 Q4 ^4 I        /* Call evmc6747_intr function */
1 I) M) M  y* L6 a+ f% @9 N    aic3106_init( );+ ^' V- _5 s& Y; k2 ~# o, f4 n& d
        while(1);; T, @, O  |1 p5 W
}
; Z5 Z$ k) T1 {; [  b  B- s# f
! [* P5 ^) t9 \! k8 Q4 B$ @3 d5 @3 s% M$ E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ K  l" D! W6 D& Q: D2 o/* Initialize MCASP1 */9 o  d/ y# h: u: M0 S7 s$ k
    mcasp = &MCASP_MODULE_1;3 I& _- O7 _0 @! y' p2 F! N8 A# E
    mcasp->regs->GBLCTL  = 0;       // Reset. I4 `3 q% H0 r9 H* n/ N
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- x# }( u% T/ [, Q    mcasp->regs->XGBLCTL = 0;       // Reset TX: D# [& j6 ~; Z! f8 b$ u
    mcasp->regs->PWRDEMU = 1;       // Free-running0 @7 ]: A" B6 p6 b
   // configure McASP0 receive registers
% [5 X2 D. X& E2 m* @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ X- g& r7 V1 s2 Q+ E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: Y8 {; h! T  e    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* L' g/ z3 S2 B7 j" j1 S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 A+ X. G' q( |& b& \6 \6 \, {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% W" n" T0 g$ k" A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  R" G" n0 j5 q) R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 |6 U/ x+ F) m0 Z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ A! R( t* b% F+ W! B0 Q1 l3 C5 |5 W6 q* k% j8 M4 m
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- a- i& o3 |8 C3 y0 R* e% C
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 r" M4 V  ]( q: c' k) [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 |3 U+ H6 w- O- B& t- Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) s1 p  R% |1 C( q' h
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ z9 r1 r/ Q% D" v- d% r- J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 C  A2 Q" p5 y! R1 Q4 s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ I# i" A- _- ?) K( y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 e% E/ E3 |& b3 v
$ z" _$ _( H, F' v+ V
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ V4 ]+ p' Z* l
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 E: \3 A  e, o, @8 z# ?; e# _
    mcasp->regs->PFUNC      = 0;          // All MCASPs6 ?% S: p2 x9 N( s" _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 i: p+ ]7 |6 ?  [7 `/ A& N. T5 r& L' d# I/ z7 F  v
    mcasp->regs->DITCTL     = 0x00000000; // Not used- n$ S5 ~. E2 G! \2 e% z: o( d  ?
    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ `& }* h' L( {: X7 s% ~
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ v" l7 a; G0 N' [
& H9 j) x# b( w+ r/* Starting sections of the McASP*/
, e8 k  _0 u) C5 c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 i0 {6 b* [: J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! u, J: d  {$ o    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- d- e/ U# d3 n8 t; B6 v0 m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 A4 U6 ?" F, Q4 W
1 x5 J* t+ ^" j3 k( I# O( K
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! L: n' K/ a6 h! o' K, d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. Q% A2 c4 g7 `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# C/ {! s0 V0 Z" S  h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# o1 \  R* a4 a8 d1 i9 I* S% D- m6 h/ k7 i
    mcasp->regs->XSTAT = 0x0000ffff;
1 n: z! H- G2 @& }    mcasp->regs->RSTAT = 0x0000ffff;
7 D& I# M9 k& \/ X9 Q) f! o* i" k( z6 \+ ^. C9 x' W+ F/ G# O( L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 n& v( l/ M0 s" |1 ^* @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 K& @5 O( U# F7 _! o) J2 @% F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% r/ H: a0 S+ P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 \6 g9 c# ~6 j: t, a2 |9 y& B' e" t7 Y! I) t! O
    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 \* e0 [: }" C2 r) f) ]& `  j    mcasp->regs->XBUF5 = 0;: E9 d' i* [. b( p7 s
    mcasp->regs->RBUF0 = 0;6 O5 P, A  g3 D. _
4 B! f' k: ]1 `3 C$ g
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 }+ }, x3 |& x2 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 [8 q& m+ C4 G8 X) H5 _( O: L! h/ y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / p* b8 q$ [  G' z8 s- I& K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% l  l* j7 A5 p; g* @
5 `3 a/ \3 t: Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( a1 b1 `, n* B4 q5 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 O1 @# N# n3 Q' E( y$ K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 x% d. C9 W2 B$ v) u* [9 N: z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 v" i( x5 h1 C( f2 ?

2 M0 P0 F, [2 ?  g7 |    CSR = 0x0000;
4 Q' r5 a" X- h' t3 P# v    INTC_INTMUX1 = 0x3d;
) D+ Y7 e, u) b( @" S, n    ISTP = (unsigned int)vectors;
5 M% \6 d9 ]4 h* H) u+ j6 x! F    ICR = 0xFFF0;  
/ ^, F5 ?. ~  f# L    IER |= 0x12;  
' O8 Q7 W/ l! X& V# N8 A: R    CSR |= 0x01;  # u0 b" h# W, s$ z: l+ K- A% j8 Z

8 F' R, X2 C( b  ?4 ^5 R' j$ k# _5 t0 G' x6 u1 m) g

$ W  E7 S& J5 J* X5 C还有就是两个输入输出函数:& ]+ N9 D+ l7 C; `3 ~* j
void output_sample(Int32 out_data)
" F+ T4 Y9 }* Q  b9 m- ?{
9 ]4 ~$ J8 [) X4 }& [1 T6 j  y2 C/ u9 M  AIC31_data.uint = out_data;  - W& l8 p; S8 N) f) ^
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" }' P  K! }7 [: p2 s  J; U6 g}# g# m$ X  z) c4 L

; s+ B4 B7 @' |/ TInt32 input_sample(void)
9 R# M5 y; h) r/ a" q0 b' `{  
# }: Z  e( x6 P0 e) h  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" h: t: u* F* `) s2 z  return (AIC31_data.uint);- V" z. ?  e$ h0 v! g- g6 {% c
}5 h" T* w$ u+ `9 S$ _# S9 |# A' C

7 j) l$ A0 W' n/ v
分享到:  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-22 03:08 , Processed in 0.041004 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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