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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 O6 }( W. N* A5 Y5 K
main文件:0 }' b/ P+ t' n4 f9 G! a
interrupt void interrupt4(void)    ^2 L, b% O. L% d. a9 d9 l
{  ~" K& w/ B. P3 i7 Q2 t3 \" f
  Uint32 sample;& a+ ^& G9 O- f! b( \
5 Y* h: B5 @2 }, l9 y' g4 |
  sample = input_sample(); // read L + R samples from ADC( t  z9 d4 H  a  V0 N' [, O% L
  output_sample(sample);   // write L + R samples to DAC 5 q; p5 X! V6 G' a
  return;/ m, ]2 \" _" D+ H$ n4 p+ f
}: \6 [( ~+ \% B. j0 @6 t* E
* a6 \' y6 n9 k8 H
int main( void )& _3 h- b. S3 m1 V4 `3 y% L/ m
{
7 ?: Q) D6 Y. U* B$ t0 U  O* b) Q8 u' N. J
    /* Initialize BSL */
; B' K# v0 M+ Z( N/ w& B    EVMC6747_init( );+ a' r8 b. v( n! C6 \" m
        /* Call evmc6747_intr function *// A6 U3 g6 b2 S2 Q1 h* }
    aic3106_init( );' U# I1 F9 G+ f$ ^/ L
        while(1);
: v5 x) w- T$ Z}
6 {4 c/ ^2 O* J7 r9 C" Q% A8 N. X7 R$ O8 u* Q, I

/ \" }( a" L/ }' waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 P$ {; e  H7 C' W+ Q3 z
/* Initialize MCASP1 */) ~1 e0 ?3 v# {6 m
    mcasp = &MCASP_MODULE_1;  m, X- q3 ]1 s! I% c3 u
    mcasp->regs->GBLCTL  = 0;       // Reset
! I9 t2 R4 l  ^2 J7 e4 \    mcasp->regs->RGBLCTL = 0;       // Reset RX) B# _5 K; p9 U' [' N' ^
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ K% p9 q( r% P, ^9 T7 B; S8 h! g
    mcasp->regs->PWRDEMU = 1;       // Free-running# ~# `+ \- p; V# O2 H6 Y; [
   // configure McASP0 receive registers
* a% {) W9 Q! G: ]' H- m/ y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( X, @5 N8 U# j, N: o4 F
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 j8 c' D! r0 Y' H
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% B9 h7 M/ W( Y& p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). J0 i2 L! E5 P$ t3 K4 r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  W" Z9 ]% j7 `0 m6 |
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 m2 [7 t  t0 b9 P# A, g$ ^! \    mcasp->regs->RINTCTL    = 0x00000000; // Not used. R+ H2 [- C* R7 {
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 \4 Q( S: Q9 P1 Q( _- w

" ^1 o+ j- y3 k; e/ U    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( N" T) X7 u8 p& ^  h! w# m0 X9 B    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# Q. ~5 f! I% f1 e4 V5 q, \    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 k+ s( n" {! Q/ E0 |( P& b, r    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" m, V- r7 t0 a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ E  S" M7 f" z$ m, k/ h
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# ]( y/ Z. ^' M  {
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, H% b8 Y" I2 e( O8 J3 a
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 K% g2 y+ |8 D3 p8 T
0 n: b* ?0 |; \2 D9 m    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 ?3 w/ E% p$ H- G; V* d1 k! c3 T    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- q3 g/ l6 `' S" Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& C, D( m3 i% w/ S" P3 ?1 T    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! [( S1 q4 S+ H2 |# I1 A

# L; w! A( a7 N) b    mcasp->regs->DITCTL     = 0x00000000; // Not used
  j6 j4 h+ {0 `2 q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- f" _% z5 I7 q; E" e( N. B    mcasp->regs->AMUTE      = 0x00000000; // Not used, i. S" C0 c$ _- w1 P* G5 u8 o
' i& }8 _7 `) x7 C2 \+ E" x
/* Starting sections of the McASP*/' R4 d. g% m- @' k$ w6 X* P
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 R& a; V, Q/ F$ Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& b4 G3 m* O4 g& R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ a) y4 Z- F6 A# Y5 I8 O6 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 H* E" `) _) ^% Z
0 l* N, n  _. x" o7 g9 D6 q" f+ L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 E& `% }( U4 S: C/ h- b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' E+ s! [' g" N+ ^/ b" q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " b% a4 n4 l8 E+ _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 Y% @1 X$ a( G1 t, ^" J- @& j& T( ^" Z  I
    mcasp->regs->XSTAT = 0x0000ffff; + r( {8 A3 A" B: ^  f
    mcasp->regs->RSTAT = 0x0000ffff; . m! U0 C* W; n. V
% |7 S0 {" k7 Z; O9 l+ F" }, N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 o% F4 ]) S0 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: D$ [- M2 X8 g7 m7 J3 `! z( o/ ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 d+ K4 |9 O, h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( R  n3 d2 Q  l7 A  ?

! n. i- _  O) Y2 P. ~! M. W- |/ f  {    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 [3 ]. Z/ r/ v/ N' N9 \9 w    mcasp->regs->XBUF5 = 0;
# p. w7 D& c5 v& Q1 W5 N    mcasp->regs->RBUF0 = 0;
$ Y0 Z# u! N) O
! Y8 e& Q. s/ }; N    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   W7 J0 M0 a1 [. x7 _' p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 Q8 @  @) `6 ^! w! @+ |1 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 o  q7 }7 P7 F0 o. q0 _! e' K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 I* O- ]8 B7 B0 k3 n6 s) h6 \; t# }3 |% g1 @
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 @% G9 ]/ T5 G! c+ o# Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. L  x7 _6 @) o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 K( n0 X# y( H% M2 l6 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' J+ Q- U* c7 |! ?, a/ |0 n- L+ l0 N
    CSR = 0x0000;( F6 T5 T) ?& X2 c3 o
    INTC_INTMUX1 = 0x3d;6 U, t3 R2 y* x1 a, M
    ISTP = (unsigned int)vectors;5 j6 U3 V( V6 Z
    ICR = 0xFFF0;  
. j; E4 L) y9 Z4 U7 k/ Z    IER |= 0x12;  + @  ^+ g! H1 }7 m$ C' k, |
    CSR |= 0x01;  , _2 d& D. \6 G. N8 T
3 e" c# @+ e2 f1 [: F& m

* Q8 Q3 J  {) T0 U
& ?/ c' V0 l4 M) H' K还有就是两个输入输出函数:
7 v6 R6 r- [5 Q; f) ?" {6 Hvoid output_sample(Int32 out_data)2 |& p4 G7 G$ R1 A' ~# q
{0 b/ _( L3 y% o# K: U
  AIC31_data.uint = out_data;  
3 a& n7 Z' \% ?- P+ W. s+ f  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% I% Y1 ^4 W* d& W  I0 k( z' h}8 i# r! b" S; u) y3 ^

$ s. H8 U% r5 G+ B, |7 {Int32 input_sample(void); T, D+ i- h! O: T2 _( c
{  , H6 w9 e" H" D, }, V* |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ g7 @; R* K4 {. G' a- e
  return (AIC31_data.uint);
9 q; R/ D( b+ I- b- O" K* Q}5 y0 H: ~2 S6 O/ I. U5 ?% W

/ |8 r  ^0 m; M  }; d: g$ A: e
分享到:  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-18 22:45 , Processed in 0.044341 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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