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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: C# |  B' U2 z5 b& S
main文件:* r, z1 k: o- `' X
interrupt void interrupt4(void)  * m7 d$ h* \) |: l
{
6 @, Z" F4 T0 {0 l2 R  Uint32 sample;
! d6 m" m) I+ p; E, _8 T/ G% u1 ?, C3 n' r/ m7 }" z
  sample = input_sample(); // read L + R samples from ADC
/ ]; y. ?3 c0 T8 W. T( m% |3 W; F  output_sample(sample);   // write L + R samples to DAC   Z# A- {# B! G3 H) a0 ]% [
  return;, {" v+ |- m1 S8 @$ l
}/ h% A% B7 G  W
: T% A4 w' V  R  L9 |: Y) ~! o
int main( void )
( c' k+ ]7 X+ }2 _; h{# W; b; n2 i/ R+ {; ]: V4 V; P
* B- J; \: x3 @- P8 e
    /* Initialize BSL */6 B  ~% {, n, @1 U% q
    EVMC6747_init( );' Z0 |; k' w& M* u0 ^3 @4 s8 k
        /* Call evmc6747_intr function */6 ~1 k* i; Q+ r4 Z6 D, D
    aic3106_init( );
) t; D# [: t% L8 @        while(1);+ x% m3 G* k9 K3 b" I# ~
}! p! G5 f$ A& E6 O$ R! C& j

7 \" C6 `- K: ~& S, {; J$ |( P! {! S0 S; {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, d  j2 W  t9 `: U/ ?! B9 q5 m
/* Initialize MCASP1 */: q0 q# o+ s7 C  j1 ]* h$ F
    mcasp = &MCASP_MODULE_1;
0 ~. {$ v( x3 S4 j0 X9 Q3 e8 h& [    mcasp->regs->GBLCTL  = 0;       // Reset
( I0 |; f- s0 }+ O8 }$ D. u    mcasp->regs->RGBLCTL = 0;       // Reset RX3 E7 G( }1 @" S7 `; L5 T
    mcasp->regs->XGBLCTL = 0;       // Reset TX
) o6 b) Q' Y1 t5 v    mcasp->regs->PWRDEMU = 1;       // Free-running
3 ^! c. C9 r5 _  R   // configure McASP0 receive registers
0 p$ n% N/ h3 o8 A. ~- Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( S% X8 f  |1 A) R/ ?* Z4 i8 A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: x; p: @. Q% a/ H) P
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  j2 `/ A3 J$ D1 A. A9 _
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). z( a* [+ k8 t2 M/ C; R& x' B& J2 x
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# Q! f& G4 l3 O4 i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 d0 K8 Q$ o& ^
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" b) s, S: E0 E- _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 B2 R' v- i, n; I
, Q+ ?+ r# s! u2 o' L( Q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: h" p& r% {! K# k+ x2 A; L, X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% M/ d9 p' X! C' B9 o    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# ]. X% J% y, U) R/ ]( @    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. u  m/ L  D1 [7 H* s, T) Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% J- [4 n9 y( N3 t. }' W- V3 A5 h    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" [- p4 |1 K( x8 E: r$ a    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 @  N- `3 ~3 _* d    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 r# O7 n  I- }% ~2 H5 _
* M7 |. _% N, H6 z* x& U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ u% ]0 }& g( [1 W, {* f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 \# }; n! V. k  E+ F6 Y( {- Y    mcasp->regs->PFUNC      = 0;          // All MCASPs/ ^. `. A) r6 b7 {8 V" c! [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( b$ l2 O8 G! e; K

9 c8 d  t( l6 W6 V- q    mcasp->regs->DITCTL     = 0x00000000; // Not used& z% B" \3 C& ~" u; V% m
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& Q) v5 Z0 h' M* ?/ T    mcasp->regs->AMUTE      = 0x00000000; // Not used
" U/ q3 w/ _* ]9 V* ^% |1 X. V+ r0 Z# f
/* Starting sections of the McASP*/) `/ M; D1 a" M2 r( K3 j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, D9 G+ T, b1 {! ]7 k4 a3 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
% Q% ?& Z" Q: S' a0 X$ V    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ \; \0 r% @. `) m' y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( p+ @9 f' _. b  s2 N: w1 z- d
  \" d2 g: d7 @2 l  C. o    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : A- W0 O8 j1 g$ K# B: v( }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 w# B4 l+ k7 o) k* Q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 ]) T  k: Y% F- g( c9 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. j' J) t* ]+ F& g$ s4 S1 Z2 T
3 M# o4 @8 u, h6 p& ]# _
    mcasp->regs->XSTAT = 0x0000ffff; - _4 z4 @; g0 v: _9 V5 }8 m; F
    mcasp->regs->RSTAT = 0x0000ffff; 8 Y1 G- k0 U* Z+ k" ?: m9 I) H

0 B* {" o, o; q7 D! ]    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ \. y% }% H& @1 I% Q! j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 P* X* h. O) H( E6 P( F& x# j+ J2 B7 {
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! `# s6 r+ j! K  w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 R5 [& N% P4 J* Z% [1 n+ j; f
' S, I' F8 Q3 M* K3 k
    /* Write a 0, so that no underrun occurs after releasing the state machine */( O# b. b0 t, p/ ?, \
    mcasp->regs->XBUF5 = 0;
/ v; W7 e% b& ^6 y& }    mcasp->regs->RBUF0 = 0;
1 ^6 V9 w5 Z+ s% S/ n4 o# r0 K- a9 x) L- U% `
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 d4 q% j+ g, o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 K  x* f+ }2 ^% x2 j5 x5 y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 w) \! ~( R$ B( \* \, D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 ]9 g+ K$ P( v( n7 }7 P) S

8 K7 N, f" ]6 J9 j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) ^& [( O: B+ Z- t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ A  L5 D3 v$ }
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ p) ]( Z( s& X* `' c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 Z9 W3 K& N# K! n( |$ I% |& f' |; ]+ G

' d  @8 B+ N! ^/ p' x    CSR = 0x0000;" F3 o- Z, S3 n8 b
    INTC_INTMUX1 = 0x3d;
7 R+ I3 f9 T% F2 v: l    ISTP = (unsigned int)vectors;
+ _1 s* t- r  C" L    ICR = 0xFFF0;  7 Z" J# u( v- c' M
    IER |= 0x12;  
" j# Z2 R3 {6 j  D4 {    CSR |= 0x01;  
  v( B( h$ T+ a7 d5 l( }, ^- s  B; F4 s: Y  c

3 W1 h% x: H/ p7 Y' u# t( c+ @+ p$ h5 t0 ]% M% R
还有就是两个输入输出函数:3 e6 t( R4 |6 `& m. ]
void output_sample(Int32 out_data)
/ ?% v# \  T& `{
' Z+ I1 j: w# d' I  AIC31_data.uint = out_data;  6 E) C% T: A5 D' U% J* [% ^
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* v' @3 I' t! ^0 |
}. s) ^" Q$ |2 e
2 f0 c; z  l( X9 r2 r- P- e$ O
Int32 input_sample(void)2 N1 Y) Z; n' x6 f% X
{  2 a6 Y: P* t# n
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 I: \/ S! T2 Q/ n8 y  return (AIC31_data.uint);$ H5 d2 l' B: B9 b2 a% L1 b& P
}  x0 ^, }- z- p0 C$ q2 v, t

. j+ {2 v4 [7 O  @% a5 ~
分享到:  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-3-11 12:47 , Processed in 0.043268 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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