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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ N0 ~' T, i- L5 f
main文件:
7 ~  @6 b# t7 V5 n- iinterrupt void interrupt4(void)  . z1 p; a2 h, z" M0 _$ _! G7 {
{! w2 }& V- n; R  [; w
  Uint32 sample;* ^' ^! k0 u7 {1 o9 d4 h# X! c- O
, a7 T! v& Q/ B; `7 k9 e: F, t
  sample = input_sample(); // read L + R samples from ADC
( G$ V% r9 W. {/ j: ^1 Q  output_sample(sample);   // write L + R samples to DAC . h( F5 f/ K& L; B
  return;7 s6 \0 J% y4 n/ ]6 e4 [
}
6 r5 e# N- \1 b( J3 f
( o5 ~7 N) Q. l1 _% _" Q  R# xint main( void )
+ r/ j9 e( D+ r3 x% Z5 Y{' W( e: s; m- y# j4 X7 d, B5 m

" g5 p" B# a( N3 [    /* Initialize BSL */% S* ~  d8 [" ?* g  g! R" w
    EVMC6747_init( );1 I$ t2 N2 i" K) ^  W+ y& H
        /* Call evmc6747_intr function */
4 |' U; N: o! N8 s7 x    aic3106_init( );' D# {: G& _$ Q. x
        while(1);
( J6 k$ u1 M( W}
* C+ {2 A% T7 k% W# d  {* \# O
/ q/ p' _  W- B/ ~5 J) g; x$ ^: U# _# o9 J# O! X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' U" i8 z8 ]. q& R8 k: h/ w% R( x1 p
/* Initialize MCASP1 */
' k* o; ]8 i3 }4 s    mcasp = &MCASP_MODULE_1;# i1 S) K9 L2 W$ D4 D$ x( P
    mcasp->regs->GBLCTL  = 0;       // Reset
0 A" \: x. K4 Z    mcasp->regs->RGBLCTL = 0;       // Reset RX
) ^" D# {4 c: i7 y    mcasp->regs->XGBLCTL = 0;       // Reset TX
. m" b/ T& c$ O" R/ E$ Q( [, \9 M    mcasp->regs->PWRDEMU = 1;       // Free-running
3 _2 F% W; \. l2 o9 G   // configure McASP0 receive registers% F- h" Q& Y3 W, q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 j& \/ c; h3 P3 _6 x4 w* `
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" s7 H' Y+ U: k5 w7 r- L! o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% A9 t* }! T4 F" G* \0 s2 P
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 C; D, t. D8 ^$ _% d- g
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" ^4 K7 }9 P, c9 D* U9 o+ O6 w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 s2 B  v- h5 h; I; e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* Y; B. V( j( k/ _4 M    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) P' X  a! g9 T& H6 w- D

8 h, J/ z+ e# u# J    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! z9 F6 v: ^6 t7 b7 x7 P( s6 z$ Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. I# _+ X  M+ c6 N( A' v; ^    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ p2 P' I) V" h7 z! G    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! F1 j0 V' ]6 C0 Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ p  ]" X0 n* S( k) j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 i7 h+ I% |9 h8 _7 t3 a, f4 W    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  J! D& [# C/ ~, Q" J, h3 f9 p    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ y# k+ V9 u7 @# w. p- Q
; R4 a2 r: S: r" [$ P/ Z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' `- H" K, ?/ P. G
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# A6 r9 u9 i7 R3 x
    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 h# n9 Z; L& ~' K2 |# F6 J& j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( Z: [) o7 h# }* p! y) j2 ?0 n
* R) I; ~; x& O4 O# V    mcasp->regs->DITCTL     = 0x00000000; // Not used+ u+ {1 c5 r0 `6 j) ^+ H9 R
    mcasp->regs->DLBCTL     = 0x00000000; // Not used- e1 G5 v5 L. z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 u) O% j- i. @: a/ k) p9 A# f3 f8 s2 w& Y# q* E" E
/* Starting sections of the McASP*/. Y% {3 V2 @2 a
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% }) V# J0 {3 J9 _; R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 E) @. t1 D& D! _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & d# r3 t% G8 ^6 `* s" K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 V# p  ?# P) x7 x' K" R2 `" ^/ n8 l5 c. ~2 \/ d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 W" k) h, v* f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 B; T4 W' k5 A: B- Y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* L* M3 u0 i; ^7 t' }. j- m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 `- ^# ?7 n" P9 p, `4 p# E. Y; t8 F
    mcasp->regs->XSTAT = 0x0000ffff; 6 U6 {5 G$ V7 ?  W4 m/ K
    mcasp->regs->RSTAT = 0x0000ffff; 7 E# A; N( x, W' Z
( P* I# Y- q; w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. n" Q8 t: E" f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 O6 C$ {+ }. O0 p6 t! Z8 I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 w" R' y0 b( t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& O- L- M" l( w: H

- j: E/ _# n; Q  x3 z# Y    /* Write a 0, so that no underrun occurs after releasing the state machine */5 ^- I8 Z* q9 J$ Y# }* i
    mcasp->regs->XBUF5 = 0;7 o4 z' ], m% E* b
    mcasp->regs->RBUF0 = 0;
2 s- L3 A1 t  q9 L6 I% W: u- u% O% a2 y7 a# c6 N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; W; f8 E! P7 V4 y8 P1 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ G  a2 U7 }! `+ _# Z3 O, k( x    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. \$ z. v0 G+ R9 b( P2 G. B: V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- Z- G8 `7 S' K+ K' D% I
) \: b) f5 W3 i" D# C! S6 j
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: W/ J; m: c2 i/ l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 s8 K5 Z# F' n- [+ d% p+ Z8 s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 `. s" x. @0 k3 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 K4 d8 J0 d& ]3 k! S
' u. [: G( M) l: `& L& Z& G
    CSR = 0x0000;
( W8 F% T/ p2 Q% d; }1 t    INTC_INTMUX1 = 0x3d;* G# ^8 V  j- E3 ^& P% }- q
    ISTP = (unsigned int)vectors;  Q% C: a7 g$ D% X6 F( m  K
    ICR = 0xFFF0;  0 F  u4 R9 c5 a" k: t
    IER |= 0x12;  
* P1 m& r; d( ]6 m, _2 g" d3 v    CSR |= 0x01;  
( h" }" c9 W% ~- a+ u9 I1 I/ H8 X

5 U4 U/ L6 s: |/ l5 J5 z4 N! Q$ G! B6 a! K9 n, h
还有就是两个输入输出函数:
, s0 U( A# n, v; H" E6 k- s- E9 pvoid output_sample(Int32 out_data)
/ h) t% C8 C' ~0 w$ N+ E{% `, \* k% W7 N9 z' k
  AIC31_data.uint = out_data;  
6 b- |# f! j2 u; K  MCASP1_XBUF5_32BIT = AIC31_data.uint;& G$ ]5 W% t& f" X% t( Q* _
}8 @. I. t- w6 f. c
8 ~7 y# t* b! x5 w% f1 d
Int32 input_sample(void)* L  v3 G$ `' A
{  - s1 I: N- A" v3 i: E
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 s0 @6 {) I# C. H( |0 U  return (AIC31_data.uint);
1 D6 _/ S! O, q' C}
& _6 G7 Z' Q, [/ w$ z% P- p
# o' A: _" P% p) ^
分享到:  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-1-20 09:39 , Processed in 0.040922 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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