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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; c( x: y4 n1 l* Fmain文件:
9 v) \7 s- c: i1 q# _9 |8 F5 y! jinterrupt void interrupt4(void)  ' m2 k; E: a5 j) c6 T
{& Q. o* R+ E2 `% C8 B) ^
  Uint32 sample;
6 k% \8 f% B2 K2 V, ~
1 y3 F8 M) S( H0 d. S) W  H" X  sample = input_sample(); // read L + R samples from ADC
6 [3 s4 m" L) X8 p  _1 c" X  output_sample(sample);   // write L + R samples to DAC
7 u: l/ C6 ]% O/ U3 F8 b: T3 M  return;" ^% l# H1 _: E- H$ y
}
( q! V8 u4 y* Y( P4 p( }9 J
0 a4 S( m! b0 h7 `& B6 p! Jint main( void )
2 p' U3 w3 S8 n& B/ n  o* g; G{
+ W, t- z5 ~, C1 o& N' j5 }' z$ H0 K# P3 w. }( D- O* }
    /* Initialize BSL */- \' ^- `- j* N. c% v0 l5 }2 K
    EVMC6747_init( );! I* _6 P& X& ]' ]$ q" Y
        /* Call evmc6747_intr function */+ j& f' s9 C8 X/ I' j
    aic3106_init( );) Z5 t  z" S+ J/ l7 u6 q
        while(1);' |! j9 C, j1 l3 h. Y
}9 Y! L7 D6 n- G- w% U! t* o
5 ?" [6 k9 B7 `& [
% z8 D0 r0 X1 t8 N6 G8 t# Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 ]2 s/ F9 g; u0 a  `3 r/* Initialize MCASP1 */- o! g( F7 R8 j! c0 i# L& [: N
    mcasp = &MCASP_MODULE_1;' }  H' e% l6 N/ W0 e& q6 P
    mcasp->regs->GBLCTL  = 0;       // Reset8 k1 ^* r2 i* q1 e) H5 R
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 K0 Z. X4 H- p% g  z( ]
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 o9 i" O- l8 L' y    mcasp->regs->PWRDEMU = 1;       // Free-running( z+ G" j  R6 _) o" q$ C
   // configure McASP0 receive registers
: I1 K4 ~1 ]6 B: ^9 I8 p- P    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ m& G- h7 H- o& m
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( @: b+ y# _" {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 _1 t4 Q# D7 D2 q2 u- f
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* [/ t; U1 b" {/ B; l/ b$ J* \
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 X1 \. ]) M3 r1 z$ }5 E3 w7 f) k, Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  h* G+ V5 |) ~, M$ U# q    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 v( \& e$ g7 P$ P
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, F7 F: V; R( U) k' z  P4 j: ~; r' S. d% F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- V9 c: \5 T2 P7 ?% \    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! V8 k5 g  |' M5 e) t7 G8 B& t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- n/ I; _1 J) s: a9 C8 Z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! g5 M9 g4 [9 N0 R0 ]* N! j
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ E9 u7 X1 g, f9 H2 ^6 Z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& z% s: e5 [& `+ {    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( v. C: X% \& Y! M  E
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 x4 O, H3 ^% e  L% Q
& K; Z) Z' ~0 ~4 x; \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ q# c% [- s' E8 x$ @6 \9 v    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 w, [0 [2 _5 G: B
    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ [, ^) S+ B; ?7 s. }0 C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" d( [! _; a9 L4 Z

" Q3 _* r! V0 N( `3 r    mcasp->regs->DITCTL     = 0x00000000; // Not used- d4 |" ~2 }4 O
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 Y7 q3 A; y* A" \# d
    mcasp->regs->AMUTE      = 0x00000000; // Not used  d4 r& Y# E+ C- ]
# v% y# i$ q, B7 E
/* Starting sections of the McASP*/
7 ?/ G, a7 E2 P. K/ N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' U5 m4 C" ], e; X( [; e5 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 L: I% w* }! J* A- {0 q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 D) n& L# C6 o  }" s( ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ y  e; }; `+ A( F) g0 O6 g3 A4 ^9 c
) s& ~* J* u' f8 k: x+ P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, J1 W4 M: D3 c( g) t6 E  q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& ?, n. ]# ~# _- Y# U
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 F( E" N( l+ |* V- K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% g: F! z( T, S7 r. T
" _/ z) e! j5 _- T. t
    mcasp->regs->XSTAT = 0x0000ffff;
, v6 I: }+ U# k: O* D1 x; C    mcasp->regs->RSTAT = 0x0000ffff;
# b" K& K9 ^) R8 x/ f, y) H! s' Y) I
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& G; C6 r% E7 ]" F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% b- I8 l6 [, O# O( l0 u1 S+ c
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& g: F' W) `5 k  M9 O5 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 X7 Y( @6 k$ d0 K9 x+ y

; y1 E. f! k6 e  W- [    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ R" \. s$ u, J    mcasp->regs->XBUF5 = 0;$ t' V+ w5 D. c8 d9 i
    mcasp->regs->RBUF0 = 0;4 e1 A5 f' ^3 P! U
4 Q' ~& X7 N& N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: R$ m9 k/ V3 X" r2 i# O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 Z7 c8 L3 M1 h0 q! i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # H& J9 ^) ~- O! Y# ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& w5 m; A" J- }9 h
9 [5 }; g# y. d' N8 T% A% ~0 q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . t& R! {# X  Y7 z5 d9 v+ t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% n# `- ~* p4 P3 ~" X, y, w( w* w    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( T+ S* S6 d9 i* v' G# W: G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- ^0 M- c5 i* c# `0 D$ x, P1 ?

, o" D+ [/ A) Y! w0 K$ u2 v) ~    CSR = 0x0000;- ]1 g! W. m6 i3 q0 F
    INTC_INTMUX1 = 0x3d;' ~% u; L+ F. e( n) f2 L$ ~# C/ _
    ISTP = (unsigned int)vectors;# V( n. D- }  U* V$ l
    ICR = 0xFFF0;  
, D% F3 b8 I; [3 X! X    IER |= 0x12;  $ A: ]: V+ n9 E1 ^' z. J) o! A
    CSR |= 0x01;  - x- M3 O7 k8 e2 {. A# B

9 S( h) D1 J* y  G2 f! ]
. W" r: t. F) h1 n9 }6 v2 K: O) b7 _1 d8 d
还有就是两个输入输出函数:1 a5 R% P' w% }/ s) Z& D
void output_sample(Int32 out_data)
1 I/ r2 O4 G1 H{! j* P: P) T/ k+ G8 k
  AIC31_data.uint = out_data;  
* f; o9 J1 D$ y% r0 U  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 G2 `* {* x/ _1 C# j9 v! M
}
& n9 U7 t0 q' h9 ^0 V9 `6 d' Y
6 X! U7 N$ J6 h0 BInt32 input_sample(void)
4 m4 G$ s! n9 s) R: a% j{  
& S* s0 ]/ f9 C/ c3 `4 ]  AIC31_data.uint = MCASP1_RBUF0_32BIT;: |* k0 \, U( _8 Y
  return (AIC31_data.uint);
7 q- @2 _: X  ?" o( w0 H& M! i}
1 Y4 U" }" @' t3 Q) q! o. O' x# ^# A
分享到:  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-4 20:30 , Processed in 0.065766 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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