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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- s7 ?6 Y. k3 j- Z6 xmain文件:
6 E  }3 H0 ^4 R" _/ \. U, i: Y2 finterrupt void interrupt4(void)  6 G; C* |# T9 w
{
: T) O" {6 o' B8 `  Uint32 sample;2 b* o: k" |  k/ B5 a; Q
- e. o  i! {' M; Z4 t' N/ B/ g
  sample = input_sample(); // read L + R samples from ADC
# }9 I* Z) N' p* E( a0 G  output_sample(sample);   // write L + R samples to DAC
5 q% I/ F; w  y* O  M  return;
: s7 G  S# j% P7 ?& u6 `' ~2 l}8 o, e: ^- J' T$ h: t9 |, h& b6 _
3 k7 O6 ~& C7 U: I" @* F
int main( void )+ z# ^$ c; ]. x: B9 y
{8 y7 I& [( H& q5 D1 ]. n) `- _

* ]* \: N7 {% \6 Z8 _8 c5 [    /* Initialize BSL */
. U$ J8 O# A( T# J! Z- {# J    EVMC6747_init( );& N6 }& d! B, r1 I. R1 J; p9 _
        /* Call evmc6747_intr function */
9 v  _& c7 N5 Q+ t    aic3106_init( );0 Z9 r) X  d' d  D" p; i4 Q
        while(1);' c+ e( U, p/ U) P3 b' @
}$ T! O* {# F! K, t+ T* A
5 }+ x& A; o6 M# ?) C/ r
: U  _: P$ \' c7 l8 b6 S9 ~
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" Q7 ~' H) _  `! @5 w! R6 M  e
/* Initialize MCASP1 */
5 g' w( C+ u0 @/ C& ^& j/ d5 X1 C    mcasp = &MCASP_MODULE_1;& s, {. |& N" D' V7 g0 l8 n6 P
    mcasp->regs->GBLCTL  = 0;       // Reset/ [4 |5 d& r% n5 u
    mcasp->regs->RGBLCTL = 0;       // Reset RX
: {/ F2 t& ]) U6 R    mcasp->regs->XGBLCTL = 0;       // Reset TX) ^5 @! I% h! F) m3 s/ a
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 c+ h6 n  v& T1 W   // configure McASP0 receive registers2 Q" U2 q& k& H! `9 c& B+ v) W
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: @; t" E: ]0 r. s  _* f4 Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! _5 c$ i3 U8 T' M, W    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 L: v/ F: J# l# o) M+ Q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 I, D6 z( E8 n1 _- x5 X  ?2 x    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) Y; p" T& i. z6 _! p% t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- `% U# P5 L  ?
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ i5 C7 _( G  e' k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ^% n. @) S1 @+ O4 e: D& ~2 v6 Q. N3 `/ E3 T. l
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 H1 O/ ?& U/ W/ G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' v5 \# O' ]3 N& `2 M( |: i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( P" ?1 x6 V7 Z1 c* J8 q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 O% m+ Q; E6 a+ ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; f3 ], y- H2 e) V' X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* Y1 e: j9 W9 m1 I+ r    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- _3 _  V' _& Z0 b2 p) H" _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 H- |  H/ G, X3 f
# ?% U( G8 m- \0 r4 A4 R  \
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! R! I4 \  Y1 K$ q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 Q* ^8 l+ Z8 j7 w9 |' l$ J$ V
    mcasp->regs->PFUNC      = 0;          // All MCASPs' @# L. Z3 ]5 ~  P! ]
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: t/ T  g/ \5 x6 ~, V8 ?9 ?
/ _* [7 Z* A8 I+ y* r
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 ^) S! m- T0 q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 K( \3 x) t# A- I- a: N$ l    mcasp->regs->AMUTE      = 0x00000000; // Not used
! e! F9 N3 C  a+ c( O& `  g/ w6 j% d8 |5 X2 L6 E
/* Starting sections of the McASP*/
, o+ y- A0 G* W$ q! ~    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 K2 K* y8 a6 P- o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 D& @3 w1 K( W8 i, _
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   C: q5 Z9 `! j: l3 ]! Z1 n% E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; V& G9 g8 w3 Q( _/ c( O7 O6 a8 B* t

' P& C* s/ c4 M    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 m5 e9 J/ w' ?: M" [* M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 h! X7 v! b1 [1 ]6 x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! T" F" P7 V1 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) u; ^* t6 L0 ]" g/ O6 P' ^; ], A& k6 g4 E. f, i
    mcasp->regs->XSTAT = 0x0000ffff; ( W& d, Z+ v2 f( y: l) o
    mcasp->regs->RSTAT = 0x0000ffff;
# J/ q* }" b- x6 u
+ G, s# k. M: ]/ t6 ~$ k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* t" V5 V% a& C! ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 c& d/ |& [' t; P7 O; k+ l
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 S5 X2 q( j0 U7 w" P1 v2 f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! j/ F4 ]5 I! F9 U$ u
) w& \1 Q7 f, N. e7 p" t, J    /* Write a 0, so that no underrun occurs after releasing the state machine */
# r* w$ [& `3 U; [* Y; m    mcasp->regs->XBUF5 = 0;& j* K' s# f: t/ F+ y" s: _' l- O! j
    mcasp->regs->RBUF0 = 0;
5 _; e$ x# l3 J1 o6 n+ l) i+ E& J
! V7 D: A+ d0 |" v! ?+ ]3 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% h# {. }' c  |3 m9 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 J( c% L; i: Q& X4 W/ U9 E6 S
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  h5 b+ n5 Y2 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 [* _* ]1 y1 [( e* c' @
8 l7 Z9 c8 L! e; t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% S. `2 B1 i- b) z8 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ j% v) E3 m: L3 }% U    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 Q' K, q7 _% r: N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 q& C0 m0 W4 r0 l; u, c, j1 N
9 ?  H" L& y/ y& C9 P9 L0 P    CSR = 0x0000;9 v( F# b4 w2 p
    INTC_INTMUX1 = 0x3d;: q; X6 `! p; b
    ISTP = (unsigned int)vectors;) i" J/ C9 P; k' f' `
    ICR = 0xFFF0;  ' g$ r; F$ `# m/ V
    IER |= 0x12;  + U) ?* l0 q* g* M
    CSR |= 0x01;  3 X& ~+ w) q% n2 S& L( R

) H7 ]( e7 N$ e/ r1 m
: Z1 ^! N& i1 k
3 a+ X6 ]2 S  |还有就是两个输入输出函数:  U" r3 y, z% h8 G( |: {' P
void output_sample(Int32 out_data)% y8 S2 [4 W0 U$ v3 }% I
{/ b# D" @$ u& n& h$ ]
  AIC31_data.uint = out_data;  
: @$ U- \, S3 Q( Z" |! Y6 Y# t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. j* r1 v( {2 _6 H}
9 {3 g0 \0 @* [% v2 W( L
) n) k6 ?* n% K: B" Z  a! oInt32 input_sample(void)
- b. f' M* s4 ]! `{  
5 O: n. T8 ?$ Y" |9 K) @  AIC31_data.uint = MCASP1_RBUF0_32BIT;& x' }! u& d) \3 ?
  return (AIC31_data.uint);
2 x0 ^8 S! F# c) o1 w7 ]}
0 y: t% |2 \( a* O4 U, C. f# o( m0 L  |2 C& I9 @
分享到:  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-24 01:27 , Processed in 0.045285 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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