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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- L; P  C' @. n" G, ^) T2 _  h, X+ bmain文件:. n! u# D. h- G8 s2 ^6 g, ?+ i* k7 ^- i
interrupt void interrupt4(void)  
' N1 U4 i( ]$ R' |" j{" K& a0 t5 r6 P& J
  Uint32 sample;
& ^- L# s! L$ I& q% V
1 {- F/ \; V: k8 x: s- J$ L  sample = input_sample(); // read L + R samples from ADC- K0 I6 x1 \5 j' B* m
  output_sample(sample);   // write L + R samples to DAC 2 w6 V) u& b- Y- G
  return;2 g4 J9 a. e+ Z; ]* S6 s$ |9 |  f
}
3 F% x( Y6 z' X
" v- Y% G' l/ J; d# k: K# qint main( void )
! i2 m" a( T3 _7 m+ u4 }( n{
  A# F2 H) h9 o2 ~1 H5 L, @* t/ y( W! ^" f
    /* Initialize BSL */
( B7 p2 I0 y+ Y2 p    EVMC6747_init( );
5 l& d, R, F- w+ r9 E, j7 {) w, J        /* Call evmc6747_intr function */  W+ I( _$ W; @* |( ^0 J: x. V: {
    aic3106_init( );- W1 U" y+ a7 h$ \3 ~# T% \
        while(1);
: N: Q" J# ?$ |+ ~; H}
% x" q( _; N" x7 T, e, N; |% ?' {, b! H2 {0 ^7 N% I) V

/ S3 E3 J/ M6 Q9 q3 paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, V3 h0 y6 H' e" Q/* Initialize MCASP1 */: _+ b8 |0 R$ r6 z. S) }
    mcasp = &MCASP_MODULE_1;
+ O4 f  u: ~1 j7 F0 S    mcasp->regs->GBLCTL  = 0;       // Reset
1 u" Y2 y2 D2 F" h, J  d  P    mcasp->regs->RGBLCTL = 0;       // Reset RX) a/ s6 U, u1 p1 \6 Y  T# s1 y1 j
    mcasp->regs->XGBLCTL = 0;       // Reset TX
! u8 r6 ]4 H, j    mcasp->regs->PWRDEMU = 1;       // Free-running6 j1 I, Z9 x9 N- r5 Q: K- k
   // configure McASP0 receive registers
  K. @& H+ S$ \; _; W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# r0 P( h1 S; }  |7 F    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) h$ z6 m* [1 D; I5 I- |    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* I4 L; r! l+ i0 D; o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% B, u1 M5 u# b- I: j" U! I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' m3 x% r$ e$ Z% ]& p& \% F5 o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& b. t- G; V7 O, P* K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 T# ?) v9 J" H2 d2 h8 i    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 ]; `# U8 O6 Z5 W8 s. S

! G3 d) w9 }! G5 S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( D8 l! R3 k8 k0 g* |4 ~7 B) S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; n  Q$ e- j, K    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 D& u- V9 ~, S8 Z$ e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( |( m4 v$ d; M' r+ D* {3 K
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ `$ Q- u+ _, _    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% g+ i! ~5 R6 Z9 S( e& q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& U; ]7 s8 g- S5 l- W0 j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. J0 R! C5 r. H' k% s! {9 I, k! D0 q/ W. Q' M8 f0 e' S8 _( i6 y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- A3 w9 `/ v9 L( L% b
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; x% |3 v( q3 G3 F+ M% ]    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 P  V3 r  H+ z' z. E+ r1 z6 e    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ D' @$ y2 L, E: Q/ S( F4 x! s! W3 `/ G
    mcasp->regs->DITCTL     = 0x00000000; // Not used& J( c+ {6 u/ Y. R3 i. B; ^
    mcasp->regs->DLBCTL     = 0x00000000; // Not used4 c2 ^3 d" q9 {  m9 w4 ?
    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 H% n9 h$ u  a. F0 o+ t
7 d0 d- f* O: C; X/* Starting sections of the McASP*/  b8 M( c, T8 |4 H7 |, q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 }7 A' ~+ R( R% J; p1 e: j) H1 o" Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: q. q, {4 f* B1 P9 ~9 n    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* q' m1 j1 E% f/ D8 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- R  X  z- }; C* S2 i$ H1 h+ t
8 f6 y$ X" `( M1 L& h* T' G' \    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ R6 n. `# K; m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! q6 l: U5 s& S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 U. p- `# ~- a1 y3 W" q3 y0 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! I5 Q+ v( w* F* Y  K: V3 ]
  I% u6 N  _- a1 H% O6 M    mcasp->regs->XSTAT = 0x0000ffff;
7 I/ c/ m# Y' e# d    mcasp->regs->RSTAT = 0x0000ffff;
) u& E9 ]/ ^" f1 j5 Q
0 m7 d5 l" H( d/ q% d! ^; |3 @( q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- z+ x2 i: v' c2 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 ?# H3 _6 s* u- m3 j1 n8 o8 f$ ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 z1 r/ u2 l8 Q1 z, X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" {& c. r: l4 a; v9 Y+ L# {0 @
. z* ^1 Y' D2 M& N. H% B4 }# J    /* Write a 0, so that no underrun occurs after releasing the state machine */( \0 z( u+ s- K
    mcasp->regs->XBUF5 = 0;
% t0 y; Z) V% t5 b  z    mcasp->regs->RBUF0 = 0;7 A' _  S5 \; R7 d

5 Q5 `7 h  |) @+ z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 E  n7 b" V4 h4 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- q9 Q/ m& d+ K, b3 R- \  i" O' A    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & g4 f/ c* c" f% m& H; t  {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: k0 |4 U; X7 F3 P# V8 l

3 h4 a3 U/ e  b5 C9 D' L$ P5 M    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" ?* Q- Y; F- d# `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; ~  w+ i: c, i% t$ C" T3 @: R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 [9 @4 @4 z# I4 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. n/ G) G5 ]) q( M$ e
. W, ^8 R( w0 z' x/ r( S5 T2 G" l
    CSR = 0x0000;/ y3 h9 A3 Y  F. [
    INTC_INTMUX1 = 0x3d;
' S, }7 w& Q3 f/ s. f    ISTP = (unsigned int)vectors;
5 e' F4 g0 e* @0 T    ICR = 0xFFF0;  
) |( t9 P; c* V4 j& A$ y7 A    IER |= 0x12;  3 b* l. n, X! I8 P" ^8 }% k; E6 U
    CSR |= 0x01;  ; s+ E* d7 {( D( E

, p$ ]( x, @1 d) Y7 B
8 C( Q' R! j% l, I$ T+ n% j- I4 o6 m6 V* P* p; k! `, O
还有就是两个输入输出函数:/ b* y* ~9 o$ ]4 h) ?- L
void output_sample(Int32 out_data). F. D+ w9 j- v+ j% B5 a
{
% ~; J+ v3 y) |  AIC31_data.uint = out_data;  : Q( Z! u8 m2 `' X* g+ m  k) W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( K0 W1 X+ v" N}6 x  z. u* G. Y
- W' Q% N" S' o
Int32 input_sample(void)
8 n& n: g8 V& ^* `( \{  
  `/ [- t$ y3 b: p- W  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 B1 v" n7 c' [6 K( J+ L3 r1 s
  return (AIC31_data.uint);1 q1 \0 b% b1 K/ ^% _/ R. _
}. ?- ?7 y8 L1 D* x0 i
% f; k4 B) C$ 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, 2025-12-27 11:42 , Processed in 0.039590 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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