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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* l+ Y* }- W5 J. `, Z
main文件:
4 v% D2 O& e) B3 A3 sinterrupt void interrupt4(void)  2 [6 O( v( a+ z7 [4 q! R# @& D! a2 h
{
8 v* U5 G- Y1 P' r6 W6 o  Uint32 sample;7 W$ T( o; p, i( t# u3 {& H6 Q( F* W

* f" v' a# g' y. I, I" V6 V  sample = input_sample(); // read L + R samples from ADC
* B  K0 L( v: M) Z; ^: _+ E# |: h* s# S  output_sample(sample);   // write L + R samples to DAC
* |& D* t0 `! X9 ~- g  return;/ J7 c7 v( c7 t/ r- X
}
8 D. e" u5 I4 f, y7 W
' V4 R2 B: C8 H) }  ~; `int main( void ), r0 I) q( d$ d) J2 c6 i$ k
{6 F7 X8 O7 B1 L' |! s) b, n

4 X. ?, H- Z6 k. L0 Z& z+ \; e' `* A" S9 y    /* Initialize BSL */  F9 t& R' t, h5 O* f' j8 f% u! ?% D
    EVMC6747_init( );6 `' l1 e9 N" M0 E. f
        /* Call evmc6747_intr function */
: I( i! e5 W2 H6 K    aic3106_init( );
) @! f: V1 L8 Q7 [+ m+ x0 \        while(1);. ~4 A4 W4 Y3 M/ j  v% p
}
  K6 q  Z6 v- C4 N, K( b- X1 G
) v7 _: ?" ?2 J) D7 x
* k2 L# E$ D( N0 }0 |) i9 m2 V$ uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 K1 X7 k+ q3 b; Q/* Initialize MCASP1 *// F. \. s3 d4 u: O* x
    mcasp = &MCASP_MODULE_1;5 Y) u6 f$ f, ]: p
    mcasp->regs->GBLCTL  = 0;       // Reset9 N( w) ~# y  I6 {9 A
    mcasp->regs->RGBLCTL = 0;       // Reset RX/ j1 c3 g; T" N; e$ h, w
    mcasp->regs->XGBLCTL = 0;       // Reset TX; o* _+ |  S4 W
    mcasp->regs->PWRDEMU = 1;       // Free-running  c5 \, x+ d0 E( J0 k
   // configure McASP0 receive registers6 z. q/ R; o" Q5 {+ [3 G0 Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: U7 ^3 X! k/ X  ]4 S  X    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 D  K2 g( |/ v1 P' C) G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ c' @' l& f$ r! ?; z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ d0 Q) J8 `  F/ o" v, r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 `5 ~  M1 b3 ^+ q- A% ~2 A. I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' J2 e1 E; y+ _0 _$ t: i4 s9 P    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 E- E- ?* e8 o% \+ {; J    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 Z7 X2 ?& M9 K% z) @1 J9 R! E% X7 x, `  k$ q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 V) r/ ~' g2 k& O
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ s! g( {1 t. G% A
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" k8 n7 z$ T- g  Q% K) I    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* z# H- I7 ?& i9 c7 Y. m
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 C2 w, l' u$ b: ?* r; l- M* w6 t$ s
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- V& a  }7 O* W9 ]: Y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! D) _3 X) _/ k7 [& ^
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  j+ t% ~3 O+ J& O
+ [& ~! Y2 O! y/ h! N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( F! E" p( Z, q% }5 ]+ N- a* G+ c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: G/ L1 V5 J3 q+ N+ e
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ P" a+ k, i$ ^    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ ^/ U8 {* I- R* x2 x  T" `; G4 i8 w. p  Y8 o1 L
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ p; ]; O/ q' |; P/ h3 x6 }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& f# G* \+ [/ m4 S
    mcasp->regs->AMUTE      = 0x00000000; // Not used& Z; G$ B* \3 ^) p4 t
) \! V* w8 Q: f
/* Starting sections of the McASP*/' }0 r/ y6 ~  h: I9 N3 m9 {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 w& {& C; g- b: t! P- D6 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  W! z) L! @4 {  G& z1 C& @    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 }; z) g! e& S* e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- E' N7 s/ m" R/ M3 f7 z, N& s2 ]( R) z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " g. d$ e( V# Y4 T1 t7 L* h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: T3 s* P; l: X2 l, k/ y( r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 i; \$ k; Q0 a1 V. i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 V+ Q& ?' H7 `- f$ x7 S( \- V+ g5 ~
: }  F$ B3 H) f' P$ E: Z# N' z    mcasp->regs->XSTAT = 0x0000ffff; ( h  b5 [2 h  V/ b
    mcasp->regs->RSTAT = 0x0000ffff;
- M3 m: V( O1 O7 u3 D2 ]  U/ r" p% K3 v$ _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ y3 Q" Y) `6 Q/ D, ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ E2 N0 }/ Z: F4 T1 Q: ~* `
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 t! Y( \  V" x7 R8 t4 \) U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: `) {- O6 c* ^
$ T( V1 t. y* z; |' V; Q    /* Write a 0, so that no underrun occurs after releasing the state machine */9 V; w4 u- c7 U6 m
    mcasp->regs->XBUF5 = 0;0 `7 u+ M. `( b  a. w0 Y/ E, W
    mcasp->regs->RBUF0 = 0;. V2 K: E. B5 C9 h

, ?9 @: y& J" A& G    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( j  U& e- N" s/ n* F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% i4 ?3 e" p7 q/ H5 p' ^    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. ^5 r- H, R4 s9 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# S( z5 d, |$ Y/ l9 |
5 z- b4 }1 u" N) s0 Z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' b3 Z' ]4 L8 U  q3 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 Q, X' @* ~5 a) u4 r  r* T( o0 c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) K. p; E8 u( [, I, P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* A- a  ^# u2 a" n! ~  B1 n! F9 z
9 E& a9 @- V  o8 T
    CSR = 0x0000;/ G' i9 e) q$ U4 C' S6 ]$ N4 q4 a
    INTC_INTMUX1 = 0x3d;2 N. j' p! ~: Q7 C; L( @
    ISTP = (unsigned int)vectors;
0 P4 i: C8 W" Z1 [3 B) J  p7 J/ o    ICR = 0xFFF0;  - h% [0 B( b/ e9 ]- A7 Z
    IER |= 0x12;  $ k2 T$ Y. m$ O! E7 G
    CSR |= 0x01;  , G5 N5 t4 m; M6 s
# P# M( g" K9 _; x3 V+ a

& O- W1 s- z; U# K0 t3 s+ z+ K' w0 [  Q% T* C. K
还有就是两个输入输出函数:
& t( e0 ^/ L3 O0 b! t1 {0 tvoid output_sample(Int32 out_data)
; O5 O* \" t( k0 ~6 E2 y) v{. v0 f9 r1 w  ?$ h' ]3 ?% L
  AIC31_data.uint = out_data;  : Z. l* y: l! C. K8 v1 @; S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 f2 q' T: D6 `9 d* D3 p( y# G3 r3 [}
3 N# E% r" S. j: F+ j$ E9 S1 i9 y! W9 k8 [/ X
Int32 input_sample(void)+ Z  Z- X% E) n. s) Y+ f
{  
4 w; J0 @: B8 N( G. H5 |3 W" _  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ g1 W! V: f5 z! S8 B  return (AIC31_data.uint);
; G2 x8 Z$ h  ^9 j: U}/ z6 w) k, m& W1 H9 n( {' P4 h
6 l  o4 V, c8 V; V  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-11-18 22:45 , Processed in 0.039025 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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