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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" i) c6 u' \9 b: J/ x$ kmain文件:
( e6 H3 g6 N6 q+ a4 Linterrupt void interrupt4(void)  9 q  H+ v" C% e+ U
{
8 X2 b$ S0 h, [% \  O, R) h' f3 M  Uint32 sample;
% |7 D' ^1 l) h+ G6 T+ O& I; H, c3 N; d/ C$ U- O& C
  sample = input_sample(); // read L + R samples from ADC
. X& j' j, K# h# t; G- f. Y' F+ @* x  output_sample(sample);   // write L + R samples to DAC
7 u' J! R0 p, H: Z  return;5 Y! ?/ y# J; J! c
}
# o5 K( \) E5 v. U! ]0 K
6 G$ g6 h0 @0 ]int main( void )
/ i7 _# B$ A$ x4 E' x/ T" j{
4 j; p+ `# b/ {7 L' G
7 _+ B1 Q; \3 G! L8 Y. m5 v    /* Initialize BSL */
. S- }2 f* V3 i  m6 V  E! `    EVMC6747_init( );1 n/ [8 n( _0 @& m" i) g. z
        /* Call evmc6747_intr function */" }, N2 u1 P2 R; V# Z- w. H+ [
    aic3106_init( );, i' f+ R' ^& G- }+ U/ V7 q
        while(1);
, N$ G" r8 [* Y) A1 Y- }$ V4 Z}6 F1 ]. R3 L3 r- }' w4 L) y! a* N

! N) d2 K' |- o6 Y* u: |5 X0 ~( N" N1 G4 e' [( q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 S# h: w5 T& k. O$ {$ P. n/* Initialize MCASP1 */$ x$ D" }, n* _. R
    mcasp = &MCASP_MODULE_1;
. K, H$ O4 l! R) n  r' }* [    mcasp->regs->GBLCTL  = 0;       // Reset! A8 N. i) R% P0 C
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' d3 j7 C' a4 ]1 ?    mcasp->regs->XGBLCTL = 0;       // Reset TX: }- K$ J5 C. D6 h- U1 _9 l+ K
    mcasp->regs->PWRDEMU = 1;       // Free-running* G1 h* ~# Q( k. E
   // configure McASP0 receive registers, Y$ L- t4 g! k* E4 T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, q4 E, r- b  ?" ~% Z2 y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; j3 Q( ?/ K* k) F    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  t" O. \" K% f% ~
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 {" H( |* T) Z% o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): V% f3 a) H* `  V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% ^5 p6 d. x2 x# s, ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- u$ W0 @$ P( M4 ]' V: {
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c) w  j. t& p5 K

6 I" F3 o9 L5 ~. @8 U    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: A2 ^$ c6 v3 W4 X    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ X/ x1 H; k2 p    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* y: L0 \% ]: w" {9 X
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 W  K5 Y8 j( A6 d9 `( F: i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 ], k) x5 N' r( I, `; w. Q7 y1 e  E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 P4 `0 q& a7 Q1 H1 a
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 M; S; M1 A8 V* p" k* `5 }' I    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 |  e& J4 V% G3 ~0 D: A

0 v% S1 e! O; _" f3 X) b) s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" o" e1 K- X: P" T    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 ~! T& ]! l- Y3 ]% C    mcasp->regs->PFUNC      = 0;          // All MCASPs' t! A& |. V+ E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ \8 g. l* I! ^0 B9 S& Z0 N" Z/ O
) D' ^) c, d/ H7 F0 Z7 I6 ^8 f    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ D) a' n' o3 V    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 d9 w% N& I2 u    mcasp->regs->AMUTE      = 0x00000000; // Not used$ l) Z; B% m! W. b" v" z
9 T' `/ C- s7 r2 A" }; X1 E$ M: |( N
/* Starting sections of the McASP*/8 j4 {7 i- E, A4 F) |4 ]' n
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 @6 t7 c/ L% a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' M( w6 a0 b  q. `. N$ G3 Y4 C$ d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 m: ^& y9 E2 S$ X* _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% o' V9 q( ~$ u" h
7 X& ]" t3 T9 V- B3 G' Y7 @    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) g* E6 a) Q. O6 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 ~# X! ^5 H# J8 _  \' a: o  h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( E) G3 T& M4 o' d; j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: e$ T# T5 W, d3 f* x
$ u  ?7 b1 Z- I# w  \; }
    mcasp->regs->XSTAT = 0x0000ffff;
0 m/ ^1 ~7 i. n0 C    mcasp->regs->RSTAT = 0x0000ffff; ! m/ S! a4 V: Q- B: r

; E3 y' B3 v# a  m% B# c! p6 X    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' m+ g. m- R$ D+ F; y4 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 p* A! I, g$ a- u
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" [8 P4 b! G! }7 \4 E; q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" l3 ?& }. l8 [) Q/ j. a5 c

1 y4 }1 v( S. d0 o/ q    /* Write a 0, so that no underrun occurs after releasing the state machine */
; A' z7 ^8 R8 m- `4 e0 ^    mcasp->regs->XBUF5 = 0;
, [/ y1 y0 g- S0 F  \, S    mcasp->regs->RBUF0 = 0;! u  M0 N: G1 a. e$ ~

% W' x# @2 h+ r0 ?    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 g' K' s4 p! S" S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, ?; [' P" u# ]0 |0 j" j    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! X# }  t' @  A6 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" R; b7 d5 C0 ?

3 L3 `7 y+ V/ W: q% g. v0 X, z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 A5 q" o! j6 c, K+ R  s. R4 h# g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 x% p- ~- d  V% L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* q: H& J" @2 y3 B0 z3 s; X; r- Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, V. B  a! o+ }/ B  i. a5 X

: [8 n" A5 ]0 G5 B3 T    CSR = 0x0000;5 S% L5 N: s* w8 Q- Y$ [, D* Z2 z
    INTC_INTMUX1 = 0x3d;7 `: ?8 G' F3 O3 t: {. \$ O
    ISTP = (unsigned int)vectors;
$ N5 J  s9 E. W7 j8 p  g: B. }    ICR = 0xFFF0;  5 ]6 N: E5 L7 `& F2 M" H
    IER |= 0x12;  
6 D, @% }. E) v/ f4 c; y- U    CSR |= 0x01;  ) L$ s5 P% R6 H/ V( `) `* f
4 ?6 V- u- V' H! a: z. A1 p! A
" T# b- T8 M" s3 k$ H- P. w3 i

" D6 J6 t# A' L% B  y2 \还有就是两个输入输出函数:9 c& F8 x4 d) r. }  E& b3 u
void output_sample(Int32 out_data)
, x' @+ u$ Q( Z& l, ]{
; X: ~8 M: x7 I6 v  AIC31_data.uint = out_data;  / o7 l$ c+ F5 p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: U% J" N' M% f7 b1 L5 C}
7 `5 a7 h" U# P3 f4 U* R
4 S" s6 G: [, I/ P. w0 a; S+ eInt32 input_sample(void)4 [6 v- p0 r1 Z/ ~; F' j
{  - Q" R" Q% |9 O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ p5 \9 b1 C. v& O  m  return (AIC31_data.uint);
# i: ~# M. m. M. ^: g' Q}  X8 h5 C! Y+ y6 C3 c) X' q

. h0 a3 Z- i2 P+ 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, 2025-12-8 06:24 , Processed in 0.045177 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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