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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& @8 X- N5 |7 f% d/ f- @
main文件:  T+ c0 _" r" q% C7 @6 g6 o
interrupt void interrupt4(void)  2 K- O; U$ t3 [/ o. {/ s2 M
{& ^' F5 O/ Z0 O
  Uint32 sample;
# ~) G( }  J/ e; l! L  x
# `! [# l# K7 d. k$ _  sample = input_sample(); // read L + R samples from ADC
9 [. A0 m  a: S- \7 a- O  output_sample(sample);   // write L + R samples to DAC 6 ^$ O* O4 e0 Z) |) w1 ^; K
  return;1 o9 P! e' K" U' {1 n$ ?
}! X9 m2 E4 U2 L3 u( }8 M0 c) g, @2 O
& q  ]) a* M3 K, H% S6 w2 }& g
int main( void )/ u# H1 F  P# S$ B% r7 a! E! P
{
& i% U: `- p$ E& V
9 v7 Q5 g: Y0 ]* G) U- H5 ^0 M    /* Initialize BSL */
, O: C+ T* C3 G2 `* w% V0 p5 b8 C    EVMC6747_init( );! c+ R8 e* I: y6 E/ F
        /* Call evmc6747_intr function */+ m5 S- }# ^& i" C+ r
    aic3106_init( );
2 P. @" ]1 t. f* s  z* M, D( L. _5 ?        while(1);; |# n9 O* \& i( c/ ^9 B5 j- S6 \
}
5 B% }& x6 Y, m: ^! @  z+ Q! T8 s) U4 z( S1 D: y6 Z
0 n1 p: d( U3 ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- m, i& t5 C$ f# g
/* Initialize MCASP1 */
+ V7 J# {  L+ `3 P% C0 r    mcasp = &MCASP_MODULE_1;6 @2 Y2 t3 T5 H, d' k
    mcasp->regs->GBLCTL  = 0;       // Reset$ ~" C9 F5 z- [& N6 ^
    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 E5 A6 z1 Q- B$ L4 I* H6 L& ~: ^    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 U  d2 a9 @4 u; [7 M% |5 n( \3 f0 g    mcasp->regs->PWRDEMU = 1;       // Free-running4 x! p4 ~1 m0 t0 \1 l8 D
   // configure McASP0 receive registers
. B: Y1 m- X1 u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 o; [$ M& K. R# ^- P; D+ {9 h
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. _& B" Q5 ?! d9 r9 E7 h    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) ~6 {8 V* R. S+ g" ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): i, z5 x) E& ?5 s/ u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 x' ]5 b1 B5 j) V, ~1 D, p
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 B; N$ f, q, d0 E* S: v# I) A    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. \& C8 r% S" Z2 w    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 S2 q2 i3 R1 v: K/ w

/ {# H: Y1 [4 O, c3 O    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) U! ?! ]8 E/ y8 r% B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ N# {5 s4 ?0 a# [( [1 Q! G
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 y$ Q9 s3 s( `$ i" P# O) I# @    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! o" L: R" {# X3 A1 s& E% q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& c4 d7 G- W! t& c- K8 Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! b3 g6 R" c- |- m  E
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 e+ O' e/ x9 b7 e* j: N4 j7 h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 U& s) O% V  J2 I! m+ G+ k- ]
! u* V# s8 R# N, P% u  J" Y! P( d" L5 z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- j8 X/ K4 R1 [8 X
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: d0 [1 [5 p4 m( E0 J
    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 p0 q' K" m/ y6 q5 g7 a9 g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 t% a+ n) P' t' N2 {+ x8 k

3 w0 }/ F) ?4 H) A2 [+ T    mcasp->regs->DITCTL     = 0x00000000; // Not used, ^6 }% v9 C% p4 |; \1 G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 B) Z5 G1 k7 }
    mcasp->regs->AMUTE      = 0x00000000; // Not used- k, {7 L8 `5 i2 N- C1 d' E$ `: ^
# S) O9 S# W! F' P* L7 G
/* Starting sections of the McASP*/
: A! E& ]7 V0 {( A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + Q  d) J/ H; M& Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 j7 E5 i3 B! O! Y9 x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # U% E0 Y- [# Q5 v* \+ r" ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( Y; x5 Z" s) ^" h7 L. ]2 E
/ \% K* e! t: }# a: R    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) N6 Z3 S) W: U) B8 \8 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) a3 A" |3 @) Q9 H
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ C9 i4 k4 Y$ M  {9 ?3 j& y" P" S$ O! K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  A* s" v4 n1 d2 Q" z5 v$ A( w& z+ d5 W3 P; o
    mcasp->regs->XSTAT = 0x0000ffff; + \2 i" I! D; m7 u
    mcasp->regs->RSTAT = 0x0000ffff; 8 c$ z2 @4 u# I( I1 i
( `" E, Q) N9 j: H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 t; Q1 \1 @6 C3 d8 [- R4 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 y# }* ]! D5 I! I9 {    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; ]9 o2 x( e" W5 N+ C  ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. R) c, n! f0 B/ W. M6 M8 X% R( i% e) M! G
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) r) @* c+ R0 J& |    mcasp->regs->XBUF5 = 0;) y6 r# q! ?! M; e. l( Z3 j4 {
    mcasp->regs->RBUF0 = 0;
& A! v3 n. J$ k2 q$ [7 O+ b; G9 a0 S  G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : ?1 t8 _, R- S5 v% n$ s) w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* R1 l7 M; y: [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# i9 f3 A  k$ U6 e: w5 B9 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 E- @. W# j& d
- C; X! x% U; @" T. t& o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 j4 p+ o! g2 z% B3 x1 x3 M' b3 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% x4 ~+ c. n. A. {/ h5 C    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 n, P7 ~5 r. v3 W. o% ?. k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 `; [5 Z+ B$ v3 e) A+ ?0 N4 [& `3 y0 Q0 h
" Q5 W# t: S- `, b
    CSR = 0x0000;, V  A* w; O  R8 {
    INTC_INTMUX1 = 0x3d;% w& \  s, y5 K! d
    ISTP = (unsigned int)vectors;9 N  D3 I' f& C
    ICR = 0xFFF0;  
' \; Q, h6 J" k, l: {    IER |= 0x12;  
) H) d: E) g$ Z7 A& N6 ?6 a2 C    CSR |= 0x01;  
1 |* q  v4 t8 x* f0 u" e
/ T! O" q( U4 V9 z$ \9 r) U# Q( V2 g' s5 V

* ]1 _8 ?1 D9 Q" g还有就是两个输入输出函数:5 P& a4 H' B6 E  u% }
void output_sample(Int32 out_data): Q% ?, a- |" I- d- s# ]4 Q# {& }# k
{
2 j& }$ V& E: S; M! n  AIC31_data.uint = out_data;  
! J# Q5 c- o$ H. B* b+ q8 G+ b  MCASP1_XBUF5_32BIT = AIC31_data.uint;( l; x5 t; |' C; N  `. r
}
2 v' E/ X- R" {0 d; z2 \6 x$ F+ e
+ g, T7 [! x) I( D; gInt32 input_sample(void)
& a$ b) ^  [% I0 n4 @; C{  " y9 h' o7 q! m/ Q: r& U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# h# Y" v$ o. p4 |2 [  return (AIC31_data.uint);
7 |& p3 C& o8 U6 o7 x0 v}
0 C( O/ h6 \7 b9 D6 I6 N, x+ s5 i, T. Z2 I+ M
分享到:  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-6-16 07:17 , Processed in 0.037315 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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