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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& x+ s3 P! q: W) Fmain文件:% J$ f4 @* m+ g" X
interrupt void interrupt4(void)  
/ h: B/ T4 W, ]3 X{$ }5 V0 W) v. ~% m  ?
  Uint32 sample;" u+ R) u8 S7 E) a- n- r

# Y8 b0 `/ i2 R7 i- u  sample = input_sample(); // read L + R samples from ADC6 t; ]- o, F. F7 ]! ?- `
  output_sample(sample);   // write L + R samples to DAC ' p: [  f2 s. M: V1 x3 f0 t* I
  return;
) m2 Z' a% F. J: ~9 n}# \& ^- R) X3 v/ K6 C
1 {% R' H7 A+ V6 H! e3 F1 R5 t
int main( void ), i; O3 f! v; o0 x+ i" E+ }
{
; Y8 ]0 H$ n5 }' F# e' z% R1 r1 U7 D0 [# m. t: F, W$ H4 Z
    /* Initialize BSL */
5 M- T# \7 S; p    EVMC6747_init( );4 q8 Y# M, t( v
        /* Call evmc6747_intr function */0 N8 |  ?  o' r! u+ G, A
    aic3106_init( );
# X( `/ g$ A! H( K0 e# f& R4 ?& b        while(1);+ [8 G% a6 U' e+ r6 }+ i( J8 e
}9 e% N0 p0 ]" U: D+ P6 s( [

4 T. t, O0 }" N7 \8 \( V% D* R0 n3 I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. x% z+ f# M" `9 C, h0 K; _5 \/* Initialize MCASP1 */6 l" H* z$ n' M
    mcasp = &MCASP_MODULE_1;
# w9 p+ I& @, g: }, U    mcasp->regs->GBLCTL  = 0;       // Reset7 d. }5 X9 z5 d! w( X9 _
    mcasp->regs->RGBLCTL = 0;       // Reset RX. h/ A/ A" Y# K4 i: W
    mcasp->regs->XGBLCTL = 0;       // Reset TX0 ]4 @6 |' V% @/ g, O
    mcasp->regs->PWRDEMU = 1;       // Free-running
! L, S- O, x; D- q: j   // configure McASP0 receive registers8 u( ]! a3 _. y) _1 o3 H7 G+ m- b9 G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 H$ a* G$ b1 l# B# Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 B9 ~# t0 L8 g" `
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 Y) R6 K% @. m' D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 s! V! g  C- k' k+ z, c: M/ U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ r) @! [5 N; J7 J/ k0 t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 h; G  _* Q: j5 z4 G! f: f5 l
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) H$ V6 Q  l; _1 |7 Z7 s( \6 h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. j/ H: N7 g1 _" ?2 z6 v/ a3 B
8 l$ z: {: W0 Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 x4 J  `. S+ d! m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" g6 S2 z% F0 l9 s; p! f0 @) l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ _9 B0 C' u8 v" G' T
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* V, P" r* v" \" {$ S) j1 _" R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. ?3 U% A" N9 Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 N! p; Y# C/ B4 u" g2 d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% d3 S5 C* I/ m    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 D' r$ @' A5 X/ i1 [5 s
; {! B9 D. J/ |; M6 I) f0 a
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 P) H  {7 Z4 U; o" K  ]
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 H& ]5 \; R& f# K
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; V+ b# p: r! E    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% e  {! L0 d9 L+ E/ U8 b+ t: Q8 B% k
    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ W2 O/ r- @6 I8 {0 _3 a1 p0 B5 ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used" N2 |5 i: d3 k7 U
    mcasp->regs->AMUTE      = 0x00000000; // Not used. U  u4 P9 h, Y8 X

: W5 K3 s" c: Q/ _/* Starting sections of the McASP*/
3 b# c* d& k1 ?8 b& Z* N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : b4 d! Z$ k( W) h$ l: ]' V5 Y- H7 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 ~- l+ X9 r5 u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! Q6 T' W) D4 N  ]3 F/ s* `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. n! ]+ Z! R# b* x; R6 p- {+ g
: G8 ^- ^+ b; {6 o0 y+ w9 d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, _% x) z) G7 X2 X3 H3 n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E8 O8 R, O) I0 Z' V2 q) ?
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ ~6 e; Q& W7 f* k, `/ _' ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" a1 i2 Q; p8 p" Y( u1 O. x- ]' n

! Q  u4 s: G+ J# }) _' `, z! w    mcasp->regs->XSTAT = 0x0000ffff; $ e7 M, G. X: q7 u+ {
    mcasp->regs->RSTAT = 0x0000ffff;
# P% ?* P% d1 L
# d2 x1 p4 Z: A1 @9 [& v5 t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' X( [. Z: b7 o6 u  p  P5 p/ u/ G+ [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: I* ~9 N$ }& o" P6 q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 t/ V; _, s2 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& q1 ~4 t9 K) A- Q4 [2 `3 A# Z
: N' I  D3 h* T8 l( i: M* m- p! u( v, c
    /* Write a 0, so that no underrun occurs after releasing the state machine */# ~6 `; M: t% P$ C; L. [" R$ Z
    mcasp->regs->XBUF5 = 0;
3 u% G. @. Y6 o+ G    mcasp->regs->RBUF0 = 0;
! @/ C- c* @3 e7 M
3 Q9 W, i; ]3 N  n% }; U7 t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" Y* n2 m0 Y* m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 d9 n3 j2 l# O1 F( B: u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ l+ j0 b- s2 i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. X$ P/ f' {/ p- T2 y# K" l' P3 [

" Q5 T' K- s6 }- \2 ?    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , ?8 H! q* [7 W) R$ D& e6 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 ^& \7 @& U4 Y7 B- Y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 p9 V6 y/ M6 N) I8 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! F& D3 i# X# W* J- d4 i$ }2 P- S( [/ w  p
    CSR = 0x0000;  g- J3 f' W4 `( @: G$ a: Q& }
    INTC_INTMUX1 = 0x3d;1 S( I) q5 t3 L' h7 S  s
    ISTP = (unsigned int)vectors;
/ z& _5 O$ x7 |+ x+ `: S- P    ICR = 0xFFF0;  & N. d0 p" t) J: k- v, d) ?
    IER |= 0x12;  
  i, G7 S9 ^- \, S- d3 e    CSR |= 0x01;  
# I! v$ M- n5 `4 L* d
- d5 O$ n' }1 G, k' q4 {$ A; W( V0 H. j2 C8 D7 V
$ ~6 x# A; @% c  b& Y$ r
还有就是两个输入输出函数:& W0 G8 [# T2 G$ @4 `6 ^' r5 `
void output_sample(Int32 out_data)
  {! ]3 T8 G( G0 d$ a% s$ X: b/ D{
0 D  s0 }9 m! x! X% H- h8 F  AIC31_data.uint = out_data;  : q  J5 ]1 c6 B$ i0 o3 h! n9 P
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- r3 S: I. k7 u) v& M1 _  C}. w0 i# p* e- N  @( n

* q, u+ _3 R- _# Z6 Z/ I: @3 EInt32 input_sample(void)
( N' p1 m3 j8 A# }8 A/ @) t6 c{    p3 j& M+ N" {- P0 K  n
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) f( Z, L  `/ ]) `+ d  return (AIC31_data.uint);
' k8 t" o+ t% J( n' f4 }, }/ F}5 N$ L1 R# b$ {! v  g3 [
1 ~! W+ @( Z9 p; _4 S& 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, 2026-4-7 21:52 , Processed in 0.036837 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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