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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 c0 U2 ~" t. ?' J8 g
main文件:& r4 N5 H9 n1 L
interrupt void interrupt4(void)  4 c# L: D3 p" U8 m; K+ O
{
' ^( r) V' N; s5 |! C5 `1 A  Uint32 sample;$ m8 ~4 S' K% v. W9 N5 h- ^
" x8 x" f4 u" i& z+ x* G
  sample = input_sample(); // read L + R samples from ADC7 V) {$ e" s. g' D+ j2 y1 E
  output_sample(sample);   // write L + R samples to DAC
0 g: }( |0 u. u. Y. m5 h  return;
9 j* x4 F! b* V/ w: ]! o- S}
' y0 w; H# _) F* @( o2 w( w% Z& @1 m
' l" Y7 D0 [; @3 s* n  O7 Bint main( void )/ K% s7 c! p4 P( _
{5 H. a0 u; E8 K

' b) K/ e9 @7 U" ~# V    /* Initialize BSL */
# ?9 N# O8 o1 y: C    EVMC6747_init( );
% H: r! w" o0 a, b) M: @        /* Call evmc6747_intr function */
. Q& \4 j4 G: A$ ?0 \/ C$ b+ }3 O' y' U    aic3106_init( );
+ F3 g" i& w9 U& }        while(1);
: e0 q0 z8 \2 s}
* X2 m" L* c3 v; I+ |1 T3 X4 }; ]2 g: a

5 I' a0 W# _8 n  z# ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, l( ~* c0 q1 P' s, ^, |/* Initialize MCASP1 */
8 h: ?' f: V5 s% ?1 |% W: A5 q    mcasp = &MCASP_MODULE_1;2 {% z7 G5 {/ c, {
    mcasp->regs->GBLCTL  = 0;       // Reset
- a1 o" Y, T- ?" Z- b; F    mcasp->regs->RGBLCTL = 0;       // Reset RX" b1 ^  @. U6 N- N1 y5 v5 j2 Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX* z% ]# ~, z# G5 d" ]" |; d) u
    mcasp->regs->PWRDEMU = 1;       // Free-running' o+ O+ M9 k" r" w( z9 @( u7 p
   // configure McASP0 receive registers
5 t3 T4 R/ p$ ]" m# a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ E1 a% w1 l# U6 o/ E6 Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 v: p! c+ n" ~, b' M5 _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 I8 G9 w: e6 X3 X8 F# h9 P    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( T  d1 {5 Q0 Q! S; _, s# q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& O( n$ f5 ?& v) D( F
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 E5 z+ V8 a- h  L& l( I+ D' O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 R  B( |' l/ g" j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 W* E, D) M1 h9 I8 m! A, i5 e2 k! u$ x

) K$ A+ _6 ?$ e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 m( _) d  s3 S/ R0 ^) S3 g  S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& d& U) j, ^2 B- s5 O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ e% B" a2 N, v+ ]& m( e$ Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 \9 w) E  E& s8 M# w( M) e( l* Y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" H6 ?4 T2 q! E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 T! C, `' y# ^# |4 W3 o/ Z- Q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ Z% O- _, Q# Z& N" b* S, J
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 P( `* r$ P6 r4 O0 C+ `  d2 M9 @

4 T1 @8 Y8 v1 f# `$ u    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 v; _& Q& M' n% F- r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- }" D3 E/ H2 q1 j( E: P! Y, H
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 s' J. F0 F  ]) l* x$ a( A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- g/ _0 {, s% _6 T9 m
, L6 _) k4 ^5 [% _* `. b
    mcasp->regs->DITCTL     = 0x00000000; // Not used. u2 ~/ i/ }0 V& o  l; Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% O+ N, V  W1 G  g; R+ C    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ ^) A+ ~/ [5 _: w
8 j, a, c, a' g+ Q: Z+ v4 y/* Starting sections of the McASP*/
/ D* e( J! [# G1 T( b4 f    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 g8 B0 n( P7 S9 {3 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) ]7 a" b- u0 }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , c  n2 h; C$ X  ^3 i3 m' L/ k* N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; c. ^5 c) M- d0 G

' @6 U3 b5 ^/ Q( V% t4 X# V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: _/ ~! N) k* p: f- ?% _3 L5 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" r% n: k  P( n4 \) W  J
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   `: n& }. U4 `* ^2 t; [, g6 E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 D2 {* H3 ~" s% ?  d) D/ T* A9 h4 t3 h$ y+ N
    mcasp->regs->XSTAT = 0x0000ffff; % x+ E. Z; a+ L! @3 g; c
    mcasp->regs->RSTAT = 0x0000ffff;
- x$ \8 G6 f3 y! K+ P6 a. C
% b2 h- V: Y0 Y+ d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 C5 y7 |% |; D. Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' a; a3 M0 s7 [. U% t    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* _" R# d# M+ ~8 F  U5 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 j$ Q) ?" l# _. j/ u/ j  \/ E

) d4 N4 ]* i" q$ W    /* Write a 0, so that no underrun occurs after releasing the state machine */1 X$ v& }: ^1 }6 K5 T
    mcasp->regs->XBUF5 = 0;: G! B1 j6 E; }+ M! E
    mcasp->regs->RBUF0 = 0;
% u" I' K3 D! r. |$ p8 x3 J/ n* Z" P& `* c# {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 G. }5 e- C1 I/ B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 o' M8 F% e$ j0 q+ {. z5 j# s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 M) `1 x" a* a* ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. e  n6 x( Q6 m! c# U
/ l, Y* c! ?+ A, t) H
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ t" Q0 k' D! Q& g$ {6 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' }" ~# u" N; ?% ?- O. i* K) t
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " o* O5 v- Z- R1 u* }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. e. C7 G9 G: s* l4 C' r. `

- J4 y* x' h9 n& D$ c8 o    CSR = 0x0000;
: j+ O8 F3 O# H3 y( y    INTC_INTMUX1 = 0x3d;
& {8 w' |& f1 ~8 {    ISTP = (unsigned int)vectors;
; e& P. V  h0 y, p+ k) \    ICR = 0xFFF0;  2 ?( T$ s5 R" P
    IER |= 0x12;  
) g0 k8 F. @& o/ C    CSR |= 0x01;  7 y2 u( y1 U7 W, Q0 ~
3 o7 V  |) ~2 [5 Y5 ?; Y

) N  v3 R0 L# @/ l; d$ L# H) u* C1 c) W  |. N2 Z7 Y; y
还有就是两个输入输出函数:
4 u8 h( ?# t$ R: d* k/ [void output_sample(Int32 out_data)
& a7 n" }; U; K{' x: f; \- f* J! V6 u( _
  AIC31_data.uint = out_data;  
. y9 A6 U6 }$ Y4 r" w  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 i. T. C" Q7 V" `7 T3 f: r  r  Y( ?
}5 w- ~8 v4 _2 E9 m8 ]+ q
9 J: T' Y1 D* a. R: a* s  [
Int32 input_sample(void)
$ r- j5 e5 X$ e- J& P{  
3 c5 {2 Y2 a1 R" J" Y6 g6 {9 L4 g2 N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: y1 H2 v% R2 P  L# o  return (AIC31_data.uint);
+ B9 y, B( R7 @  |, v}$ T6 R# s  S9 P9 ?

- J0 d. b8 b, p" N/ n% 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, 2025-11-11 18:46 , Processed in 0.037952 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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