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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( |! @0 L1 N0 l
main文件:7 D9 n8 Z4 }, w+ o7 Q1 r. q' q
interrupt void interrupt4(void)  : E5 ^" l7 i: Z. W6 z2 e. u1 s7 R
{
- g* Y4 }% a# d2 b& I  d  Uint32 sample;
3 \2 l6 \+ G2 q# v  L
6 W: w+ W9 l( g" H# ~8 x6 D; j9 N  sample = input_sample(); // read L + R samples from ADC4 \2 Y2 R8 |/ J2 ~% u. d
  output_sample(sample);   // write L + R samples to DAC 7 C% }8 _+ z, e
  return;2 a/ ?. F" Y* _: K# D# E6 B# `
}
7 Q+ F7 L1 W6 B! ]0 E# |
+ K2 i# Y4 P, i( U" |) Aint main( void )" x; [1 }, N5 A( |% q9 {: I
{+ `+ ^+ H) [) {

2 |) f0 n6 X* `: q9 e    /* Initialize BSL */
+ R; R6 u& g3 F) V    EVMC6747_init( );' ^1 s. j8 ]4 Y" B, h/ k$ V- Q
        /* Call evmc6747_intr function */
, r2 Q4 g& D0 T7 S" L/ m# m) M- H/ D    aic3106_init( );
0 M" B2 O+ @+ L        while(1);4 s0 r) m& D7 I9 c' \$ g! z
}; [) L0 i( A5 _" @
, s+ [1 j( {% @- F

7 Q- m1 W4 C/ I* Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 e( A9 U. P2 p+ z* \4 u
/* Initialize MCASP1 */! D1 u- A+ H, s9 d; S0 i3 ^
    mcasp = &MCASP_MODULE_1;
# R. N9 @7 k1 P' m  K    mcasp->regs->GBLCTL  = 0;       // Reset! z- _- F" K( N2 q
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 |* o% i4 z7 D# K    mcasp->regs->XGBLCTL = 0;       // Reset TX6 w% ^$ x6 L" \' u5 ?
    mcasp->regs->PWRDEMU = 1;       // Free-running
5 ]! g+ U& y% ~( F. K1 W* x4 @, B   // configure McASP0 receive registers( v+ k& O% ~5 M* |9 {
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" ]" ?6 l2 h  L) K& G  S# [+ M
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& F( e, H& @* ^8 l/ y7 ]' `$ h    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
  \9 _, y* e+ _! f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) }, R8 V/ Y  u! w/ Y' X6 `# M    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% O, G! ~/ S$ `4 P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 s( {5 U3 {" T( |" }9 X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, n6 G5 Y" e: s    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 H3 e) v# v. L4 X& y
( M( V' s# q- R+ w% z$ J1 L    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 O* B7 q" M+ V1 o3 w' g    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* E3 L' K; T$ g: @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 W8 Y* o0 X( v; W. p# l# b    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 T) B6 Z. M/ Q) b- Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ t7 r( `; a2 y  p) B( }# ^' I    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 b( z, S4 S2 E8 H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 b: p' v( y/ O9 I& c& H: R
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ?* U( P3 W6 x& W7 ]/ \$ W4 T/ E; c# A( g- r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; d6 P1 M) P& r! m0 l( j0 W
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' T1 W( f  T% ~8 q, x
    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 ]. a0 M  p, }/ S( H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, X" S/ A, C% w4 t& Z6 [2 _/ Z- _* o; {" A: a/ U, b8 w
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 Y( J6 c+ z4 f7 {$ Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used. J6 x& J9 |& F7 c. i( f' A$ p
    mcasp->regs->AMUTE      = 0x00000000; // Not used& A. I/ C# @' r6 G3 q1 @' a" W  v

2 J) a- [' n3 F$ G4 S. l$ I8 l/* Starting sections of the McASP*/
& L5 h2 y: l* d0 O/ Z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 g: n8 d/ e0 S3 O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ D; g7 K: T$ Q# j7 l* g; w3 A/ o
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- |6 x- w9 ^! x, x4 O$ q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' D6 X8 r6 L& P) Y
* m2 L: y5 l9 W
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! [' s1 O) O) u8 @9 l  H0 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* T- h$ y8 g/ H% A  c4 x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " C/ r/ h7 d! ]6 D% K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# t( b" C! R8 Z! J( A$ R
; m+ x- ^0 ^2 N2 C    mcasp->regs->XSTAT = 0x0000ffff; 4 e/ ~3 \& h6 C2 w; p6 t+ i
    mcasp->regs->RSTAT = 0x0000ffff;
+ r- W$ b6 ~1 A* i) F6 Z/ M' x& v) m$ Y0 ?* X$ Q( U
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 G: C+ C; [, m" e5 Z: E! r9 \, k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- [* @: @' w' a4 U. C& ]    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! K6 |7 }. h2 }, P5 I( ?# w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 N2 |  y: B6 s  k$ }9 \2 f; |; K' @; o
    /* Write a 0, so that no underrun occurs after releasing the state machine */9 S) k. R! g: g' D
    mcasp->regs->XBUF5 = 0;
" I2 o6 u, o& e& B6 N% y2 I$ I( |) O* x    mcasp->regs->RBUF0 = 0;
- _/ H* B. Y  C8 W! |( c% f' Y0 w: k/ g- Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& a/ @* c( Y0 P$ c; ^) ?9 V( K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- C5 ]0 J" _8 r. O    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 d' b" y; W' s$ Y# A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ |3 A+ \4 b5 d
! H% A5 B5 F4 u) t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # e* w3 k# Q0 j0 M! k, @9 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 ]& v' n! ~4 l9 b6 p1 Y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, C( w& y7 U. I- X4 V4 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 w1 C6 J5 d6 L  j
1 E: }2 r5 b7 l. ]) p1 Z4 a$ O, J    CSR = 0x0000;$ _+ i) C! L. i8 b1 T5 x  Q2 E
    INTC_INTMUX1 = 0x3d;
0 N# ~, B* D% ~7 z7 w) U( e. v/ {    ISTP = (unsigned int)vectors;0 V  ^/ {2 k; R4 X5 x2 s
    ICR = 0xFFF0;  ' Z# N" S* {2 x' X9 x( M# Q$ z
    IER |= 0x12;  ; M. p. m. o) _
    CSR |= 0x01;  . e7 }7 Q. S4 v% _

/ m, I6 F- c: n2 U/ E; |/ Y# c2 I* {5 {6 j

9 `! x$ l/ n" E# C& r+ {  l5 e3 j2 y还有就是两个输入输出函数:
  d; f7 o; ~: F) y% {3 G7 _void output_sample(Int32 out_data)
' y) r  b% _% ?4 l{2 E# I# m2 a& F, F% Z
  AIC31_data.uint = out_data;  , ~/ M3 ^* I/ z3 W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; A# t  j, X+ Q+ T* z) F: H% i}: o4 R, Q9 P6 T1 @* t) r( s

8 l# x% \2 M. m8 e/ \Int32 input_sample(void)
. d# G3 X7 ~" C; |6 R% \+ x! E: r{  
: h- m& H4 p2 u7 Z0 s  @  AIC31_data.uint = MCASP1_RBUF0_32BIT;' u/ l, J" h' ], e* g) y& Q
  return (AIC31_data.uint);
6 H( F0 m4 a# l' Z$ B}) F6 Q! Y' i+ m* X8 L: D1 {3 o
' p/ g1 ]. Q7 Z- T: W' T
分享到:  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-3-15 02:41 , Processed in 0.045147 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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