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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 V0 E, k. I' K, @* y, z. k
main文件:
$ K2 ~# j/ Q" J. t5 xinterrupt void interrupt4(void)  ) d  w- r9 |. ^4 r1 H. W1 ?6 |$ f
{
3 q5 P; k' O. q+ w  Uint32 sample;2 b/ ]& n0 W) w9 K/ }

( f8 v) T: _( J* e; v  sample = input_sample(); // read L + R samples from ADC
) D/ e: z. @& t/ V! \  output_sample(sample);   // write L + R samples to DAC
& [) X! ^7 }7 j7 r# m8 e+ B  return;$ A8 D$ d4 m# J( A- s  R2 c
}* i; b: {8 {+ E) W

/ N: W, ?! C) x+ v. m% w; Bint main( void )% R" T9 E0 n* Z- G  B
{, ^2 L. w% z  u- U4 k; H6 t
8 n! G! h8 A. z: Z+ r) V7 `' y
    /* Initialize BSL */" k+ U0 ?! f3 F2 V2 ^+ z; r  ^
    EVMC6747_init( );
2 ^) z% r1 F0 U9 L        /* Call evmc6747_intr function */
0 `: |/ {9 |! e! A1 ]& m    aic3106_init( );
! s) v  R! O2 u# e9 z+ H        while(1);
# z! r9 G2 o: o4 x6 u8 l' t# n# {. T! i}, D+ E8 A2 J+ x+ k
/ b% W9 z$ a  c' h4 B
7 W' _2 e3 @! ~# V4 L. U$ `
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! J7 Z% A& V7 N8 z: s/* Initialize MCASP1 */
+ z$ ~) H, W8 D+ h2 r+ ?1 @/ \    mcasp = &MCASP_MODULE_1;
4 k, _/ T+ O- q2 K4 q: p/ N) B+ n    mcasp->regs->GBLCTL  = 0;       // Reset
' L. i# Y" O# |  u2 b. W    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 i6 t) M% s- Q6 U$ r    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ ~7 T! ~- k0 R/ ~, e$ Z- |3 x    mcasp->regs->PWRDEMU = 1;       // Free-running
* Z; ~8 y$ B. J   // configure McASP0 receive registers
: }: V$ z9 U, w8 [! V& c    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 Z# @0 d; y/ y3 j* c% s/ J    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ O% P7 A* X0 R9 Y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  L% p# \) b3 _3 f
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  n3 z5 k( b+ k3 f6 w2 Q+ P6 i
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ k, ?( g7 C/ O1 {
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' d5 P2 {9 ^! ?) r4 K$ R$ c* O+ t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 o+ Y/ {9 B7 ~6 V) b    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ O0 W. t+ k; l4 v2 P

7 x2 f( R. i0 Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 B: D$ S/ s$ p  l! r2 X. ]& E) @7 u: ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" e1 ]. s  u, [& q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& O- C! i) |. [" N( N. N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' y! X; r3 A' ^2 g
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 G; G$ O' I5 U& A# F8 I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, Q% w, ~9 C6 G9 ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 R) p) d2 b/ @, d! _) x8 o    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 }$ q9 z! M$ [- W! Q' m0 t; X0 X$ I$ u' m4 r$ {
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ o4 u4 p* }. [* q- A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 X9 t$ \8 q; h0 o3 }    mcasp->regs->PFUNC      = 0;          // All MCASPs; ^) G; f2 L& O/ \! N7 Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' z9 j( f, u% @& _/ K

, e0 f! T+ I8 y9 Z# b0 c/ e    mcasp->regs->DITCTL     = 0x00000000; // Not used
- G/ \" N. ~7 p6 L/ K1 t5 X    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 ^. j' G$ w' d$ q, R1 F, R6 u
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 c9 u+ e- B0 P3 v# R  I
. u; b" o3 s' R$ C5 ^" e
/* Starting sections of the McASP*/) M  E& t1 V* C+ B2 b! A- i' \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* l3 M4 z! \. }$ N+ ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" Z7 a0 C& d$ j3 X8 }  J6 d  h# |( A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% i  U/ k) C: f! k- h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 q7 S7 l8 K* g4 U0 n+ q

% z+ \3 }) `) ?    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) W8 ?) C# U4 ~& j0 A, \" [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 ^; o+ u& r& s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " }+ G/ Y: o: h& t" \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( D& O$ J% e6 \0 ^9 M+ k
( {2 G* p0 I( A: e% r/ g  N
    mcasp->regs->XSTAT = 0x0000ffff;
3 N" J: \6 V; \7 ^, i6 e+ G    mcasp->regs->RSTAT = 0x0000ffff;
* v. \/ ]: s# ]3 w' n# i1 ~
. t! Y  I( `9 m% w8 Y% G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- u. g! u1 @' f6 M( E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* K# Y6 r7 k3 @7 `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , h1 Y( {# L3 k) M- v' A; x( s: G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  q( S7 v+ v! ]7 b1 X. p
! G$ D+ R# T" j    /* Write a 0, so that no underrun occurs after releasing the state machine */" J6 u9 O4 I: h8 j  f: @
    mcasp->regs->XBUF5 = 0;
0 j: _; U  n% @3 C" c" w    mcasp->regs->RBUF0 = 0;
: M3 ^& R: f) J: d9 W2 u) I1 k- j8 j4 C& {' ?4 o) _; a! A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) h4 _, m+ k2 \3 j1 u& ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 e  m2 W. P5 z$ |: l+ ~: Z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 J0 }& g) v9 i# y; a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% \; J  R, u$ Z' |# J% r+ w
: n" S. Z& Q) C- |, W    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 |/ A# `  b9 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ h: {: p0 t4 ~0 ~    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   P# ]  L' W; s+ T) T- P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# _0 S8 N+ W# b' _2 D+ A2 O
) r" P. P; r% Q+ L$ }% i    CSR = 0x0000;6 r: h3 t( O9 x& {4 j8 M
    INTC_INTMUX1 = 0x3d;
! h# X7 |+ A2 ~% W    ISTP = (unsigned int)vectors;) [$ n) G1 }- ]
    ICR = 0xFFF0;  9 T, g8 b, B) Y: Z2 K
    IER |= 0x12;  
0 Y! z7 I  u( b& b6 v' {: P' b    CSR |= 0x01;  
- g5 d4 g1 S# X' y# Q8 `  i6 ?, w. N; F

9 L2 E" [6 ?# Z2 t$ E
3 P. Q$ {: q. e: L9 j还有就是两个输入输出函数:
7 g6 Y! O7 P7 E" V( c7 Xvoid output_sample(Int32 out_data), c+ q- o- T( h7 R7 N& u+ L! \
{# ?8 a' Q6 R: b1 |$ q
  AIC31_data.uint = out_data;  % _" ?+ q9 W1 o$ x2 V9 z2 e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ J% }7 Q' e$ Y4 `3 v}
, n) s+ l/ r+ m% d7 h2 h" q1 K9 l) B4 N$ A; m0 q
Int32 input_sample(void)
0 I/ Z8 i" j6 V{  8 W7 z+ u1 w; h- P) [2 G
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ c' A% T; M3 o: y. i) x2 L: {+ D. z# v8 b  return (AIC31_data.uint);4 v' }2 ^) m, |, o" U4 W3 C& E2 A' S
}
) d4 L9 w  f: ?9 m4 u' |7 l- v5 h4 G& }3 z5 h1 w9 K  a$ X: L
分享到:  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-28 20:12 , Processed in 0.036421 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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