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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" m5 H  O9 g) [main文件:
, T* R9 |# a9 uinterrupt void interrupt4(void)  / D# a- A# @# K" S$ t  F- z
{) G3 u5 l' D' B- Y$ u. w2 H
  Uint32 sample;
6 e& z' B7 A; O( y. r1 s  P
) \$ i3 J/ M6 \6 |  sample = input_sample(); // read L + R samples from ADC
: o3 l8 z1 \: n  output_sample(sample);   // write L + R samples to DAC
  A& s, k' [+ x, i6 K) g" ^  return;
% o% ?5 O2 e- S0 \) \: b}7 p; ?8 R& R) Z& [0 Z7 {
9 T: t$ r! _/ v& C
int main( void )9 {7 [+ \$ {+ x% d0 ]" M& ~! e
{
% ~1 [9 O; o6 {+ H3 u$ s- t& e# A; o+ h, A* W
    /* Initialize BSL */2 \; ]; ]$ x; \" k8 |3 b' t: e
    EVMC6747_init( );8 P4 K& e3 H" [9 P' Q6 [
        /* Call evmc6747_intr function */
& T, x& G! z% T" e# ]8 \) V    aic3106_init( );
, h5 u; e3 `2 @) ]; L6 n        while(1);& a2 Y9 U, @1 k
}
, h6 x) [% x! d
" a# Q% f2 u! E8 _( g- P
6 E9 L% J( H  W8 ]0 Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( F) M- u, k9 |2 H/* Initialize MCASP1 */
* P, ]' y1 O- ^    mcasp = &MCASP_MODULE_1;) D# |8 a9 b: }5 z3 \
    mcasp->regs->GBLCTL  = 0;       // Reset8 x7 e9 N0 }. t4 O9 l7 g( B8 n
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" \1 |: ]3 f6 j1 W  p0 i    mcasp->regs->XGBLCTL = 0;       // Reset TX
# x# {+ f! L' S$ I$ v% Z' h    mcasp->regs->PWRDEMU = 1;       // Free-running
& |1 m0 H: y, Q- e! E   // configure McASP0 receive registers
0 S! j, E- Y4 }' G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 j# m' n! X; ?, z" U/ R  f5 p& U/ R5 k( q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" h8 K: N: x& I; S3 _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 T/ Y; }& c# t! c+ E! z/ L6 D5 l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- G% h$ o" Z( ^/ {' I' m( h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- r6 b0 f7 q+ G3 K
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ B( E  O2 o( o3 G8 z+ s. Z6 i    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* H2 E; K% n+ O+ X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 c  }# H" a* {0 M8 [3 W
5 B. Q' R; H. I
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: r; Y8 E/ a) }1 Z% }    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ G6 G: o3 R; g7 Q$ Y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
  G0 S2 d9 N" v  `- |8 z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ N! V+ o! s3 s
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* b# _. U4 g+ |' I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, y+ K' K* k7 p0 P    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- b3 n; N1 S" N) W
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  U' q0 M! ]7 ]5 k

8 \2 I) k% Y2 p9 Q3 F" B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( a- c7 T* M, V+ w/ n- x2 O
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 [" Q) @1 B! D% ~$ D: k1 H0 `1 i% N$ c    mcasp->regs->PFUNC      = 0;          // All MCASPs
' n9 A7 @1 d6 b' J. w3 G    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 @' D$ t' e% _: F9 e
- z: E. x2 V. f/ ^. ]3 V* F    mcasp->regs->DITCTL     = 0x00000000; // Not used
; {6 B8 ~* U' c6 A    mcasp->regs->DLBCTL     = 0x00000000; // Not used- U; h1 d, ~0 o9 A9 a; B' ~
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 u0 e& j+ Q4 f+ e7 u6 o; }6 o( q4 t6 a
% p$ T) b% s3 ~- m: e4 N
/* Starting sections of the McASP*/" P% a  i: a! n9 Q7 `6 H
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 W1 g$ D. G* _4 x8 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 s% ]5 V7 [3 j4 U. F5 T$ ]/ M    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ w& q6 l( A0 m; ]" @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; J/ `$ w0 ?9 ^9 e3 E+ K% {3 b

0 d( y) e6 O- O: j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# @) ^! j$ R2 H: N! [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 X" O6 r9 a7 y4 X; c8 d$ t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ l3 Z/ \2 S/ R3 G$ J$ `9 E6 N$ Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: \1 `8 N* S& s7 l8 p6 B

& }1 M5 `  I2 x' q3 ^7 ~6 e    mcasp->regs->XSTAT = 0x0000ffff; 0 [* P, e/ Q' S' n/ b
    mcasp->regs->RSTAT = 0x0000ffff; - V. F# |! s# p8 ~/ f" u. R

; t3 M  p! x# Y5 U/ d! k! R8 u    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( l: m( ^3 B' ~7 ~& S* T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 q& i+ ?- h  a+ w9 a0 n1 c- n( U    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & j& X+ W, m$ d* ]5 R2 s4 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 U* Q5 G( p. ^" `: ]
& y6 f4 J  I+ C- K0 h6 V8 R5 F
    /* Write a 0, so that no underrun occurs after releasing the state machine */& k1 V; `; g0 u- U2 h2 d- h$ O. L
    mcasp->regs->XBUF5 = 0;7 M2 b! h% A1 [7 |$ w  Q
    mcasp->regs->RBUF0 = 0;7 ^2 T! u( W& \- W; G# d
/ B1 |( c& y. J  o9 N% B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( R9 N  m2 s5 d$ g3 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 y/ L% I4 Q9 m1 L8 |    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 @( A, f' U' n! a7 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ X8 f& |5 _, K$ Z+ U9 t
) S( b( |( v! \) i& i) N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! e# c. ~3 T% V# Y% `* Y8 `+ M, R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. y) i. j" C4 q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 X; ~# Z3 Q5 \8 W( N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; P+ n* I1 l" {; R( F& j0 J
% A- o# r* A, s+ u: }# C) s    CSR = 0x0000;" g' X4 f5 j( h* D& }, x
    INTC_INTMUX1 = 0x3d;# a$ n% z5 l) p% x( [
    ISTP = (unsigned int)vectors;
0 V9 p1 X+ m; o: j& G& l5 K    ICR = 0xFFF0;  
2 T. K0 R* f( u    IER |= 0x12;  2 ~! n' R5 m$ C" a
    CSR |= 0x01;  
* Q1 Q, H3 M# o4 E( H# y6 k" Z) I+ C
) k8 {: E. i0 c9 Y7 k6 |8 C# H9 z) ~$ F- t

) K0 y  u, p' x  ]还有就是两个输入输出函数:* d/ {1 D% I2 G5 m! d
void output_sample(Int32 out_data)2 N! p  `; R0 i' ~9 B) \7 E0 y
{
; @& C( n/ e$ t0 @2 i3 L. t  AIC31_data.uint = out_data;  " t5 ?. ?" j6 h" C7 H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% Y3 e/ N; n; j! I6 N}
6 I$ h. q3 d" q/ D$ ~
. Q( Z8 m' [% I+ R% tInt32 input_sample(void)4 o3 h* f0 l* E7 n% t  r" Z- C
{  / S; c" W' A8 K) X3 z, i8 a; U% M
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! c$ }; f2 {' P+ o  return (AIC31_data.uint);
0 N0 D0 @. N) Z- c, d: A" D0 S2 }}
5 a& |5 U! y; O) N( Y$ }4 W- ^* w: W6 D0 B2 b. U5 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-9 13:14 , Processed in 0.037814 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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