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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ j9 m: R2 x) [+ \% ^8 B' k& D
main文件:( q, f6 R" H# s
interrupt void interrupt4(void)  
+ u# `$ k$ I# l0 N6 x7 h8 v, g7 o{
3 R8 z8 f# p, k8 o* y  Uint32 sample;6 d( d( @% K8 h, f1 t

& D% @! O/ a  [6 G2 T5 e" {9 b  sample = input_sample(); // read L + R samples from ADC
( T% a; }, d$ W6 g- P+ l( k  output_sample(sample);   // write L + R samples to DAC
  m% M% q4 N( b2 i! d$ S  return;
0 k6 y  I( C' f& w% O6 ?* d}
; I% A; J6 u$ D8 o( p3 }$ _8 R" Y. t
, i0 H$ L/ A. t) F: Vint main( void )
" b2 e: U' T* Z; A+ i/ F{5 u5 M0 K! {8 r" W" [! p

$ J% {' y0 B% {+ ]+ p6 x- `    /* Initialize BSL */" ?& Q+ f$ \6 y$ `2 S5 G
    EVMC6747_init( );
( \% g) T& l( p        /* Call evmc6747_intr function */
" l( L- r) h$ I; O+ Z* [% K6 G    aic3106_init( );. m- ?1 Y7 D! p0 z
        while(1);1 ~! E' [2 R# F# C2 H0 V+ }
}7 g2 a4 X2 t; s

3 V! y) u9 M- r
) E7 A/ R% V* E( v2 V' f- Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# X7 @" a3 C' N1 p. K. ?/ C/* Initialize MCASP1 */! c7 c. y8 w) }
    mcasp = &MCASP_MODULE_1;
) ]' e2 v; P" H) o! ^+ D( Y    mcasp->regs->GBLCTL  = 0;       // Reset$ i* A( {  j; C) R" v7 _4 I
    mcasp->regs->RGBLCTL = 0;       // Reset RX+ X- e5 ~; C% a1 B
    mcasp->regs->XGBLCTL = 0;       // Reset TX
. [' _8 e+ b' g) A    mcasp->regs->PWRDEMU = 1;       // Free-running) ^. d6 Z4 @6 `  K+ h! L
   // configure McASP0 receive registers5 X' ^( k+ b/ L6 {
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ H3 x% B/ O" |9 ]    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 L) v- X5 E. w- x3 V+ j
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* ~# I7 \/ ~  a7 p9 V
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); {! J: R$ T' B5 f7 c1 S5 D
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 g3 Y( U% t5 ]3 d% C; k, [
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 ]8 _5 c( b: h0 {& n4 _    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  V! ]6 S! E1 L( I! U/ _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: x5 O9 f, v; G" K. I# Z3 G* q+ l/ ^' \+ L* I9 M# \
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# ~" e; U6 G- V- n6 v    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ r0 f! A' a3 P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 t5 s# d/ A" h0 |* w- e4 E. Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& {1 e7 A+ x$ J+ D    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 g# u+ @/ w9 s/ b7 s
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; S, Y2 ^; Z7 P. n# u" ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 Q  g6 |. i' N* T' y4 d  A; [    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 J( ?- {; h/ e* i" a1 _

% d$ j  w1 g2 L, ~2 J: M6 J    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- v( B1 X! R0 B. U3 _2 R7 A0 z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 C7 j/ O, Z2 N* [# X  T    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 U1 U( M: L* M5 L. P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# B/ j- w* ]: w8 V0 @3 n
$ _# g* H4 w; M  e4 K4 e; l  j4 ^    mcasp->regs->DITCTL     = 0x00000000; // Not used6 `8 I1 l( P$ ^/ g4 I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' o" B2 ^$ c9 l9 C
    mcasp->regs->AMUTE      = 0x00000000; // Not used
. A1 c& p% d1 O- ~4 U# }+ c- P# k( z7 J4 p
/* Starting sections of the McASP*/5 \8 H8 _" O7 R* b2 k4 w5 c
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 j- p9 C/ z/ S; x; b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  W; x+ y4 `, D9 w7 `$ ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   L/ m& K: w( `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ Z2 ]- I0 P. y
# O/ I* P" Z6 r5 F& ]5 c    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: |- P) M$ a8 C- g  b3 I2 [; y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 z: U9 ~2 j* p8 o1 v" T+ _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 P- n. j# Q4 S% p+ H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ E1 h2 T5 O. `! j
/ s4 U! G, E' Z) x1 t* A( J: {
    mcasp->regs->XSTAT = 0x0000ffff;
$ `$ y3 O/ J! ?    mcasp->regs->RSTAT = 0x0000ffff;
5 a! ?9 V4 [3 P1 W' L6 K" D% I+ r$ T! l: S9 G* B
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 m5 G4 f$ P* D6 N7 Y( r& \1 e, u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 B- c% C" G, v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 w6 Y  F' a" K* t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; p8 q1 s/ p: v2 }6 P! Y

4 u: C# Z$ i0 L1 Y5 E" j: ]    /* Write a 0, so that no underrun occurs after releasing the state machine */+ i2 X3 w7 U, Q) D3 J' U2 ~! A
    mcasp->regs->XBUF5 = 0;
( r' ~( n4 f" p  F' @    mcasp->regs->RBUF0 = 0;! b  ^' F+ f, L6 [4 r  s

" q0 H( l8 n& b& R) \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: i9 O9 ?2 j+ w, |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  e1 Q6 l* ^( d, q! @3 k: m1 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / N0 c3 ]' e* g: H1 w7 s+ L9 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 K; n3 r5 @+ s9 t
8 s2 ~* x6 H! d# d- _0 y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 O9 ~# k6 r! q7 W* f. y; H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, y: V7 }- S" J
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! O1 R  y, C3 i. ^% F8 K7 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) o8 p$ }! ^) A
" I: X: }. e  w# t$ m4 ]4 U6 I. U
    CSR = 0x0000;
) j' H/ `* {( D1 L) w( [    INTC_INTMUX1 = 0x3d;2 Q) C0 o7 ?' F7 y5 l1 M
    ISTP = (unsigned int)vectors;6 G+ n; t9 ~5 X6 a' Q& s
    ICR = 0xFFF0;  
+ b& h; p8 \  w* m. V    IER |= 0x12;  
% e1 k# @2 ]+ b% [; {: U" q    CSR |= 0x01;  
# z. p; J- b, v5 E  J5 V9 N8 q/ Z7 v8 \

% h% ]0 C3 V7 n* c! X9 }- M. a" \
还有就是两个输入输出函数:
) o7 l2 s$ ]( xvoid output_sample(Int32 out_data)
9 W/ l* r0 y: ~" O6 {! |1 @{" t' o/ X+ b) A, \
  AIC31_data.uint = out_data;  / J1 G( i" \" ~/ z" F9 x# l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 e! c3 M" j' [}! T" W) y# \3 Q

+ S* t+ h) E5 R, m. h7 P5 ]3 R$ eInt32 input_sample(void); @' ?( a+ A+ b8 y  {. m
{  
, @) f: G8 b+ j  U5 C5 b2 t7 {- I  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& n! l! L  d& F' q  return (AIC31_data.uint);
$ r8 ~  j/ N; A/ g& a& S( e& y}, h( M3 y2 n2 I
) ^. g9 s0 Z# 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-2-5 07:43 , Processed in 0.042604 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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