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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& ~% ]( d, ]0 j% V: s4 C( rmain文件:9 p, G8 }, O7 R# _1 Z$ {: {0 t
interrupt void interrupt4(void)  , W2 p  Q0 d# w6 \
{  a: L2 s0 W; M5 p
  Uint32 sample;# r) n; ~) Z+ A( Y+ u2 U/ j9 L

2 e) A* N0 h, h0 H  sample = input_sample(); // read L + R samples from ADC6 _6 M. L6 R! F: a" D+ y/ U
  output_sample(sample);   // write L + R samples to DAC
( j5 Q- }1 L/ A% i% T  return;) X% T) v9 r/ Q) M8 r
}
& P& z! v- l" P4 X, K# H4 E; b" X+ T% `( M& o- X; b  d
int main( void )
$ u$ b: h8 ?, R! E! G% W% [6 K{+ L$ E! m- ^* j8 Z2 r) R$ \! \- K1 f
9 q; I# l3 l$ ^; a
    /* Initialize BSL */7 l6 R9 k- {. M: G
    EVMC6747_init( );, s: I* q1 H8 Y1 w" v
        /* Call evmc6747_intr function */" g) D) P0 a- ]
    aic3106_init( );
& v+ Q  V( E1 B! @, D) @* F+ G6 E        while(1);: p2 Q% J4 @9 r) |
}; F( X: |, _) z% Y# \0 ?4 v
0 Y4 P% g4 {: o2 J% X( O6 |/ v; J

# t' G; o4 O8 ]6 k& j3 {& n! S6 taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, h: b  r- H* Y/ i& a
/* Initialize MCASP1 */0 Y' l4 h' m( k( M' Q+ e* Y
    mcasp = &MCASP_MODULE_1;
$ [! ?0 f$ j! S( ^2 d: A    mcasp->regs->GBLCTL  = 0;       // Reset  r  f9 [; e* u$ C7 O; Z! v
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' A7 Q; l; h$ V6 N    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 O8 X) f" G% g9 R. X7 P    mcasp->regs->PWRDEMU = 1;       // Free-running
* j& b) p" P1 Q; ~) a   // configure McASP0 receive registers
5 F/ o+ [. a9 }& N3 ~7 C" T! `3 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' y/ F6 c  X( o) i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. i" }! T7 T* {/ v) P    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# R( t2 ^0 p3 p& e    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ x& \8 ~- u7 w4 z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 B) p* w3 N' j! |. R9 Z, n4 B    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- u+ \5 K. K9 `+ c. a6 p    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ C5 y1 L9 K! ?5 W/ y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 J1 t9 G# s' ]% z) F( C5 @9 g
, \. p8 r: a4 O7 p    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) A" z" h6 m* N% X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# b9 p8 b0 ]8 |5 h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  t; J; o1 k5 l. J9 w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 W' R3 }( ?+ l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 m0 ~# d( s+ B% g+ Q3 k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 l( [7 D& N& Q1 Q) G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" d2 i8 J4 g: n& a5 E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 i/ r, \! n6 _' d( U3 f6 |/ h+ o' {! @' i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) w3 A8 B- t; ]0 X7 K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; b& s9 Q  o2 R# n% }    mcasp->regs->PFUNC      = 0;          // All MCASPs
% u+ C2 j. k: A  {9 O9 s' W. \3 P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 c/ I, H  X5 t# }. f( f+ G9 r& a: x6 B6 y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ l6 {. x+ p+ _1 }1 ?9 T* h    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 a  J2 O4 h- V* b$ a! E) \; R3 A3 |    mcasp->regs->AMUTE      = 0x00000000; // Not used
% q! m) U& B5 N& N+ o; l5 L! ?9 Z: x% f, S8 o9 K6 q7 k
/* Starting sections of the McASP*/1 {) X1 h# p: ?5 ^6 [2 e; u
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; J' G* w* E8 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 Y' I3 W& t  B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, n8 j4 ~/ M7 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ ?4 A$ v% Q! _  D* R
% r. t3 ~4 t, D! A: W" L5 a- ?    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - x, B, o: v/ p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* x) X8 H/ h  ~+ X9 K$ i" r1 R; ?
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & N5 Q! x: r* o; c' i. s, J8 t' v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) a+ N, G; m1 o9 U0 P1 c. P# F  }7 ]1 w+ o9 V
    mcasp->regs->XSTAT = 0x0000ffff;
, }  o9 T; R7 ^4 h    mcasp->regs->RSTAT = 0x0000ffff; ) X! f0 ~  _" u3 E  c. S% W9 i( i
) U, r$ O9 I) }
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' B6 e% C6 ?& q9 j6 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ c8 c; F+ y7 m9 |- h5 ~1 R$ V3 _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! L: u* Q# N# o6 N) p+ D/ ?: r7 t# E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& N. p2 @9 f5 o( Q' h  P
& e5 w( e* d) a( y- w  @1 Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 H  {4 f- [; t6 B! C) `    mcasp->regs->XBUF5 = 0;& n7 ?( }5 p, \, _
    mcasp->regs->RBUF0 = 0;
( P' i+ Z3 R5 D- O3 {& Y8 }6 g* G# F: F& M3 X; f& L1 |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 X0 r- z% D. K" E4 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, X7 U5 W0 I  S1 I* z  ^, z0 s/ F  L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) Q5 P3 N! B* N" ?; ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" e4 V- D2 l2 q8 ]" r% C, r3 L
6 |  k3 j" K/ Z$ O+ n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . R7 S0 O0 i* {6 J# n- i# |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: ~4 g5 s! ^, P: K6 H5 L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" P( \3 z: Y) _; i( w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 @; U( J5 B, J% A: B+ M+ Q
: G  q/ S5 w- @* y3 }2 B. s
    CSR = 0x0000;5 R$ G, k+ P! V, Q* E' F
    INTC_INTMUX1 = 0x3d;$ J. g. V1 _: q5 k8 ]7 L
    ISTP = (unsigned int)vectors;
" a+ z& o6 U- s8 ?6 p+ V    ICR = 0xFFF0;  
7 F# E9 ~7 ?, h$ q' L; C( v9 B    IER |= 0x12;  : T$ ?9 e! J+ i) s5 d% _( w
    CSR |= 0x01;  
. h$ x: v' ^) U- ]. R
2 o* o; ]# P+ D7 w9 G/ a, |, {  X4 ]7 M. ?# y

/ ]7 W, l6 m& v- O2 G( S4 _还有就是两个输入输出函数:
2 Q0 y+ [* D0 Z! p+ b  Evoid output_sample(Int32 out_data)
/ y2 J  o+ ~8 l7 \! G0 g{
4 T1 n! T4 }7 Q6 h! r& q2 u  AIC31_data.uint = out_data;  * E0 U& `7 K8 D" k+ k/ u9 L
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 T$ r, d+ i$ v/ ^- j- S8 p}. x! z3 X+ Z2 |; @( C* S
1 q) w1 j# q7 r; l& H0 s4 d( o: C* y
Int32 input_sample(void); ?' ]3 w+ h4 {: d% R. ]
{  . s$ Y3 Z: B4 r% o, u) O: x" o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% B, y+ V* ?, B# Q# B! ^  return (AIC31_data.uint);% N! g6 K- z3 G7 i9 u- e
}
/ Z. C+ O* h& o) I, T' r- S
! A5 x& R# G) k7 V4 K
分享到:  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-2-23 03:43 , Processed in 0.041479 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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