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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, @# [* }! [( B$ @main文件:
+ ^9 l. O2 r$ hinterrupt void interrupt4(void)  
+ [4 g3 i; Z+ A: W5 j{+ I# t9 F' e5 I2 F4 ~  t
  Uint32 sample;: c7 c; ]4 a' b5 Y* V" ]
  L; H4 x# x/ P3 m4 q5 @6 i
  sample = input_sample(); // read L + R samples from ADC
: z3 l  I5 k8 I0 U* J/ y/ r. x  output_sample(sample);   // write L + R samples to DAC 5 j# l: ~  C" W8 ^2 a, A, z9 y
  return;
+ k7 I! r" q* q$ V% ^+ m6 R}
& T& N# N7 ~$ g6 r1 U
) \% y5 ~1 G* Y6 O6 Cint main( void )1 j. @. j* {% T+ X8 c
{
! Q) g( |, k) ~2 K: i! t. |3 A* B& x2 N
    /* Initialize BSL */+ {. ?- s- n& N8 Z$ M/ {; X1 ~) |
    EVMC6747_init( );
7 y' J/ m  X$ e( t  S        /* Call evmc6747_intr function */  R6 M6 Y& c% }  S# I* }7 N
    aic3106_init( );
7 r3 F' X# X1 k% C: Z% a        while(1);" L: x1 f: N& p2 N( ?
}. N, J: v! B! _- L

' b$ @0 N1 T8 ?6 l: Y% X( Z3 c! M/ T' `2 a% K9 a9 `% R4 D2 k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% g  S) E, {5 _3 s/ k
/* Initialize MCASP1 */  V# M& l, A" P( k7 J; N8 P: S, V
    mcasp = &MCASP_MODULE_1;
( ?: z& X' [, E+ R' Z0 r    mcasp->regs->GBLCTL  = 0;       // Reset  f9 w4 L$ C* s' u3 i2 o/ s' i
    mcasp->regs->RGBLCTL = 0;       // Reset RX
; M0 U) `' g3 a- `5 K, X  P! I- V    mcasp->regs->XGBLCTL = 0;       // Reset TX
  R) X6 y3 u/ ^5 j    mcasp->regs->PWRDEMU = 1;       // Free-running$ n% l- K' ^; u+ @* V
   // configure McASP0 receive registers
' q& x# k. T2 v& h    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 ]) E2 d, P  T9 ~1 m( ?    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- U* M* r  K( W! Q6 z" m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& f- V( }5 K0 `) ^8 H! O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ d4 o7 o; M" U1 P: x5 d9 l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) n# t& s9 w1 F( j+ ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  \+ @6 G$ Z% P" n2 z0 k& O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  O# v, J6 K; Z+ d! [& C& B. ?/ i    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 L& O- {! G( D8 I# {7 F+ A2 Q- T/ K* |
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* F8 H& [. S, ^5 F
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 Y$ n# s, d- X  t+ D- `+ c4 r
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 Y5 J+ Y* D- M4 S/ _- ^% G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, U, M/ z, W: i* g  \, s& t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) k4 I5 S4 t: c* L8 T3 K  \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 l% s" \* J+ E  K2 c. h. ?( [    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ P& ?6 i& X  e- K1 D    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, b5 _' ^/ t( n+ p/ M
" T! L( @* T! f0 r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 F* Y- x2 \7 V- k* y; E( r. R2 {( j/ B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 v" f* H) h- n- M5 S    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ J& A& q" P7 u, F' }$ z/ h    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" W' t2 z$ V3 \# V

* V  }7 u2 T2 \2 h4 N    mcasp->regs->DITCTL     = 0x00000000; // Not used. v' Z$ ?/ n7 O% ^& C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 E, W. {6 v$ Q2 X; B1 Y
    mcasp->regs->AMUTE      = 0x00000000; // Not used
" K. v! J4 I3 P+ J, g  l( A# |3 k+ y: X5 W7 [1 e" q
/* Starting sections of the McASP*/  }6 \( n7 k- B3 }+ ^
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- {3 n+ u( b# }+ d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ u, ^4 V$ G, g. \5 w# ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' {0 p. X( ~' @* i/ l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( q6 V/ Z) d2 L# z7 C8 b4 y
1 n7 f! j# j$ g) P6 X1 r) B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 u* u; G" g- n5 o3 \* q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 {- j7 n5 c: d2 m+ Z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& K2 l- }% u. H5 I. J: B% \7 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ g4 N, _. G, f! |0 M2 a' W
- d* X. H  I# y+ ]! s' M. `; K
    mcasp->regs->XSTAT = 0x0000ffff; . v; P  Q/ V  Z* y/ t5 s2 g
    mcasp->regs->RSTAT = 0x0000ffff; " q8 h3 I1 ^4 j0 k8 }* d

$ R6 N+ f. c8 W) L    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; E, T6 V6 q' U, g6 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 G$ |2 e& b7 k  ^8 A- L$ X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( i" \, w, t% A4 |4 i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 V; p) \: P7 K- Q$ F$ f

" ]6 k' P, `, @' s! ]2 F) a4 `    /* Write a 0, so that no underrun occurs after releasing the state machine */
" l1 M' N) u* B/ a. ~    mcasp->regs->XBUF5 = 0;
; y- S( q, [* k6 N6 Y    mcasp->regs->RBUF0 = 0;
# x/ u: j7 q% `- `  J; g
/ T% M* t$ W4 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- ^- P8 k) j9 d8 h  G4 R" h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 B3 J! s1 z% R8 W% x% u6 W6 p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 z! e1 L- O' B7 |# a4 N* e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& e  L, U+ z4 N' j& f) z1 z, c- Z, h& n/ K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 }8 r$ |, |+ ~: t  s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, Y  I/ I4 \9 [1 j+ H
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% J3 G% }4 p. T; @+ J) l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" [9 y( E) u9 u$ z9 E$ m, n
  U4 G1 s. F# o3 M. E8 E    CSR = 0x0000;
+ i" k5 y- W2 o( |3 n, Z4 u' U* [$ S    INTC_INTMUX1 = 0x3d;
" F) `+ Z! F! L7 B, u  ]! [! p    ISTP = (unsigned int)vectors;
2 k1 Q" t, i6 s8 J) {9 v    ICR = 0xFFF0;  : L6 y6 {4 e9 @. ^) G! |: R9 a
    IER |= 0x12;  ' Y8 }0 S7 ]8 ]/ b
    CSR |= 0x01;  . m  a% n3 u" e% h9 s6 o
; C. v: k; x- i; k) ^

9 m& S* d7 W+ s, \' I- Y7 w1 z
6 E, o- k# |0 m2 m0 Z! ~还有就是两个输入输出函数:
! \& Z; T2 H, i% A% wvoid output_sample(Int32 out_data)
, g- P5 ^- o$ z: n5 v{( S# v2 e- z! Z( v2 |
  AIC31_data.uint = out_data;  , @# B  b; n6 p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: O, P0 g$ S, s9 ]: j: C4 A}7 ^, W2 G0 d8 q, l4 k
4 D' p# T0 F1 j( z6 I1 D! o/ d
Int32 input_sample(void)
0 m6 `. r- Q: b$ }* p{  
0 s' {) k; X- t: h3 I  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 t# D3 g3 I' L# j4 x0 A5 U  return (AIC31_data.uint);0 |1 G) J0 f' T7 o
}
0 l+ Z, ]2 |1 T! @+ i/ [! Y
4 {1 s$ R+ O9 B) y$ T* V8 G
分享到:  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-7 08:36 , Processed in 0.039464 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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