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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 a* K* d& v+ {- lmain文件:; q6 [& p! }  f1 W% ]( r0 t
interrupt void interrupt4(void)  
1 P' w1 s/ q2 \{
" g0 G$ V+ ~# n  W8 N  Uint32 sample;
, F; L& B9 ^: w, s
/ ~8 Z8 j" v) Y7 v  sample = input_sample(); // read L + R samples from ADC
. d4 i- D# C4 A5 u  output_sample(sample);   // write L + R samples to DAC
; H' f6 }/ T. c; ?( R; Q  return;- w& M- q5 }& i9 ]- J
}4 J5 c- M- w; B+ F! n6 N
. U; p0 O; w1 t: }3 m6 D7 m
int main( void )
& q+ B# K& ~$ k% {3 w6 U: X7 U8 X4 }9 N! j{
3 p( V  R) w0 M, d1 W, m# n% J% A% @* T- Y* }
    /* Initialize BSL */
7 F2 t- }" U- j; p6 v# U; |) l3 s4 Z    EVMC6747_init( );4 p% k" d  Z0 N
        /* Call evmc6747_intr function */
0 X" ^% e2 ]: [# W    aic3106_init( );/ ?) C! k" F* a) W
        while(1);
9 [8 h# a6 D3 b2 S" f4 ]1 z5 n) L( O( w}& O; ]% K) c! t& d, \/ T* k

# F% f# z7 X% u9 X5 v! K
$ o# O. j& N: S- faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 }1 ^$ w- a: O/* Initialize MCASP1 */
8 s! w) i0 a$ Z" j+ w    mcasp = &MCASP_MODULE_1;, }% O% \! l3 B7 \' o
    mcasp->regs->GBLCTL  = 0;       // Reset3 H; y# N9 l6 Z, z8 l2 ^, [
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- j7 d7 N; J8 ~  C0 ~- ~    mcasp->regs->XGBLCTL = 0;       // Reset TX4 v; c! j! z, Z, |& j+ m; a# c
    mcasp->regs->PWRDEMU = 1;       // Free-running3 @% J0 [2 f0 w- S3 T* g
   // configure McASP0 receive registers
6 h+ ?4 m5 }2 |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& x7 N& K9 U4 n7 Y4 p
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 Y6 s) q- }+ ^; C2 w' H    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 R# F! g$ ]& [# G% |" w    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ c5 }9 g! F- O! [5 ~0 q; r    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 v+ k, Q( v; K2 J
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% l9 V$ {( D( }# G) Q/ X5 }    mcasp->regs->RINTCTL    = 0x00000000; // Not used& W; D  S, A# v  R' y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; N2 X; n3 W0 G( X4 |
+ D+ E* P& M% H* J% B' F, [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 f0 I* Y7 J7 j& }8 I1 k2 V7 p
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* U1 ~6 @3 n+ u* E' ^( S7 Y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 c, B6 y; T  y8 o
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 }, G# \+ J3 j' v+ l    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: T/ @: ?3 W6 c3 C4 y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 u) b5 ]2 W! r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 |$ p  W0 L% ]& U' J9 j3 \
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: p% ]3 ]( e: q: u: z4 Q. ~4 v" |
! ^1 O6 {1 ?9 d3 K/ \" N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 B  M) ?0 ?8 e; q0 Q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 Z, S2 V  F% K: x! N9 e
    mcasp->regs->PFUNC      = 0;          // All MCASPs
* p  F: N4 C  u- ]6 A# M4 J- R. `    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 K3 G2 s" C" k- C) j# _( q! {# z7 z
    mcasp->regs->DITCTL     = 0x00000000; // Not used
* d. a# n; D( m/ M+ }+ o    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) r& U7 M+ R$ H) ^4 V    mcasp->regs->AMUTE      = 0x00000000; // Not used
& Y9 u) f0 \1 e0 D2 l# A. a" Z  Q  x5 A( n; R+ ?% q" @
/* Starting sections of the McASP*/
: e$ @9 S/ w9 d8 t% u! r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 G; Z, D  g7 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 o1 u. A4 ]4 N! d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- o3 Y, M0 Y& S% N$ N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. o( \4 B( D5 j2 y; p) L# B$ b0 \8 q4 f% s9 E, `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% u8 n8 r6 ^  A" c2 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 z$ W8 m3 X9 S" x. q, I/ x. g    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( H# v2 B' o' Q6 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 g! G9 F8 ]6 r) R, p2 E

: s& x% d% @5 F7 Q; u/ U( m  N    mcasp->regs->XSTAT = 0x0000ffff;
% ]) n( O: u* l4 W, e    mcasp->regs->RSTAT = 0x0000ffff; ( F- U# e' v* R& u/ K7 ^+ Y

$ u9 W3 Z: {* V! \7 p5 K) q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 t1 w8 n+ ]  k: E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! Y- F  `! [8 W# \( k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! K* }  {/ M, a9 T8 Z" g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 i. x& A" A" }! W# F
+ W" l8 s7 L( x6 i: t    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 K0 i6 k4 G# V4 K  I5 N    mcasp->regs->XBUF5 = 0;
& P8 j! U" G& b! D5 ?  q    mcasp->regs->RBUF0 = 0;* W3 G3 B& G& x3 q/ N- C

2 }2 V7 Y# \7 u2 |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 q6 f1 h# `# s  W$ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( n7 u1 @  k# z  F5 [, d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 o% K. o! _. c& V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* T4 `' n" d9 q" F+ y) C2 O$ z3 s. U: I+ {4 x% p/ ]5 O
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- e8 w  p$ |$ u7 ^/ v$ D4 A  |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; a: B& Y/ o9 i0 _' M2 V2 W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; _; N* d6 L  S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ ]3 m2 R  j  N1 U4 C0 i! W2 {4 z! U- Y
    CSR = 0x0000;! V3 v: }7 W6 z8 r/ p) G+ S
    INTC_INTMUX1 = 0x3d;
' M/ g/ T! r" N5 l    ISTP = (unsigned int)vectors;$ b4 {9 R! c7 c$ G. o5 w4 J1 k  w
    ICR = 0xFFF0;  ' f! s/ T7 ~2 p  x1 r( H$ Y2 S
    IER |= 0x12;  : _, M- I0 f& M) v# o, U
    CSR |= 0x01;  
' z0 q- B! C5 w& V# m0 ^) ~
- l7 Y" @( I& e3 m7 }( I0 i8 L! j
6 F( C. s" i  `- E( I0 n# ]
) |& t+ k3 x' V5 Y# u还有就是两个输入输出函数:
3 U2 j( J5 ?+ O6 Q4 [, t. yvoid output_sample(Int32 out_data)! i$ F" O  z; M2 O) Y5 _" D8 d) F
{
0 k0 X) ?: T) E( S  AIC31_data.uint = out_data;  3 \; ^& Z" I6 S# Z% G7 u1 V0 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 i* T9 c9 F& k0 i3 G# L}
- a3 S( n- Q: H2 T4 C6 `$ S: m! v' ~! C
: T8 e9 \! b/ Z0 ]. {Int32 input_sample(void)
$ u5 b; @0 v; b{  1 U# Y# N* x, x, Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;) g+ g% I' ~4 v* j* i1 U/ `3 p
  return (AIC31_data.uint);
+ q+ l6 |9 ?# Y& H/ P}  U; `' z5 _/ S$ |8 ?
, Y& e$ a# ^, j+ l8 q+ Q+ {
分享到:  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-4-7 12:55 , Processed in 0.039732 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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