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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' V, b+ i/ a) s: n- K
main文件:
6 z  C2 S- t# u% N- |& binterrupt void interrupt4(void)  
) |+ ~2 J4 X( {{
  ^* c! y, J7 P* S& P  Uint32 sample;/ D% M7 p" v% K0 O1 Q8 b3 R

% A1 \% V2 W4 m8 \, D& L3 M  sample = input_sample(); // read L + R samples from ADC
" e: y( a' P6 t# c  u' a$ l  output_sample(sample);   // write L + R samples to DAC + X2 T8 z7 O/ }! p( E" Y
  return;3 [0 o7 g" h5 n$ m
}
0 C; a1 w% g* M; I4 r* l7 S7 E+ _& s2 Q. ~# x  R
int main( void )
0 ^. H3 P% l+ l9 Z. _) W{; q( u: q" ?! K. e" p: W

/ B* `4 D9 I! b  \& F    /* Initialize BSL */
; \6 e- b8 U( i) I* r6 Z% Z$ P    EVMC6747_init( );
( T+ U' A  p& P0 |! g# |! }        /* Call evmc6747_intr function */8 \2 e" P, U1 s- F. D# v8 X
    aic3106_init( );5 T8 Z) f+ i2 W9 b. `
        while(1);
  P2 L8 E5 z. |}* ~4 w+ w3 y, f

$ n  I3 r1 c+ D: b
& E/ Z& W. ?) [4 Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 A  ~9 G+ i  T- U3 `) ]4 V: Y+ j# i' |
/* Initialize MCASP1 */
  w$ ?. f7 T! s& P  h$ h5 E) a4 y    mcasp = &MCASP_MODULE_1;
( j' b' M" o/ V0 L2 ]$ e    mcasp->regs->GBLCTL  = 0;       // Reset" p7 Q! r4 d3 n) H
    mcasp->regs->RGBLCTL = 0;       // Reset RX
  a' u( n+ k, @    mcasp->regs->XGBLCTL = 0;       // Reset TX
! T0 K! F& r1 G4 e( n$ q    mcasp->regs->PWRDEMU = 1;       // Free-running
% R! L6 L* e# L! P   // configure McASP0 receive registers
' l) N1 y( x+ p' Z. n    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% P% ^/ K% P' m: V9 s6 _    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 \$ L' Z: X/ U; |9 k) u' i5 t1 \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& O: Z# f7 Q  _2 q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 p8 a  ~0 C5 n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& `% N& `0 R9 W& a/ V5 p" f
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% \) f2 J4 T: F    mcasp->regs->RINTCTL    = 0x00000000; // Not used  P0 W9 f2 ~0 g9 O; K+ `8 z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- |, O+ }, ?8 B) I

1 `5 i: Y! z3 c; K8 E3 j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 ?. V. n4 V5 K2 s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ }& \& \1 ?. K, l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 F* O' f: c; X8 r& Q' r8 O2 {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' O; h, p  W' v( U' w; l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- P3 T7 [5 k. i: ]* y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 M! N" e( S: I9 \    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! C) L+ K" h$ @/ I, K) l    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 @# a4 I! y: A7 A0 h# }+ H) ]
2 k7 E. ^% L6 |% H9 h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ {: ?# A/ m8 C8 O) q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! V3 C  B: x  W" K2 Y! ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 K# x9 ^0 X$ F( F7 u8 s! m2 V$ @
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" Y) [* R: n8 f, `& Z
" p9 j; Y2 X6 {' \1 g8 m    mcasp->regs->DITCTL     = 0x00000000; // Not used$ r' U, w9 t/ L: b
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 R3 z/ m7 y0 Q0 D. n
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- d' y2 \- ?+ T. w3 {
. E- V* U6 f' w. G/* Starting sections of the McASP*/. ~+ U  O* q3 ?/ R1 o
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' G4 [- X+ P+ A; G9 d! @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& T/ B, q. a) Y& e0 W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' `! V& s, d% u8 x$ P9 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; u2 b- \+ E' o8 d6 e9 @
" v* v/ r, W! w) b0 |$ A6 \( g3 b1 K
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! V" c. c& \  W. C0 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- f  F0 ~  z9 H5 b# {4 u2 x% p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 C, r. ~4 f8 r- T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 u4 O9 S7 N) E( H) n6 L/ v% E9 {/ s; A' [
    mcasp->regs->XSTAT = 0x0000ffff;
4 v2 J! O; w) i$ e    mcasp->regs->RSTAT = 0x0000ffff;
2 i, L3 i5 i; t1 {7 p# ?9 `$ f* C# Z& a+ [7 I) ^  o/ s
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  X* F. _- C0 Z6 W, L5 P8 j- |* w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 p) m- k) b4 P5 @5 Y/ Q- A
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% {$ d8 G* [% j. o+ s# b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, g8 @' {/ q0 q) V0 T
. u; }# X% n, L4 k4 s    /* Write a 0, so that no underrun occurs after releasing the state machine */
  `$ e, L+ F" V& W; @    mcasp->regs->XBUF5 = 0;
/ |& n% i7 t9 |9 n    mcasp->regs->RBUF0 = 0;
2 b# z; Q, q0 M" C. q
1 s+ o0 p9 {9 p  ^% j) w    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   n" J# M' B( L2 j6 ?, j+ `# i5 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( D) w+ P, q" i* U( t    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 E3 O6 B+ `! `+ w) @6 V& U3 K. ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 w' [% Z- P" j$ T5 {* _3 M

. E, O" I) P0 V4 q& s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ L2 b; v4 F; Z) O4 t* e2 j: }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& @- X- A$ h' W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- j# ]0 ]2 M$ Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" F- P! }5 s* C# p: W- d
! U# z& n' R9 F1 \    CSR = 0x0000;8 g9 q2 n8 i6 O& B; C- M
    INTC_INTMUX1 = 0x3d;* g* L% j+ t- P$ e7 h
    ISTP = (unsigned int)vectors;! h' |' M$ U9 u% R6 S8 q: B- L
    ICR = 0xFFF0;  ( S2 R) ~4 k, s% k
    IER |= 0x12;  8 W9 Q4 l6 l- q: Y
    CSR |= 0x01;  2 w! Q. n0 ?1 M$ v

% M1 i4 C. h% h( S$ }0 h7 \& C6 `2 ~' O3 E# a) l
: L8 B" d( ^8 r# Z4 p* ]
还有就是两个输入输出函数:: t$ y* Z5 C" Z' K+ r
void output_sample(Int32 out_data)
5 C' J% U, D6 E; h& Z/ ?{
: I# _) J8 V4 S* F5 b  AIC31_data.uint = out_data;  
, ]7 W# X& f8 A! t1 ~5 H  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* l0 |2 I( _. _( H) L( j* w}
# _: e) ]9 p( s9 c  e8 y$ x: a7 S' s% S* |8 R
Int32 input_sample(void)2 E) i3 O) w! o5 U- [
{  $ p! k0 L; o( m' g3 O, _+ [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ v+ M' y( }7 d: q# s
  return (AIC31_data.uint);
% P! e$ D* F" X}
# z3 m; r% \. `3 @- K, n' L
) ]. H( Q/ Q% H8 R, k" Z, R
分享到:  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-1-17 07:25 , Processed in 0.040316 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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