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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 ]. L2 |: T: n/ J3 N* K" ?- s4 Vmain文件:9 e/ l/ i. W/ ~( H5 m
interrupt void interrupt4(void)  ! r$ g6 [7 v3 I4 G8 T
{
9 r. _$ J) N) d3 Y, u1 K# |  Uint32 sample;1 ]( c( U; K% c4 ^
- O( ^3 l0 V7 l6 ?% Q! P
  sample = input_sample(); // read L + R samples from ADC3 M: q8 h9 e  I3 b+ ?4 v
  output_sample(sample);   // write L + R samples to DAC 4 I% W0 ~7 H1 e: p& b
  return;, E; S$ X, @6 r8 o( Q# L' S
}0 h) Q* U$ ~2 ~

' I* S/ d/ b9 Q+ a5 K5 Vint main( void )
$ f5 @  c8 f7 @7 Y5 E{
; I* x9 J! x" P, p: T
) L5 f' h; y, k    /* Initialize BSL */
) w! b7 W) p4 ?9 B/ n; j    EVMC6747_init( );: i5 R. B8 ^/ Y$ M8 ]' g1 c" ]
        /* Call evmc6747_intr function */
3 R) |7 Z' A4 y  u2 l2 D0 f    aic3106_init( );
0 U7 U! S/ h  H0 b! [$ u: D2 b4 x        while(1);
% Y' w# X  ~+ D. I+ x. Q$ x}8 P8 A& r" C3 b& J- k$ \. }1 i
* R. \' |0 z/ a9 r8 Q* ^: W8 X* M
7 u) A3 I* P6 E5 O$ h' i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, \6 q2 m' V& ]5 }8 w
/* Initialize MCASP1 */, Y( y% X- q3 d0 K4 v
    mcasp = &MCASP_MODULE_1;
; W$ M0 M0 Y$ o5 I( ]" L    mcasp->regs->GBLCTL  = 0;       // Reset
# N. L' C* U# X    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 B0 v, v1 \2 P* Z: i    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 U# Q! u' c/ V# K) `    mcasp->regs->PWRDEMU = 1;       // Free-running
2 r: X- R7 V; k' [5 c" t   // configure McASP0 receive registers7 o1 D$ Z# P  x$ {2 F. c( J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& y$ p/ J, E6 V% _: g4 {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D1 h& u8 ~) T& A1 t
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! Z$ T) D% ^6 [: h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% T" c3 q" r( e% x    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 p; ^. x  F$ d! O) p    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 W& R* P4 X5 k+ y' k3 f
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 [7 ?3 w9 z. F. [, `$ s! E0 s# l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 {1 E/ L* _' G" c
) H0 u( T4 Y+ J3 V2 u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 }% B' g5 A4 _( n3 ?    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 u( p+ v. Q2 \3 A, r1 z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 ~6 w" ]) n; t( ^) i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; L( x* o( D& _3 F* B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. K: p- \) V4 H2 K. k5 }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" s# x7 b, X( a! |+ S, F
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit/ C* V  w: h, e. l% C
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# b$ d2 U8 z( d. \
0 f! f+ P' F5 U& O* H    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" v2 u* V' t6 k9 @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. a. F4 [3 t' o+ a0 d
    mcasp->regs->PFUNC      = 0;          // All MCASPs, E% i4 c3 r5 h0 Y* |: M9 a9 ~1 N
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 q4 o. z! ?6 n3 \: l# Y7 j
9 o' J, g( O5 Q8 Z4 U# G" G
    mcasp->regs->DITCTL     = 0x00000000; // Not used, J* _5 V- e  Q& ^. s% Q& t9 c
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 {3 z5 k0 g3 K: b6 U1 f7 s
    mcasp->regs->AMUTE      = 0x00000000; // Not used
; k8 s% R8 h* {0 u/ o6 Z4 E) R- \
2 M% n4 @8 m3 \; l2 d* `9 X/* Starting sections of the McASP*/* J# D) }: e; t* ?6 B
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 W3 o; x4 ?8 Z+ R2 e, G& N* s9 o5 b& i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 e! t3 S, x( j7 I; v5 g4 \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 _: f# N3 S7 |9 [  A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" [: P& L0 v, ~4 ]+ l7 K: ?# K4 b5 S5 V6 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 }4 ~( b3 z# g! r* V* n! u6 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ M" O2 b) L) B$ U- n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 Q- A7 T# I" K6 U/ h+ M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 H" B) n' Z( L' A& l
8 ?; d& N! C  Y- ?6 w7 @    mcasp->regs->XSTAT = 0x0000ffff; $ U9 i* _% g. \2 F
    mcasp->regs->RSTAT = 0x0000ffff; : j! _& o: V, _1 U5 g
& r, T9 O: V& g! `$ L9 u
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  w3 c+ Q7 T9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" b1 r: z; _# u1 `* B  e0 v3 H    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" ~  C7 U  I1 s1 |) ~/ p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, t) t+ D0 z# r. O; j
9 q3 w% Q6 J# q3 J/ t  S/ |$ A" B$ o3 ^    /* Write a 0, so that no underrun occurs after releasing the state machine */
' Z4 c" [& j2 B9 \* M- i4 P    mcasp->regs->XBUF5 = 0;
# M$ X3 {" B. \4 K    mcasp->regs->RBUF0 = 0;
9 w( T+ G8 v) X3 O$ S, I
  K  L; V% w) U  M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 s; G& g1 {" M+ A% f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- p" d3 Q5 y$ K% R1 G    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 ~8 R" H5 u/ d9 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) w& E4 N: e# `8 K" B. c8 w8 _  ~) B  Z% ?
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 K1 @# K% Q# @8 o9 X; U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& D% R5 _; ^0 t: T. c) P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " M6 W5 D$ V8 \* A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" l# J* }* Y/ _' P- v

5 c! ~) u( H. @. e    CSR = 0x0000;8 T: d* {8 m* O
    INTC_INTMUX1 = 0x3d;( {# c, S: ~+ K5 K; y) h' |+ Z* ?( L
    ISTP = (unsigned int)vectors;6 D/ J( b7 j" r5 l$ r0 O
    ICR = 0xFFF0;  + r4 d( X0 }( R) h# G
    IER |= 0x12;  0 y& \) D4 w: l, T+ p
    CSR |= 0x01;  
) i* _2 p/ U* e1 n) F4 b' s
& c! \$ ^! A8 F  J* [, n, l$ Z1 k- Y; u, z, W3 `

2 X) V5 ^. P* {4 g3 N1 a还有就是两个输入输出函数:
1 _0 i% d% K+ ?% ]  [2 D0 F, Vvoid output_sample(Int32 out_data)  {6 o' ], q4 v. U6 z- B9 x' x+ i
{) l* i! l6 p! [, ^) U. i- l1 O
  AIC31_data.uint = out_data;  
+ ]$ \" J" e& x  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 P4 N. M" T2 s# M7 {% p! o3 }: L
}
! P6 D5 T  C+ [' F7 m5 {" `5 Z; f- I2 ?. u
Int32 input_sample(void)
) ~3 _  O/ x: R% {* ?7 x{  
+ T8 \) P" [7 @' |5 {7 @  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; W8 u7 _/ a' Z9 i' j; [( p; t  return (AIC31_data.uint);, w. v8 k2 D5 L1 T
}
# A3 E7 E  ^8 `: J, g! a/ z0 T1 @- E" T7 ?
分享到:  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-1-20 07:15 , Processed in 0.043567 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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