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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 }* o+ Q; A2 X3 X% Nmain文件:% X' |3 ^+ l1 k8 Y$ c/ W- B. \
interrupt void interrupt4(void)  
& R7 ~/ l) j! F6 E{4 Y) v/ r) w% u
  Uint32 sample;7 J& G# x4 D7 t/ F9 E9 a

+ b) `5 ^$ v) M* f& [2 @7 u+ e  sample = input_sample(); // read L + R samples from ADC
8 c8 U, e+ I1 K  output_sample(sample);   // write L + R samples to DAC % |# ?& _  W/ j" O: U% Q# {1 R
  return;) B+ r, Q7 N, ?) Y8 w- f% K
}
. k% z& a/ L: M0 `8 O- m) v# n/ o+ W$ v1 {! c1 L3 N
int main( void )
$ ^( `9 M) D5 B7 P{% u! j- E6 E! A3 l, P

! p2 u1 }' K. y* H; ^    /* Initialize BSL */. r7 Q/ R' q# \$ @! ~; W' s6 H
    EVMC6747_init( );
5 I8 P1 G( `. J6 r5 r        /* Call evmc6747_intr function */5 S2 I% X8 l' g9 B- m, t
    aic3106_init( );1 J4 ~5 N% L3 J! b! h
        while(1);9 e% U6 h# p8 Y  f
}
5 L$ l/ V- Y# N
6 f! f$ Y5 U7 p) r0 Q
6 P, u) z4 r) p& y( e& i' paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ v+ a( k8 Q  S3 {1 b! A' B. W/* Initialize MCASP1 */) c- o7 |" D  U+ N1 W5 Y6 C8 [
    mcasp = &MCASP_MODULE_1;) W3 u* m8 b; F$ G. z. L8 u1 O
    mcasp->regs->GBLCTL  = 0;       // Reset3 E# [5 d) Q" v' t' g
    mcasp->regs->RGBLCTL = 0;       // Reset RX' i' \5 O  ]; [, z
    mcasp->regs->XGBLCTL = 0;       // Reset TX. ~3 G/ w" s/ J& K' o; L
    mcasp->regs->PWRDEMU = 1;       // Free-running- j5 Q/ y$ k. B( |& I5 H( s% b& J$ v
   // configure McASP0 receive registers
. f" o3 C7 G$ J/ X2 o2 R' n& X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 `% I: f, Q. D6 d
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ @* y( i, Q+ W7 ~* ~9 v1 B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* M) b# }, e* l6 W# y9 U' n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! k7 [. _) G# i9 ^- A$ e' b7 ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 F) ~3 Z+ J/ S. F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ y  X. J# c4 T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 Z1 ~! L# [2 `3 n/ k+ P& |- v    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  a9 l' o" Q: y( F7 ^% a1 y
* T1 p1 Q! `: M; N
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ E" P- c, A" X0 c. |7 Y/ r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 P( C8 [: t2 u8 I) ]  H" y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 E; x5 l8 d! c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& \) {' Y3 s% h7 |! E' B  I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  h5 i9 u! q0 E) m. V* [
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! P1 z1 X+ H' F% y4 S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' w3 S$ X( {' }+ n. i: @% [    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ F% |& f( m% Q3 j% h. K8 l! ]" P6 K' k/ J5 F
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 \6 X" k/ |" `$ q9 v
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 S% S) C$ L* U% t6 B# |# Z6 g
    mcasp->regs->PFUNC      = 0;          // All MCASPs$ n2 T4 M+ e# ^  l& J; Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 d# |7 F/ j* d6 l; j/ A4 F- H" Z
: l7 p% N  y: W* I' h# W    mcasp->regs->DITCTL     = 0x00000000; // Not used, x$ u# O" [: ?4 u$ h7 K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& J) Q+ M7 S+ F! a7 L    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ \! t+ e8 i8 O/ |
. v% c! w. O( X( T' e' U/* Starting sections of the McASP*/
2 K9 i  ~4 k( |: N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! o: B7 I3 g" `+ \, ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 v: P) `* {8 J" e5 A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ s( A! x7 H' D; U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% f- m4 y8 w) H4 |. K9 f6 o

/ E* E1 M* B$ s* l    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 P( s  f8 }+ `' V& b* I+ X6 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: f0 u3 e) K% y$ P% r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' p5 U! B' i. W* j5 ~2 ?/ X1 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 v, f1 e4 P3 z: m' V9 s: q
# ~, }! D9 p" F3 j/ M2 B+ r
    mcasp->regs->XSTAT = 0x0000ffff; ! ^+ U& `" r8 g
    mcasp->regs->RSTAT = 0x0000ffff;
  R5 [# o  x2 A, l8 g2 i; K( [' w# v, T5 _1 E5 J; A. A; G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; u  \# C$ k- M8 ?5 s1 g" n6 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# [+ E  `. }) e; L1 U
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 S5 S; w4 T( k! C+ z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 t" p  e# ?- |* d
$ n& }/ e/ ~" d7 h; D    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 O; T  ^! B* L    mcasp->regs->XBUF5 = 0;
6 e9 T2 U4 e; E0 b" s9 ?' t5 J6 d    mcasp->regs->RBUF0 = 0;
. W+ G3 F5 q' ^! \7 i  L4 }+ Y% ~( P& W3 U4 ]7 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; w0 @. L. R8 i; x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 s5 p. x0 k2 }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # i0 k6 ~1 Z5 ?4 J  S7 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ @$ ?: l% o1 O, f+ W( D% {; ]6 g& N8 w3 m5 G6 a: n
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, Z7 ?' E0 `$ R; `: S* h& ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 i. i' |3 U2 W: f  i    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 @3 `) H3 q! o* ]* b# T% n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 M" l4 v3 k* Q$ @
2 M" s$ D& w2 o
    CSR = 0x0000;
( `+ r: B" I3 D' w" {% S* N. Q* ]    INTC_INTMUX1 = 0x3d;
* p& K& y! R9 Y/ O8 {    ISTP = (unsigned int)vectors;
  c& u; q! B5 t" e9 H5 ]    ICR = 0xFFF0;  
3 b. g1 ?4 l8 ]9 {/ L& l# R    IER |= 0x12;  
  P/ W4 W. h& j/ W, k2 y" ?    CSR |= 0x01;  0 q3 b$ r, E% U1 R  e6 V3 b

" X+ D" A& a5 J& S1 O* Q; w; N8 ~$ M. G' i& d* T) S" V

, i) L( i4 {; s' D* W还有就是两个输入输出函数:  m2 N6 a4 z9 ~4 `! h4 m$ m
void output_sample(Int32 out_data)( {8 q* S- r1 M$ J& r
{  @: ~7 T) m+ m0 r) b
  AIC31_data.uint = out_data;  5 o/ R8 f2 E* T
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' {6 r  \$ z1 h. z) E/ ?
}: M7 _! h7 t( s2 n

' u3 S5 f( S' j8 f! IInt32 input_sample(void)+ L. Q  p! I7 ~) _# Y
{  1 t* O( a. Q! u0 O9 _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* l+ n% j" r4 }8 J: d+ q6 P  return (AIC31_data.uint);) ~$ t6 V) Q/ a! f
}
7 b' {6 K& i; `4 Z" G: @5 |* y6 m3 _0 b* F
分享到:  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-10 15:56 , Processed in 0.041312 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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