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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 q) I$ l- L- R7 Lmain文件:
* O, ]4 B- _0 Linterrupt void interrupt4(void)  % k; \* A9 _7 Z/ z& t' _
{
+ C- r) v' p( ^' @; Q9 t# y+ j' B0 U  Uint32 sample;0 G5 t9 m% _6 Q  P' Z8 e

# x& Y6 c/ ], i1 x  P8 J  sample = input_sample(); // read L + R samples from ADC) e, d; Z+ S% ^  {5 B8 n/ s/ w
  output_sample(sample);   // write L + R samples to DAC 6 k6 L, d: ]. |
  return;3 u6 p9 S+ t! I
}
) H) k! W" u1 j0 \# e2 x
; r1 W, D  P8 L6 ~6 Cint main( void )
' t& O- K: k: A5 Z1 l{
" r' c$ C# ?5 E
7 C& e4 F8 o1 m8 \# l* }    /* Initialize BSL */
( Z9 c' K+ T. w) @  @7 F# r    EVMC6747_init( );
$ Z+ X. }; `9 s$ Y" g' t' g        /* Call evmc6747_intr function */9 T" J! i1 \" \, @8 w
    aic3106_init( );
0 P: V: U# ]( L4 l# V        while(1);
7 u) ]& v/ _4 M$ c* z0 s  @}  E. [! W1 b! L2 L, h+ G8 w

# P+ k- \, V1 \: v0 E% ?* L( Q$ s; A) E0 `) @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: T7 a3 p: f& |3 k/* Initialize MCASP1 */1 o, v: m# U* D. q0 p- z
    mcasp = &MCASP_MODULE_1;
- j- O6 e) w$ K1 _    mcasp->regs->GBLCTL  = 0;       // Reset
8 h; m, R3 L: N    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 X' \8 @5 X* \% y    mcasp->regs->XGBLCTL = 0;       // Reset TX2 Z3 R) ?# b% U8 b
    mcasp->regs->PWRDEMU = 1;       // Free-running
- c" Y3 R4 b  d   // configure McASP0 receive registers
. F7 |( J6 T0 o7 a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# J' [2 n7 C( \; p    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. D" ?5 S8 r* B4 _6 A/ p2 t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: M2 X9 }9 ^" O: }' R4 u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- e$ ~; x3 Z: {% u9 Y3 m5 l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& h0 v3 w* h( V* o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; N1 u" X7 E/ W6 ~& X' y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 @" R/ L! Z4 J$ `7 {: ]% y# |
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 o% @: V+ p: _4 M2 f. c5 U

: C! y! I0 J  H0 o& i- }    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 T, ^6 z& V: X! V) O9 d7 i
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 B9 j& U% t' ]. s* \- }9 Q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 K2 z- P0 g6 S1 h6 p
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) B+ k. h( n4 t7 U/ h5 B9 M    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 O! S% u+ s% o( @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 l: }6 H9 `, M( d- ]5 P  A; Q/ t    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 G0 f3 q! A9 Y$ T. L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" j8 A/ Z* J) x5 v- H! R, y
/ A( F. q. I& v# v
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, _: c- ^- }  X
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& x( D" q: j7 V6 t% y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& b' U0 U. E( ?$ b' N) x& ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ |0 x0 W- u" J
: O$ ~9 l  W+ B3 X' q3 x! H
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 J% d: k5 b. z* ^
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' h; ?. t  ~! |2 [* [* Y    mcasp->regs->AMUTE      = 0x00000000; // Not used' O+ W1 i7 h" X0 i# z

9 b- {3 @% E3 r/* Starting sections of the McASP*/. h# m( D6 d" W  E0 U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 h2 [  v) R1 a; s6 H  `% t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 \8 S  _5 @# q6 W
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # T' m# F- T2 h; x- w6 S7 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 g. d( z7 I% W% x$ O* K2 a1 D  N# F
1 H4 a" H+ r+ X* ?# L( m: n. p
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' s3 Y9 ]7 w- s2 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% R% c1 F+ t" Q" F' r: j1 x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   K; x8 ^% m4 b* E8 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) N$ j( J8 D) s6 U5 ?' q( ^; T6 \9 S. k6 @
    mcasp->regs->XSTAT = 0x0000ffff; 7 K) B( T/ x) O$ Q; \
    mcasp->regs->RSTAT = 0x0000ffff; # O/ h: n2 a% {  {9 T  H( y
3 D3 ]2 w) V- x. R
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 d) T) c, @( L' J0 K6 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- v' R3 @$ m9 W! K) ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 W2 F& Y: |4 s( y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! V/ S9 K7 t3 A9 x9 P

* S5 ]* @( ?+ v, Z# Y    /* Write a 0, so that no underrun occurs after releasing the state machine */
. H) u) r# }7 R* G7 W    mcasp->regs->XBUF5 = 0;
" ^8 `& T- [% ~7 x3 u9 E% N1 Z4 @; z    mcasp->regs->RBUF0 = 0;
5 R* O. |) v! b# V. o! L5 x! h: Z- H9 i9 S! t6 T
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( [4 L& ^# `- j1 ]- V3 C% l4 g( ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, e" W% E  J! d( R. p    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. A/ E; c: s* i) W2 M/ [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 j, U- T  c: _
  w5 i5 C: j# e6 M% U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, L. g8 |* I) A+ \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# s2 s2 @8 A  B6 @4 y* v
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / c- u4 a9 x$ L" {: l# Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- n% Q+ W1 N+ n9 U5 u4 w  e" R' P
    CSR = 0x0000;
( y* `3 Q$ `8 ^& h; I6 ]0 x    INTC_INTMUX1 = 0x3d;8 d8 }- n; e+ G8 w# U* x# C
    ISTP = (unsigned int)vectors;
* t# ?1 @4 ^: r5 F    ICR = 0xFFF0;  & d2 G# P6 c& l$ s$ G2 J5 U* d' O
    IER |= 0x12;  ; ?' t' h2 ^1 H) S; Z
    CSR |= 0x01;  
, K, n% ?0 Q5 q! w! R1 T9 n9 p8 P
% k+ ~, l5 H9 u  Z3 c3 p; v$ i' V
2 M& T  B% x7 w
% E' S( }5 `/ t还有就是两个输入输出函数:
1 `8 d6 \& [$ p* H3 l6 P5 t  Mvoid output_sample(Int32 out_data)% c+ d2 w9 S. L) ~: Q
{1 R! B- `1 Q+ {' I8 V
  AIC31_data.uint = out_data;  
  J7 Y$ c+ @+ E: m$ v  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 `; y( h9 s" a) M+ N
}
6 r: U! ]; i# }  I4 C8 Q' o9 \
: W( O9 E2 E+ Q( k8 ~! _' m1 M2 \! bInt32 input_sample(void)$ o' y% o% [' s8 o
{  
& l* }, i0 I# D' T. K  AIC31_data.uint = MCASP1_RBUF0_32BIT;: E" l1 |$ |8 T7 k8 d9 W
  return (AIC31_data.uint);! x% ^5 M3 b  t! E
}& j, p, z0 [8 w/ a0 w
# P* H$ N7 ?) x' h9 T; A
分享到:  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-12-19 04:19 , Processed in 0.037936 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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