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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 x3 m" a4 R. u
main文件:. V/ |( F% S0 d" T
interrupt void interrupt4(void)  + g3 ]' y, u8 N1 G% `) u: A  z
{+ ^8 R9 ^" C6 P; m/ t
  Uint32 sample;
( V; j3 ~' _/ u7 A2 }# r- p" [. @
  sample = input_sample(); // read L + R samples from ADC* D+ n' A9 x6 x
  output_sample(sample);   // write L + R samples to DAC - j  M9 N  E4 V4 E, B
  return;
# h' ?$ d8 |$ i+ G$ [5 V}1 n  ?2 I+ m2 k9 f3 g# L
; i7 J4 K# }$ v: d# s4 \  g& p: a
int main( void )
8 r1 \% B. U: m4 p; f  ?1 R4 v{
( V2 n2 j% g% }8 y' g5 z7 ~% R& I- B, B1 m; U0 w
    /* Initialize BSL */
7 m  s! n4 l2 b- I$ o: B& }    EVMC6747_init( );
0 w# H1 ]' A- H/ c8 n        /* Call evmc6747_intr function */- E+ ^% j$ w, t, p
    aic3106_init( );
$ S% @/ f5 z) i* w        while(1);+ d2 e  z; x: T! n+ v% L+ ?5 j7 ]
}
1 P0 P! T- S) U4 O
$ i4 M- |0 n; t
( p$ x$ S& M; v: L, ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 p1 k/ p$ S9 F: y( {
/* Initialize MCASP1 */
1 a) u) h( A. U/ b/ w, u* d    mcasp = &MCASP_MODULE_1;2 x. N) \2 h: j9 K
    mcasp->regs->GBLCTL  = 0;       // Reset
% L! v3 u( [* q4 F    mcasp->regs->RGBLCTL = 0;       // Reset RX( f' _$ a3 f5 T2 n; I4 J
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  B0 v! p# B! Y    mcasp->regs->PWRDEMU = 1;       // Free-running" U4 w# q4 s' Y' b, v5 ~& m
   // configure McASP0 receive registers0 z2 z  l# ^6 d1 Q$ |& a
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) b* P& D: W+ @! M, o6 r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 v- O2 _1 }6 @* t; P( s- n
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" X# S4 t, Z# h! O. H; C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- G9 Q/ U( C$ S% R2 D
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 V# }" z4 ?7 Q1 ]& S, G/ `
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! V# a( u% k: F" j, x  K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 P  q  Q9 u" I8 {. o" X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ T3 L$ R" ^2 d3 X, s: L1 Z" V8 I

) B5 r8 N* {- N2 N5 F5 U    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ K; v) r" z0 y3 \7 l; I    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 A- \. r+ t2 Q/ F6 E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. v9 c+ S: O, M. ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  V$ x' e/ @; }& c: ]
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. s) z. G, M% d8 w  R    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! H. ~% }! H/ _, h% d+ C, ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' ~; _) v3 G& O6 @6 D  R  F
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 ?) V+ G' I4 v/ F& a0 v: w

, i' L$ u. z" F7 i4 u+ s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, M7 F+ u$ S$ g: a    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 x( N1 a; N& a/ J8 l6 z% b# H; t
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 x2 j4 \. d4 ?! i; L+ j3 l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ }) q7 H9 N: D3 ^9 U5 G* l$ r
6 ?# v4 a' f4 P2 Z
    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ O( b% b# D. s8 t& E5 S4 ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, y" W, H1 N3 M$ g6 s( r- H/ S/ b) X    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 X2 _$ g7 I0 k( r! Z; B/ f  G3 H" x3 w% e; Q. ~" B% U
/* Starting sections of the McASP*/
! X! w" O! L$ p6 G1 A7 Q- [    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ E) v6 c( c+ j8 V; }8 T) p- N. u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 n  \" `6 f2 m* X- P+ a  Z8 u( U
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' {% G/ Y/ h- m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 l  e6 w5 M1 I5 t3 I4 {" b" q  H' r/ W
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& [! v8 q6 Q! x' L. P: J( h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. v0 [9 w1 V. J0 ^0 [% L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 M$ ]! B4 E  N$ Y+ t! @' m. L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 l9 N! \( D/ O

! ~% C4 `! S! a3 f5 S) b0 m2 T    mcasp->regs->XSTAT = 0x0000ffff;
% j1 E3 ^  E8 M4 E/ x    mcasp->regs->RSTAT = 0x0000ffff;
7 M% a! C0 }: _- {  Z% G/ I, I* P6 u9 J; |
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 G" ]" R2 s/ x$ u$ k. b" [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  x9 K% G$ |% a" c% y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( \+ C. y( Z9 k) R( _9 W1 Z, b$ f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( }0 q+ }4 a) Q2 Q8 {: ~, g( D3 \4 _. l9 E
    /* Write a 0, so that no underrun occurs after releasing the state machine */" q+ y" Q  ^/ N& @0 `$ v5 v1 b1 ]
    mcasp->regs->XBUF5 = 0;% M" x- c6 j* _% l9 K
    mcasp->regs->RBUF0 = 0;: o* t& o1 w3 I. [' `" K

  T! ]: ~9 \3 l: u+ d9 F. ^: s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ E( r, B. T# {7 _& L' m. e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' x6 g9 N, Q/ n' X0 ]- b    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 [: ~; y# L0 L% Z4 m& T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 D7 O# k9 }/ W1 T

( k- e9 v4 M9 X* i9 m7 G$ ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # e% z/ P% W: E: ?/ T3 Y: w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. d3 T' e. }8 [! k# q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 J' H9 }/ W: h7 B0 t) `: ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& d" o; |, X8 C, M# l3 |/ x
) I  o* i6 V7 c    CSR = 0x0000;3 I- G# E# d* U- S2 S
    INTC_INTMUX1 = 0x3d;9 ~+ e( s1 x# m7 |% S4 F8 b4 t
    ISTP = (unsigned int)vectors;# {% ~- W' z3 H! _
    ICR = 0xFFF0;  
7 B/ X# S2 z# d8 S% w    IER |= 0x12;  
2 d. p3 @, U2 h& T5 `) q- R& `5 [    CSR |= 0x01;  
! g5 f' ^. }( A" u, \$ m; E/ Q4 H. a0 T, R( N
! O; Q0 O2 J8 o2 l" X! l
7 P2 O7 ?+ y, d1 b$ Y5 P8 b
还有就是两个输入输出函数:
8 x% F' }% S# a  x/ l* pvoid output_sample(Int32 out_data)- J5 O& A) Y) N! c
{7 h; R" o1 `+ h
  AIC31_data.uint = out_data;  
4 a6 ~% e( }7 f% {) U4 f  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# X; |( K1 T- }! P! f$ [( }}( E( {  @' k5 U, s7 \

4 Y7 H2 m8 R: w3 h+ T% a' gInt32 input_sample(void): B1 ?6 J* s7 J
{  
7 \: Z6 O* f/ x  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 ^7 k1 {5 U1 W  return (AIC31_data.uint);* ~9 f: ]$ Y8 ]0 {& p* F4 j
}
, O3 D: s9 V  \; k7 V5 ~+ U4 z% C$ w, `  U
分享到:  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-4-7 06:36 , Processed in 0.041787 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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