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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 I/ }7 Z' J' K- E
main文件:/ O4 [" g' ~1 I' _) ^8 @2 S7 t7 A
interrupt void interrupt4(void)  
$ E9 c& ^7 P4 W! E6 R5 U9 e{
1 M, K) a% L7 |6 e" N  Uint32 sample;& I8 B9 T3 l  j) U. ?  G0 [
9 `. D) P( y" F: {: d! R: a
  sample = input_sample(); // read L + R samples from ADC
$ V* n! x" @; q2 {' h  output_sample(sample);   // write L + R samples to DAC
6 U) p4 a/ N( l$ r: ^" L  return;+ b; u& O& r$ m0 W/ Y! f
}4 y, b5 j$ N2 [0 I& K& M
. \/ O$ D9 i/ _
int main( void )% g5 g  U4 _+ y2 \! W' F( l
{: A6 q9 C3 C* ^' E: p

) [& |  C. q6 }( A, a  G- g    /* Initialize BSL */9 d) M0 d) d; z+ j
    EVMC6747_init( );; t- r: P6 @' f7 l% t
        /* Call evmc6747_intr function */
  \5 _% o& d; r4 l  D; j    aic3106_init( );
) j/ h+ W  G0 E$ }- t        while(1);
1 H# ~6 I2 k3 G}
, A5 A2 ]3 B: [9 y. R4 i* ^7 G) m% d' U5 ^
! f0 t7 O; t# B9 W
3 i% w! E0 U( paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 j1 n" E1 k( U3 g+ o/* Initialize MCASP1 */
5 y: ~7 a$ K( C    mcasp = &MCASP_MODULE_1;8 Y; y8 F/ X# V0 G
    mcasp->regs->GBLCTL  = 0;       // Reset
8 y- m# ?! N( p- G: g! k1 Y3 T    mcasp->regs->RGBLCTL = 0;       // Reset RX) w5 \  u7 ?1 }0 Z% f' x
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; P4 n3 w- k$ H7 O  M1 M    mcasp->regs->PWRDEMU = 1;       // Free-running3 P) T  i4 q6 H- ]% \2 o2 n
   // configure McASP0 receive registers& V% J# y7 n0 @) {5 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ p4 F+ ]7 ^; D+ |8 f: W% |1 u    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ y* [) X/ d; V# t; L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# z& x- ^0 i# S, e, v1 l7 i- I
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! n* p1 x0 m3 g* _# Q( j
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 N( N/ q' R5 }  Q" Q# z- H& K5 E    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. d8 C8 Y) M, I5 \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used# C- b  m( {/ ^0 R0 A- i
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: p2 l& y) I  N) G4 B, i
; [4 z7 v' m/ p2 n4 y7 S* V  T    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) W6 Z5 E9 u" E! k
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- h( P  \4 w) b$ h" k1 \! ]    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 H/ o( }0 O4 v  j: n( @0 f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! O  f# Z9 h4 N6 p6 b( q! k8 q% L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. k0 p5 k* h# D$ c' u; M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 t8 J! U2 d0 T* o0 ~( P    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) a& R# c& {+ D/ Q+ X0 a' u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ z9 K; W# ~/ E' R! M2 |* G5 t# L: ~) u( Z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! C- |$ d) U; `: U
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# \, G8 e, r0 s% W. E1 ^% \    mcasp->regs->PFUNC      = 0;          // All MCASPs
% ^' U8 s6 b% z) ?( @0 @* Q5 D    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 ~5 }, ~' U9 C8 J( d0 `
) |: a* r) Q2 L8 {    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 i) I7 `5 Q. c" \9 G# `1 y, ^+ ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 p4 h6 ~. n6 M( k$ k; v    mcasp->regs->AMUTE      = 0x00000000; // Not used
, ?$ E5 S$ a, y
' N$ u0 i: `+ B* X# w/* Starting sections of the McASP*/) Q  a$ L6 M: U0 u* M3 H. l, o& Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; H" Z2 C; [$ x2 ]: m8 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 @4 z! l, o2 P& W
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& R: \6 k2 R6 i# z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( `# W6 [) `( t6 ]6 }4 D7 p$ s; M+ |7 {8 E. ^; g
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ g& w# R+ D& U6 V3 p# J& _" k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* \$ k. F4 z2 e3 Q7 J    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' F* G. @& j/ L6 C5 u) J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 y2 Q2 s7 j+ X) q/ ]: l
- l, L9 x, `" K% |    mcasp->regs->XSTAT = 0x0000ffff;
( V# f( j4 g) w) ^& }$ T! d7 ^    mcasp->regs->RSTAT = 0x0000ffff; 9 _' i1 V- l4 ^+ \/ k. {
+ r; q) V7 Y3 A2 D" G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 `/ y  v- H" d( H8 p& P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, s( _. Z: ?/ }' t+ s7 O8 P
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : s/ S8 g: C5 n2 x; c. V8 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, H8 ~7 M" X% ]+ s; \- B) y
! ~: ^! \6 A0 {( ~% Y+ b7 t& |2 V( {* L
    /* Write a 0, so that no underrun occurs after releasing the state machine */' A. N+ V$ C1 u0 \7 p
    mcasp->regs->XBUF5 = 0;
5 R4 x, {9 M: a$ N/ I2 `) V    mcasp->regs->RBUF0 = 0;
0 l! Q# g/ s9 {: {/ m3 W2 d$ [; d' R
' ]' U+ [$ `4 G/ {0 X, [; t' H    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! E4 S* z# O7 c" L; K8 r) W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 i  ^; M: I& {/ j) ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! U( d$ _& q* B, h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! u  ]3 z' I# m3 G% b  X+ |6 [/ P9 G9 q& f9 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 p. r1 K* A  u, V$ ~; g, D6 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 r: t7 f3 j" q$ X  A  m% L8 c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% b  E- f; q9 K( Y- z: Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& W* T/ t$ `' Q/ h" s! C3 T

* r, x0 n' D) z8 h( _4 p    CSR = 0x0000;
6 S3 |  e/ t+ r5 b, y    INTC_INTMUX1 = 0x3d;
$ ^& n$ e. G* d2 v* R! Q* o    ISTP = (unsigned int)vectors;
( D. U; E) f4 u, x8 C8 d; e    ICR = 0xFFF0;  
; B& Y9 u& N( D( V" `    IER |= 0x12;  % Y8 V/ }6 K+ b: G* C0 X3 B5 E
    CSR |= 0x01;  
7 ?, j5 z% Y: P9 }5 w0 F/ c0 ^2 z* i2 p3 Q
9 l2 N; i7 C0 T) ?
/ W. q9 Q7 @" M+ ]" x
还有就是两个输入输出函数:& B% |) d2 \- ^7 _
void output_sample(Int32 out_data)  Y' C! f6 M1 S) i! m! f
{
0 I- L" {9 O) F: e5 t8 L  AIC31_data.uint = out_data;  
3 |" c  N5 T, t/ N5 c  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 x& b6 ^4 f# C3 w! }2 e  j
}0 v+ J5 S/ Q" b+ I$ b- f

0 P+ J2 G1 y1 O+ u; fInt32 input_sample(void)
; A& K7 s. c- ~% Y, w9 K3 j) a{  
* W5 h$ K0 Z6 V. h4 G0 A# @  AIC31_data.uint = MCASP1_RBUF0_32BIT;! q9 Z$ A4 P  `
  return (AIC31_data.uint);, a/ M; G5 }. c. I) H% y
}
$ y* ]# d, D5 r; g' l3 @9 i2 f
/ |& e" H% t0 m. h1 C9 G
分享到:  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-9 18:30 , Processed in 0.038740 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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