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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) I8 H) j7 w* T! W
main文件:
5 l4 q' |+ X# r9 o, Sinterrupt void interrupt4(void)  ' r& X$ ^$ u" z- ~0 x$ v
{$ c! r8 H  x7 H( W% F
  Uint32 sample;: }( U7 K: v3 \) y5 q& y
0 s3 m$ e# F" f* V
  sample = input_sample(); // read L + R samples from ADC
& u8 k7 L3 S) e( H: B1 s  output_sample(sample);   // write L + R samples to DAC
! N( E; T, N# V$ y  return;
4 C- e# k( E# _# v/ ]% {, s, J" g}
. |5 I) L' [) Q. Q) Y7 z
4 E1 K6 o! m" G7 i% v1 @. L, _int main( void )9 {0 ~" F/ x1 D
{9 k5 g8 i& `% \) N$ h% F# E. S, [
; M1 Z/ V- Q' V; ^5 B! @5 y1 Y
    /* Initialize BSL */
. I1 y) A# X+ l& ?    EVMC6747_init( );
2 T  I+ n- x6 c: B- |$ i6 y        /* Call evmc6747_intr function */
* g( D4 J" L* l& q4 @8 Z# B    aic3106_init( );- m  `( Q: {, Y" r3 Z' s& E" }: w
        while(1);
3 K* Y' K. G. [9 X4 A}9 |; ^8 X3 A  d
! k- h% h6 ~, ?$ W# x
( f0 S/ M& d, C. v4 I* U( T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: N) p, W1 I# Y0 X1 M+ N
/* Initialize MCASP1 */
8 O" T/ `1 b+ w% o    mcasp = &MCASP_MODULE_1;4 f$ ^( S) \; R7 {- w
    mcasp->regs->GBLCTL  = 0;       // Reset
* X! J, s; z( W    mcasp->regs->RGBLCTL = 0;       // Reset RX1 w/ G4 M8 A: _1 y% l% X" ^2 X
    mcasp->regs->XGBLCTL = 0;       // Reset TX  z/ r: ~# ]# G, V- Q/ @
    mcasp->regs->PWRDEMU = 1;       // Free-running- `) y9 K6 F! T* D3 G: B
   // configure McASP0 receive registers
3 _% ~( V# u  r    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ T& u, h) l4 E% _3 Z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 A+ V8 h3 M5 l$ J4 Q1 S
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: ]" C% D  }) s) \8 S# ]' B    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* C  `+ k! T4 ]% q: L' g( ^    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  D! l' b+ A9 L8 M# P5 b
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) N+ v2 y" T( _0 T    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 R5 g" W2 s2 F  O5 ]
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; K' V9 d% y* \; s) Q- ^
, R' h2 x, K; L+ F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, j0 @  B0 t0 E) {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; O& x  w5 Z# w" ?! f$ f3 z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* L0 `" M5 G+ u! F0 I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 c8 T* L  u' w& c  D    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 G) c6 I! H  i/ e    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 f( h! C1 _$ B5 c. o. Q8 @# `0 ^, ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 @3 a% {2 k" x1 Y" n4 Z/ O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ I( i: l( C) m* A% n
0 G& X. d4 f6 Y1 T/ S, f, N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& W5 o0 Z: T! F0 m
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. c7 ^' G6 [* q, B    mcasp->regs->PFUNC      = 0;          // All MCASPs5 x3 U  B# _- j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, `* A6 ~6 t1 l8 z

9 A" \) X& e2 p$ E) J4 S    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 x9 k- i/ i; c1 J    mcasp->regs->DLBCTL     = 0x00000000; // Not used; {6 f1 ~5 y& Q6 `( X! Z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& g; @& y4 R/ ?* a/ C$ A7 F
8 K* E, O7 V: f/ v# F7 [/* Starting sections of the McASP*/
: m7 F2 e" s* C# @" o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 M) \8 M0 [7 [: D( G7 R' `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : C& e! V+ B( J' i% {% q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 [1 X, L. n& t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ ?# f0 m# s. Z: ]+ l0 z8 C
/ p+ G$ Y6 p8 _4 `' ~, Q' ]7 @
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! t! \. B+ F; q* c" k& W& g* S, a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ [% [3 P/ _" f2 F
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 h" k  K1 G' Z; Y, e, D$ q$ H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- K- R3 \, f5 l# n6 ^4 Z" E. c

% ?' v. ]# l1 T+ C    mcasp->regs->XSTAT = 0x0000ffff; , `6 h' u) }( c
    mcasp->regs->RSTAT = 0x0000ffff;
0 E" v6 y* w) D' d5 c! N# g  T+ L- G0 N4 J# C. c( A8 y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 ^: p, R0 |) x0 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  c  p2 L9 a2 y! g+ A' u* D2 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; t7 p1 M/ F: k( S+ T8 M# L5 G4 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 t7 I9 Y' ]" B, b% S6 v

& }# o1 ]) V6 {+ e    /* Write a 0, so that no underrun occurs after releasing the state machine */8 h# r) n9 d* s1 `
    mcasp->regs->XBUF5 = 0;$ p5 E9 }$ b1 F& k" S$ H
    mcasp->regs->RBUF0 = 0;" V; h% u6 ^  k$ x, A" G8 e

( ^( ]. X2 I3 P6 S" p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 c8 O, A* o! M4 n' q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ [' i3 ^7 C+ l4 [) D9 K3 v1 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 `9 V* G* z0 u* o7 c3 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; X" {, Q. G; ~  b2 K8 a

/ z+ j0 r- M3 F$ X+ e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; ?' w# V/ I4 c& \% M" I& p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( s6 e9 }( x$ k) J/ ~- Q- i! U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: p3 o' y& H9 M/ G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" L5 c# n! E" u" Q4 B
) n7 \% c/ m9 y2 g6 p# N
    CSR = 0x0000;/ ~/ _+ L% B- N5 F5 N
    INTC_INTMUX1 = 0x3d;
( ^/ L0 ~  h' ]! Z5 d7 o    ISTP = (unsigned int)vectors;
, t, P4 w/ Z' @: }' E$ _# B( \    ICR = 0xFFF0;  
7 _1 K$ |7 @( r9 i! }6 B) X3 D% b    IER |= 0x12;  . E" S6 }) r, ?$ Z! S& K
    CSR |= 0x01;  
/ p% s9 o' {' }% }: p: d' ^7 W, m. J8 h0 g/ u. r
% _3 M9 g7 R/ i/ ?8 l7 d. V

! I3 f+ ~' m, a- |0 v4 \8 k还有就是两个输入输出函数:
6 }8 a- k/ Z, j0 J$ k' N. Q& kvoid output_sample(Int32 out_data)  {6 c: h4 W. j! q" O
{: n: j  x/ Z' d0 `( `+ x4 C0 G
  AIC31_data.uint = out_data;  & g1 Z0 e/ L# F) o4 {1 @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# ?" s* U- C1 O& R5 |# F( s* M' K}
) y* M4 G5 W+ ~* M9 ]* _
( l% J2 w. C& ^- Y0 k" zInt32 input_sample(void)3 D6 K/ X# f7 Y6 Y6 T4 y
{  & i3 {: e' }4 \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. L* b* `: D6 `: @$ R% S  return (AIC31_data.uint);2 ]4 ^6 n9 f* I) `, n( q
}# J6 l8 Y: x6 A8 H

3 k2 O2 b1 g& S4 R; m% Z- w! V
分享到:  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-27 20:54 , Processed in 0.043517 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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