C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: l7 g8 W- P' g& J, B8 E+ i% b7 e/ O
main文件:' m$ U+ ?) T% E: ~# c
interrupt void interrupt4(void)  2 o/ ~6 j( @0 @7 x# ]
{
, T, ^' J* Y* g9 ?, n5 z9 |$ K1 y  Uint32 sample;
" Q& @# D0 p# e: `1 X" o7 M
5 x: V/ o5 c: a! Y* b4 h$ @  sample = input_sample(); // read L + R samples from ADC
3 x- c0 ^; o; ]- F1 D9 L" S" ]  output_sample(sample);   // write L + R samples to DAC 4 j9 P; l  {6 Y" G6 D4 Y
  return;
9 K5 z7 h) W5 }) F4 ]# p}
7 V/ i( C3 J6 _2 i2 R; U1 Y
" v' E" n  \# d3 Q% jint main( void )
2 x/ m* m- b$ u7 S& `5 o( l  _{- W/ y7 B" ]+ {: n% x6 U

7 T) s$ Q. S, P) x5 m8 t' d4 k    /* Initialize BSL */5 A7 @' E, e8 I) ^6 W2 k, N
    EVMC6747_init( );- m, {  n3 E$ C/ p4 ~" m
        /* Call evmc6747_intr function */8 M' W* m0 [" @+ T
    aic3106_init( );: D7 D- s$ M% y& O
        while(1);7 Z+ C9 ^  B0 P" X
}
4 |% O. W2 i) V7 }" P1 {/ k5 p2 ]7 S$ w/ k2 `* R4 _: e
3 }0 M, e& E: h; I+ I& `! Q$ X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# \4 s' W. g2 r/* Initialize MCASP1 */
; Q& l& t. A5 L' F. \8 Y    mcasp = &MCASP_MODULE_1;
3 w  Z/ f6 \" C' n    mcasp->regs->GBLCTL  = 0;       // Reset) \3 F# q6 B  M2 U9 f
    mcasp->regs->RGBLCTL = 0;       // Reset RX# P# y& o8 e0 b; J
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 y+ _7 k9 N! J3 j0 `! Q- S
    mcasp->regs->PWRDEMU = 1;       // Free-running0 j3 ?. v" P& N/ M
   // configure McASP0 receive registers
6 ~. M3 C4 ~8 E( n$ Q9 k4 R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, m1 Q- R* {  Y$ J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 L' A: Q3 V) _( s/ ^0 M# M
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 D6 ?, e" V; Z, @6 k
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" l; }1 X3 w8 h5 Q" t7 ~. z8 J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( H  P; ]6 m. d
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: h0 U; J9 u1 q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 ?& ^' @+ b5 \% {! G% z! E4 F) A# p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 W( e2 s1 X7 {9 D  y: O& n! x5 c) D( o2 _$ L4 a9 O( h
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 y+ A$ \. C/ z+ ]" I2 n    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 M( J# q4 U$ N6 t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% L! n8 t1 [. A& w* A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, I0 A6 Y# G' j+ D    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 ^, Z( ^; M" u* X. |    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; Y" r9 r& c# X. X0 n+ H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. X7 W2 H, N( K& g$ e1 r
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( w) O5 B& H% [
4 i: }; Z! H. Y0 w8 k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 s' q' o4 F7 p- d* W9 P, p7 `6 S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" f5 Y6 v6 h' S. E. R$ i, S
    mcasp->regs->PFUNC      = 0;          // All MCASPs% U5 _# }$ ^  M  N
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 u# j0 N* g6 F6 n6 r, K3 V: m, D

) W* J9 o! |) a! W$ P    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ a$ S- s5 a4 U/ Z    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* L% m7 w1 \  F0 E    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 L; T. ?' h/ x: @. \6 C$ s# J& F3 w# r+ `
/* Starting sections of the McASP*/
  u2 z6 D7 V: k    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 [, {5 `+ P# b, n% Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
; U! d5 k  ~9 B3 \9 g( c/ b    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / ]$ V  Z8 t* E; L" h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) C7 D, }5 N/ l: w
1 ]1 f7 \" @4 T; Q+ @6 J( j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / X/ s$ W3 @6 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E& ?/ L& b9 w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; H* Q: t6 U7 v$ ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 ]  t6 l1 G; T$ j: b& f- B: _5 O( Z' D4 g$ @0 s* {1 `
    mcasp->regs->XSTAT = 0x0000ffff;
" i8 O& k# [( B# _" E    mcasp->regs->RSTAT = 0x0000ffff;
' u5 E! F  z4 F- ^
; l5 j) H* N/ C1 B1 Y, L    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% j1 E$ b* Y! |# `9 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( X  e( A2 m9 R7 z. `
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( F, [4 J# Y2 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- f& k7 q% M6 e  B+ g' T9 z8 C+ P( x
0 N* G- y  j* K  L! |4 |    /* Write a 0, so that no underrun occurs after releasing the state machine */0 n( s- w# b5 }' s8 j* B
    mcasp->regs->XBUF5 = 0;
$ l) s" N' _" a$ E: o    mcasp->regs->RBUF0 = 0;9 c8 s' Y* o$ {/ }% x
8 z+ l4 M) O9 Y, }* d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, M; G9 }9 y3 W" {# I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 ~0 @; S& L; v6 O' b# ~# c# K    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . S- Q6 g. n8 b# V7 {8 `; w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ i6 J+ M5 a; a  ]+ I% L
. |8 |; q4 Q4 p0 ?. E5 o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) c1 H: M% _' a. o* i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, U  [0 A$ L' ?' T  T    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / Z2 _- s4 t& q! _& T8 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 `- f, P6 Y: _) i6 c. @- t
4 K% x1 D& Q: i5 Y3 Z2 }4 ?9 ~    CSR = 0x0000;: Q2 \* p. F7 L
    INTC_INTMUX1 = 0x3d;
9 |9 }5 c0 ?, T6 G0 o4 `7 {1 m    ISTP = (unsigned int)vectors;
5 a* J; {' A. j$ k+ D    ICR = 0xFFF0;  - r( n, y, _5 I8 C0 Q
    IER |= 0x12;  ; d5 \" x0 r/ p1 o9 U
    CSR |= 0x01;  
2 w5 X# _- }/ K0 _! ]  K
" @* H$ L# v5 X% ?8 C: f
3 |& n5 x# v5 ^4 s+ |( ^/ j1 L. y
& U8 Y1 r0 W0 [5 i还有就是两个输入输出函数:
9 `; c7 p, l# E+ a. Nvoid output_sample(Int32 out_data)
& R4 U& W5 n; \  ^8 J* U/ K{1 X4 b  w7 D9 M$ F5 p$ K4 X9 I! }
  AIC31_data.uint = out_data;  
; I/ g! w8 T1 m4 s! T  MCASP1_XBUF5_32BIT = AIC31_data.uint;) }+ P' M- a, q' m# ?' e
}# O$ @* d' |" t

# J6 P$ T; r% a6 C0 S2 xInt32 input_sample(void)
' ^! w  S3 f, S# h0 j& K1 L{  6 t+ n5 q6 E& m' }  R  Z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;" K, o* s4 Q/ I$ c& |( E
  return (AIC31_data.uint);# s' _% k; Q2 \: ~5 F6 m" J) [
}( R6 ?+ d- ]  }. v3 K, B

" [1 U) Z. H+ {% {; d; C: k
分享到:  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, 2025-11-24 02:10 , Processed in 0.224623 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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