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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) O  D1 l! h1 S3 |1 kmain文件:
% u1 J: {# x0 M- L/ h4 _interrupt void interrupt4(void)  
8 U# |5 l) w1 Y. |$ K{
' L7 A4 V! `4 K/ \5 L. P: }. r  Uint32 sample;
8 h9 W" p4 f; c7 Z, J( v% M5 l; |( m* K
  a: q' Q% X- O+ g1 n  sample = input_sample(); // read L + R samples from ADC
1 S* T% S' L% S2 {  A  output_sample(sample);   // write L + R samples to DAC
0 A$ o: p6 A% r! {2 D  return;1 j! L! t/ g3 f; o
}. f1 z# f; l" G: w. a% @2 D

6 L( h3 ?# l7 l1 y5 d# C8 jint main( void ). ~0 Y% B" n3 L2 h' y. v
{
$ e: w- p  v' I( Z! u" N6 ~3 j+ T( \  P: l( _! o0 _
    /* Initialize BSL */
% B  I: e, N$ P/ ^    EVMC6747_init( );
, v9 m5 i4 D6 U3 d+ D  p% q        /* Call evmc6747_intr function */8 y& I0 C8 d  B( B  M7 N: c  F5 J9 n4 e
    aic3106_init( );
3 u$ y) b1 Q3 J3 s. ~% L1 U        while(1);
8 B  G; i! R! s+ u( q4 |5 K}
/ d8 j' \' N- C" T1 R8 l! W4 H: c  `# _. h* }# J, M5 d* F* n

7 n  Q. \! O3 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& g- h. {! U1 T) p/* Initialize MCASP1 */
% N/ [( L' i0 \* C    mcasp = &MCASP_MODULE_1;- @4 |& u0 \0 e+ \
    mcasp->regs->GBLCTL  = 0;       // Reset. ]0 l% u/ F' x- [
    mcasp->regs->RGBLCTL = 0;       // Reset RX4 `/ {6 @! h. c0 O& Y$ I% ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX: Q/ b" R0 a- f* y7 i" ?/ `
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 ?9 v  m) z  m3 V   // configure McASP0 receive registers+ S; C$ a4 \/ K; j* a; t- s
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& J4 H/ h- {6 l0 O( B! d6 k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 J+ p9 N0 C; ?+ [- K+ {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ }. g8 \, v  F/ `1 `    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% c4 f& V0 {5 T* _/ a! B1 n    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 e- F1 k% {* u7 ~% A, B8 V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ K, k' u) c: t6 {$ u: g& w/ _2 c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; s) o9 P6 f: c) w4 v4 w6 F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ r8 p0 Q, b% _  a
% }* L1 F0 c3 r' y! i; o& T    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 _* B2 |# w* m/ B4 C5 c( [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, t- L+ j' i1 s4 J
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: G/ S* s9 x% F6 @3 U2 _
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, a) _; q' {1 Q9 n- @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! ^" a, O3 G% ]" G/ S( u    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& Z9 s+ h7 N( b7 t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; }/ l+ Q" H3 B, e4 w7 x
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 d2 [: B: U) _9 Z
5 @' c( R) ?3 u    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 X: R. D& r. c: R7 ]
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- B0 A$ r" B8 }7 q4 S    mcasp->regs->PFUNC      = 0;          // All MCASPs$ D6 p+ |6 A9 B, U1 S3 G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# M' E% X1 U) H) b  _: x

# p- ^5 Q0 g+ m+ c  P# @    mcasp->regs->DITCTL     = 0x00000000; // Not used
. r7 m8 }4 b% }' v5 q6 r    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. r& A# h) b+ I( p    mcasp->regs->AMUTE      = 0x00000000; // Not used! J# ^( L3 F, K, B! J+ q; ?$ ?; Y

- l( d4 r% Y1 \/* Starting sections of the McASP*/8 q3 c9 o3 Z; g% b! o# M
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; G* t2 q  D& ]9 T4 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 h6 w6 @& U8 w: @" w2 Z; s" b8 I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # \1 w' {; g0 Y2 J  n, u( U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: g% U3 G- j3 |- I2 T  T

' x" R  [' D/ v" n$ n) d8 I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # _3 O+ r$ D) f1 w; h2 Z; w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( P: n' L/ |) @2 @# Q' ~/ p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 X( O# L. p9 O% a/ h& U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% b4 c" C" N% L) ~( T( w: ^

8 B' c% X8 Y3 D3 W( U) y    mcasp->regs->XSTAT = 0x0000ffff;
. D2 A- w: [' t: U    mcasp->regs->RSTAT = 0x0000ffff; # K: S$ R) H7 h3 ?; Q
- U# A1 E+ Y$ I" ~- s6 ?& v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ u' \, m- ^$ E, Y1 d/ }3 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# D# p% R2 ]2 _/ Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 A& G, \4 O9 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 u' |: R( e, `3 L: q

! [! K7 s# p* S' [# \    /* Write a 0, so that no underrun occurs after releasing the state machine */  P: X0 h/ a5 Y; Q
    mcasp->regs->XBUF5 = 0;
" A$ F; y# d8 q    mcasp->regs->RBUF0 = 0;/ a. I' `) l$ m! v8 e+ Y
' T) f+ n5 d8 i2 {# v
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + a9 e3 k, n6 e7 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! X, j) C- |$ Z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , J  A3 R7 B  z* b5 Q: Z# g  ?; z+ p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 Z8 Q5 T/ K8 }6 e7 L* [' O2 r! b: y# q1 `) S0 v" q+ K) z: {& A, {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 F5 r( X9 {, E: d2 H0 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# \) V& F/ T+ ~. w7 g. Y5 D' l    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 T7 C* |' x4 m7 E2 d7 y0 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 i4 u5 P; a% O3 E0 ^3 u3 E' O
4 }+ f5 i. @. s9 J
    CSR = 0x0000;
/ B$ r, E* o0 l    INTC_INTMUX1 = 0x3d;
, o% q6 N, W# b8 N' s    ISTP = (unsigned int)vectors;; S, w1 h3 ]* ^+ L7 h7 E0 B4 D
    ICR = 0xFFF0;  
1 H- @1 a* I4 k/ u0 o2 h    IER |= 0x12;  
+ ?, T% F8 _- _0 C0 I- G    CSR |= 0x01;  
, _, z& b0 o' o3 e: Q9 g( R6 j6 `$ y$ A6 R
9 E% e/ i. h: Z3 m. d5 K

$ R9 h7 `5 Y, q0 p2 d( u! t4 _, E还有就是两个输入输出函数:
6 h' e, N- n* o: V" Vvoid output_sample(Int32 out_data)
! S6 U, g; x9 e$ ^* ?5 S{
/ c6 T3 v5 q5 b4 n' l: u9 J  AIC31_data.uint = out_data;  
: o# W% a% m2 s" E' Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 L! L: P9 o! y
}
3 T* A7 P& z/ S/ C. W! ]% `' z
$ k$ w* t- b3 L7 p9 MInt32 input_sample(void)
  o, \% f# o/ a6 X& {  R$ O{  
- I/ Q4 {" M7 f8 @! q! Q4 S& l; i  @  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. I/ q8 a: k" Q1 x0 x  return (AIC31_data.uint);6 l) ?+ i9 T/ X) j
}
' @3 V- x1 ^4 f. S: C, M0 G3 E
6 T7 |) J# F6 o  V0 m
分享到:  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-25 07:05 , Processed in 0.039728 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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