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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# I' z8 t, K1 t( u$ w1 g% D1 dmain文件:' ]% m$ S, n& x
interrupt void interrupt4(void)  ) ?) T2 o* |5 v; s8 {
{! b3 W/ x9 ~. H3 I  s% J& s
  Uint32 sample;" L  f; L9 p1 l- M7 x
& z5 F' S# t" h' g+ ^7 C& y* t
  sample = input_sample(); // read L + R samples from ADC
2 I" T. C" H2 U7 w  output_sample(sample);   // write L + R samples to DAC
2 _$ n; |7 L! W6 {4 ]  return;
( J8 b8 n: ]' [: t) a! l. t* f- E}" T1 z1 q1 T$ |8 W  F3 C

6 s6 z7 E, E! \8 d- Z  gint main( void )
8 \2 e5 c$ j3 y* K/ A) d/ U{
* P- t0 ~* _$ o8 G: F5 t. |/ T9 T$ A5 k8 f
    /* Initialize BSL */
% q) K1 D) x9 I/ x; k- y; K    EVMC6747_init( );) c3 P8 G, ~" h/ c# _
        /* Call evmc6747_intr function */: k# }* [. t& u; d9 l) Q
    aic3106_init( );: h5 _9 J* K4 i4 B9 s3 A" i6 M# r2 v
        while(1);& m9 Q; w! s9 t- \! N
}
8 ?% z( F, F0 d, J/ I) }! L% R; b0 c- H: r+ g$ W" d
8 D5 V! t( N! j) x( b$ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- }* u+ [# @& A/ A' F/* Initialize MCASP1 */' H8 ]# e, t! Z, O; S
    mcasp = &MCASP_MODULE_1;# Y+ F, U; x7 y5 W
    mcasp->regs->GBLCTL  = 0;       // Reset( C2 |& J9 X+ \  o4 I- X6 }% ^' H7 ?
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* W2 V8 ^$ l9 t- i  t. Z( g! `    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ [# q  e2 u7 y4 B) d5 W    mcasp->regs->PWRDEMU = 1;       // Free-running1 R2 N' m4 J' s4 f
   // configure McASP0 receive registers1 a, O/ s) O7 m  G4 J  D4 C( ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; y8 W$ Q2 {" q9 a6 E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- J$ N8 M% Y6 ?3 q0 W( t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, ^3 H7 r( y' h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: M3 W( @5 d9 ^5 H5 \! l2 z" ?    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* I! l3 Y. A. x4 Q3 ^; \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; w& D. z6 a1 l) T7 J, z, o3 C' j    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, u, ]/ @$ N) _% Q& C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- n& M/ T# W( Q( v" |

% ?" N4 T- \: Q3 x* s+ u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ F2 s2 |' q) H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ p# j1 u( g' l6 M! f- v4 I! v
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& B$ m& M  U3 Z  p5 E7 \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 G0 x' ^  y9 T, F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
2 f0 k1 k2 W; u+ t: p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 L8 _2 F: M9 H, N+ o# v    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 r1 ^) i3 g0 Z/ i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* o$ ~5 s7 P0 L, D. j
: \7 ^6 b- s1 y. L1 z8 P6 \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' m) }% X# O4 w' e6 ^
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 D0 A# O+ W/ q# T0 y' q5 d
    mcasp->regs->PFUNC      = 0;          // All MCASPs: S) Q2 l5 q3 f8 B; U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 w+ y1 n- E% ^+ ^3 V/ r( H) h) b" e/ h
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 C8 G" O  ~/ j- o; W    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 q1 n: I+ l2 Y# @9 s    mcasp->regs->AMUTE      = 0x00000000; // Not used
" b* H$ C4 E" J1 X3 F- ?: l6 l5 o. c) \  K) h1 u/ w$ [" d' p
/* Starting sections of the McASP*/7 O  y% Z6 d9 m. [
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& m% y. [: R, ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 D  j& `% W; r/ P- P* G" v8 A$ F    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - r7 \! B5 v. I0 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  c5 H. F+ Y5 C
# w) s7 |) G  Z  L) H8 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 Q8 G! j8 b5 y- i0 i2 w# K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* H" p: Z1 X" @0 r* @+ \& G. R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# N& d" R5 w2 Q- y1 S8 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" S) R* c; K) t3 i
9 w, W  y$ R! [; I1 ^    mcasp->regs->XSTAT = 0x0000ffff;
; f; J: ]5 P( [' M1 r  d    mcasp->regs->RSTAT = 0x0000ffff;
) ^% t) w9 f$ Q& {% O% r& m" N( q* p* @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 L2 U8 \: |" m$ _1 U# ^- b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" ?$ _- B' G' W* R8 Z; ?0 [7 s    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 o% D. n' C2 K$ {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% W4 d* b; W# b* f# u7 C" S" I5 o$ I

) z. Q% A& M- F    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ n9 J  w% F5 @- A    mcasp->regs->XBUF5 = 0;
7 D. g7 ^# T, y, N! X1 C    mcasp->regs->RBUF0 = 0;
2 f) u& y7 w4 G) A/ P1 ~, ~; {5 e" ~4 k6 j
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 J+ p& H1 {/ G3 X1 K6 u  ?. q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ ?9 p1 ^: a! x
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 I( {2 `$ g% C9 _, `$ A7 r6 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% y" U% Q1 P* |$ j& p* `0 g

% I: g, a+ Y5 ^0 J1 c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' H% i9 `$ ?# u, K( J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% ~8 U. F+ `; W5 d" ~8 v/ {6 {    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% x: B. Z3 ?( w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) j0 O" g- b# k3 j. o/ B1 c+ k
* ~# o% M! d. A0 y9 C! j) R/ B    CSR = 0x0000;
# F0 t2 X0 o# l3 B/ e8 p7 ^7 g8 z    INTC_INTMUX1 = 0x3d;
9 o1 |$ l) u9 K" Z    ISTP = (unsigned int)vectors;
+ H$ A" Q+ s1 l    ICR = 0xFFF0;  
0 c# |. u, P& _! m% i0 j1 T+ c    IER |= 0x12;  4 _/ m. K1 q" g5 z. U
    CSR |= 0x01;  . W  R% R1 \- F' |1 S

; Y: M4 [: `6 C9 c7 I% }9 g# s/ a( W' Y6 R9 b7 k# E6 _) r! l
  P2 O  Y) x, [8 T1 `9 K8 a
还有就是两个输入输出函数:
4 B1 B& {2 F3 {+ _- Jvoid output_sample(Int32 out_data)- u* X9 b8 I9 x1 I" x2 H* ^) L
{
2 d7 I8 s! D. z4 u/ {4 ^  AIC31_data.uint = out_data;  
( {9 W6 T# U& x( g5 ]0 e  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% f. y# j3 R4 s1 ]6 r}
$ V" H4 M; c6 s! |
0 W+ t# Z+ I- S, ^( tInt32 input_sample(void)
( H) @! Y" x5 W  o; e{  4 z2 k1 l! b, i" E9 u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 h. t8 }% w& i1 @/ x; r' g7 @  return (AIC31_data.uint);! f, ]8 ~% C0 B# z* _
}! C' t8 W6 m- @4 w- I" g
: N8 l' E: k9 f! t/ g; d' k
分享到:  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-11-21 14:43 , Processed in 0.039778 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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