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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; v# |+ c9 A' S: r% @
main文件:
; J& C# g3 T: k, d$ rinterrupt void interrupt4(void)  
- x4 M, a' z/ {# g5 Y{/ y3 G7 G5 R0 H0 `3 `
  Uint32 sample;
$ D' B8 Y& y* Y. h: q. U
* k% C* E9 P& u$ ^) k  r9 v4 w7 l  sample = input_sample(); // read L + R samples from ADC$ X3 d- w% ?, {  s
  output_sample(sample);   // write L + R samples to DAC
3 c1 k- r7 L, \9 [7 m$ L1 \  return;
, h. G) @* a6 w; h( |5 q}
! H; y6 `: B) ]# k. m8 U* N  |' m' o
int main( void )
* X5 g7 [3 k8 u" p/ w: @{. q2 c* f: X3 I% Y
% f/ V1 I) Y/ j. V5 Q1 L* w
    /* Initialize BSL */
7 d) k9 a' S; b5 C" r9 ~; _& k    EVMC6747_init( );& \$ |  I( _+ ~. l+ q+ F- M1 y
        /* Call evmc6747_intr function */" G; \! g/ }7 E) V2 Z5 P
    aic3106_init( );
( \' o8 Y- U) ]- o' u        while(1);
" w0 y3 s7 C+ C( m7 h}8 ?1 b* t) Z; c

( \: V' Z3 i" r3 Y/ O% B' V" M  ]; [) r( b- I7 u+ P" C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 @9 H' h" ^2 v/* Initialize MCASP1 */2 l2 f  }# x1 W6 G* M) B; N
    mcasp = &MCASP_MODULE_1;; y# K# C+ I4 ~9 k
    mcasp->regs->GBLCTL  = 0;       // Reset
. g7 g; t8 O' P" {, S! ^6 M    mcasp->regs->RGBLCTL = 0;       // Reset RX  a% d$ ]& B; l3 M! o) [1 J; {
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# t4 ?" N6 v8 t4 G9 f7 C* \6 `    mcasp->regs->PWRDEMU = 1;       // Free-running3 u9 Y9 U+ d! ~1 }3 ^& D/ ^
   // configure McASP0 receive registers0 w* T& _/ S2 e" s( X
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 m% y8 q: Q0 D/ A& M4 I& w
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, m9 x7 \7 \/ Z, y& h& c5 U    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( M0 \: R9 h8 o. W2 I* S- b
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 b( ^1 d) r; q3 V6 e; I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( g- K( L" S+ p' t3 \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: q# [, a1 Z0 C6 X$ ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( Y1 A' [! `% x; x    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! c3 e/ c; I% A6 L! K/ b! O" p$ n0 T7 S4 [
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ o9 O: V8 U' A$ P; u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! h( L. |- l; \+ [4 \  M  `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ A1 c! H$ r; r* R) L
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 V% @0 Y5 U3 C2 O0 K7 g
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 n! b% @2 x+ t- h5 ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) ]2 h" ]4 N7 d4 ]/ x- O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. C: O2 m5 ]' d% E* M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( I4 M: e) A1 ?' N7 j6 o

# l  m1 o" u! |( M, S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& F- ]" ~% O+ v- `$ F# C
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 X0 o" k& H# c5 g) j    mcasp->regs->PFUNC      = 0;          // All MCASPs0 b& r! I, `2 N, w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ T; O" G1 x0 u) J: k; N% a& C! F, p, `# @; f) j
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  h% A# Q+ S& Z, v  f: S    mcasp->regs->DLBCTL     = 0x00000000; // Not used, Q& r- f7 D# K4 N: `
    mcasp->regs->AMUTE      = 0x00000000; // Not used  k# F% d1 x4 t: w" P

& S4 v% O6 {  j, u1 w1 }/* Starting sections of the McASP*/9 Z; W0 J% M/ z) {7 `
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( z4 t. T+ Y4 {  f: a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 |  P3 Q. Q) K: e
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * S( O1 B& k, r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ v/ \% E0 L; X2 e$ q- h* Q- g5 T5 x5 z5 ~; r" H6 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % I, j9 g8 [. j+ g( d" h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ h! S% M2 d- T  n. Q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 Q6 ~, R8 \* m1 E/ l/ [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( p+ `( N* b5 v5 b

0 M$ u7 ?: u( i  G. Z2 P    mcasp->regs->XSTAT = 0x0000ffff;
4 Y8 d) N! l2 I7 ~- Q7 P    mcasp->regs->RSTAT = 0x0000ffff; 9 x! l6 U* ^  r

1 |" E' P! d! i$ R; `& N+ Y* q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ r3 I3 P9 V3 u  m( a0 O- _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- ]5 V) N. @! k; C2 ]3 S+ n# x
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - l! p5 m, R' @6 c; W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 u+ ]" i: K# `) q3 T
; C) i) p$ h( U2 o/ r
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) c3 O1 j! ~" ?) l! w$ _1 [& K! O& _    mcasp->regs->XBUF5 = 0;
0 ?! P( {# w( Q) o4 B$ T% _3 I    mcasp->regs->RBUF0 = 0;( a7 i3 M2 b8 M, S0 h& H7 n, y
( U) o; c" P* {8 g8 D6 ], D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 f5 {% P& W& I. A% W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* D# U/ b1 C. k0 p8 D    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. p: K5 W  W! R/ Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: r7 H6 K9 _: [' U/ k$ q

8 \- U6 d/ q4 Q1 @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# t" }, f9 s1 z4 a2 u6 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 u9 N/ ~8 r' t5 `  R5 r5 m" @    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' c+ A, M& C2 c4 J  K. ]0 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ n3 Y3 I! n6 m. q1 b, R% s

+ w9 |9 O6 {7 o    CSR = 0x0000;
" {; Q0 ]. L: u8 q  [    INTC_INTMUX1 = 0x3d;
2 Y7 d" n* r' X7 r7 M    ISTP = (unsigned int)vectors;# d6 |# ^5 b  P$ K5 c
    ICR = 0xFFF0;  - Y, o* }7 J" J: z* {! w2 _
    IER |= 0x12;  # o- v' N, n. z0 T
    CSR |= 0x01;  
4 v& a& l: V$ c: e; l' o: _8 X6 Z/ {  V. A

( O) k5 [2 G8 \8 ?% `: j0 p/ a1 V) b9 w/ j: P% L! r
还有就是两个输入输出函数:: X8 q0 J5 u+ H% P" D: V
void output_sample(Int32 out_data)6 W2 s3 O' X0 N, H! W/ g. h# F
{1 n0 k3 K$ E8 k$ O8 _
  AIC31_data.uint = out_data;  
) b' y# N% ]: v; h  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 q1 |: Z  S& Q$ A; b}
+ ?) `9 M9 ?) Y0 }  B: \* b. T' Q0 Y% z: \  p- O8 W3 ]5 E; Q3 O+ t
Int32 input_sample(void)
% T3 }& l7 \# j3 A7 t% O{  2 d6 U8 k5 @! x; N  l% g0 c
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ A. F/ I! Q" y2 J  return (AIC31_data.uint);8 z7 c# F2 m4 k7 `- g
}
8 `7 ~' U1 |! e, T4 X/ u: r
6 ~3 T, e) I  X' i
分享到:  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-10 22:21 , Processed in 0.038012 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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