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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 `' D: o+ s, p1 J; [; b2 tmain文件:6 f! q: [3 ?& [' q& d7 `
interrupt void interrupt4(void)  
: d* L9 u& N3 \, s; @{
$ p5 P5 ?% D6 O2 o' d# A" w  Uint32 sample;% `8 F3 z7 ?, D2 ]7 i  G3 R: e
+ {8 z9 a/ T' q. C; ^( S* ~
  sample = input_sample(); // read L + R samples from ADC
8 ^* v3 O; {3 q4 Y4 J  output_sample(sample);   // write L + R samples to DAC
2 [2 q9 R4 w% u, U, n* R# w  return;
1 o: o- j2 M% _6 \# g1 `}+ z) W+ H3 K0 h/ u- S) I

% {* I1 g2 Q2 k2 m0 ~2 Gint main( void )2 S7 b5 J! ~+ ]$ j. E* X
{+ g, r1 d( D. i1 D6 }+ J5 E# u

7 A5 B) ?# G8 y: P" F- [" Z+ v1 ?    /* Initialize BSL */
9 X( O2 m- Q2 U* K2 t5 f7 v+ E5 U    EVMC6747_init( );
, o1 M  m  ~, U  h( y8 Y        /* Call evmc6747_intr function */
* J- g- D. f. D9 U6 I    aic3106_init( );
3 s' T' c& a" j5 M        while(1);# L  a6 j0 @3 m0 b
}4 e0 {  r( g% Z& ]. }5 h! ]

' p' {2 d$ Y" U' }8 b9 O! T$ I4 K# \( a+ @" w$ ^) O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 [8 @0 Q6 D9 ^0 N$ p2 M, t& C/* Initialize MCASP1 */, R* f4 N) O) E7 N  P0 ?
    mcasp = &MCASP_MODULE_1;( ^$ r% ]; ]0 G; g0 G# C9 P: p
    mcasp->regs->GBLCTL  = 0;       // Reset2 g% E9 f6 A0 c8 v1 A
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 ]% f# n' J7 G    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ c* }0 \! v1 q( `0 ~4 J    mcasp->regs->PWRDEMU = 1;       // Free-running9 J1 x5 N) o# w8 F' Y9 R( v
   // configure McASP0 receive registers+ [0 b* R- }, z; o; B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. h  q- @% V& q' A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* W) ?0 X" `. H7 R8 g) ^
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. L' T" [' Q% y! D: Q! F. z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( w2 }/ d& q" @( A/ I( @+ G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  t) v+ }* p1 |, Q/ k/ _5 X
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) Q8 V. s4 [0 d5 y9 b5 K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used% k- q- E. e& c# _: N. b
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ n5 X0 m" N5 e3 W
( i4 h9 M- K& b5 L$ \  x/ p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; o: \+ s# R2 z- Q9 \( N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: a1 F4 U3 M1 f5 @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) P7 c7 C0 W- t* M% e4 Q$ a% @
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ r9 f. \% D. u: E" @    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- [$ ~6 m$ `& C! J" C- j# t! K  o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: i* [) r0 }& w, J) ]% d" m; ^  X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; i% X  j, p! I    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. v) J" B; o- W' _3 T* I4 [: |

# n4 y( d, b& p5 J- C  Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 d* e3 v. B* S% k0 ]: u1 p    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' A% {& C4 ^5 p: l) D( m    mcasp->regs->PFUNC      = 0;          // All MCASPs+ D2 L9 n' P8 I0 X
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' Q; r% Z$ c! Y$ b5 l
6 U! O. S- }! u5 T5 |
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 H. b6 ?" g9 R7 m, I- F    mcasp->regs->DLBCTL     = 0x00000000; // Not used! H  @! N+ F1 ?: ~9 \
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- X  H- J0 j: P! C
" ~8 G* g- n* p+ j( `5 K/* Starting sections of the McASP*/
" t: y. m2 R- o; q' i" ~1 N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 d  ^* r) W( o) P7 g7 ^* Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ \, L" J( T9 y0 ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ n$ @& z: X+ x- L$ z( C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 f% g1 M8 q$ x$ z& z7 H5 z

/ L% [, _5 E7 M$ D% Q' E) w1 k    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 V& g/ K4 ~( _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 O2 M6 y, T3 E, `/ k4 a. j    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) ]. Q" Z; |% k# _# o8 Z3 k* I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 K4 @/ R3 o7 i& }; D% J0 U% S# e& ?9 h
    mcasp->regs->XSTAT = 0x0000ffff; ! j$ f6 u" u5 J1 ?
    mcasp->regs->RSTAT = 0x0000ffff;
: A& r8 Z0 t1 u- q2 [" [  w" M! i. {9 `1 o# b
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  P1 s6 }$ K& s! n* I6 j9 {& `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 I) f+ H* y3 @7 l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, A& j' ^4 ]7 s9 x" X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- |  K3 h) E5 O, R1 ]7 [
- N" R" N8 m2 \$ l5 @/ s    /* Write a 0, so that no underrun occurs after releasing the state machine */. G. q6 U, N0 Z$ e# l* Y& t- Z
    mcasp->regs->XBUF5 = 0;5 e; `& Q' p, q% Y5 ?% ^
    mcasp->regs->RBUF0 = 0;7 P, G6 C5 \; r3 b* K" r' y

& H1 v8 w& v" [5 F" D0 N5 U0 n    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % C; Z  a- q( m1 D( z" z' C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 E. z8 \* T- K3 R    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " A- Y" o( Z/ v; X9 X7 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* z& S: `1 W, e6 i0 b
) v* J. p8 q6 j4 F3 R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' C: B: n- b; T& |& S! @' U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  \; m  T, o! A6 b3 l4 N0 O  }    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 t( r) j' e) A/ c/ W/ t- ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 K! ~/ V3 L: }
+ h) w: [. N: n  y# V" {5 P    CSR = 0x0000;
6 ~; G% t$ T8 s; O) C4 l    INTC_INTMUX1 = 0x3d;8 B4 Z7 C6 n5 A; O
    ISTP = (unsigned int)vectors;
3 G) D1 ]; S# {9 M; w  u    ICR = 0xFFF0;  
2 ?; }+ C, ^$ o/ Y6 o0 j7 y$ Z    IER |= 0x12;  
& l6 z# O& u. K: a' ^* g" x2 F/ n3 A    CSR |= 0x01;  
, b3 x8 ^5 j3 J7 M" w5 N! w: k4 Y

1 q8 z% m- j8 Q' n: G( C- s+ l$ e, ~
. c  T# B( u  I: J  ]+ F" y' q还有就是两个输入输出函数:4 k7 g1 z3 Z6 ?7 C7 u2 V' B; L, }
void output_sample(Int32 out_data)  K4 u* S: S9 e% g
{
! M8 b0 O! Z7 F1 a; w# P  AIC31_data.uint = out_data;  
  I" N8 i0 U, O; L/ c  d  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 u. S9 k+ p+ o0 K' Q  }1 @
}% H- Y6 r( b& R6 {6 O  K
' G# y; _8 }* O/ G2 e4 f
Int32 input_sample(void)# \( \6 x! _( F* t9 J% C8 B6 B
{  
. C1 {& A+ x' G/ G5 B  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 n. _: \$ |3 S  return (AIC31_data.uint);  ?0 k; n1 F( ]. K
}
; _7 O: r8 J: c3 u
3 d( [* x. ?) y9 t2 x
分享到:  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-2-14 19:28 , Processed in 0.039731 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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