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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 u/ c2 x9 q* Q  H' B6 T
main文件:  m! V2 @2 Q+ I
interrupt void interrupt4(void)  . {$ y- I4 ]9 z3 Q0 T: z# [* U
{
6 w, r2 f9 n- x1 w8 h  Uint32 sample;7 d* E& p# I8 B, M; f) l
+ R& J# v! a- U
  sample = input_sample(); // read L + R samples from ADC( F( @) v* B& p* ^8 X4 V. X
  output_sample(sample);   // write L + R samples to DAC
3 B7 }0 B! ]) M3 g7 E  return;
  y6 |* Q  _% G* i+ [$ W}
/ n% l0 d: H& V) z0 U9 I8 ]1 b: y
/ P; `8 Q3 u7 X; cint main( void )
6 J# K0 D" e+ r0 x7 o{/ ^8 f% N. Y0 R" O

, ~& W4 v! f. z7 ]    /* Initialize BSL */
0 D: L# d8 `7 T' M9 [  U/ Z$ M    EVMC6747_init( );
& x$ D3 G; O" R3 V9 d8 @        /* Call evmc6747_intr function */
! c- l; o- d) `6 O5 U    aic3106_init( );+ Y0 s; A  O& g- |
        while(1);
0 ~! M+ P6 ?1 N( X5 a/ j# y}
- Y, T# u& f) |" ?/ U& \: M5 A0 \( ?2 h/ n8 A3 }

6 S. I: C* Z$ o; @* g# Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 N- X% h3 g) H3 z6 T8 H
/* Initialize MCASP1 */7 {$ ]$ l2 G: ^8 ?
    mcasp = &MCASP_MODULE_1;/ A/ o7 c" R. M7 i0 A" ^( T6 F
    mcasp->regs->GBLCTL  = 0;       // Reset
2 o- b- z# b! s- x. M; m! u4 r    mcasp->regs->RGBLCTL = 0;       // Reset RX
- D* ^" Y! ]- p, M; s* M    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 y/ ]5 K- e% e, }    mcasp->regs->PWRDEMU = 1;       // Free-running* i9 F9 I/ P- D
   // configure McASP0 receive registers
6 N) n7 B: a; S- j" E' q4 d: X$ |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  E0 ^" Y/ i' E) W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% O6 U$ l% b: R+ r6 C' n  V    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# M# g$ I, ^- D2 r    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 n! d$ I/ @: R$ b# l6 s( Y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): y( N# W3 Q, L0 Z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ h$ z6 a" L% ?" V    mcasp->regs->RINTCTL    = 0x00000000; // Not used' V' L0 m* c& i  @7 J2 ?% e0 N
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ q4 N' |, g+ m1 b5 Q& ]3 t
  J7 I4 p# W* J1 k
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 i" R7 j; k9 c    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 w4 l" x4 k  P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 }! D& J) I. i3 V* f! g$ I    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) ^3 Z) }( N! K. ^
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! ^- `2 g" ]  _5 ~, q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 V5 z- ]% t& \# }# O# U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 X% i# F( K+ p: H( s( f9 ]
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& f" X. C8 W8 C5 R8 ~: v
# Y1 O7 q) t& T
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: K; O! d; y- u2 V: ]1 r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 M6 B9 s: ?" I% B5 G    mcasp->regs->PFUNC      = 0;          // All MCASPs
( |, {/ f  j7 t& E    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! h4 D" t( S8 S4 k

$ Z- Y; Z& h5 b    mcasp->regs->DITCTL     = 0x00000000; // Not used( Y9 ]7 o" {- E8 {  S( P* s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# F- R2 s* @; C, L' i1 J    mcasp->regs->AMUTE      = 0x00000000; // Not used! m* i; c" w6 E/ A* f% Q  l

9 l8 e8 ]& @1 t3 W( u) ~/* Starting sections of the McASP*/& h9 W$ O$ |8 [  k  t( h& C
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 B1 p, ~& ~8 x5 |3 t* I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & w! }/ j1 d4 }* C1 f+ ?
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 ~1 J1 k/ @  `/ W6 Y- k, A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& m8 Q/ C' ^" t3 o' Z, x$ R' D4 Y0 o- U+ w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 T5 ^* L( T5 \# N0 @  H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. ^7 J  E1 B# r4 i/ F; n5 x    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( A1 {4 Y) w' ]& H. e7 E9 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! S% a7 P* F6 g9 e: ~: F5 L4 O$ h' s! z, e% S1 _8 q
    mcasp->regs->XSTAT = 0x0000ffff; : ~# T+ _) T% _- `. t/ f: k+ d) F
    mcasp->regs->RSTAT = 0x0000ffff;
$ z$ o. ]4 B9 n: @+ S2 o5 K$ E% z* r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' }" M+ ]3 q, Z8 r2 L6 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! w1 j( T! v0 d/ ~4 E0 t0 h0 D# X7 y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 m% M! T+ L9 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* }$ Y" K1 u+ r% I$ W1 x" @5 j( V2 x' h
    /* Write a 0, so that no underrun occurs after releasing the state machine */
: R# c- C4 O+ h3 u$ _    mcasp->regs->XBUF5 = 0;
. F; B( p+ y$ \3 O8 R    mcasp->regs->RBUF0 = 0;
3 g5 B9 a5 V! ^! S* k3 o* K2 t( X" |- f" d4 Z$ O
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 s6 o0 ?9 B* t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ |; w" z) ]6 N6 w
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( J/ ?* K: Q% I3 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 i9 t5 h& L- f6 w4 j8 N1 e# y
6 e0 l- n- r0 P, L4 N2 ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 v/ T3 Z) f# g8 ^! o, ^: _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; c( W- Z0 v" l4 M# y/ z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 S. E6 Y: H2 y! H  @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 [4 ]& ^* Z5 K& o% D9 Q

1 C) i4 i. E6 _* h+ x    CSR = 0x0000;0 u, ?: E% y/ P1 L2 P' x" _
    INTC_INTMUX1 = 0x3d;/ M6 W, e4 d7 e
    ISTP = (unsigned int)vectors;
2 D* p" @" @+ n6 ^! P    ICR = 0xFFF0;  4 _) B- n4 ]. N# r4 z
    IER |= 0x12;  ( Y! `& O7 }( v3 W
    CSR |= 0x01;  
6 F2 F5 y, v7 e5 ~1 L. L' [
& b& u% E6 E  o. W* q0 T) N% v' t0 X3 H

  r2 e+ E5 _+ Z- F' S% f" X* H还有就是两个输入输出函数:
4 l1 M' n! T8 ?! ^5 }$ O7 Uvoid output_sample(Int32 out_data)3 x. ~) a0 ]; V
{0 K$ E5 `! z% d; `6 }# e! i, h
  AIC31_data.uint = out_data;  3 w7 F& J! c  @; L
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; e: M' W, i( H2 B$ W+ Z& C}
0 F" T! P: h0 o$ r
0 ^7 b! U9 \: }Int32 input_sample(void)# M/ S: B6 R" C7 j1 P
{  ! Y8 P! t+ Q6 q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 W3 `0 ~9 x5 F( f9 f
  return (AIC31_data.uint);5 H: Q2 f1 w9 k: W3 `4 u, P
}* V6 E3 g7 Q; F. z1 ~0 B/ l
  o. v$ \  E. b# r! 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, 2026-3-26 15:46 , Processed in 0.040492 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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