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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( z, ^, V- R7 k1 A- C+ \# p& m4 M7 }
main文件:6 p& g( `# S$ L. G  U% a: B* f
interrupt void interrupt4(void)  ' G  G# m( s4 i3 D7 J7 S
{# `- X7 Z& k# L
  Uint32 sample;
# y  O6 v" a; w1 l
# q, L# X) g; W4 A: ?$ }$ z  sample = input_sample(); // read L + R samples from ADC) K# M: P2 e" J* g7 V, R5 A& ?
  output_sample(sample);   // write L + R samples to DAC
5 G8 v  D. L2 P& k  return;
2 N3 E0 l6 b* t  d/ L) R}
* ~( V( R$ B) ]2 Q; @& ^$ N( ^5 L" T: L$ E& [& ^4 \
int main( void )
$ R4 d7 ?" A! M  l% M0 Y/ \{
: Z4 f6 S/ A7 P, c2 p  y+ K+ u: @. T. U, s- S" p9 x2 _. Y
    /* Initialize BSL */
! p" Z/ Z; R" e; J    EVMC6747_init( );5 p0 v( w' R; N; Q, `+ ~
        /* Call evmc6747_intr function */8 m1 F- g6 m- t+ N
    aic3106_init( );- B# z- ~, K- W' ]
        while(1);, S5 i$ |3 Y  @- {, B& Z
}& `# x8 ]6 i. N" U- Q; F

4 j7 S1 b" P6 s
3 `$ C- C% g4 j. y3 S5 Z3 G. ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 a. @) A" `' r; I$ W/* Initialize MCASP1 */. g7 F  T/ `5 ?2 N+ N7 m8 _
    mcasp = &MCASP_MODULE_1;
$ t! Y/ `! c  z! A6 k, w2 Z    mcasp->regs->GBLCTL  = 0;       // Reset
+ n: E: Q8 D1 ~+ G    mcasp->regs->RGBLCTL = 0;       // Reset RX/ f+ S, j' o1 c7 Y" f
    mcasp->regs->XGBLCTL = 0;       // Reset TX7 ?: b. z# z, E: k% i
    mcasp->regs->PWRDEMU = 1;       // Free-running
' C# r5 H; c4 x1 |; Z0 E- a   // configure McASP0 receive registers0 [7 u9 j4 o9 Z! Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& E8 a8 {9 u; m0 C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. @, g- J* i8 s1 q. \1 j
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 a$ g. m) I6 _/ F4 q/ S6 {
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ `) n8 h( g" O) i# o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) D# ^* J- W) r: o, x+ }4 Z3 c& z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: P( N3 P) @# k, h9 I, V* S
    mcasp->regs->RINTCTL    = 0x00000000; // Not used. t  `* |$ M0 x  U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 e6 H5 n4 O+ M( A0 z$ v6 V. [+ t1 [7 h' \4 m0 Y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* @9 e6 l- u* Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 J1 D8 G5 W  ?; ?0 V
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& r* Z/ G# ]5 e& g) X2 t0 U. j0 J4 P: N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, }- G3 L$ H0 N1 |0 e( K/ I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' |5 ~/ U/ t7 b  L3 \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 A* D: ^# A% t$ |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: B' F! a2 E  N9 T1 y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 O, n! ]5 M. p  t$ t! d( W
( e# u- D- p( J* Z$ G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) F0 p, ~1 O! X% A/ x5 W2 L
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 M% r( g, K. y1 D& S7 N
    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 y* Z9 b- E  _    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 A7 C0 c! g9 z0 q2 ~' [$ v5 ]% u+ W' ^8 n( p0 C
    mcasp->regs->DITCTL     = 0x00000000; // Not used# g5 a+ |1 t2 T3 J; }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 C) L3 |1 [" _! c    mcasp->regs->AMUTE      = 0x00000000; // Not used
  D/ n% m- |8 w& ?9 r/ I$ U/ l
* u& X! I: u# Y" f6 H4 v$ Z0 D/* Starting sections of the McASP*/8 {% Z. Q( A- Y2 d- t' \& x. X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; G& c4 g# b5 V; H" G- s! R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, T2 F0 r7 o: ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   p3 t5 G$ T1 C' e& g7 W7 A; |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; F3 y! Z2 A% `7 L- A
( @0 j* V8 S6 q( E; C: Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % ?9 [$ e! l$ w* G4 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) M  N) h3 E4 u& l7 N( k3 H5 \% }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ W* j* y5 L) N8 s' o% R1 _, v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ^9 Q8 r$ Z/ e3 L0 y' s7 R1 o! G2 E$ x$ n; h; ~
    mcasp->regs->XSTAT = 0x0000ffff;
8 N4 {# D5 I' C' R    mcasp->regs->RSTAT = 0x0000ffff;
% J2 y; O" l  h$ H
( N" p& H7 e2 |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. A! _7 r! l" O# u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% J2 _- Y' s) s, u/ `4 d- s8 Y4 U
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* X, `, ?0 L' X5 A1 x+ x8 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 ]% G, U2 N+ a
+ y! K' M2 {1 r3 R) \
    /* Write a 0, so that no underrun occurs after releasing the state machine */
: |# R0 O* s3 j- A6 L    mcasp->regs->XBUF5 = 0;
2 B5 Z+ W( U. e    mcasp->regs->RBUF0 = 0;
4 t, V1 Q6 {" ^( A4 J" i! C+ A3 |2 N7 d6 Q! U; d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 D; L  E9 O, P7 ]- C% H2 [# q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  C! `) E* W$ h) A- n4 f
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 x$ B, n5 o7 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; e. X9 I3 b' ]# H

$ G$ ~0 h2 `. G8 \$ @- E' q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / w1 Z: C) S3 B  d4 y+ d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. {& J7 m2 X7 e) U, v* i# D
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + s) {& Z  ~8 T* p0 s8 y. E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 m2 L* o  X, ^* G( Y
$ z$ [$ K/ B. @% r    CSR = 0x0000;
: D/ u; Z+ F. E5 E    INTC_INTMUX1 = 0x3d;) k+ c& @) j: E4 r# S8 x6 R1 y
    ISTP = (unsigned int)vectors;
% _2 O, l, Z- l+ j) V    ICR = 0xFFF0;  
; g$ h3 H1 F3 S7 V& g) G0 p    IER |= 0x12;  1 F( Z  Y! \/ z" Q( W* ^
    CSR |= 0x01;  4 O: t7 a* ~9 B. S& d
: M5 Y3 l# E; G5 j: f: R

1 i9 F/ E# K( [0 q6 R8 e/ G1 }8 V
) l# L: d6 F/ l5 D0 l还有就是两个输入输出函数:! W" F  y1 ~* o2 G4 h8 c' p; P
void output_sample(Int32 out_data)+ e; M7 z; [  P- B7 J1 R6 s" v
{
, a# D7 u  x/ R; D; ?. e; `' Y  AIC31_data.uint = out_data;  ( G- M* ~) ], h
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( \, l3 e4 K9 d  t, x! }" G
}& D8 c, e0 _. m. F9 S

" a! h! K% z- d- SInt32 input_sample(void): v9 F/ [0 }9 h- V$ W3 M: G
{  
6 m1 F" _# I. n) _  U! w$ w3 S  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# Z- v6 H' b/ j" o- G  return (AIC31_data.uint);9 B: H2 ^  i  J6 O- F, g
}2 ], [& Q2 d9 K( _( w* F
% V: b* {. {3 \" Q; d& h# O! 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, 2024-5-23 11:45 , Processed in 0.036833 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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