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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 c( Z: \! K. d- Xmain文件:
" J1 o' s. v. L: O* n) Yinterrupt void interrupt4(void)  4 `0 |  `4 I, A* Z! w& I3 k4 Z
{- ?7 [* o" M0 r
  Uint32 sample;
& z; _& Y8 E4 m+ A$ H3 T
& i4 b% g+ F' k0 J# k  sample = input_sample(); // read L + R samples from ADC- h9 F$ L7 ?' i) E6 r  ^) z
  output_sample(sample);   // write L + R samples to DAC
/ g: ?% p& ], d/ ]# ~) H  return;
( T- V7 J, l+ i( C}
9 b+ S' @' b0 k# J. o: C+ m8 ]: h- y. b  n: j, Q+ x
int main( void )8 [! ?$ ?' x5 X& H" ^
{
# W2 t1 x2 ]9 t8 o& g* [2 p1 X. v* R- E
    /* Initialize BSL */9 W$ Y9 B- g. U5 c2 b$ v% x
    EVMC6747_init( );) T* d/ L( y: Y2 Q! g  Z6 D4 |% L
        /* Call evmc6747_intr function */4 ]6 u% w! e' k, P1 S8 z7 [. O; L
    aic3106_init( );/ g( F; n1 q4 W0 q1 w( r" S
        while(1);
1 l% z  ^4 v' K2 D8 m" {$ I; d  y* M1 w}
4 f' u6 W+ T$ R, o" [
; I9 N/ V' S+ S) S9 O9 U6 b4 }: d1 J$ A2 Q6 Z) _% h! e: K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, L0 O* u8 C- q8 O; N4 i/* Initialize MCASP1 */
' ]7 s9 U: L- B  L    mcasp = &MCASP_MODULE_1;
7 ]0 r4 ]8 b5 j4 M" ]+ d    mcasp->regs->GBLCTL  = 0;       // Reset' r2 u# B; z4 o* w7 {; ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ c; _; }# n$ ~: g7 n& i5 `1 m* v7 k6 X    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 m% F. y2 r" W# O" i$ B* ~    mcasp->regs->PWRDEMU = 1;       // Free-running
2 Q. z8 J% W$ |2 V1 Y; A9 r0 a8 b   // configure McASP0 receive registers
: k% |7 P: p1 j( s# P    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
1 e2 r8 s' \/ a1 L5 }2 Q0 j    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& h" K) ?! r0 E! M. s* O/ K
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' v) ^4 V+ [2 ?: j! d9 s
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ T7 d3 V, w0 i    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 \! m$ k- A; N8 L# J$ G! ?, B    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ `# j+ O% ~+ \' E& v! |1 E% U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ O0 n5 K7 J' o& }  e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 x0 \- v+ R7 C' o+ _
: G* R: N0 _+ \; r; S4 S1 A! }3 |$ p    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* Z: t% B6 s  q3 o; n$ O    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' |5 }% p! o6 V' V: L" Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ B" ^4 u- H/ L* V1 f; t    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  U5 [# x$ b$ C6 G    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) B) H8 ^2 H% l: }# s    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 |8 j/ U: L  b8 _
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% s: v9 A, A$ b% z2 m) I
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: E- h- @" v7 `* B" \; X
" C) f2 k) M1 s6 a, _
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: I4 \5 V' E/ E" ]2 d    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ u8 H$ k9 d1 i$ x$ u6 W, a
    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 V5 v( L- k& Q  ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! Y4 c( }, B1 O$ ^; [
3 e# i0 r5 q3 B* \; e2 S, i" f, K
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 ~. [2 t% t" {; b" e6 d. Q. p0 S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( V, U. x8 n( q0 R8 z8 \  d9 X    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 k  X! a& r# ?
- V- O) {+ d( D' ?& r/* Starting sections of the McASP*/+ V& a4 l* z! }
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 C% T7 {+ a# n9 b% b1 M& e# w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 C3 V6 }3 V: i) F7 u, ?' p    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ f$ \" z3 Z0 j8 h4 p( t) Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 `' e! a& j3 \7 Q: `# G& S+ Z
7 P* }# ?. y& m! l( e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  l( h$ r( Q0 ^1 D1 Y$ r" P+ |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( j6 P7 W- F/ P    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! x  r: p) o5 o7 g2 C: S; l* r- |0 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 {4 F$ {( A8 }* L5 v- X

5 O9 F0 `( j; ~9 @6 y' d; d7 k    mcasp->regs->XSTAT = 0x0000ffff; 0 @" h7 r$ ?, Y9 M: ^$ \
    mcasp->regs->RSTAT = 0x0000ffff;
3 k" n( r0 h( }2 y) Y" ~; c# P8 W, s9 L, o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: f8 g* f) K; n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' o7 {0 b# n* h3 x; I$ ?    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; ?# E5 ]( j; L- J; O3 ~# Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% I4 \& ?, e% g3 d  c7 C1 s: V5 A3 ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 r4 e4 \4 M; o* e
    mcasp->regs->XBUF5 = 0;, h( C! p; V( o9 O2 F3 d: d
    mcasp->regs->RBUF0 = 0;9 ~. C+ e8 [9 v, [( i

9 b2 |! j7 e3 Y5 n0 B    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* k9 o8 C0 j* f7 K- T% f+ A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& C! r, }. Q( I, Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 ~. e! j% c$ u" f# r% W' f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% r! K) c, Q/ J* t  e

3 k! U1 s' i2 V3 `* t6 F7 X1 k2 C    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 B4 O* p, w0 x6 m9 f$ ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 d7 g4 X$ ?0 s) A1 j& I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 @& x1 p( Y' L+ W+ Z+ }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( a; Y% x) m2 L7 Q* {1 Q
4 n$ p) `9 e4 u2 l* m    CSR = 0x0000;# A) d' t7 J0 I8 G0 j
    INTC_INTMUX1 = 0x3d;
7 x  G  C5 S; T0 Z; g    ISTP = (unsigned int)vectors;
5 n) Z; N. u7 z2 R& W( E    ICR = 0xFFF0;  ) a8 \$ g4 F/ D9 z: V) w1 K0 t5 T
    IER |= 0x12;  
" m6 O- i+ j# Z+ Q+ X    CSR |= 0x01;  ! D9 p( h% u7 }
: g# r- o' i5 M& ^

! z& @2 K* ]5 F+ f/ e0 y& N
) m4 W3 K- A- @( V还有就是两个输入输出函数:
) `7 a% N# E4 k+ cvoid output_sample(Int32 out_data)9 U/ j' X# S1 ?0 A/ n) S
{
6 F; P0 H( ?9 x9 w) \" Z  AIC31_data.uint = out_data;  
/ \  t/ r2 |2 i* b  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; i0 g- @& j1 }9 e0 d% o- e5 C}: J6 a- ]; x+ d0 P+ b
' T. C- u. [4 q' S' o! w9 W1 J8 m' K
Int32 input_sample(void)
, |; I2 v1 u0 P; f{  
( S4 M  e+ u4 T) U1 S: ]5 M0 f# Z+ k  AIC31_data.uint = MCASP1_RBUF0_32BIT;' P3 s" X  ^* r3 M; t8 P: o
  return (AIC31_data.uint);+ Y1 J# b4 W# p/ b$ X4 _; v. G; q
}$ c- s% i7 r$ H& y: b; d7 i( @
2 ~6 p/ o1 s/ |6 U0 q- S
分享到:  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-1-15 09:08 , Processed in 0.046330 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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