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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 j8 }5 N7 K1 s* ^/ P* @8 O# g: Zmain文件:
7 \( \. `4 j- W9 T7 iinterrupt void interrupt4(void)  + v& U6 v  n/ p$ j2 t' I1 r. k
{
) s9 F# n0 D1 }4 M, v  Uint32 sample;- Y+ K$ r: K) K/ E2 }9 D) M

( ^& d( E; I, v0 {. a) Z* D" ~! K  sample = input_sample(); // read L + R samples from ADC" j3 g. O2 Q4 x3 @# l
  output_sample(sample);   // write L + R samples to DAC
$ [" O* z0 |% R+ p( R+ E; @9 s  return;
) n/ {) x6 D, K7 h  W9 k5 J}+ d0 N! u, [* l% y9 P4 u$ D
6 f$ Z( u& S9 o
int main( void )' O3 i4 u5 P9 P0 [6 y
{* }( ~1 q3 `0 C2 h& b

% n& Q5 P# h; f- c) R( ~    /* Initialize BSL */" }9 b4 n. p( {
    EVMC6747_init( );0 y. O5 q$ m0 {
        /* Call evmc6747_intr function */% e; ~* _/ O8 Q, J
    aic3106_init( );
8 o' Q6 E2 f' J) U2 m7 {1 G( w4 h        while(1);) x% u* l4 i& ~
}
8 R' A! H1 a" \# T* v1 e* I4 ?$ C. ]; u: T$ N) S: P) u, I
5 P  R: h: r0 q( s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" o* |& M5 l* h; ]" k- E' g- ^' g: W/* Initialize MCASP1 */
5 C( I+ @5 b8 U  i    mcasp = &MCASP_MODULE_1;
6 `+ ]7 F! a5 \. K# m    mcasp->regs->GBLCTL  = 0;       // Reset8 I$ v. X3 p% ?7 k( W& N" `. v0 V
    mcasp->regs->RGBLCTL = 0;       // Reset RX  D$ ~3 q* V0 ]2 w. M: a* X
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 n7 A7 I% V7 A* B9 F8 c
    mcasp->regs->PWRDEMU = 1;       // Free-running7 j% B' M4 U, L& y
   // configure McASP0 receive registers
! J/ V0 X. j- x- o: I) s) V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" J: K1 E5 g# t4 d, B2 ^) L  o9 p
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 i. b8 ^$ a' H& t6 y* G+ g! m
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! H, T# z1 p$ _/ w7 R# ~. t5 S5 D    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# r! q1 s1 @5 \    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* u3 ~/ h# t9 F1 ~    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 M- F0 [4 m- c, Y' V; f' I* t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) X4 D* P- o. H; f) x9 Y; |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  i0 m; V7 X# C9 m1 [+ H# O2 i: n' b: O# h; C. {# v' X9 p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 B, I7 q2 y/ p* v+ W5 i* n( X2 m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% \  T# E, H( h; Y) _, m+ G" S    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ A; W; w1 x# g5 v* R9 U    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 U8 d* y( w* p4 {! p, U) A3 j
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% i/ _) h- b2 H9 M7 y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ w2 A8 t  `) `5 H6 G+ L    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 G6 A9 Y+ `( T' \3 _
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 R* X+ E1 r; ?, T$ C! b1 g* a1 A! T! H, D4 w! t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ Y9 i5 [  q  a' n+ C8 g    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  X; {. ?, h0 N4 _3 T) g% D    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 O7 N' b- x; h/ G    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 \6 ^  ~" E4 ^' Q; J( _- `

* o: b( U6 r! L. [* H    mcasp->regs->DITCTL     = 0x00000000; // Not used, E6 ?  @$ E+ v! C4 y9 O
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: f& ?+ V. @" q: k    mcasp->regs->AMUTE      = 0x00000000; // Not used
. x# M7 E+ y2 r( ]! U
. ~4 V: m+ P& P2 J" \/* Starting sections of the McASP*/
4 N$ P+ Q" a; }/ d5 l    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 B- ]  ?* x5 v( w' Q+ V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + ~. h& T  z8 x7 T$ p3 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , @9 C; |$ q9 @4 r* L+ c% y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' t6 A3 ~2 \- ]1 c/ o- U

$ F! F  Y1 M& B" B) ?- _8 Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 o* Y" }1 H) E% {: C4 Y5 ?; K# ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& }5 M. N: e5 y2 P. T" |# t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * K, ]9 j8 i" \3 @, |. N( n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 L9 ~+ ~0 H7 e6 G3 p" e& z+ a0 r1 J3 |7 W) R
    mcasp->regs->XSTAT = 0x0000ffff; ' g+ P% B% l* E; B/ N
    mcasp->regs->RSTAT = 0x0000ffff;
  u- j+ q7 X6 f& P9 X, A4 q; l) C3 q1 z& p2 p/ J' r' J, e3 ?: D
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# Z2 l5 C# t7 l; L( y3 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" [4 x8 b5 ^5 H$ @. J% _8 [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ p+ I" b( ~3 x7 x6 S9 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ \- ~+ ^9 x' ~3 O: J, K& _: [+ e

  ~6 L4 w; b2 H9 `; s: s    /* Write a 0, so that no underrun occurs after releasing the state machine */' d% A$ g8 o# e* c! P9 Q
    mcasp->regs->XBUF5 = 0;
' h5 A  H  S9 Y: v. B    mcasp->regs->RBUF0 = 0;
6 d! N1 R, M. s  o0 m
7 A" G8 u. v4 y5 H, [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 y9 R, ^9 V. j" `* Q8 U! p5 k2 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 o( i) b% G/ `1 d0 o" K4 `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) g, o0 j3 {$ e: p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# a' q$ u5 q) T+ f

. M7 Q3 |1 b: B& ^. R$ U2 d: Z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & O0 \$ K3 w6 E0 \4 z; D1 `8 v) {4 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, }: @# o% v) o* `6 D, C6 N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 q/ M7 d3 K/ Z& M2 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ ?  s" H( R2 a  S" n
  h! S" F/ P  r( u( H6 n
    CSR = 0x0000;
4 p9 L; E5 B. I0 ^  g3 Q) |0 J    INTC_INTMUX1 = 0x3d;) z- K+ Y) U; u! k6 P& f6 Y0 z
    ISTP = (unsigned int)vectors;3 I! Q/ y8 M1 X! y) L
    ICR = 0xFFF0;  7 ?+ r- }( e" Z
    IER |= 0x12;  
$ e+ ^- ?; T1 r6 i. x    CSR |= 0x01;  # k2 R; \; V5 t) a

. o. h9 P% P& Z* ^8 z# i
# q7 L7 _2 z+ x) m9 C1 H
% b' c' a3 }% i( q. W还有就是两个输入输出函数:
: F$ x! [8 h0 lvoid output_sample(Int32 out_data)
% O% D4 u/ Q2 D) I+ J{0 N* R8 U+ c2 Z+ Y+ ~. l
  AIC31_data.uint = out_data;  
& r5 F# v0 H3 h  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 T1 `0 k' k# Z5 ~* G9 `% M3 O( C
}
- X2 V) T! u  Q9 R5 q3 }( x5 O# T/ D5 E; r* Z- H
Int32 input_sample(void); z! a  `; A: S2 p) K6 M
{  : Y* ^2 [0 m5 Z3 c" m5 v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;% ^, A' w% e& [9 X/ ~: V
  return (AIC31_data.uint);: r2 A7 x. p4 l- f, `
}8 e( a* y; Y, v& ^6 U. s

  ?- e" n! h+ K: g- b0 R
分享到:  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-17 01:19 , Processed in 0.041175 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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