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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 n; E7 }& a1 [4 M! n  T) \4 a  z1 jmain文件:
, U5 X. |* _( {interrupt void interrupt4(void)  
' s, ?' r1 x* \9 z* e3 e{4 v- _" g, _1 U
  Uint32 sample;
) ^' F' i( f0 i+ z9 v& y+ X* S( I& ~$ b
  sample = input_sample(); // read L + R samples from ADC
% x( U# e0 _7 [+ P6 p8 K# G  output_sample(sample);   // write L + R samples to DAC
% y1 I  j2 {. D& q# p  return;& _+ n2 T/ B" A0 G+ l! P2 n
}
3 P) ]% j) _/ w/ s( x
& o& C3 E+ z1 S% `, ]" E# a  f2 ^int main( void )
+ N/ C) h! @- v! ^5 f# A{
) Y: F( E4 Q; h8 c1 |$ h  r
+ N7 ?2 m. t' @( K8 w, F    /* Initialize BSL */) [5 i) i  j% }9 w* `& j
    EVMC6747_init( );$ W5 ~' d$ y( \- W, J
        /* Call evmc6747_intr function */8 X/ d0 Z! V2 M+ y  T, F
    aic3106_init( );
7 S& j8 l: S# j5 a        while(1);( i) p& F+ O% T
}3 m5 V1 O  Z- O" Y+ I* {3 x
8 V  Z- e+ [# W' P0 l( P4 Y

0 \" \3 V1 s4 z; v8 g% M: [; V6 q5 [aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# {; f# W  g, t! W5 J
/* Initialize MCASP1 */
; F  T2 Z) w5 ]! J' F/ l    mcasp = &MCASP_MODULE_1;
1 J  e3 Z2 b1 H  j5 v2 p7 g8 o    mcasp->regs->GBLCTL  = 0;       // Reset; H- z- N" l& m; L7 V* _* k
    mcasp->regs->RGBLCTL = 0;       // Reset RX+ P0 a7 S8 K5 g  n# }2 p+ F" H
    mcasp->regs->XGBLCTL = 0;       // Reset TX" U( P$ Q* b' t2 P! c- h2 V
    mcasp->regs->PWRDEMU = 1;       // Free-running! h& c3 {) j1 F
   // configure McASP0 receive registers
8 @! u8 d6 U5 ^5 O4 M/ J5 h9 R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! }# M; }- o0 f( m
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. R7 J, c. Q, }* |: ^9 j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 ^6 t6 x) K! `( _
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 U) [6 N5 K3 T% i    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; y3 ^6 j6 J! g. @  Y% {4 P, ]% ?& O    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# e* ]! i8 c" m2 @6 C( W7 j" ?: B, [6 D
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: q, [  n7 d2 I* [4 q  {4 t    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, i4 X% u- {# ^/ V
6 b9 F9 [% a9 m1 e$ i
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ C+ z4 x5 ]% p/ x- Z) n* {    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, g( A3 _& Z8 e    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 d  U' P& b4 G, G8 _/ X
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. w) S8 q" R  }    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# h3 L7 {& R) g! X    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 q' s1 R6 I0 k! w. v
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# k* b4 f- z# y1 A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. l, B- A4 j. V5 Q, P# ?4 L9 G+ l
3 t+ y9 i  h0 Z: N. e$ I6 {    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, t4 {: F0 `1 d    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, S4 Y: @6 v$ U! B' q( T5 r; M$ n    mcasp->regs->PFUNC      = 0;          // All MCASPs
" @3 Z. X2 W: }+ u/ p1 H3 J: I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& q4 m% p. X  k' t" f" C

8 U' i# _; M7 S' E  b/ a# @4 b, c    mcasp->regs->DITCTL     = 0x00000000; // Not used$ Z% D/ |0 O* ]3 \9 S0 w) ^8 Q+ E7 h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 c  U( w* B- J4 f  S    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 r( M  ^1 [0 U9 @1 p/ ~* ?+ z: `
/* Starting sections of the McASP*/" B+ k$ Z# u4 T3 d1 \0 W  c
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - ^8 {# H( U! [# d: R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " L" X$ x) Z0 k/ u0 n
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 \' s: @# a$ |. K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: v' [! x9 g! Q2 Y: e& h* i& E: e% s3 O" U" ~3 l1 \3 c
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* ^# l1 u% g8 I( }5 j- [! {- `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, G5 c& J) d: A+ J3 H9 z0 E6 i2 h) {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" [8 I7 |/ u5 O3 I7 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 G2 k6 a% L& Z) \! Z3 \, I
( E6 C. a6 k; X8 a6 j, u    mcasp->regs->XSTAT = 0x0000ffff;
/ K. u0 c! d# Q    mcasp->regs->RSTAT = 0x0000ffff;
, q2 b: t' u) v$ C6 ^
. K& m+ e. m3 n    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, E" c* w1 `# @% \: D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; l2 ^3 ^& L) c  j) P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ V( h( A+ g4 E. g- I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 D. h/ F! k' I. f
% d# U$ q7 }5 w  Y2 C9 p+ E4 e    /* Write a 0, so that no underrun occurs after releasing the state machine */
- F  d. X- _6 E    mcasp->regs->XBUF5 = 0;
! Y; O& Y. s- X( J' t: w) h5 W/ a    mcasp->regs->RBUF0 = 0;7 l' w4 n9 k8 K  x4 H
: j! h" E( h. ?$ p; l
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) H6 T4 z3 U3 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! ]3 q9 v9 E! S5 V: k5 C( f
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & r- @. Z# |" @& \! _- o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' d+ C# N' T; k* Z, c' L$ `2 D6 Z. P( [, J1 {3 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 t9 T4 D* ~! F; `% u/ ]7 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; h* Q0 O* J5 p8 x& l% K/ o6 f8 J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 I+ j( u' e! V( f  ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 I# u( I" _- F

2 `& i, E3 j. v7 M# Q    CSR = 0x0000;/ ~0 |  w7 b6 `; @! P/ ^
    INTC_INTMUX1 = 0x3d;
2 J- K* _9 N* u# a    ISTP = (unsigned int)vectors;7 D  j8 b$ h% R. i' y# T1 b
    ICR = 0xFFF0;  - k. a2 }7 t( f
    IER |= 0x12;  # g; [$ l/ ~. O5 ?
    CSR |= 0x01;    d/ a" v2 w+ x' C& a
: \" Y- ~) e! f: b

! m* x) _* `& k3 o! z4 H" ^  f7 s5 C- D) }5 V5 O, @
还有就是两个输入输出函数:0 ?" m/ x1 N5 l/ P
void output_sample(Int32 out_data)/ l" I$ F9 A! @1 L4 _9 E3 R, l
{! U" @9 v0 M6 C/ g' j  {9 M
  AIC31_data.uint = out_data;  
5 M; o% T( ~- v5 H4 v! k9 W  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, r' g( v0 X1 G2 d8 p}4 P$ e$ m: R  A1 E
% h1 N  t; R( q1 c/ b
Int32 input_sample(void)& ]  ]- d/ V! L* h
{  9 }* h% o& x0 d  c" h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 w- Z7 O# e! k/ Q' j) [
  return (AIC31_data.uint);
/ m) W& f8 y# I7 x& M  v8 |: v- g}
# A) ~2 n7 j# n& Z6 e$ C! a+ N; n+ N* Z6 B% J
分享到:  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-1-24 16:20 , Processed in 0.040306 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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