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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  ?( Z0 k3 v7 C/ r8 r. [
main文件:! X' E8 _5 l- e2 I( j. f8 S. A4 J
interrupt void interrupt4(void)  
5 |4 H* q6 {3 E+ ~+ D: }. V{
8 }0 g' p) G# r  Uint32 sample;6 ?# ^* F& F: @* R& W# @7 I
- u+ _: g' t3 Q
  sample = input_sample(); // read L + R samples from ADC
9 c8 y, u9 S/ s# E6 ^& J% W* V  output_sample(sample);   // write L + R samples to DAC
- d' J6 B" g5 q$ E9 f  return;; H# X  q3 F5 E
}0 d5 a+ R7 z# K  [8 [

' f( a' _, |+ q0 ~/ C6 U$ fint main( void )7 c, T4 y* ?. b! T; R* a
{
5 \) @- O$ ?& t" o4 u" N
' E' U% }8 N+ ~# w    /* Initialize BSL */
/ e/ l4 S2 Q3 M' M+ B5 t/ s    EVMC6747_init( );* M$ C9 S1 G0 M7 t" w. u' O& {. x
        /* Call evmc6747_intr function */
! u5 R- a$ H9 @4 \7 s+ l. X    aic3106_init( );! p2 ~% E# _, \" @
        while(1);5 h3 d, H4 r2 }1 f. y" L" h
}3 D  W) \0 K/ O+ |# z( t9 `

( R* S$ j1 e/ z! W
& f. i$ q  _& A0 j: [" }0 ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' U' y4 e/ Y7 |9 F3 v3 `' u6 A/* Initialize MCASP1 */( h7 D2 j8 M! i: E+ s
    mcasp = &MCASP_MODULE_1;2 q( w7 |1 T! e' ]
    mcasp->regs->GBLCTL  = 0;       // Reset* Q5 z! m# E, j# L! D
    mcasp->regs->RGBLCTL = 0;       // Reset RX3 Q  D2 `% L" C* k% \1 G
    mcasp->regs->XGBLCTL = 0;       // Reset TX! b! f2 L  d) n- B' y8 ~7 ]
    mcasp->regs->PWRDEMU = 1;       // Free-running
! a' M( f$ I5 U0 b: M/ Y7 c; _/ v   // configure McASP0 receive registers
: k( s! p7 o  T4 H; I7 L    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 M' Y9 l3 S. C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 ^+ @: x: ^! c3 ]  S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 q7 m' t& I( q$ {0 u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); s2 a: S0 ~! G* p& N
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ e/ j9 `4 c9 ~: {5 q5 v, i9 y; y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  e* l" J$ U6 i! U6 P1 F9 {7 e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( Y7 A1 q  e" l  l' n9 x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" W% f: T. |/ @& J! x+ n8 ~

8 q7 \+ h7 A. @+ K6 b, ^( h# X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& |( l; f4 j# g! S2 r& u5 _  u* r) K( N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' j! {7 Z+ S5 ~5 T% _* h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ C3 W" Z/ v  ^) m, J9 S7 E
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ {8 m8 k! }3 ^3 a
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& K4 u, P: w2 R6 q) v8 L+ z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ O; X6 x; k+ [; j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& m$ }; Y: X( G& E) ?
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! l9 s+ h! z$ C
7 q! w! X9 A) S% _    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: t: p  L  d/ ~5 Q, ]    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, E5 |) b+ O' t4 ?% R- @
    mcasp->regs->PFUNC      = 0;          // All MCASPs; K! o" F0 i: P" A1 r( S% \2 u  e
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 Y8 p. s& t  \) |0 V
3 b8 @" D/ @9 O# R    mcasp->regs->DITCTL     = 0x00000000; // Not used
, r4 l7 ^% H/ m    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& Q0 \3 I+ g4 ^- i' I0 H    mcasp->regs->AMUTE      = 0x00000000; // Not used
! A4 ?  L; ~# _' Q
2 B, m5 i1 C; L3 J/ D/* Starting sections of the McASP*/
% u" t3 L, l: o- m7 J% Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 n- h. E* Z3 J* G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : b" C( g5 t( v+ e
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  L7 v3 D: `+ j: ?, S4 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  j& V+ d7 @9 x9 N/ j6 P8 ]7 k: y/ }) D! f3 k" ?- l
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 U, I* B, z7 k) t* F8 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 O, b4 d; b3 t7 `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 E8 z/ u8 q4 N5 y& N! }" i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* c8 L9 n2 ~' W0 K  e! \
; t8 l9 j$ m9 g( I7 t    mcasp->regs->XSTAT = 0x0000ffff; ; b. n& |5 x2 ?$ W
    mcasp->regs->RSTAT = 0x0000ffff;
7 a$ g0 B" i3 F, A& c6 I$ p. j; L  i; _5 g8 s5 l0 o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 K# W3 T: p/ j. Z  V+ _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! D9 |  u9 f3 r8 j    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( p, ?' |* a$ z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# s+ h! Q+ C4 h0 u) Q

1 \) q" p" x5 w; [* S: q+ |    /* Write a 0, so that no underrun occurs after releasing the state machine */" Z' y3 t# J3 p1 r8 o& n9 O
    mcasp->regs->XBUF5 = 0;3 y4 S- v+ r9 i8 F7 X, [, d! d
    mcasp->regs->RBUF0 = 0;- M6 H9 F4 e$ _3 |6 T8 V

' V' O$ T$ f2 p- V' _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 _7 t" o# p& C5 ^; c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% d/ r2 n' }* G
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # w: Z, R# \1 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: m2 r/ ^# z( D/ G; `0 x
( @' {# B- T) W# q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + v) ?/ N6 P; p3 G6 s" i7 j# u+ J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 h- h4 }# C' ~" d) v    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. u6 r) n+ P5 r! o% ^6 P' J. {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) k5 a2 v% t  }' l

$ \3 `6 t( V" g) z. x. x! _    CSR = 0x0000;
6 D" a0 w- K2 l' z    INTC_INTMUX1 = 0x3d;5 J# g+ @5 D$ x! s) x: q
    ISTP = (unsigned int)vectors;
( [& b, F/ a2 j8 b5 C+ r2 t+ F0 t; x    ICR = 0xFFF0;  & e5 ]- r/ _' T1 I5 ^) w' u7 \8 l' k
    IER |= 0x12;  ( r: e; b% F9 A( Q; W
    CSR |= 0x01;  & ^0 U. r1 i8 E2 A

  Y7 q3 o4 V4 \: I
* u. b. u" C9 {/ a  X6 Q
5 c  N" r7 m0 ?还有就是两个输入输出函数:
; ^1 J+ O+ h& f5 zvoid output_sample(Int32 out_data)" D: F% ~+ K* K$ [+ ^4 X- {
{1 U( b; K: ?/ [  G7 y0 m; f2 \
  AIC31_data.uint = out_data;  7 r9 d3 f1 R4 a( S$ o3 K- r' \
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' Z4 H. l! _5 G3 D" s: R}
$ @% m1 I# L) ^8 ]) P- G- w; N2 W2 |4 l9 r
Int32 input_sample(void)
4 W! c( o& S0 F. }{  6 I, }$ s! g7 Z! ~
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: f6 Y* z* Z* g* V! Q( i6 p  return (AIC31_data.uint);0 B/ J, V" X  r
}
* [( i. x1 l. C' T0 H2 B
7 y- U* J4 z; Y& F7 b& I: M, m
分享到:  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-1-30 14:25 , Processed in 0.040709 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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