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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* N5 Y' H* _0 M
main文件:
, F+ |) `0 _6 `) M5 ], f; Q2 D0 V5 Ninterrupt void interrupt4(void)  ! ]- C# z# _1 g0 t* h8 A
{
1 L# _3 t8 T+ }  w9 l( B  Uint32 sample;8 g0 m. u$ r( X. b
% w$ ]: C. _1 Y" l' J
  sample = input_sample(); // read L + R samples from ADC
0 @- \$ H/ i0 c4 j! q* \1 G5 _  output_sample(sample);   // write L + R samples to DAC
( g+ ^9 _0 @- L. G# m* W  return;* r$ k) C- f  J" N7 D# `
}
$ s- Y/ a1 H/ `: m
8 |* Z  c% w$ s! h4 G+ b( w4 M3 hint main( void )
7 h8 A, E6 w7 B: ~{
  X* A1 C3 ]  `3 a! f  Z* E6 T! Z, W/ I9 ?4 U$ t
    /* Initialize BSL */
% s6 K) I, W4 s* c: R1 w    EVMC6747_init( );8 H) w' D$ Z  o( L7 l& S
        /* Call evmc6747_intr function */0 Y& x2 L, D$ R( z( U- {6 k* x
    aic3106_init( );
! R7 h9 r% `# v: i        while(1);; v+ Y' X' x/ h7 o  G5 q
}) m/ w* P5 z8 j2 ]$ o' l
0 Q  j2 z: d+ V0 F0 K# j5 t
! p3 \. {% i  W" q2 N% \; B
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 A7 r. M# G+ C1 s, \0 F/* Initialize MCASP1 */
" A' @9 x% n( \5 S* D7 r    mcasp = &MCASP_MODULE_1;( X. I, q! S3 b% }. Y( B! t
    mcasp->regs->GBLCTL  = 0;       // Reset3 n. [% }8 R+ b% ~$ y- h: n# u
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 j3 t; v* a& F$ l' A3 f6 `& R
    mcasp->regs->XGBLCTL = 0;       // Reset TX
* s+ D. L5 `! h8 N, N    mcasp->regs->PWRDEMU = 1;       // Free-running% y3 o/ Y9 `* t* {
   // configure McASP0 receive registers1 f4 J9 r! [1 p- v
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' Q/ ?+ {* G9 f1 @
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 W5 i6 g" r/ z2 h; T. J# e    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 @5 ]- I* ]' L% r    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 V) U7 c& G  C' J: B: D5 l: Q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' q4 W* k8 {! k& B7 k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ Y7 C- d: P6 h& {" t    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 S% ^3 ?/ a/ c* g6 g5 p' s
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. E) H4 M9 z2 [( F) ~8 p, k

, A. _9 z6 g# v% ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 J* d1 `* q8 I2 n% N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  u! t5 T5 G3 ?; }, W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 d) s: }4 }! M  W' `/ D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 A7 S6 {. y! e6 p6 x% q$ C* }    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
2 L/ A# F; z& v' Q5 }3 o9 b    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% c; n% o- K9 y) u2 F7 ~' g2 }    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) c% \2 B; y& A- [6 S4 U
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- F9 X6 l; h& D  c

8 q0 Y: H  K' H0 g5 U! @    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; p! t! C1 ^; I) k0 Y) f; C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* g( V( N; ]: U2 ]
    mcasp->regs->PFUNC      = 0;          // All MCASPs, u  b% b. P0 v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 J5 e' }8 e" K: |: U

1 A" v" n9 q; h% v6 W, p9 i    mcasp->regs->DITCTL     = 0x00000000; // Not used8 _6 x, \$ {' G& B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! M9 D" T9 A9 C) ^4 g% I4 ?    mcasp->regs->AMUTE      = 0x00000000; // Not used. W6 o: o) q" m9 H  c2 `7 N  I
8 Y: O0 H) b! V8 I
/* Starting sections of the McASP*/
& |# Z5 v1 w9 @$ ~& u7 i1 O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 E& ]# ?! x4 O, C* V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 D( U' _5 _$ M  ~, S1 d$ b3 l
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# d$ R9 D$ M8 f! `; i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 F9 g' f: D" V* j4 `! @- Y5 ?0 V( f
8 G$ X7 J! ?6 \, B- z8 W/ \9 a    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 g* h* b  R. i4 ]" [; |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 O. I* `$ R) G' ^$ z+ k# w: L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 Q5 f" a- W, S! B) Q: @; v# j( h& }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 U3 J: G% N3 e0 f$ g$ ]/ N" A9 o5 t$ H+ `0 ~" z! T
    mcasp->regs->XSTAT = 0x0000ffff;
! ]- K! |, d8 }& S8 N    mcasp->regs->RSTAT = 0x0000ffff;
' b  h9 {8 ~3 |( ?0 |$ B0 y1 D0 x  P2 B' j2 n" M: P
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* Z' D4 D) O1 G. O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. O6 Z/ o4 b4 G9 T0 d- C    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) Q- H; {4 n2 l1 a0 O0 X( L5 {4 c/ h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 ~7 P: u. I+ s: R
" W" ~6 X) l8 Z+ a. a! J! P! q. H; Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */- n; I* Z4 L* Q
    mcasp->regs->XBUF5 = 0;
, ^9 ^1 w( i1 `0 l9 Y$ \) a- v    mcasp->regs->RBUF0 = 0;! t! [. |9 A3 ?. I5 k" J

8 ^- a1 v0 ]$ m* V# @( w: S7 @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 p; C9 o" X5 b0 q2 ^$ `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 c% z7 g! w9 a
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 n3 S- n. }) C1 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 t) N$ i- z+ }% H/ s: Z( z/ p

  `5 A) l, A8 D    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 O9 A) j- H8 m3 r/ l. u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ J' O9 r* M4 A0 T9 N" ~. W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( n( Y& e4 Q- }+ M: m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, W/ A# |& o* S

! G0 U/ ?" p: b8 g  D) E    CSR = 0x0000;
& R# w% x4 y# N" L/ h: X  l    INTC_INTMUX1 = 0x3d;
0 P$ q0 n$ n" m5 ]% w    ISTP = (unsigned int)vectors;
9 A, |  I3 u6 a6 m: w) `) l5 j: I    ICR = 0xFFF0;  
1 |& |$ t8 {( ]    IER |= 0x12;  ; ]( |; j6 I$ D( Q0 o! E/ D
    CSR |= 0x01;  
/ @/ D1 q8 F) B( q6 ~# V' F: w6 C5 [4 R4 Z8 L
7 D! k# u% k3 R8 F4 o

+ k% N+ h; m  `! @- G$ Y还有就是两个输入输出函数:8 g/ h6 J9 S: V
void output_sample(Int32 out_data)  @$ P5 j5 }% S: t, w9 D
{/ {- l4 r# _# i1 {
  AIC31_data.uint = out_data;  # _+ V2 ^& G. X0 I9 A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 j& E5 x& U) z- i
}
: d9 Z0 F  g. H& m3 h% y9 m- C4 A
: `/ C6 Y' D0 L( Y$ x3 RInt32 input_sample(void)
& L3 H% n! t5 [, X4 u4 G2 C( R{  2 o; e7 l( D; q' r0 L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: a% Y; n9 W' W9 S$ V, K
  return (AIC31_data.uint);+ ?4 B& s1 V! l& I; D: F4 R* `
}
' \7 W0 l1 v$ O/ v3 l
* o1 L2 g6 J) h. E! 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, 2026-1-26 10:44 , Processed in 0.041443 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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