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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% b: q% v' \6 G) d% hmain文件:
; c% ^7 c, l, [7 f. u. D4 ninterrupt void interrupt4(void)  0 Q, R5 g0 i4 m8 Q; B
{
! J7 y& V) G3 Q, C6 }  Uint32 sample;
5 m' E3 w4 E8 G
! i9 w7 j* N7 v0 g% A  sample = input_sample(); // read L + R samples from ADC# r$ F' K$ t6 s+ j
  output_sample(sample);   // write L + R samples to DAC 7 C* q6 M1 W( L/ W- |7 b; z( T- w
  return;" q2 Q( W; A0 Z& r# C2 L6 j! p
}
3 @" b$ p- B' S+ }$ W# d
$ {5 o( ^7 K: M5 z% W! W0 {: Kint main( void )3 |# q7 o2 O0 f: V6 D- i
{
; ?- W4 ]9 r" M
! ]6 n8 w2 y& p! s    /* Initialize BSL */
" h  L: r# V3 U, A, N    EVMC6747_init( );
0 E( l6 q( B/ G7 R$ I0 F* }% `        /* Call evmc6747_intr function */( [. Q8 C  V; E9 P* L
    aic3106_init( );( U4 ]8 z9 F: x/ b# o
        while(1);
: g2 v% o! N: w+ L8 Y7 l7 j}2 }- H7 X$ h8 F' C' y

( m# j( O2 G; U& l+ C8 l! T8 I( [& f8 A+ g6 }" v+ U$ X4 X# H& Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. r+ k9 L- t1 z. |0 O. k/* Initialize MCASP1 */1 ?$ M7 G1 W/ h% E$ D, ?
    mcasp = &MCASP_MODULE_1;
5 X# c! r7 J5 F  O. v2 X  j    mcasp->regs->GBLCTL  = 0;       // Reset
! \+ h( E! r/ e3 Z: _% N# E    mcasp->regs->RGBLCTL = 0;       // Reset RX' H& q0 y% g. D; G8 @7 O" _
    mcasp->regs->XGBLCTL = 0;       // Reset TX
' m! ^0 X) x; P' E  n! M    mcasp->regs->PWRDEMU = 1;       // Free-running' A  ?  A9 Z8 m3 y# k
   // configure McASP0 receive registers( z2 R. i1 F. E* m0 J8 z* z- M) \
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ Y/ s2 n. X4 H: B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 a' a* r; d9 S1 b
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 \' r' T) E) y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 s% D8 s" _$ k4 {" c. f7 i! `    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 z1 n+ K2 B8 s( ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! C  _9 y- _8 v" z7 e    mcasp->regs->RINTCTL    = 0x00000000; // Not used; G; |. F- z: N2 P3 f
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: h0 z+ I# H& g% K% F3 ?
: w8 `+ S  p2 w1 s' s: h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% {! y8 `! ?0 Z& T3 A* H% W8 T) p
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 g! Q! _9 L5 u& X( v  B; e7 w    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! W7 u+ K- T% Y* u  G2 a
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 ?" C1 h/ _7 ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- ~8 A, S, W+ L1 V( f" s; ^- U0 D) y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# y1 r/ W3 T' ^% R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! f5 n6 W* @2 J, C; }2 i' K
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 D# R% F: H* B8 c$ B
( j3 U! M* z, G8 v" w) D  `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 w4 @$ n) ~. J# \2 o( J4 D
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' p* P9 e. E5 T/ V# _4 B3 @8 d
    mcasp->regs->PFUNC      = 0;          // All MCASPs; K, [9 m9 J7 L/ c7 D5 D5 Z- u
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 o% M% a- p- M( k$ L
3 [8 I% m2 {9 e: `) K$ y. x
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) Q& {" l# l2 E- R3 X    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" V% h  Z- o% s7 e1 r. A8 w  c    mcasp->regs->AMUTE      = 0x00000000; // Not used" m/ V! S! R+ `% ^7 K
6 m6 o* J( K) u
/* Starting sections of the McASP*/0 y) E; r. a. t
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; u5 p9 J- A  j3 b7 Y/ w* W9 M9 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 Q3 X# f& r  V- u7 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 s; q; E/ I& ~# w/ O4 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 n  U# V, L% ?2 t$ }+ t' Y% n% ]- X
3 a9 w* v2 d6 I) z* P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; n" F$ d! L& P8 E5 F3 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. B( [. |: V* Z; X; ^3 g% b; S6 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' N8 e2 ^4 x: i+ h/ s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 ]. ]: L8 H" Q. \( O7 G7 i

- H: a* i& T( i' C; G2 R+ T    mcasp->regs->XSTAT = 0x0000ffff;
# k' L. H' f% t1 Y6 v# u    mcasp->regs->RSTAT = 0x0000ffff;
, y0 d. q8 P- z3 z2 N- a' ?* [; X
( a, L/ I$ N' C6 A0 Y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# _. _3 N* }6 S0 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  L& O6 g3 U5 N1 w5 [; C4 o+ S
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % H; M, w3 X. _0 f' K! X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 T9 S& ?, X1 p% [
) D9 I5 r: @# }+ ~* f
    /* Write a 0, so that no underrun occurs after releasing the state machine */' ^6 x- d& E# {( ]8 v
    mcasp->regs->XBUF5 = 0;0 l  A  P9 B! _' {! |& w: v
    mcasp->regs->RBUF0 = 0;8 |3 h. R* g3 ^" `* \
0 T! ~) R; i( }: |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : P( m$ ~# |# I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, q  P% v" ~! f    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 G: ?# K) n1 B4 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. o$ l& _# e$ u4 T( E

' F% q. a+ |$ Z4 b% f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ w  L9 ^! g. K8 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# g7 q+ l! j& A  s" c" Z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# b0 n2 b: d- H6 w& D( \* }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. M1 U- g% |- e& E

+ d- V) r+ J9 O- {: E2 }8 ^! f    CSR = 0x0000;3 C  `" l% h' W- u- k
    INTC_INTMUX1 = 0x3d;) g! l. K) Y; s# n  o% L
    ISTP = (unsigned int)vectors;
* h# j+ U* q& j    ICR = 0xFFF0;  
; m9 |5 W" i( T3 y    IER |= 0x12;  0 x# U- ~0 j, U' i4 P, }
    CSR |= 0x01;  
! j8 q* {" Q9 n; V5 o2 H) |8 U, @  K5 h

7 U9 o8 c7 q  x- b
/ F/ g+ Y0 S: z4 J. J; ~还有就是两个输入输出函数:+ V' r: t9 n' d/ `
void output_sample(Int32 out_data)
# U% B" |" \- [# u2 o) U; [2 C* X/ N{4 d, R0 }* Q' R' \( v
  AIC31_data.uint = out_data;  / s( d8 Z$ `  r' |) F" P6 S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ H: d7 J+ d+ m2 j/ a* H2 ~+ B
}
$ _) w- b0 U  s' W8 z$ |2 `8 i# @# @) E- O
Int32 input_sample(void)
! b6 n. l5 A# O, u+ L; H& q/ Z5 K{  " P; u( {( R2 ~/ y2 d2 [# s* f0 c
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* z) |1 j& c- Q0 D% @  J5 y0 x1 ~' N  return (AIC31_data.uint);$ @+ `/ x" Q( Y- a
}
3 R) E5 S0 [, f( o* {7 m! a+ ~' _  P: ]( `0 \* \
分享到:  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-5 19:18 , Processed in 0.041074 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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