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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 X, D/ q+ N7 @0 \" q
main文件:- |2 l" d" U/ N2 ^
interrupt void interrupt4(void)  : u( Z7 `# k5 ]5 d$ @* o$ W
{0 V- G; r- [% m" v( U! t& ~
  Uint32 sample;
+ B2 g! \* @/ |& E
9 i+ c3 x# E; `: C) C- G  Q; z  sample = input_sample(); // read L + R samples from ADC) ]1 Q& P4 {3 K: B1 ?
  output_sample(sample);   // write L + R samples to DAC . ?' p. d5 a4 P$ D
  return;
$ O- n, e6 p/ B8 K9 J}6 d5 y: _& Q7 `3 D& |- R
# w4 [  c* o" S( w- R1 {% Y
int main( void )
" v* u9 |! I3 z) f{" _8 g. G4 `& A
( e$ @0 C( d/ K
    /* Initialize BSL */
7 L! k8 }4 r6 \  q6 g( f    EVMC6747_init( );
6 h2 S0 C8 M8 V* Q- w2 `; h6 |        /* Call evmc6747_intr function */5 w" o! {0 [( C5 B  J
    aic3106_init( );
% ^- Z/ J: m) L& U6 _        while(1);) Q) {  Q0 O1 X1 p( k
}
- N: U9 n/ c; J9 G/ I
! B8 M  A6 O( Q$ m
* c1 ~$ t5 h) O6 ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 U5 t+ ]! Z8 ~% U7 h7 j
/* Initialize MCASP1 */
4 f5 u, q) k. G/ x( D    mcasp = &MCASP_MODULE_1;
" J& L( K7 w" X5 U: ^    mcasp->regs->GBLCTL  = 0;       // Reset! X+ x7 h3 A: K6 j( y5 j) O  }3 G
    mcasp->regs->RGBLCTL = 0;       // Reset RX' N& F: j- X- @' Z
    mcasp->regs->XGBLCTL = 0;       // Reset TX9 P/ K: `' [4 |; l/ r
    mcasp->regs->PWRDEMU = 1;       // Free-running
- ~, n$ Z1 h- o9 V   // configure McASP0 receive registers8 z9 g. O4 `9 b- Y& I# f8 G2 h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 z# o$ C- m; s. A' J7 H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; s6 H! u- a5 X% _8 ~    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 A: o, V. n4 r3 S1 }
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" y  F0 e- c7 a$ c; |/ [: c
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 B) a" u& U/ l7 T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 p3 D' y: S- M. n; _& v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 M, d! K) g% P$ R3 J# }& s% y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( T5 a; C( c) Z
3 E2 S( _& `# E) D' y; k
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 k* p2 m0 C* d( c9 w1 m# a    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: ?' ?0 R; l' x, |9 U9 g8 x7 Z( m
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. l- ?0 V+ \, t    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 O4 q1 `$ |/ q/ R  Q7 z) {, [    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- i6 C9 i- A* p  u# }: L6 A
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 k2 a. G, q; q8 {. [
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- f, E" e  B" E" F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 u2 l9 P, G( C: u3 e$ `

: M( ^* a$ R1 r8 }% `3 b, U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ S! K3 Q6 x% U& j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 _) M! W& N* z7 Y. \    mcasp->regs->PFUNC      = 0;          // All MCASPs7 @- x4 D% Y( r4 g
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( a! _/ h( g6 R. A- C
4 v3 m, l" ]9 ^, D5 o% M    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 ?0 {! T: a: n  S% ~  n8 u    mcasp->regs->DLBCTL     = 0x00000000; // Not used( d# l% j. L$ |" v
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ o: _) J- v5 p1 X& v% h0 {* |

: ]3 `4 Y6 H; d1 v( O/* Starting sections of the McASP*/
# k7 r4 x: E) v: b4 o% w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 K4 L% p: h+ Z6 G- I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  o* A$ V& u0 W( v5 e    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 U' {: [: Y: o6 y. a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ ^- t8 c2 Q# X3 s
3 U# _* v6 _3 M: [+ C    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 l: {' _. v( W, S) n6 @' B4 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# y5 `( Z( f  W7 N0 g1 S8 ^4 n    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * o3 @+ c6 N% T9 b( z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 [5 o# _& k4 i
1 m# z! P5 e9 T. [4 `+ o% k0 F/ a- F    mcasp->regs->XSTAT = 0x0000ffff;
0 V7 m  h0 y* C2 u% n) a    mcasp->regs->RSTAT = 0x0000ffff; 6 z# A! N" V& m3 t* Q1 S( g8 v
) S, Z& I7 r8 o! k1 p0 z  y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 `' R" q" ^9 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ _7 I: A$ U  R: h8 y; W
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ c8 x$ ]  w  A! E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; ^" j2 ~2 o: R0 n0 C5 @, g' T& G6 B% P/ V; f
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ h" p/ v1 K$ S1 z# j2 f, ?; ]( `    mcasp->regs->XBUF5 = 0;
% l: d& _" F' G: y    mcasp->regs->RBUF0 = 0;
0 |* P- @. S- x# B7 |1 {+ G, d, Z/ S2 }# s+ H+ K- p
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " z6 {3 T) ]4 x9 u6 X3 M8 X+ }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. N. K1 X; u% Q2 _8 J2 ]2 s5 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; M$ j2 ~9 Z- }) n3 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 x  F; b5 o# M0 [/ Z' M
' A3 e/ d1 x% I+ j! n1 B% {    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 t4 o2 J# w& s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' V1 a# g( Y7 a1 C% D: P$ Z8 J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% G! e. x7 C2 Z1 S+ e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 `( S+ Z+ ~( F8 q, T( |, o# M- V

% b+ F% l; H2 A8 N7 \, \    CSR = 0x0000;
2 N( X# C7 Y8 X    INTC_INTMUX1 = 0x3d;8 Y+ D( @. n$ ]- ]& ~/ e
    ISTP = (unsigned int)vectors;6 v1 p; D) q" [- F. L% U; V$ k
    ICR = 0xFFF0;  % f3 P5 A9 g! q: s9 E" C1 M
    IER |= 0x12;  
3 N8 N; z3 P6 k" w) B0 E& z  g    CSR |= 0x01;  
) t8 X0 t( T$ d3 O% `( y3 a6 ]& l
. o# F0 S# @# k. ~! h
1 c! B; w7 i0 L. ^4 O  [3 F, @8 j1 H0 z
还有就是两个输入输出函数:' R- D- u1 H- B2 Q* a! r
void output_sample(Int32 out_data)
+ ]+ a7 M( c4 t8 ?9 B! s{
& r2 K% \1 S* K9 C6 j9 d: s$ l: L  AIC31_data.uint = out_data;  
5 p7 m7 d! _* q  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ Y( _# S7 v' o* n! i) }1 m}& w0 B6 ^) R9 G* j/ S* j7 _
* s* q9 n. F, k9 l0 f7 {
Int32 input_sample(void)! F+ K2 S3 m* P2 }) |9 e, T  J; c
{  . g2 f1 f/ ~2 Z- L/ [" D$ a7 a
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 K5 U7 P3 q1 x: ~: i; R  return (AIC31_data.uint);
& F, K2 w: Q# [( j}4 J" [: J# D& e4 z( }

" f. i# N/ b* p% l' _
分享到:  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 23:48 , Processed in 0.064892 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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