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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 Z  c6 H4 Z) e- v9 b" lmain文件:
$ o! j6 q; T, C4 l- ?interrupt void interrupt4(void)  
+ G3 K1 A- T3 [& ~* R{5 K( V+ C0 M4 j; A
  Uint32 sample;
: K; m9 B: A! n  ~# e) `$ H8 \3 U
* ]7 H* R, |8 b3 k. e- h, g  sample = input_sample(); // read L + R samples from ADC
& F" x) d: S5 v3 ^3 d9 q4 w$ q3 {  T3 ^  output_sample(sample);   // write L + R samples to DAC * I8 ^9 I- ?" h8 T1 w: w
  return;* V% a3 R  p. D( V
}* f3 ]5 g6 i- ?7 q3 V

# k9 }* R$ r# c# q6 X& Dint main( void )
3 |" D$ K, e( U% S( u{2 M$ L$ c% V, l. ?

4 d) s% I9 k4 n9 Q. R) ]    /* Initialize BSL */& L; r/ i% b) Y' |# K1 `0 U' f
    EVMC6747_init( );
% v( a; O' k" l# w        /* Call evmc6747_intr function */
/ H7 s' H: K! W& u. Y1 T" E    aic3106_init( );
# ?  H. b5 _" W4 a# v        while(1);
0 b8 y9 T: h4 L& p4 q5 Q}
( Q; L5 ?; b+ H" P
: \/ F# @  H  k* k- y0 _# f9 B: i, `
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 T( P$ p& J: t0 }4 E0 F/ C* O, L
/* Initialize MCASP1 */
- Q) k8 l% L. h! O- e, B    mcasp = &MCASP_MODULE_1;
: t- H  [/ I. Q: c    mcasp->regs->GBLCTL  = 0;       // Reset0 ~% X: i1 H, ^: r  M% v: Z
    mcasp->regs->RGBLCTL = 0;       // Reset RX$ j6 h+ d% e" l# n5 E
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ |& ^: [3 H  r2 I. B* e    mcasp->regs->PWRDEMU = 1;       // Free-running& n9 [  s/ [, a4 b4 S+ ^
   // configure McASP0 receive registers
: ^6 N- N- d: I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! W$ z8 E8 D' L* n
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) B) s* z; {3 C: b) B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 c- [, {# u6 T  U7 G    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 O, G+ g0 ^. h' b. B6 M
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  ^+ f& G# C/ C% M/ d
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 T9 x7 x: m8 P. w4 s
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 R% [6 c9 I; _& e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ T7 d+ [8 ]. K% P  K

, o2 d1 X& @9 {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 r5 x4 J- l7 ?9 j; Z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 W/ `: [* S1 x& J    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, a3 }2 _( n. S1 m5 p, t    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ E" _6 ^2 L% ]. e; b    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 ^$ g+ G: w) ]$ V    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) Q# w- ]! e  A7 g6 ^    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 w/ H! i: g1 o' |" U& Z0 ?; n
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ S4 {* }$ o2 Q

  p5 W5 W- d+ w+ \* F" t: O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- `: i3 Z, B9 q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( f" K& b# Y5 \- f" m
    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 L3 a" ^( c# L! Q+ V/ u3 @1 [    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' E5 e) o0 P5 O4 ^& Z; m' Q
5 v) o0 K& m* l& E! a' r: n    mcasp->regs->DITCTL     = 0x00000000; // Not used
" v5 O, }# e' |) T- P6 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* p" H, ^& z1 i9 G    mcasp->regs->AMUTE      = 0x00000000; // Not used$ Q. c2 o" f' [5 t% k* S% t( A5 w0 E
7 B, J3 C% N4 M4 s, H
/* Starting sections of the McASP*/
8 ^0 ]+ C6 c3 h3 I2 Y$ O' R    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % l" p/ t8 |  X' a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + i# m- F$ W" h' {- C) D
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# Z9 }. a  r  i" O" L3 Z" G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ V. o/ K1 u5 I+ Z( K& p4 ~! Y; |: E8 h6 {; j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 [- S; ]' y2 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ e0 r" k6 j0 r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) X- a' i) b* J# s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ p" y2 X% _- q' z' P9 E0 i0 b: ^* g. i4 g" S& N. A
    mcasp->regs->XSTAT = 0x0000ffff; 7 Y! k+ i. W1 c
    mcasp->regs->RSTAT = 0x0000ffff; # h- @, B8 ~$ L! X9 v  y( u) q0 ^
5 ~1 ?( @3 u3 w2 F0 y+ C' `1 T3 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! A9 l2 S/ V# i: E1 @$ k/ Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 c0 `& D4 u. i1 `7 q0 H    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 j  V1 W6 p7 X% j- ^/ [  O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 a. n. L- O& h/ m8 e  ~& b" Q& f
$ [% g" P- `  ~    /* Write a 0, so that no underrun occurs after releasing the state machine */( c( t3 X# y/ {% {( Z
    mcasp->regs->XBUF5 = 0;5 W( Z  q0 h2 s8 o
    mcasp->regs->RBUF0 = 0;8 M: S$ u9 ~- ]- Z1 l( O. m7 k! n+ }

0 Y: r: |7 {8 ^. D' l* q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 A8 y$ ?6 J' ]+ E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% }/ _+ p9 Y% h1 p( b7 \    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 f8 A. N$ M# P' {  _) I* S6 L# y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: ^0 O! |& Q! U( y! S. t
7 |$ X: J5 Z) a# Q+ F& z9 {6 o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; V" N! m$ I! \4 y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 \" b$ w# W) J( C1 z8 @6 [2 ?: s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 Q; C5 i0 {) M# }% P7 Q, g2 Y2 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! X6 r& _$ g' a( j8 |$ l
# b) Y/ H, k! M  k3 r
    CSR = 0x0000;
! z' _- V/ Y6 a* a, U- R" v    INTC_INTMUX1 = 0x3d;/ s9 W* O/ B8 N
    ISTP = (unsigned int)vectors;
5 K5 u2 ^% A( }; X    ICR = 0xFFF0;  
% B" ?& Z$ `( V$ u2 U    IER |= 0x12;  
0 q- F  a0 b6 q* ?3 ?% Y, Z    CSR |= 0x01;  1 }  c! l6 S' I+ V+ G" F" T9 F
" ?: y( Z5 o/ Y6 Z) @: {1 @& r: ]

1 R9 y4 D/ b. T. V5 x  L8 v$ E/ ]$ J# B( E* j7 w7 h3 X, {
还有就是两个输入输出函数:3 t2 j' G) n3 `# R
void output_sample(Int32 out_data): S, u! ?7 n7 V
{
. p. |9 `4 z  Y) \# u, }( f( j% z  AIC31_data.uint = out_data;  . v. t$ G; t7 R( b" ^! c
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 z2 Y+ \! c6 \( }$ D}1 t5 f: U( ~0 g6 ]

$ U/ ?; k$ y; SInt32 input_sample(void)
, P6 M8 g# f) e$ V{  
/ v0 ]! m7 u1 R  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 _. ~/ W8 ^# Y, m$ l6 b  return (AIC31_data.uint);7 I) Y& u3 q' y9 b
}
5 b2 c* w& V# l2 z3 _$ ?4 @  A& o  g% N& q! [$ Y2 T' 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-2-24 02:56 , Processed in 0.041748 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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