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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ i' K: ~7 `# w" K* s8 Emain文件:2 `) g. E: n3 B
interrupt void interrupt4(void)  
$ C! o+ M: ?6 [{
+ X# o' H6 }& l, U* H& h  Uint32 sample;. v& j9 C# e3 G' m5 E

8 n! B) L2 c  G1 `  sample = input_sample(); // read L + R samples from ADC
; u0 Z+ e$ j, Y& D; P6 {  output_sample(sample);   // write L + R samples to DAC
' I3 y; y; w; }+ `. B" Q  return;# F8 r: S( E4 t* I2 h2 V/ a
}
; X1 y; T$ A+ w7 N3 }+ x7 o& V! ]% e5 ~8 \2 r6 S* u: d
int main( void )4 ]8 P+ r4 R. \6 H7 a# B
{
3 T  k/ s  e! j' x# G# q% C
* j2 S0 }; e7 a. S    /* Initialize BSL */
! K/ H& l3 Z  n, ^6 s    EVMC6747_init( );
$ R2 Q7 g- g! t3 K        /* Call evmc6747_intr function */
/ ]8 I0 ?/ h* |    aic3106_init( );
% E/ }. V2 n9 j; i        while(1);
! [' _$ p: l* a% B$ R}
. g( {  t4 m& ^0 x0 i) V$ T2 {& \6 I& @; T$ v7 [9 x2 P
; A' y! ]# s' L+ S& [; K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 n8 P: A$ L) r+ T( b5 d( ~$ k/* Initialize MCASP1 */
. z. v' E- i" e" ?! u    mcasp = &MCASP_MODULE_1;( ^% i/ }; o' R& R
    mcasp->regs->GBLCTL  = 0;       // Reset
, I7 o. v+ o$ H1 W    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 p# U  g% E: E    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 L+ I/ ~4 V* N3 C% o    mcasp->regs->PWRDEMU = 1;       // Free-running7 T, R' @! n) f
   // configure McASP0 receive registers
: t* ]0 [9 d: h) a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 P" j! f( v+ Z3 @+ b    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, t7 L5 B% e5 x% o7 g& ]* ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 G: v& o  ?% D, [) _
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  f4 R9 G. J6 R6 w1 Z, e: e0 X" G    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: M3 g" t0 V1 [8 @3 |    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 n9 }2 J9 M6 E: S* ?! G3 |' q    mcasp->regs->RINTCTL    = 0x00000000; // Not used' x6 V9 Q+ K2 Y$ L4 F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 t/ `" s3 k4 o+ U5 S
4 o0 T0 l! V$ Y. e. k' r) W    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( p0 z+ s" h( \: G; Z( A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 {) b- o# J' h5 K: t5 z9 l+ @) S
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- l+ @, X5 |  l3 b/ p9 N5 U, x    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! n+ v1 B5 k  X% Y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% e/ u9 T) `6 J4 \  ]
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 j* s/ U# @8 {7 k) N5 a  K    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; y4 y/ L- {- l! H    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! ~! M9 q: t4 D& u
( Y( N) l& l* D5 s( f6 O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 K; k  q" y4 V- N  s- m) R1 n  s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. N4 b; e4 h9 z
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& w1 t" B, z# U# h  p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" H" e) V% B$ [  ^

" p; y; R' x" ?7 j3 K/ A  m2 v' S    mcasp->regs->DITCTL     = 0x00000000; // Not used
' ~; u: x# q# W; R) H0 x' s    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ X5 }$ c6 f" `
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 u( P* {# G5 W3 M
- Y+ O4 r& m% y! W( i9 L4 q! X5 e+ F
/* Starting sections of the McASP*/
/ w/ g3 Z: m1 ]  q) w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* g4 |3 G* m5 m8 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . ]* l9 h5 ^  V
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + u" J' i9 v( d* i+ d9 y, d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 G8 S* T( f) u# l. C

; e3 E- k" A( ^) z  T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) i1 \+ R# d9 S% ~1 i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! Z5 ]/ C7 _5 E( J# z- E- a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: H' t7 l7 v3 C* m& Y1 m( L# J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* ^, v5 S$ ]7 q; ]8 Z2 @% y
7 C, l- J7 Z0 w
    mcasp->regs->XSTAT = 0x0000ffff;
9 E6 x* Z. [7 A4 Z! e* E    mcasp->regs->RSTAT = 0x0000ffff;
- e7 Q: b" W3 D- i9 T: w- z$ e  i, x% [( ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 ^7 |, \7 M$ c: ]; P" V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 z( @) Q$ @' o5 s: r/ n
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 A7 d! ]: Z! D! v, j0 t$ [; Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) Q3 j7 Z- S$ ]( Y
5 K/ A& k  W, Y6 f9 |; `
    /* Write a 0, so that no underrun occurs after releasing the state machine */* E8 Z  p3 G0 i) x
    mcasp->regs->XBUF5 = 0;
$ U/ C9 l5 o2 H+ ~    mcasp->regs->RBUF0 = 0;0 Z  P9 r  ?  |8 n( e( X9 ]: Q5 D( O

& H! r1 I. Y( t2 R) M* D    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 _+ b! E: \, h7 z8 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' S! I3 [. }3 G- G) M% `6 c7 Z% {5 ?    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) _' x+ G3 R/ x8 n0 O. w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# p7 y# A( X3 e" B- y: c: L
# Q$ |  j7 ?+ s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* v9 B, K% J' ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; Z2 h; v3 i+ @6 n% p% G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; }0 v  \! I: _5 e; m2 o. P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% c+ @9 n% E1 k, e
& _" E. x, i0 O  d: I) `( l    CSR = 0x0000;
# z0 i9 T/ @* L+ ~" v8 |* Y1 {+ }& h    INTC_INTMUX1 = 0x3d;
; ?8 y9 p/ W! z! `" I    ISTP = (unsigned int)vectors;
5 a( V! n$ J- K- j+ S) x    ICR = 0xFFF0;  
  |* O3 Y: y( h4 q: o, _* s    IER |= 0x12;  5 D0 }& X$ o. m# q6 z2 j  L
    CSR |= 0x01;  8 T$ a. M3 `. k' k( I: h

' S8 I3 A# V3 |) Q1 \  @2 E3 L- K* Q. ?# \) L4 [
% J2 Y5 H& j4 W; O  r
还有就是两个输入输出函数:- K8 s1 _7 A& f" N( J' t3 a# g
void output_sample(Int32 out_data)
' B" x' I  W1 g$ J" k1 D& ^' k{
$ @+ v/ k/ X6 m# O; i  AIC31_data.uint = out_data;  $ p9 m, q0 r. O5 z; ?; c5 A: L1 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 e5 ]5 C9 @# d' k4 ?}; P7 `) z8 K+ A3 J- T' V1 ]5 L4 Q5 A7 @

: \5 x8 @* U; @! i* c) U' w0 ~Int32 input_sample(void)
7 }# X& Z: R0 E9 {{  
  e" Q0 D9 ~6 m0 }! Q  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 h4 g6 g. i) q) Z  return (AIC31_data.uint);
! u' Z7 L$ p; k) R7 m2 |}
$ M! ~& `5 V7 ?7 Z$ d. m7 K# E- y  @% Z# s. v: m7 c9 `2 {2 q. g, 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-10 18:55 , Processed in 0.038846 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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