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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. D+ w- U0 ~8 M- P( _5 ?/ J
main文件:9 Q4 ?, u- M6 q- D
interrupt void interrupt4(void)  . ^" @, U9 P( o: F- `
{3 T% `$ q% K' S# @8 ^! U1 M9 F! O9 y
  Uint32 sample;0 Z* c% V  z5 n7 }7 R  ~- q

/ h3 ?7 v3 c9 a. |/ t  sample = input_sample(); // read L + R samples from ADC1 U3 V# B* Y  K0 G1 ^
  output_sample(sample);   // write L + R samples to DAC
# b( H% c4 E% a9 H# G  return;
- j8 {( z0 _! C+ v8 n}
9 \  H- f6 T, \) v! I1 U# ]7 d
int main( void )
$ }/ z& r1 q) O2 q{3 @- j* B8 {, E

3 L* l% ?8 h/ `3 w% @    /* Initialize BSL */
8 k/ s+ p; K. p! I+ k( @    EVMC6747_init( );
' {/ T6 E6 D+ ^+ b5 J! ^7 Z        /* Call evmc6747_intr function */1 Z" f0 f; Z, T/ p: g- W; H  q) @
    aic3106_init( );
9 W5 I- B3 X% k        while(1);( u2 _: r9 f# q/ G! g4 V  I* V
}% w! F' x6 g% ]  J/ O
. \$ W) u  S. |$ h

, f1 F- J8 J/ D) p$ j. Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 v& ^: F+ P3 Q  i6 @' {7 n
/* Initialize MCASP1 */# d7 G* E& w' [& {$ E1 N7 f. N- c2 s
    mcasp = &MCASP_MODULE_1;
  L/ i& T$ X9 J' y9 l    mcasp->regs->GBLCTL  = 0;       // Reset
2 a1 l" H: W5 ]9 h3 C8 U" o    mcasp->regs->RGBLCTL = 0;       // Reset RX* k$ e6 Y' A( F+ T, ]$ i' E
    mcasp->regs->XGBLCTL = 0;       // Reset TX* S" p0 \- s$ D; J* r
    mcasp->regs->PWRDEMU = 1;       // Free-running- D" X% G/ d, `* K$ a
   // configure McASP0 receive registers
% I6 c2 r5 {2 R0 g    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, H) k$ Z3 Y# ~/ q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 t2 g" b9 {" ]! G5 F, w3 b8 L
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- B: C2 o2 V7 N
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. b; C% L* f7 O7 K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
# Y1 A8 N: i7 {4 y: I6 W) c    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) Q( W2 ^: B' o% i
    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 o: k" Y% G  u" P
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( l: C1 h3 e& M
* n! F( ]  n; O0 t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: j- z% V( j  v8 A5 O9 S5 ~& e8 R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: ~- v; m3 V8 C  w/ H5 v+ Z  J( U
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; b) S/ R6 c. F' f9 \) J, H! [' w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) T! t& K9 c; [3 H  {: \    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% n7 f' P0 R3 z5 ^$ t8 L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# \  s6 L; y* S% Q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 Q# ^2 S7 K8 t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: z, F- K- [0 l; j
$ ~/ |6 R' G- i8 P! S% I2 w    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! v. Y& A9 Q6 Z$ r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. \( V2 A1 Z3 N$ |0 I
    mcasp->regs->PFUNC      = 0;          // All MCASPs' W" a- U% `1 M4 y) s) G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 T$ {/ |5 X8 C7 o! ]" `( Q- u+ L' B+ f% }0 l; s! O0 ?
    mcasp->regs->DITCTL     = 0x00000000; // Not used# z( }. o4 g! e( O$ K  v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 I$ K4 X# |1 Z8 @6 X/ J5 b
    mcasp->regs->AMUTE      = 0x00000000; // Not used) X. i; N7 e2 c/ x: p

  o0 P% R( F# ^1 a# E+ B# v% u* ]" u/* Starting sections of the McASP*/, e" W- G) y. ^1 O1 `
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: S% Y% Z- _/ x/ _* v4 r6 M' a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. B+ u# m8 ~1 M2 ]. A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - t: A, H' U, a( J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- A7 T5 Y4 J" c  B8 U6 T& b1 n7 f! w0 e. ?# R- y2 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 Y; L  _" @  X$ ]6 e) T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 I5 o! ?( m' z4 c; c3 _' K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% \" b+ X* b( o* E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! v. N" j5 i; e% `9 A

  q4 `. U4 I) c1 l* k    mcasp->regs->XSTAT = 0x0000ffff; 0 @  W' ~5 v/ ]) `+ _
    mcasp->regs->RSTAT = 0x0000ffff;   o1 e$ j4 P$ ?$ b# W
- w: Q  J& N( ~& F7 H0 `' A5 m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 Z; E8 K7 q/ s  ~( J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, r9 v  y2 \) o4 ?: Q( g, E" r    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 F+ m! A+ G9 V) j& s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ [" i9 ?# K) ~7 e; v

  l/ r0 a' L# e  t5 [    /* Write a 0, so that no underrun occurs after releasing the state machine */. z/ [1 U( v+ d6 [( O1 N
    mcasp->regs->XBUF5 = 0;
/ ~- W( \- p. z' s# q$ m8 h( a* _2 N9 B    mcasp->regs->RBUF0 = 0;
! p- P( ?- P- A" E" T& a% r. d& e; i' b! k( _+ S- j1 y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % }- |. `( @  y1 R- J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 j! T) j3 }4 C6 B  N. k& I0 L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' r( `1 [  u* `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' M+ S4 B) e1 Q& k0 ^: Q% N# |4 t

; S4 [0 L' y" J: K7 |* w) ?. x    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 \- `- f2 n( c! q: z% w1 H% Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( G$ M! E% A1 W, ]) |, o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - Y: W1 `7 \& Z( {; [# w: x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 w. F0 y2 \, W1 ^, k0 a

7 ~2 {% e0 \% W0 W1 [/ _. M    CSR = 0x0000;6 j: b6 K- t3 ~# V  B( t
    INTC_INTMUX1 = 0x3d;, O) _0 P# B; }8 F7 r7 _
    ISTP = (unsigned int)vectors;
4 H' N6 o3 y. F3 K- o+ V    ICR = 0xFFF0;  
) Y5 z1 D) V+ Z6 c    IER |= 0x12;  
0 D/ k/ i& E* @8 A2 a1 P: ?; [    CSR |= 0x01;  8 X; ]2 ^9 S% ]  [- P9 R1 S8 Z
1 x9 l. p0 r9 Z! T; r. ?6 z
) R2 f/ Z& e& n8 w8 N3 G
) x1 }3 Y* ?* T+ @, y  K( h8 v  T
还有就是两个输入输出函数:  h) `1 J. \6 C1 ~
void output_sample(Int32 out_data)3 b  S! T& J  T) o: V0 _4 z4 H
{) h- y  q) M2 s* `9 g* y) e
  AIC31_data.uint = out_data;  9 F3 ^3 X& U& v1 }. H. ~8 U
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- Y* m/ S# u, j}
) [' [" F7 Z6 g' Q+ W) f
  J1 T% j' d  H4 F( k; KInt32 input_sample(void)
: A6 S, H2 h/ }- N{  
0 q5 E4 ?8 U; J. \) w# M  AIC31_data.uint = MCASP1_RBUF0_32BIT;. i* m/ |  X$ P# R3 D4 d4 w
  return (AIC31_data.uint);) Q; h% x1 l0 a' ?+ U2 V
}/ e2 F! f# t& ^8 f. z; x

6 D4 {/ j" g  Y0 S. h
分享到:  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-2 11:10 , Processed in 0.040488 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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