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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 a2 g- x( M) N, j
main文件:
' k6 X0 r0 v7 U9 e2 W+ finterrupt void interrupt4(void)  
% m( [8 v8 L) h& o7 J{! q: b( a, T) p  [2 P
  Uint32 sample;* ~' @# c  P% {- |7 N3 F

7 `' v* ]( o5 @7 m0 j  Q. h6 K2 P# ~  sample = input_sample(); // read L + R samples from ADC
) c9 ?4 s% Z6 Y% ?: q# J/ A- r. S  output_sample(sample);   // write L + R samples to DAC " ^3 I- S" h2 q9 P
  return;
( E2 M2 x" w1 i}
  o/ ?2 N$ r# v! f8 k
; b2 V5 j1 n. S: _" Jint main( void ). r2 D0 k8 i/ e5 J
{
. r8 ~. A6 k9 o7 Q& b
0 F% ^" r1 N! \    /* Initialize BSL */
/ `; c/ N5 U, C* \; U    EVMC6747_init( );
0 T9 Q8 _& N$ d: L" I$ r9 \        /* Call evmc6747_intr function */
0 ]4 @* b8 b+ x    aic3106_init( );6 j6 s) v. u3 N* i  k6 Z: ?
        while(1);
9 V; E0 g) J; q8 `% v* v$ K1 T}
) ]" j) ^0 ^6 ?- c  C' {6 F* r% ^: t* }# S/ v/ Y, P! H

" |  A! i8 H( s9 A& I5 \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ \/ v( K% A1 K" s$ W5 ~5 v
/* Initialize MCASP1 */' l1 ~! F4 x; M, b; x) J9 E
    mcasp = &MCASP_MODULE_1;# G+ L; n; @8 j/ O  |# C
    mcasp->regs->GBLCTL  = 0;       // Reset
3 s* u* @  Q/ |1 n9 G+ J9 W    mcasp->regs->RGBLCTL = 0;       // Reset RX
; [' u! Y% y4 c    mcasp->regs->XGBLCTL = 0;       // Reset TX
. }# c$ a6 n) H: B  m    mcasp->regs->PWRDEMU = 1;       // Free-running4 i3 Q7 n  e6 [* l
   // configure McASP0 receive registers" g8 _0 p1 O- x/ }9 R' S
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ Q/ T& D" d6 N3 B/ o& W" S
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' X' u6 T9 D( a7 \! p3 x2 _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% Y4 {' Q9 @! p0 x! r# W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- S* }5 L6 r4 c6 \8 ?  K) h; |    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ a. Z9 \& e9 Q1 s" h+ K
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 U+ I: y0 s: R) D1 m# @! S/ a    mcasp->regs->RINTCTL    = 0x00000000; // Not used, P, p( H* m0 o7 o
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% _+ f0 x  F6 C+ {9 {
* l6 d! l! M6 V! `: l  y/ X! s
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 N3 `$ v) p9 a
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. B6 E- R+ B1 A5 |4 @) u    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 E- N+ R" w# ]    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' @6 E/ G7 V% i( |( e1 |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* t! x& o7 F7 K" }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: e& @* G& _* S* r& H' w    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 j5 T: M* H9 i( j4 Z. g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 f9 w7 v) d9 r) \* b! ]$ O! {/ W, b% m! c, r. B1 g. \2 {0 ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 T/ ^+ H: d% r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' j2 U- _( H( R8 m: J0 H
    mcasp->regs->PFUNC      = 0;          // All MCASPs; R& W4 y& C8 \5 l  P9 H
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' k" ^$ [9 m; W" H: \9 }0 x$ T: B

: Z6 h" s% f) y, k    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 i. C* g0 F* i2 g    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- _7 r/ X, a" \: y' G    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 m6 |3 y! g; _0 ?  z, j" H$ u5 `) K# {5 }% C5 m. \* _. d( l8 M, i
/* Starting sections of the McASP*/
5 h+ D7 `- C, Y8 A# P    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 K/ P/ U9 D/ ^' H; u4 b2 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 ?1 u+ @. L6 ]: h3 T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # G0 r- C7 x4 d- p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 r. D2 e' O( c& b3 R& X1 V# p' F) c3 L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 L2 Z% @! H/ H2 ?6 M/ w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 q) H! l+ ]% G2 t( O    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 g2 Q# ?# z2 ^" {. a# ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ _/ k* j& e3 e, N, o5 q8 X. \! E2 w. u2 }2 Q6 S+ i
    mcasp->regs->XSTAT = 0x0000ffff; 4 |2 g+ M) W8 |/ l: `. {
    mcasp->regs->RSTAT = 0x0000ffff; ! f6 R- ?$ b# ?
+ N! Z* H$ x. ?& t2 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 B; u! N$ x* {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% U" |) m& L/ v- H4 g# L, b, _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , I2 t1 l; s6 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; Z" p/ q5 w9 r; C$ S9 H- N: q4 [3 }! M
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ L8 Y0 R0 {+ k7 W. c5 K! x    mcasp->regs->XBUF5 = 0;: h; C+ g9 v9 S1 q7 |1 u
    mcasp->regs->RBUF0 = 0;
7 e6 P: p# [+ k/ A/ k  r0 ?7 E8 j* J3 p- c3 N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, u% }% S3 y, a: T( k; P3 E  B  e* A$ H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, m# s& w6 E: h( G3 F6 |    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 D& N: k+ I- T0 n# h/ d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) e& s1 m" Z% G& f6 j
! @, J* O9 T7 P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % v1 C5 r; H1 H8 M9 J  u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 V9 o8 z' V" t0 M1 e  U8 a, ]  L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : f9 d7 v. ~- I* s$ S: `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! b! z0 ]) G+ t- T  }+ T4 t
; r/ ?, c: T* Z8 ]
    CSR = 0x0000;$ y) h! M  U* B/ g. I5 h
    INTC_INTMUX1 = 0x3d;' N3 k1 q$ T% Y7 J$ ]) r
    ISTP = (unsigned int)vectors;. i3 Y; v, J- k: Y$ `6 Y* w+ G
    ICR = 0xFFF0;  2 H* P$ |3 \6 A; N" t
    IER |= 0x12;  
6 {% f, q1 q6 C8 ?8 r! Q    CSR |= 0x01;  9 k" ^7 E, f: N: x0 w; Y. j% U- n  B

3 W8 o2 z) C' X' O. m; `$ e: \' D1 @: l2 [# c) i5 ^+ S
+ E' R3 \9 R& W' i
还有就是两个输入输出函数:
" L  `8 O' I) X, R) j) O5 X3 ovoid output_sample(Int32 out_data)1 \+ ~. [6 w# C$ C9 y) t0 x
{. s7 I( x5 u0 J* |3 G, K/ F
  AIC31_data.uint = out_data;  $ o. {: P7 m: o+ d) q
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 g' G7 X2 _( T}( a# }  T8 e$ @0 _
! j% u' N% ?% R  L% N! X8 T( I$ J/ z
Int32 input_sample(void)
% Z( {, u% G5 l) o# ~& k* C6 j5 ]: ?{  " B9 C# |8 `( x' }
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! b. ]; z! h9 e4 f- r4 f0 n! A  return (AIC31_data.uint);
+ K% B0 N0 Y0 ]# _( s- L}  [1 E& r; U; k# D
( h8 }! H- h  g( V$ e
分享到:  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-2-19 01:34 , Processed in 0.041116 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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