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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 R; Q9 W. D& X# r
main文件:" `7 o2 {0 B3 h! c% p
interrupt void interrupt4(void)  # `9 r. Y& i* w9 y; s* o& _1 ^) ^" V5 a
{6 C0 _1 I1 q5 f' N3 s0 o0 O
  Uint32 sample;. O  ]3 S* f0 g- `1 \

  A7 v0 l6 N/ _8 f: R* ^  sample = input_sample(); // read L + R samples from ADC
  f, C. P9 I( r* A0 \2 |  output_sample(sample);   // write L + R samples to DAC ' {( D+ }5 \3 M/ A' X! q+ @
  return;
+ W* H2 M, p4 m}$ K( V/ b* Z  [) C, a
  J, i6 ^' G# D0 z& l
int main( void )
$ V+ ~% I) E: W0 p& M: e, @, i{
6 z: `1 V% L$ [, _, p$ V! x- P5 K. y4 A
    /* Initialize BSL */
$ K- H7 s1 d( V7 u: a% z; Y    EVMC6747_init( );
7 Z' r" g& H5 M        /* Call evmc6747_intr function */
4 p4 k. P. s; O" Y5 f* z    aic3106_init( );1 L  d* D& e: h; Z+ k0 q
        while(1);5 E" `. t: T+ z1 K5 K1 Y% [8 j
}
- ]# V6 b# a- {7 Y+ T2 t
2 p* u- {5 F9 i* ]4 t! E4 [2 C6 r2 ^3 v
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" r6 l9 M( |( w. z: E6 `+ [
/* Initialize MCASP1 */
% x; g4 @% Y* D% L% ?9 N# c- p  S    mcasp = &MCASP_MODULE_1;
+ S2 \& L/ |" L# ^" X3 W    mcasp->regs->GBLCTL  = 0;       // Reset: T4 ]: a' L3 s9 v$ p0 l& D: f
    mcasp->regs->RGBLCTL = 0;       // Reset RX: l; _' P. F3 b, Y( m& b
    mcasp->regs->XGBLCTL = 0;       // Reset TX( P5 n" z8 Y1 n3 |3 V. C  w
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 |! t" ]7 A  c4 H; I9 B, }   // configure McASP0 receive registers1 k' O6 Q8 `7 }' X2 E( T3 U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 W6 q0 |; m9 `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) ?/ j3 v5 w) X; E- w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 E! \" G( p1 |" Y+ c) ]$ n9 u/ m1 F- m, B/ p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 W  z2 \) L9 j+ o) ]; I6 _
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 l/ J$ P: B+ L    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 S4 `% s0 d6 S! c3 f% {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used, N3 Q4 _/ q( q4 |, k6 H( ^& m
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 q4 z2 {1 T) ~9 S2 K( E' k4 B$ U: q1 p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; ~5 @# h& `% F5 G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* V1 B7 q9 D- ^    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) N( O- H4 D; s# K/ \8 a/ k* A1 _
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" y& ^% w" n5 }! A  ~/ ?
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& J9 A% }; v  `4 h, }; z$ L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: W# N$ m/ X4 u! n4 g! `( z# ]
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; Z, p2 z% ~" G+ ]! _7 T# Y* Z' R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 H" N1 ]% Y; W- O: T3 E# u* r8 b- m0 x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 n1 |1 V5 q- p* V    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ d, X. F$ C1 I1 T7 ]* L6 E/ g
    mcasp->regs->PFUNC      = 0;          // All MCASPs
! q3 \- Y9 m' L0 S8 u, Z; P3 S" H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ N. A( D  {5 F7 c$ C* p
2 v  j% j! a! b. ^( Z# L6 H0 l    mcasp->regs->DITCTL     = 0x00000000; // Not used' u2 m5 m7 D1 ]  Y: W" {* W! C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 p) _4 N0 m+ F7 t9 Q
    mcasp->regs->AMUTE      = 0x00000000; // Not used$ `" d/ o0 F- `/ P4 E6 |
. @: J9 R3 o$ l6 {7 Y' m! Y, X
/* Starting sections of the McASP*/: I9 x) g) {' Y: y  Q! O- L4 W1 s
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) v+ q2 Q9 G# z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 a/ H9 B3 c6 C+ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , y$ f' C/ m& s. [8 E$ t8 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- w% C# h9 C5 P5 k
# H3 X5 x5 d5 I: P2 U    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. A  H% l7 `% h6 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 R4 x3 K  O3 d; W9 y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 ]7 Z" d9 P% ^, U4 i- w/ Q" E3 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' G# T$ e# O/ E* V
! z) f2 q' p3 E9 g3 y8 p
    mcasp->regs->XSTAT = 0x0000ffff;
4 P1 ^7 p5 @0 H+ P    mcasp->regs->RSTAT = 0x0000ffff; : w5 ]% S% N* A8 s. j! |' X

6 K: p5 G% r: h6 ~8 d% v* x    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% k+ I8 a2 J" l' y1 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! Z" Q, ^8 j' t7 L; _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, k0 k6 n: x, m" e+ z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ G' d5 ~( b" U
7 Z6 R/ H( p# K
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. y3 ^; L7 V' D& z    mcasp->regs->XBUF5 = 0;
" S  D6 N0 Q, o    mcasp->regs->RBUF0 = 0;. }9 F. _  j" I, [5 L4 z& }
7 e8 D% n! `( S/ ]8 }* u
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' ?$ b3 k8 x7 H: x' Z* \! ~9 H! h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% L  x% w/ w6 f, z3 L5 _' X
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& S. {! |' U% J7 l% s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; D5 T' `4 R. u& D. G
9 q" ?: d( o" Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! i9 ?9 U* T/ v3 f5 s2 z8 `  M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( I% @3 ^: O" v7 ~* \4 S. w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 ~7 n; f) b) u! `+ e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' q/ O" ^4 K$ _( |  L: \
- v5 T: ~% o1 l* z    CSR = 0x0000;
' N9 a, ]: J+ F& e( f, y    INTC_INTMUX1 = 0x3d;
+ o! t2 |- @" g$ P$ K5 D    ISTP = (unsigned int)vectors;0 S. Y" o4 w4 S* t' h
    ICR = 0xFFF0;  : i9 ?+ C, V; ?7 w! b7 J& _
    IER |= 0x12;  . ?3 k4 P3 F1 y  G, ^. K
    CSR |= 0x01;  
( z  w2 D& N/ m/ `; G% i0 u8 t: \( h# o7 v2 Y. O
7 S. a# ^" |8 e7 f$ b1 Q
9 ?) b. y( D) c+ P: _  D
还有就是两个输入输出函数:
6 H4 g& b+ k9 H1 Z7 r1 tvoid output_sample(Int32 out_data)' t6 [% \; _+ \# \: y
{
% T/ \8 ~& @$ J) r" V/ d) l  AIC31_data.uint = out_data;  
/ K/ c/ v) o" f( F! \  MCASP1_XBUF5_32BIT = AIC31_data.uint;, @8 d9 S  I1 D9 f( R
}
) F* y( a6 d8 ~% f. R* l, s* v7 b& g
: Z# u! I5 E. N0 s3 Z) TInt32 input_sample(void); r( i, k, W  s- V/ X
{  
1 v$ D* @8 y' y0 M  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: {  e8 w# Y. U) [$ H  return (AIC31_data.uint);: {) |  @: F% P$ l4 F
}
; y% k5 i$ ?  `. |' R
, A" ^3 ^& l; |- z6 a* l
分享到:  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, 2025-12-18 15:10 , Processed in 0.043136 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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