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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  \/ r9 ~; [! z' s: L* d
main文件:
4 ~" Z' H$ ]" U% S# Z5 G/ sinterrupt void interrupt4(void)  
  {% H0 ^7 K6 Z; R{' F7 t) b+ ^$ V- k- y
  Uint32 sample;: t* z. i  B) [2 s+ M+ F
' Z: N8 Z4 {" I, v+ h
  sample = input_sample(); // read L + R samples from ADC/ ^1 Q( n0 W8 i5 Q( ~7 |, ?' f
  output_sample(sample);   // write L + R samples to DAC / S7 y0 A1 s2 G2 g/ w& D, v
  return;$ e4 z. m6 [  u5 ^4 P+ [
}! f  S- r6 J* d# z# o) O0 S

# ~8 M7 I1 E2 ?int main( void )0 e7 O; c1 }# v( f! {9 m
{
* T4 Q( |) \6 X# h* Q/ @: {9 y' M4 _" g
    /* Initialize BSL */9 i' O; V! M, p( e, N
    EVMC6747_init( );
& y4 {, ~/ U4 C! r# B        /* Call evmc6747_intr function */
5 f) G! w) s3 N7 _3 L    aic3106_init( );" H# a4 t, _# t. {8 c9 }
        while(1);2 n% u$ W. M5 E6 [9 {
}$ C1 M3 `& f- r$ Q3 U% P" }9 l3 b

. S3 J$ K/ e3 _' P4 z0 _$ e7 W
4 W' p4 G8 f2 Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; @: k6 Y# Y  @' ^7 {/ U5 {- Z/* Initialize MCASP1 */
/ ^% f& Y" F/ ~6 W( W    mcasp = &MCASP_MODULE_1;
  x, W5 H' g9 R$ ^' b2 w    mcasp->regs->GBLCTL  = 0;       // Reset
* z5 }; V8 ?$ n( e7 k" q    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 ~1 m7 Y# ^; J) F6 B    mcasp->regs->XGBLCTL = 0;       // Reset TX, M% D- T1 y. b6 Z
    mcasp->regs->PWRDEMU = 1;       // Free-running
. ^! O9 l6 n  Q' Y- h+ n+ r   // configure McASP0 receive registers
0 Y5 I( T8 c7 f" k/ ]7 ^. N7 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: D8 b- R) U  m; L$ |  X    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% k2 N' j3 `/ y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 q; d, |; f9 g: N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 S% v2 `. @9 f' z: k) D8 x    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 u& z$ N2 r; K' c* W( G, P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ ^! h8 P* M, e+ `8 F7 N% `# u
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 b3 z" [2 k: M3 q& A6 W% T    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; r" d0 d: r( b0 @( M$ l

7 o" s. O# D- w  X% M" [. V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ ]6 U8 v: N* K  W" r0 G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 [  x) Y. ?) \6 C
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  E& c" i2 V9 Y& q' N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' ^7 k" V. C  R0 C    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* J8 V6 e# @" V7 P: m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 A% ^4 r2 R5 n& Q/ |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' L! d, v- g! X6 M' e4 ?: C
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& s9 i3 P+ B$ O& Z

" U! q' L) i; E: a$ h4 ]# N1 S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
' P" ^0 T/ s* D1 S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 |- R/ E$ O( M& G5 T1 B2 _' T    mcasp->regs->PFUNC      = 0;          // All MCASPs! R: |$ I9 `! g8 M9 F5 D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 ^1 J2 p7 j1 @) I( M& a3 P+ S6 g

7 Z" |; \/ ]5 {3 X: R6 w, {    mcasp->regs->DITCTL     = 0x00000000; // Not used- ?' m- M* ~& G1 r1 G5 ^
    mcasp->regs->DLBCTL     = 0x00000000; // Not used# ~6 ~; ^6 u0 S
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 V& ~5 x$ a3 y/ [
* t" ~" y. L6 B* v; `: G
/* Starting sections of the McASP*/
) N* J7 W7 J/ b# R3 o  t9 N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # J9 F: b0 F) e% J9 V& m! [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 ?& L8 R& M* V) S/ L; L& j    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- r* K6 u- ^( w% e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ `1 _1 J7 K* @; ~; I

( L7 \; ?; b/ j* H2 ^& r( ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 }9 \4 }% X) l' d% W6 \9 p7 b2 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' {3 K# \2 x% {: b
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % b( W( v6 S, {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 ?7 C* I6 r7 n

: m& q, i+ q* P' e; P    mcasp->regs->XSTAT = 0x0000ffff;
/ Q6 V! Y# F7 K9 u+ j5 `    mcasp->regs->RSTAT = 0x0000ffff;
$ ?3 k4 ~  ^9 W$ P3 {+ Q3 B! f1 ?* s
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ~! ?+ q  d4 B) p6 N/ n1 u- Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 ]) g  J# l( y/ r& @0 q0 R  k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 [, N4 P# S5 K9 L, P+ ^7 F& e( B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 X1 D3 w/ i/ U+ O2 Z
4 M+ \# |. y5 K1 Z8 }! N1 e' M
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  r5 _" Z) ~/ \2 A  J    mcasp->regs->XBUF5 = 0;
  _. o1 o. B/ ]; x- w$ ^1 L1 N    mcasp->regs->RBUF0 = 0;/ T( `. @# y8 {( G! D
% |9 i$ o, g6 R" S  J, J# @6 m( b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 \4 h( |9 O: J' J1 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' Q3 o$ K: N; L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# x5 I. G$ {8 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# q% I' H; U8 T- z. w$ R! ~" h- P3 L

0 w/ l4 @% s" ?1 W, A    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( _5 A  z1 `( Z, C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( m1 a9 V' M& m; @7 N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : S; D3 D" A- l6 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. H2 G8 T$ T5 s* ~( r! d
! @/ ?! T4 E: G5 ]& c
    CSR = 0x0000;" v5 n: \# \# {- O
    INTC_INTMUX1 = 0x3d;
# E* @; z; J, T: O: Y! [) @2 L    ISTP = (unsigned int)vectors;
  A3 |1 t, `+ P    ICR = 0xFFF0;  
# n4 x4 {3 l$ @1 @" Z    IER |= 0x12;  / ^+ G/ V: S4 |3 _8 M+ q9 C8 k3 |
    CSR |= 0x01;  : ?  `9 }! Y3 p) {3 T$ ^

' Y3 d( W7 B) [( E+ c" H
4 S4 e. q9 B: q0 }3 I! E# H. c! w: y# n/ t6 y% q1 Y
还有就是两个输入输出函数:- }5 w5 i) z. Z& m4 Z. ^
void output_sample(Int32 out_data)
! F8 Q/ n' n5 R{
9 ]% C0 H- L# |! I  AIC31_data.uint = out_data;  
0 g( u6 q: s& @7 ~  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, s4 O/ d' g4 w  r! j}
5 j1 F2 e1 R/ T' J9 F  F* G- O7 A7 B2 E+ b4 }( _
Int32 input_sample(void)
- n: J7 h6 v, S$ W( C8 W{  
2 s8 I: g. X+ D+ J4 c4 K% q  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" ~. L2 D# x1 p# ?  return (AIC31_data.uint);
6 I" M# Z, t$ t1 x; |4 y* F( C0 y}: {  X/ ^$ M$ g2 [
) M. e1 o4 ^- U8 X
分享到:  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-2-28 07:03 , Processed in 0.041826 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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