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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ h' [5 \! C' m6 X
main文件:& z; E/ T. g. `. s  m. U
interrupt void interrupt4(void)  $ t+ o) O+ ^: k* @
{: I7 C4 Z: T! i  k2 Y  M$ @
  Uint32 sample;
4 Z/ r  L4 S5 [1 \% ~/ p; S. i; m( ^4 O; J
  sample = input_sample(); // read L + R samples from ADC4 A; D+ f  l0 \- y  @3 b$ ~4 N
  output_sample(sample);   // write L + R samples to DAC ' n( J# X8 y! N3 S0 j9 x0 {5 B
  return;
0 c- {' h- W/ B}' O% A3 b: k& n4 R

: C' r2 i0 X1 \, e& E) gint main( void )) E: ]( F  w6 U) @9 Q. W1 Z
{* [; p( ~$ J+ N, J0 H8 }
3 @: n, e( r; i* J2 [; {
    /* Initialize BSL */
$ B0 ]' t# @8 p$ p  l    EVMC6747_init( );
+ ~3 B' s, Q$ e( x3 [; h- w1 M        /* Call evmc6747_intr function */
, s0 b3 @( f9 G: l% \6 j0 J    aic3106_init( );
6 N' m/ ~1 @* ?. G        while(1);' H' A( N, _# z% [' v
}3 T8 l: _0 O; Z# h7 |6 d/ [/ A3 {1 [
( N* D. y5 v! P3 \8 X* V7 h* e

7 B; i2 O. w# `8 }7 b) xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) K3 Z  `" I. q
/* Initialize MCASP1 */
. A1 L8 \- c% w1 f- ~    mcasp = &MCASP_MODULE_1;  I' A8 K2 J8 n. k( V3 H! F  x- X& {
    mcasp->regs->GBLCTL  = 0;       // Reset. ?- F9 A; {0 F( \
    mcasp->regs->RGBLCTL = 0;       // Reset RX
# ?, s+ a" f% I. c    mcasp->regs->XGBLCTL = 0;       // Reset TX
) ], X. P8 L  F: X( H3 P, e8 y    mcasp->regs->PWRDEMU = 1;       // Free-running% [" t  S+ {8 V6 O1 P# r
   // configure McASP0 receive registers
5 e/ o  m7 q% I  R1 j    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" Z) O$ K$ o' u7 X$ h8 {2 |
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 a3 P' ^$ ]' W" f
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: G. c. \9 H0 D! I6 Y7 x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 K& p! ^& s% b0 f& w8 @2 x" W# E    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' G, X- z; d) ?    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 X5 l) d# {* Z) d7 K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! G( T/ k; q3 Y* L/ L. g" g* u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 `/ q$ G) n4 m
: B  }( B1 `& e( u  T# o% U. P! Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 f  r3 F% O) t2 Q$ g4 C
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 z9 N# r- x  _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! G1 E$ F, y8 ~/ m) o  K8 {
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: m, S! L) Z2 I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ x( ^, ~' ^, |4 K, W8 _5 J    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. m/ _! n% B1 Q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ B$ d% `6 y. n" y; P* p/ n
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ E1 i3 q1 i8 f: [0 l
* X/ X) H+ D3 m; G1 U$ o% X    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* r2 ?' F( p6 U' P& f( H+ A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ l3 ^6 L0 k0 c0 K4 G, \    mcasp->regs->PFUNC      = 0;          // All MCASPs; N$ d; ?8 u8 I; H! g& d; ^
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) m+ a3 A6 t6 x
' r' q. ]/ r/ x& Z6 B
    mcasp->regs->DITCTL     = 0x00000000; // Not used; _: K$ n9 }1 C8 l% H- |# }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used. ]' r# N3 p! D( `9 X. Z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 m  m  k" t7 z, l: W; L/ t0 f3 n- g. ]& \6 ]: H
/* Starting sections of the McASP*/  h& c4 C' A- v8 E7 G# q& `* J7 {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  C* l2 C8 Q, `0 q9 V3 v% e" u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - U  q1 U" q, B, Y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" u0 x4 r5 R' k) O8 u- A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 O$ S1 W2 [, M1 s

3 Y* v+ J- U8 B: k: l) \+ f    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " j, u1 l! E5 d% j8 i# o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 A& C) k; x' \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + ?: H7 g* o. u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' f7 a' _" x; K2 g* E. v% A, B* E4 W4 v( ~: b  e5 P) h
    mcasp->regs->XSTAT = 0x0000ffff; 0 c! X) a3 O/ x2 _+ d/ ~8 [
    mcasp->regs->RSTAT = 0x0000ffff;
+ p- M. G, i1 |; w* F
% f) Z" o/ ]3 ]( s/ r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" e. q8 F! I! b. c. G6 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' k- C7 K+ g% a% G" X$ M) W( Z! Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) y7 T  F$ x7 t. L$ [! ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! ~4 Q8 [: u$ Z/ J/ l+ Y
( m/ M, Y& _) ]! E, s8 b    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 I1 o" `6 }* a6 d6 E    mcasp->regs->XBUF5 = 0;( D9 ^( ]4 _9 F# H
    mcasp->regs->RBUF0 = 0;/ I0 i, H& F8 h- I
# k7 v' c% h7 f- X3 X- Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 E  O( O' R4 S- n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; q/ ]& l! t4 W- t  {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 m6 a. F& q. C1 [0 N' l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 ~9 f! F4 |) s( N7 q7 {2 @
9 Z' o! l! u' Y4 G, t0 g' K# h+ |
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' t, t5 ?& l8 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 f7 T$ a, n- ]( x1 f! Z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 V: ]* {& E2 }/ M2 M/ x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& M6 o2 G- R- D- H
$ q9 B3 h. Y  B    CSR = 0x0000;" w4 ?1 q- o1 |2 i, U' _" N
    INTC_INTMUX1 = 0x3d;/ F' w: ]+ \) x- i* ]
    ISTP = (unsigned int)vectors;6 D0 ?( _8 G5 |
    ICR = 0xFFF0;  4 x4 M3 U+ ~6 k  @. k! L& W' a
    IER |= 0x12;  ' _( y" D, G8 B
    CSR |= 0x01;  
( w* ~! T2 `; T! ]/ n! o
3 Z! ^; B3 W& j" F% Y
+ b+ x* A9 y0 T8 [' k9 f( `, v' t5 I$ s5 {$ Y
还有就是两个输入输出函数:. ~! t3 L" d  l/ ^4 p$ e
void output_sample(Int32 out_data)% x: t8 v1 q" T" M6 v, A, W! C
{: P+ h) _! t0 G, m
  AIC31_data.uint = out_data;  # `8 W4 N2 n9 [2 ]
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) }" G! k' T+ @7 k}
/ Y  T4 j8 a; |: {4 K; R
) z* a4 S1 N1 U! V& F. g0 tInt32 input_sample(void)
- z) _* E6 Y. E* ^( l& T{  + ~4 h! @4 B8 |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 {& K' Z' O: @) ?+ f) |( V  return (AIC31_data.uint);1 s2 Q0 j( p$ e
}
3 K9 Q1 v+ r) C6 M
/ V, f. L/ [8 x8 x- U# v
分享到:  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-3-5 16:24 , Processed in 0.043496 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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