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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# O* t1 ^  @( T& \- hmain文件:
. W1 P. ?+ J: H$ ^interrupt void interrupt4(void)  
" F1 _1 p$ M- K: i  r5 p{1 g  p) S# }" W! d
  Uint32 sample;
. A# K/ M! @& g; X
& j0 ^! J0 f  n- f( u3 p, q  sample = input_sample(); // read L + R samples from ADC- ]7 n" i2 E/ t0 b' Q+ u2 n* J6 _
  output_sample(sample);   // write L + R samples to DAC
5 c  d( H6 ~: T  d- b  return;
$ q& r# x9 s, L8 A}
9 @3 |: a: s" v, w$ }9 J1 m0 ?9 a( `& n5 ?. x; x+ q
int main( void ), v; N# z- K& H* {
{$ M! w" z" y6 l7 N& d, \
3 w1 a2 y6 u% C* Y# e' H/ w# L& H
    /* Initialize BSL */4 a( K. _* H4 V. x8 p$ x) b; ^
    EVMC6747_init( );
+ J  p# \0 p/ S9 |        /* Call evmc6747_intr function */* x2 g( e2 v& h& `3 C  O* q/ Q$ i
    aic3106_init( );6 P8 x* Y1 b  w( Y8 D+ w
        while(1);
* C7 n. M( m5 g5 {5 h9 ^8 k& R}: d: b& @5 V7 }$ D7 k) z9 Z' C

- \0 W* Q/ {: z* J" Q$ Z
9 Q/ d& r+ ]9 x1 m; K9 ?7 \' M0 Waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) v3 j6 F4 f5 g
/* Initialize MCASP1 */
1 f$ Y4 [" D, R0 p    mcasp = &MCASP_MODULE_1;# m, u5 @! Q  x& ^' e& a
    mcasp->regs->GBLCTL  = 0;       // Reset$ n" B, _$ E0 P  j, T3 z7 k4 S
    mcasp->regs->RGBLCTL = 0;       // Reset RX+ L' k& ~+ t0 y0 w5 n! W- @5 T
    mcasp->regs->XGBLCTL = 0;       // Reset TX  K: X- x9 O7 Y6 F* _8 Z
    mcasp->regs->PWRDEMU = 1;       // Free-running; y, ~8 I( B- z' X3 ^$ D
   // configure McASP0 receive registers
8 `3 q7 G( C; l4 u) Q3 e& d    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( Y" \' K* a; e! g8 x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ V3 x7 W9 f7 h: u; ]! j' h: r1 N* W    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ p7 L- D# e+ |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' {% E" H. c/ r3 K1 l    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 U1 y' M0 K3 S0 x0 K/ Q7 F" `1 k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 F# m2 [% L2 K9 ~" x& `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- B( I1 ?% J0 j: ^2 Y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! P0 H5 A5 h% p/ w: l  P
* E$ T: Y, D2 s) n: B. G    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 z% r3 M  `: k& E: S6 V6 W
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 T2 y6 s0 w5 Q$ ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ D7 k0 o% C- `- ?' E3 L    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) g2 S4 G  F6 ^* P9 I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 r' b" Q& [5 D( {% ^6 e    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 E, q- h) A' [0 {* ~$ ]: p
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit/ c7 G" ]1 R! I0 `
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- y# l- u" g5 h2 x

: J+ o& q- \/ B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" V' c( {* E/ r5 u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 j! |+ e/ Z7 ^( ?    mcasp->regs->PFUNC      = 0;          // All MCASPs
% I& M3 T9 f) V1 V! j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! W$ L% J1 O! M& q6 C

2 [+ Q( a. R* M4 h: d5 D" ^( u( P    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 s) ~6 W, j; R) b    mcasp->regs->DLBCTL     = 0x00000000; // Not used; X- P6 v6 n, e0 `; x
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 Y9 V% J$ E! @4 g+ ^1 N: D& H2 K/ M: b. R: Y* N
/* Starting sections of the McASP*/
( |! }& J5 r+ j- H) U$ z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % n( M. z& A5 _$ E% E) h1 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
; k: h% X6 z, c/ i+ \8 H    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; j* T8 |7 f5 L* m2 Q" D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 C' _+ Z9 t! ^  a" b7 e/ q2 H5 }6 r

' F& A, Z' L' ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " \3 c8 m+ g  P, ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: e$ T0 c1 S. o! @' J! B3 o
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # ~9 C1 e$ v% Q% ?$ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 L8 U1 n3 J0 p* ]# m5 I6 {

$ n7 C- x9 O/ Y$ }3 W" @. e    mcasp->regs->XSTAT = 0x0000ffff; 1 {( O6 B3 w, r& U( }
    mcasp->regs->RSTAT = 0x0000ffff; # w, w! w; n  V+ E( o2 k

1 q7 B9 k2 ?$ o8 ?! ^  m: p# f    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 ^4 a! y6 h. e4 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" m7 s5 M/ g; E; |6 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + x! R$ f: r0 I+ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- V) [5 N2 u5 N7 m- z5 P: B" E

8 l! L; R, R4 P4 c4 S) w- ?% {    /* Write a 0, so that no underrun occurs after releasing the state machine */8 O9 l$ c0 i1 I6 G, p. e
    mcasp->regs->XBUF5 = 0;$ m' U  W1 Y# u& X; \4 y; o
    mcasp->regs->RBUF0 = 0;
0 M2 J4 m# g8 o! O( E5 W& U* U
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; J8 n# L4 }0 a  f2 J* P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" U6 R( Q+ K3 T4 x5 F
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' ~+ n5 c0 L: D4 D! G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 P8 a$ Z4 N4 R/ U  {. T* x
" I, R, D0 w  |0 u/ t3 D: K    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 d% w/ S7 w9 m' k% C- A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. A4 v7 B. R6 h# G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  y8 V3 q& k, E6 E3 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ h# w; S( L. _

8 Q0 m3 ^* a1 H5 \0 S    CSR = 0x0000;
  L& l2 N& I3 E! M  v+ R) u    INTC_INTMUX1 = 0x3d;
/ \2 X- o" {8 n    ISTP = (unsigned int)vectors;
: D5 \6 |8 X- I  }- V    ICR = 0xFFF0;  
. L/ T8 C* A  V    IER |= 0x12;  3 {2 Y! _4 N4 h# O  R
    CSR |= 0x01;  3 a) X4 Q! T) r5 e3 i

. }( a! z/ ?  w4 O" W2 L+ y
# s# L- M! |5 A2 U' w: B5 o: ]' Q4 L; d1 {8 e: R
还有就是两个输入输出函数:/ n8 T# w% k3 V. L# Z- f! W: [' D
void output_sample(Int32 out_data). {+ P- F% s1 J! k% e
{% ^$ }" y- {! V
  AIC31_data.uint = out_data;  ! m$ S$ x5 Y: {/ P' K. W# \7 D
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ m* |% T* S& E# u
}/ _; X1 [8 B# E

; C, I1 h1 ]" [2 BInt32 input_sample(void)
3 H3 i, g9 g/ q, m& A+ H{  ( Y4 a, }  o9 F6 P" V! X  L+ L$ h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;# U9 P) S1 I+ o" b& P( u  C
  return (AIC31_data.uint);3 M' O, H' N$ l% i& A  }4 B% a
}2 n& J: z& s5 Y' ?

7 h- W% `" C+ T- E. d
分享到:  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-29 07:57 , Processed in 0.038961 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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