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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 v$ H( _6 e+ W) l
main文件:$ \. H2 I' t/ F% E1 |6 x) ~
interrupt void interrupt4(void)  6 G4 ~9 v/ N5 a0 G8 q
{
: i+ ^- V- `; o( a  Uint32 sample;
+ l/ k* O* N: s+ C4 Y
& `& c  N% B% |7 j5 D: y  sample = input_sample(); // read L + R samples from ADC
/ a, F7 k; Z1 q  output_sample(sample);   // write L + R samples to DAC 1 P: ?: Y6 v" _+ e  X$ z) I
  return;
: Z, a+ Z1 Y' r- H}7 r) f1 J" r% t

5 c) ~0 u/ [7 Iint main( void )
: y5 A) B5 I0 P7 G" K" S& }{$ a, ~0 h: q) Z

% t( d# }1 y, o& C# E4 t8 J    /* Initialize BSL */0 |0 P4 Z2 m0 m, V6 z; P/ ?' V% q2 G% J
    EVMC6747_init( );! ]3 `( F6 i% q5 ]! \  O
        /* Call evmc6747_intr function */0 T7 R( D1 a6 h6 j  i' {" g
    aic3106_init( );
4 P% v: _- @+ U0 F% w2 a        while(1);; n7 F' a2 f4 L0 \. P# Z
}( d6 ]4 i# O! p

( s3 |  D% S$ z: x$ C2 r) B, S" t4 {2 R: h$ k% Q# A1 q( o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ E  S" o; e3 Q2 w/ I+ v! P
/* Initialize MCASP1 */+ n% |* O' u6 `3 e
    mcasp = &MCASP_MODULE_1;9 A2 v. [* X7 \5 d# }8 e- l' ]
    mcasp->regs->GBLCTL  = 0;       // Reset
+ R0 k3 i' r/ a! R7 U    mcasp->regs->RGBLCTL = 0;       // Reset RX
; P: S* w$ m7 F4 @' x    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 J  d  V( B8 c( Q    mcasp->regs->PWRDEMU = 1;       // Free-running
8 l* Y- A1 w2 q& l" G5 P   // configure McASP0 receive registers
3 w* ^5 c% i8 |& i/ N( T    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ T# H" H  d' }7 J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 D: z5 e2 j% n2 \3 ^+ @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 a  e+ Q6 K' E' h) \5 A) L9 \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ ]; M/ }8 P' ^% p* w( C" v" r( H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" m3 c" @/ z  [9 I  e8 y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 ?# n9 C- L+ S* q    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 d8 x6 L% v* W7 E: O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 N" G" @6 N( u+ r1 [/ _+ }

* y7 S7 m2 q5 w' G; h, Y$ y/ b3 e0 ]) m    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
2 z1 f! R+ c* Z1 P' W/ U* c    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" i# Y' u7 T) l, t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" M. l* e4 b4 w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 r+ x. M) s2 U/ x( s$ h
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* U; K0 u4 D' j; Q6 m, X    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- H* ]% o0 Y! w4 b# P# J3 m
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 B; `+ @8 X' n0 Q! M, ?    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ f/ B# o2 J4 D* r3 i

* C' Z2 ~, p9 C$ h" u8 B/ o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! g2 a. j+ S# s8 Y5 i- z1 _% z    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! \$ P9 a1 k  n# X    mcasp->regs->PFUNC      = 0;          // All MCASPs( m; ]  T) K+ Y% D( L
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ A5 m8 H% |6 k; X5 ]6 @) m* N3 G2 ?. b
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 A, Q' l) _  H3 ~, ?9 R7 D2 v9 P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used! t& b7 W1 Q* E# h1 b4 v  E3 U. S7 J2 b
    mcasp->regs->AMUTE      = 0x00000000; // Not used( d" _* R) d$ N- |$ h$ @! S9 E

# \  ?- R5 ?, Q- u! R0 c( |/* Starting sections of the McASP*/
* w  j# Q" e; m+ f7 m& e    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" E3 J5 w' Z1 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! I1 }; U+ R1 c, ^* |    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& L) K5 q1 w7 V. w) f0 o! V, F% g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# y( v8 L- l9 ]8 h4 o, n& \

# n* C: h" {" D4 c    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 q* h' X2 O( d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' J) D; g2 i) O' i8 Z0 {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  C, Q5 E1 I. c- k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 L$ U/ M. B9 D; Y- D8 F& b
" H/ I( c7 M0 l: I: r  e    mcasp->regs->XSTAT = 0x0000ffff; 5 r8 ^7 P( |6 {  d8 R3 E
    mcasp->regs->RSTAT = 0x0000ffff; + a( x6 ?# b# r* O+ [6 q

7 Q9 \% i- d# ?' Y) @4 D* ]& C    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 ~7 f3 E7 T- i$ }$ b0 B/ D1 ]- [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ Y! r, @" v6 C1 y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ u* X# U0 I1 _5 |* p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" A! T% T& U4 J
! O: g! P' d& |# R! z    /* Write a 0, so that no underrun occurs after releasing the state machine */
* f# Y* q! q. v2 e    mcasp->regs->XBUF5 = 0;( C! }6 n3 d* I6 ?0 a* h4 {9 S
    mcasp->regs->RBUF0 = 0;
) D. f7 o" z) m7 Z6 s$ ]; ^
7 v5 e( X" J1 z. U- i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 @7 F5 t+ ~: u# I& Q: d1 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 R( k( m2 h$ [# Y7 s( \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 B( G# r) `( S5 w2 }. j' M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 e7 q: w4 Y) L. s' X7 u* @2 B: O' w) i0 P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 M. G4 Q) e$ A1 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! _' ]/ x) ]6 U9 R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ u) W! P2 D- o# l0 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 k6 A7 b1 V; [. a3 N
5 G- a) T8 S- \4 \  c! y; m    CSR = 0x0000;/ x  L7 F( _, ~" e2 o
    INTC_INTMUX1 = 0x3d;
+ R# d* V5 y8 t: L1 \+ O/ i2 j  l    ISTP = (unsigned int)vectors;
0 R' ]5 B  S1 E( L0 W4 f! g! }2 T    ICR = 0xFFF0;  ! Y4 _- g: [% G+ S
    IER |= 0x12;  
, Y% v/ ], H( }    CSR |= 0x01;  
" O( Z) N/ M$ \% O  V( [- C; L! H/ j/ S0 x- i  B

: V, q* V& |$ u% Y9 F, G0 k2 r3 O! t5 F
( f9 {( J6 l$ `$ ~: X4 d还有就是两个输入输出函数:3 y1 U4 S/ L" C5 R
void output_sample(Int32 out_data)
7 s: @5 `( r- u/ w( j  r{5 ]* W  T- v# N+ J- v1 ~
  AIC31_data.uint = out_data;  
  x; {0 `4 K9 [9 E$ v; y9 b  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% N9 x! S. ]0 B2 i}
2 e( |! q- Z8 o* a1 k% ~7 j& {2 Q
( }: K1 J) P7 `' K8 D- o& d) lInt32 input_sample(void)0 ]( K% l9 K& H+ W2 S' C
{  
7 u3 b7 u( P( `8 m  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# q# k) u- |: D7 s  return (AIC31_data.uint);: S0 ^3 c5 h: t6 C# h( s1 O4 q
}
% R  O6 W0 M% i9 N9 M( a
; T5 k  H6 L5 v4 e! Y
分享到:  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-10 12:40 , Processed in 0.039107 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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