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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 I+ k7 ^( o0 G: m
main文件:6 H- P+ Q& r' _6 v4 a+ |$ L
interrupt void interrupt4(void)  
/ G- B0 M- [; f; v4 N' n{6 |+ o- ^& Q& R, G9 q" W1 F. b
  Uint32 sample;
( A5 j3 M% s. r0 q& q, e+ d5 ~8 B* Q
  sample = input_sample(); // read L + R samples from ADC
2 w0 l* I: r" E  output_sample(sample);   // write L + R samples to DAC
5 _5 m, s  {. d+ v* l  return;
- x8 r  Z& D( X* V& Z}
2 }2 \( N& [& X# P
6 w- z6 W. J& B4 s% L& Hint main( void )
2 `% ^  T2 U) g" F{
! Q6 c: {: f0 Y3 ^( S8 \! z- o: s3 f8 H$ \
    /* Initialize BSL */* f* N# l% D8 S: C2 L3 ?
    EVMC6747_init( );2 o8 Q' l# B1 S
        /* Call evmc6747_intr function */8 g* Y4 e! o3 L/ k( `! O3 b
    aic3106_init( );; I7 T* D9 y. N. N3 d
        while(1);
) E, @9 ?# p' H0 `}. N+ ^  [; ]5 j+ S& A2 v) p

; v+ M3 R7 [1 s7 P* Z; o, F3 f; x3 v  r6 G' X7 z" a6 O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 H( p- O6 M# j$ P4 l. U$ T
/* Initialize MCASP1 */
3 A. z! K# A$ N7 X8 V    mcasp = &MCASP_MODULE_1;
6 Y! Q: A, B+ S3 ~4 Z% N8 q# A" W    mcasp->regs->GBLCTL  = 0;       // Reset
0 h  l2 ~- U( S$ p/ a4 p+ k  v    mcasp->regs->RGBLCTL = 0;       // Reset RX
, r7 s$ [9 Y, L    mcasp->regs->XGBLCTL = 0;       // Reset TX  y, F. U9 L4 W  b/ z
    mcasp->regs->PWRDEMU = 1;       // Free-running- X! J6 s, u, C. k! T
   // configure McASP0 receive registers
" R1 y% \' u; E# Q1 [. X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( V% r1 G/ ^. a1 G7 a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 h9 u; m5 c. b( Z. R- T7 |* m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 C( w9 l( i4 i' k( c
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 z2 L& Z# e% Z% @3 `9 N
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 V8 m7 C5 `# a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# J6 }' n2 |" a1 ^/ V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used. ?  p/ i. k$ I0 U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, q8 e% x0 ^6 s: W* i

1 {9 W- Q& H: L7 v* X; C    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* ?' u. B2 x0 K- k2 Z! G3 e" D
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 t3 {" V  X4 H5 B
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; z) Y5 h2 G# o; z% D) @    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* q1 o/ T- c2 R
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) C: e% b* x/ _5 v) W& W0 q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 h, g4 o- o7 h' Q6 |$ Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 y' r1 L1 W8 T' s' v9 b9 n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! _* ]1 r- V, u1 I, i) m( ~9 a- |9 i  r) p, `" l+ ~4 w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ w# V  q2 t' L% l: V# Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* E: C! L: K. j4 i" m
    mcasp->regs->PFUNC      = 0;          // All MCASPs( t9 K. l) A% X9 k  y% {
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. b% I, ?6 @" l& P$ F9 u9 c  J
! s! ?, n9 t& Q5 i' V, C: @    mcasp->regs->DITCTL     = 0x00000000; // Not used4 P3 l* S, a7 G5 G/ l* N& s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' K$ D$ J, y! C
    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 ?0 `+ f/ `; y3 O# l; ]3 M. t0 G" d2 e! I
/* Starting sections of the McASP*/
" Z- o6 Y; e# n  A% h    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 ], W0 }" z1 `5 W5 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 S0 e: Z9 \' _3 |6 m: h& [) o2 A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 N, U! A4 C* U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 i( D+ O! x2 `! I- _3 \' K5 Y$ ?4 T! V9 q7 t8 x2 d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ ~6 S: j- N+ n; Z( f' }) s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ J3 l/ w. T4 R* ^* P4 b  d2 r  c
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % S+ I0 G3 G7 K2 e& U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. M6 {; F: x5 D2 }
4 f2 }1 V* K& ?. R1 c$ Z% ~    mcasp->regs->XSTAT = 0x0000ffff; ( B" F& U* C0 e/ v7 ^9 c* A3 W; m; N
    mcasp->regs->RSTAT = 0x0000ffff;
6 ^/ G$ |* j' Z9 {
, @+ V9 z  U! K( i; U/ K  g8 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. c$ U# J6 u. x( u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, h5 e7 v$ [# z- Y1 n    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 k; h! b- h# E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 t: u& m& v5 a; m# ~8 E

/ K+ p- w/ M  c! j, U0 Y    /* Write a 0, so that no underrun occurs after releasing the state machine */4 \9 [4 D- @9 g
    mcasp->regs->XBUF5 = 0;, T8 n; S, X% M
    mcasp->regs->RBUF0 = 0;# K; z2 ~, ?8 C
, W; k- f3 m0 h% G. Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 w4 F+ x# G5 @9 h+ B/ ?. X' C0 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 I7 m# J4 Y$ ?/ I
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : J- q. G& g3 [( v* k5 C8 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, m- w4 D3 k( I4 x) @. Q4 Y
% d, p3 L) ?, X! w    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 x, d+ M: h3 ?! C/ ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; T6 n' f' H# [& k1 M0 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! G5 k5 P2 g3 }- |# T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; z$ f1 P; m5 c$ T0 t; U+ n, F; ?6 Z- G3 r& c$ q
    CSR = 0x0000;
  @1 R  @  e$ i    INTC_INTMUX1 = 0x3d;
. l' e& K* ?) y2 Q    ISTP = (unsigned int)vectors;. v0 L8 p( z2 ?( o* @/ z
    ICR = 0xFFF0;  
% Q# n- m6 d! m6 e$ t" F    IER |= 0x12;  
# R  v8 [; `$ q0 B5 s    CSR |= 0x01;  
$ p  a! W+ ^, c) D4 M- k' Y: r' ^# a9 b( n
. L  i: @/ l6 g" f
& i3 v. z  _' Y8 V5 j
还有就是两个输入输出函数:
: h5 f" \# F& U- ]8 t' yvoid output_sample(Int32 out_data)3 v/ y9 U2 \, U  x
{. F5 p9 [+ f" o3 ^! g* I  S
  AIC31_data.uint = out_data;  5 @( t# ~4 ]. w) g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 N( Y8 M4 c* B) s# F" Q
}
# m* u) q8 q. z3 F/ x1 B) J! H, R: y! y
Int32 input_sample(void)
) D# m- G& Z/ d" _0 M+ U{  
( Q% T, W( N! J6 q  AIC31_data.uint = MCASP1_RBUF0_32BIT;& T/ l9 J/ h5 ]
  return (AIC31_data.uint);5 Z4 ], k; j% O
}
" K; Z+ ^6 K7 @3 z% B
! b# i/ H3 v3 ~/ ]9 J( e
分享到:  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-29 21:48 , Processed in 0.041912 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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