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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' ^" Q' n0 n0 \  G# y( T
main文件:0 f9 d7 \3 `/ m) D- J
interrupt void interrupt4(void)  8 ]5 H5 b$ F' d: V/ s# {: J
{
5 e& n' S6 @3 k% ~% }$ t  Uint32 sample;
. a! G) W8 |8 D( K% D  W  D; l- w2 l5 w* l/ H! D
  sample = input_sample(); // read L + R samples from ADC
# C# X; h4 d  N- o& Y/ g  output_sample(sample);   // write L + R samples to DAC
' Z5 Z  h- O1 N# q  D2 D+ F7 {  return;$ a! R) z  S+ e( g7 x" k, h. N$ K; y4 z
}
9 A4 p# P" T) _& k8 A% u* m( {# z
5 E8 C% i. q% bint main( void )4 A" q3 I" ?* X3 k
{
, @) p' [* z2 f- U5 p9 |  ~6 n4 q& w( R7 O. {7 P3 m/ H
    /* Initialize BSL */
, i$ P) A7 H8 W% }3 Y% c9 R    EVMC6747_init( );- I; C8 Q6 ?# Z8 H0 N. j* F
        /* Call evmc6747_intr function */
2 a" y/ |0 U, g* B6 n2 C    aic3106_init( );5 A6 a% }6 N" s# c* C% c. ]4 y
        while(1);8 k6 G( ?: l4 O, @
}
# l$ d6 P1 X; R% F; S+ C/ e& t& r7 T0 P" E) i6 c1 @
& [9 b5 o! g7 x' p& k9 ^1 M  t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ T1 T* U# C1 v4 `! a: \/* Initialize MCASP1 */
4 f! |2 @% |( f! O$ H% D/ C    mcasp = &MCASP_MODULE_1;; ]) E7 C- `% Y3 D  g6 e1 @
    mcasp->regs->GBLCTL  = 0;       // Reset
9 h7 ?' r. b6 i    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 _/ G; s+ N: c# r    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 Q3 N8 i0 v/ k  E& O% ?8 {- r    mcasp->regs->PWRDEMU = 1;       // Free-running4 ^+ {& p: b, ?# q. G* A& D0 f
   // configure McASP0 receive registers# z9 ^! u1 g3 q& L+ O; f
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" O3 h  R4 k2 u; `; y8 w- o; ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, \. q. O  J( h  ~6 s) O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. N* s/ I5 |& _: W8 f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 y2 K. f7 l: Z* V. P: G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): A* {( V% k% G2 `% Q% ?- M
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 y% e7 ~. J$ L' B% Y9 Q# a    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 t) ?9 a% o9 _" h
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 e& n0 o- B" c
* `5 Z3 k0 h+ i* p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, J2 C4 s* K6 _( c$ u% u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: P0 A- w2 o0 X# h% n    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# f; H" K6 L# C* U
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ A" k7 E4 \+ c9 ^, q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! g3 R, ~1 w$ @( v5 n/ V    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* {2 x$ X2 A; U! m' u* u% T
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- m  ]8 L$ N0 d. m/ b1 j
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, w1 J  t% T* \+ x! b
  J+ G  m% F- O# V* U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 ~% j: s" A4 y/ H. X
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 c7 N) `+ L' x: l' p
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 C, [4 k7 F6 l+ G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& e5 H+ a# j3 f' h% x1 P
( g/ @4 o& i9 o6 g, ^    mcasp->regs->DITCTL     = 0x00000000; // Not used
  n5 i( i6 ^; r8 O3 t' W8 w2 w    mcasp->regs->DLBCTL     = 0x00000000; // Not used% N& w! _! ]6 E- |) ]4 R8 L
    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 G4 m+ Y% w! P' T( Y' b& j0 n5 v5 j3 e. V
/* Starting sections of the McASP*/
$ X  `4 O9 x' D8 E! n    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 N0 B7 K, @5 p' L& d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + e) P* L. s) J) m  r/ x9 L+ V$ v
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ H: N2 D7 Y, O) R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* f7 H- [# `' s6 p9 o! D% N4 E3 `

7 k+ V+ X8 K; Q0 m* u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 Y. }4 ~4 E$ G* T$ ~. D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 Y" @; m$ B6 T! p' @. w4 N. v9 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 q+ n& B* u: n* K% r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 v# ?6 M2 k% y& I

& C5 e6 Y2 a$ t    mcasp->regs->XSTAT = 0x0000ffff; 7 O& m+ r4 R- \, D
    mcasp->regs->RSTAT = 0x0000ffff;
2 A( X) l3 n) \8 Y; a: G
0 q9 A! s: U) c# x    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" W% B- ~$ k! @/ ?2 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 N5 `+ z. v7 T$ Y) S3 }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & ]/ _- e! u: U) H9 Q. @  j0 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) e  _' G0 `) I

5 T4 K) H' ]5 C; ?  V    /* Write a 0, so that no underrun occurs after releasing the state machine */" m3 f/ A9 D  d) {
    mcasp->regs->XBUF5 = 0;
: X. w/ N+ ]- _% [, P7 D$ I    mcasp->regs->RBUF0 = 0;& A2 K* P3 D, e4 U) b

: j: O( J. x6 D5 u+ T- \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 N* e5 y' Z( ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ l+ ?3 {, W8 y) |7 W( e5 N! @; T4 U
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " E8 f( g$ u% M7 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 U' p4 I. G1 x/ G+ o8 p, g! J1 w  i/ `) K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . J1 a* i# u- C4 P' M. p. B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ K3 D  T/ b- d4 R, d4 I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 a1 Z8 |' `5 [0 I3 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 g9 H" j: q  \1 e8 t! e- p4 ]8 Z7 D5 E
    CSR = 0x0000;& x" C' t1 X; B
    INTC_INTMUX1 = 0x3d;
# A( l4 \' J0 G' ^: t    ISTP = (unsigned int)vectors;% T5 ]7 a: |2 L3 \3 B
    ICR = 0xFFF0;  ; f  h3 Q: p2 \: P9 b
    IER |= 0x12;  0 D5 s4 M: ?9 N/ `5 D& S$ Z
    CSR |= 0x01;  
" J/ j/ D8 r) o5 e- D# \: n4 z3 L" _% m  R
; T+ \( m. }; h. Q/ s
& R9 V# i" Z8 a9 u! w; @5 H2 G6 u
还有就是两个输入输出函数:' l- v. h9 Y) N9 k. x( x% O4 X
void output_sample(Int32 out_data)! U3 J! y9 z5 b$ Z( T+ t' A+ C
{
1 ~5 s2 P/ M% F/ K* c2 S  AIC31_data.uint = out_data;  
2 u* Y6 b1 ?, j. H; T2 y! b% }  MCASP1_XBUF5_32BIT = AIC31_data.uint;  C+ N0 }. F% q9 b: i$ E6 ?/ r
}
1 e0 T: n3 N  n& M* P  I" [7 e; m
Int32 input_sample(void); V  B/ S, P" z
{  ( l2 R2 P4 J! q& \" a2 g
  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 ?- `6 I+ Q2 `, `9 t9 M# r$ L3 G
  return (AIC31_data.uint);
- |/ I! Y; U% s}% L1 O7 n9 o6 w7 q* q

0 T- G2 C" A1 a7 z* A& p' ~
分享到:  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-11-26 01:25 , Processed in 0.039357 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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