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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* R9 ?8 G# q, T8 |# ~/ o+ R2 Pmain文件:
* B. P6 ^: [% T1 `interrupt void interrupt4(void)  6 t( d: o- l1 B! M2 G
{
% F: I$ w% p6 ~4 Q, g+ X  Uint32 sample;- F7 ?8 o. b% u+ k5 h7 t3 V

' y6 @1 r& O# t( |, E  sample = input_sample(); // read L + R samples from ADC
9 E" S2 g/ a; S. k3 E( e% U8 g  output_sample(sample);   // write L + R samples to DAC 7 z) |' `9 n, e+ G
  return;
) K7 T  V& t% q" V}; h+ L4 E* r( B# ^% n: Y
2 W( S3 [1 Z6 y9 x* C' T3 w
int main( void )
+ t) H& B/ `7 V% M) l+ F: t0 ]{; W# X( }, {! A/ m

  p) ^. @/ B9 G0 C8 Y    /* Initialize BSL */2 D1 Z' l, w8 z8 s! u
    EVMC6747_init( );3 M, W9 i' a) j: A1 A
        /* Call evmc6747_intr function */! g, M' ?1 S- P' H7 ~/ s
    aic3106_init( );  \/ M; Q3 r' [
        while(1);
7 i/ T$ ]' C) f$ w( }}
( Q, s( a7 ^, o/ h% h8 _- x6 H$ o! J5 R: X% }6 z, ]

$ ]$ O0 V' B  y8 C7 Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' i2 A" Y/ c5 ]$ O9 [# d
/* Initialize MCASP1 */
: ]# I: a+ K/ ]8 x9 P    mcasp = &MCASP_MODULE_1;* D' k9 ?: U% b4 ^& F
    mcasp->regs->GBLCTL  = 0;       // Reset
. P* f6 U. V1 h    mcasp->regs->RGBLCTL = 0;       // Reset RX) b9 P" M" d8 X7 L, E
    mcasp->regs->XGBLCTL = 0;       // Reset TX1 _! B/ |+ Z- D8 X" l
    mcasp->regs->PWRDEMU = 1;       // Free-running
7 j& m5 C, E( o; j' E/ r   // configure McASP0 receive registers
, W( D' Y3 E* D: D" A/ C% P    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ j( e% G- m; _/ l# r
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& B* E0 m0 K5 H4 H
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ ?  K- Y4 {! B, W    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ G$ A) |' y3 J8 W# F) |
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 W+ @1 H) J8 x4 u
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* T- K* H' z$ S: ~8 g; N    mcasp->regs->RINTCTL    = 0x00000000; // Not used) K" {7 h: ~- R3 r8 w, h
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 V$ o! f+ B0 c6 y1 q* V" I5 N6 I+ t9 k* G0 M2 p' U- M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ i5 Q6 u  X6 K3 U( @1 E
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* P& z8 w) {+ o2 ~4 z! z! L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 J4 I% C3 s0 u: U) W$ G/ D  w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( p* G1 g& m5 U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 \  Y8 c; M8 Y) a- r" h/ }5 g    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) H6 h/ u- A; n! }* W5 d* f. J8 w    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: Y9 Q( w  ]* P8 Z- K! P    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; H& ?8 O0 w- |; E, I% A. M+ T9 ]5 K
3 x6 N  e' C- J  \: p1 [, g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( E0 _, Y/ Q( r+ w9 B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 K9 t# h9 h* C3 E) `    mcasp->regs->PFUNC      = 0;          // All MCASPs. P) c) ^; l/ n
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% Y, P% n* B; E7 a

5 z* }4 s6 X. Z/ N    mcasp->regs->DITCTL     = 0x00000000; // Not used
, _6 @4 _5 w( {" q' W( c1 L/ ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ O' J3 T: r+ u0 Q    mcasp->regs->AMUTE      = 0x00000000; // Not used7 L4 R; y, ~1 t: k: h2 P3 G) p' Y* P
# E) z( T+ G9 m5 x3 X) k2 G: v
/* Starting sections of the McASP*/; t0 m+ ~, X' V6 r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # S( u: u, g! ?- [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  ]& V# o6 g) x( Y  W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * c  Z3 x$ O: d9 N& r- |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( p7 o  t/ C! G3 ?* f# Y& z% E+ |- H! C$ |
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 A$ m7 y; Y- P; o" X6 Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ G# P3 F0 t  m4 H3 \    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : |! t/ q& V* s7 O5 Z3 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 ~- R$ ]$ R7 W% h( r, }" g, t4 s! _, i
    mcasp->regs->XSTAT = 0x0000ffff;
& V4 Q0 a* ], C5 s) \    mcasp->regs->RSTAT = 0x0000ffff;
3 b2 r" Y. g. }% z3 D: x" M  z* e6 m7 U
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 K, ]6 @  c1 C0 u$ `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* C( m2 v  i) |    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 z$ E. K! j7 [6 P7 S4 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 I8 i. b6 X. y2 o2 I8 u

  n5 }+ }( k  i2 l3 `5 h    /* Write a 0, so that no underrun occurs after releasing the state machine */- A" Z, @9 P4 p' q3 ~! ^
    mcasp->regs->XBUF5 = 0;
: D, B% q& M1 }8 n8 e5 r    mcasp->regs->RBUF0 = 0;: e3 q$ z' s% L+ U3 L1 k3 C

# C/ n% N" D3 z2 Q7 m; r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( N" r6 P2 y5 v% C  R, d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ \/ h+ ?: a9 j0 T% V' E# H0 W    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  [, }* W, r( d0 W0 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 |% Z( l8 ~8 }6 h7 ^1 }" X
* ]$ L* H$ G0 M- f, X& k; v( |
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , N& o0 [" g/ L: G+ I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 E1 f5 O4 M5 P/ r( ]* N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 A7 f6 z4 ?' Q: E7 U: c# {7 [( Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# ?3 G  z# H. f- X4 v  m5 N7 o; L7 g8 i* e1 _. Q6 w
    CSR = 0x0000;
) E2 Q$ [( h4 c0 l% q0 q    INTC_INTMUX1 = 0x3d;  E0 a0 w; v: z3 ^( Y
    ISTP = (unsigned int)vectors;
. T% q8 a5 m: ~# h# o9 D2 L    ICR = 0xFFF0;  
- E* f# U  r, c; H6 p+ t. B5 j% H' J    IER |= 0x12;  1 H4 m) c) r- x3 C( {- d
    CSR |= 0x01;    u+ U! Z" C5 x" x1 k
, ^& U* j0 I9 ]1 J4 o- k
/ c, r4 x4 m' a9 }3 M

/ X) {$ [) ?4 H+ N- ]! l* x还有就是两个输入输出函数:
" u, Y2 M1 l) U7 Ovoid output_sample(Int32 out_data)1 j) Y; g4 v+ N
{
9 R: k+ Z# a9 k  AIC31_data.uint = out_data;  
9 _  c! R4 R. d) d/ a- g. d) B  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ W* l- |2 {4 p. Y+ h5 j}
8 i- o$ }/ y5 K0 k- S8 Q3 Y4 D) r3 [5 j: l; P" K. f
Int32 input_sample(void)
$ l1 p1 f8 N) d# e. L" Y{  6 [7 W$ e, ^4 n5 A2 [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ U' M2 ^5 `% `. n! M; I, b5 B
  return (AIC31_data.uint);
" ?9 ?  \- Q( e" h, j}# d$ j8 q( W; g9 C* D/ e

2 L2 h# y0 M; k7 z  c
分享到:  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-9 12:56 , Processed in 0.040882 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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