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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 C* V/ C  i+ z0 j' S
main文件:7 M. W6 |* P# ^& A
interrupt void interrupt4(void)  
0 O: `; \  p& c/ i) s& s2 r$ H{
8 H* G. Y0 d& Y; q% \3 m' B  Uint32 sample;+ b( X$ w$ w" C) u' l2 ]

3 m$ E' k, {3 w; f/ c  sample = input_sample(); // read L + R samples from ADC
: j& {' c. F* p0 |& W; d  V+ S  output_sample(sample);   // write L + R samples to DAC
+ k0 `; Y( x5 x8 S  return;4 [. Y: z; K! A9 p+ C
}8 k' z0 c' X& [6 ?  T

' `7 V$ k5 c8 {6 Hint main( void ). x6 d5 T+ O6 Z' u. H
{
  D- {6 O2 I# k/ v8 i  ], v, @( `8 g! d! a3 n( A/ _4 ^: p6 b2 W3 J
    /* Initialize BSL */
/ U" a+ V; p9 N% p; Z6 e    EVMC6747_init( );
) b9 s5 h3 f9 i: J! A0 i" l        /* Call evmc6747_intr function */! B) Z" Y* o6 ^1 x
    aic3106_init( );
- {" Q5 O$ z- K/ }        while(1);
1 D& B& f6 S2 i, }% q# L* r; X}
( p" v* \# a) J% E. Q3 z6 u% ?$ N' N
" y% }+ Z5 c! t$ D
$ E% m9 k- S& {9 a, {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 {% F! I8 n3 n! o, ~) \
/* Initialize MCASP1 */) f4 |" Q; d2 I$ m: s7 ~
    mcasp = &MCASP_MODULE_1;6 C) l! N5 I/ b
    mcasp->regs->GBLCTL  = 0;       // Reset
9 D! s4 V7 t0 _- K6 m) x9 h    mcasp->regs->RGBLCTL = 0;       // Reset RX5 h; M% H% O" r: m9 i1 h
    mcasp->regs->XGBLCTL = 0;       // Reset TX) _; A; d5 O9 M: C+ |4 L; q% W
    mcasp->regs->PWRDEMU = 1;       // Free-running
, e. v- U5 J& K& Y2 i! X   // configure McASP0 receive registers3 Z* X0 ^8 ]# z4 `  P
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ a/ {, T, |/ E! k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ R' g; ^7 [9 J$ P2 G" f+ P, ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: Y1 s. T0 E6 q$ o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: M9 y' t' W9 \9 L    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% B3 B  I4 T: i% P- _2 m    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 C2 Z% q* f1 X  Z0 }3 C4 t9 k    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 K# B1 I: p- I5 n    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) L1 X1 Q. e7 [' A& D; I6 L% p" @, {$ R8 h
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' O3 d- z0 Q6 V2 E8 G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 q$ o9 l. |% [' x
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. p8 W8 E' G, |8 D" q+ \! f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  h) f/ }! b0 N0 p1 s
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- }7 _  F" J. z; i/ r# }/ d  q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 }* W4 `- s& V1 ]' g7 g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 K' O) C5 j; j! {- ]
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 X4 F4 m9 |0 g9 m

) M! v& n* H9 p( ?9 n5 }* o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% [8 J4 F! p7 J5 L8 Z/ D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% q4 v2 f3 b$ V: v1 M* p+ J! Z    mcasp->regs->PFUNC      = 0;          // All MCASPs) V4 G! q: L; a: H
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ Z& }; {' t: ^8 R
" P$ Z2 h  j$ A& q$ g/ v
    mcasp->regs->DITCTL     = 0x00000000; // Not used, k: @$ a' O) U3 s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 u1 h1 x  w, f, p
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ @  J1 S; _  Y' {7 f
  L3 N5 i, o  }* ?5 |: r+ u
/* Starting sections of the McASP*/
! `! G+ N- |, v  M% r7 r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& F2 ^4 H( s* M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % b% J2 h1 w3 S; S+ z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & \( e6 K) [/ E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 q6 L4 L  b) ?5 H# p; k# E0 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / H; h+ C9 u) Q* a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. N- k8 f7 w: K. v; _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! o0 Q9 ?0 s. F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: {: J+ ^2 G; Z. z: V& B$ g. F" J/ c9 X  |' R0 t
    mcasp->regs->XSTAT = 0x0000ffff;
: z" k* M2 b, S  W: H    mcasp->regs->RSTAT = 0x0000ffff; : T* f- N; u3 u# S2 z; j; j! U! C* q

$ f, @0 o/ P# Y' N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 G9 O# H' F/ }  z9 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 A, V  M1 W/ q. |$ G) _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * F! H$ L$ T# @: O( q+ U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( C& P5 D2 m9 ^3 n# K7 r- Y
2 Y6 T% Z4 p9 W; I0 e* r    /* Write a 0, so that no underrun occurs after releasing the state machine */, P# d% F& Z: T6 e% D2 z4 s7 t+ T2 A
    mcasp->regs->XBUF5 = 0;
4 N. R! `% X' G0 y1 h5 p. ?1 @    mcasp->regs->RBUF0 = 0;
  k$ O- N/ x+ K9 A
" H+ [1 O% p& H, f2 N    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ n* s1 T1 I- s: i; \0 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 T: v9 a) S3 m; C( e2 _  p    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 r& G+ v$ S* V" B# T  |: Q" ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ h7 Q2 p% {, p7 L" P4 w, J$ w1 B) v' x
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* N! \% h, f" h7 d0 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' H/ o, I; N- j
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 U& w8 j1 X& B0 `* }8 b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. A' V+ g! I# }! `3 X7 g

5 O2 S" E% Z+ C% t4 S$ T    CSR = 0x0000;
! P! b8 E, B4 ?    INTC_INTMUX1 = 0x3d;
% ]7 o3 \6 e/ ?    ISTP = (unsigned int)vectors;
. l# ?$ q  |% Y  j1 i8 K    ICR = 0xFFF0;  7 q: B+ Y" t, |8 v% C" m9 P. f
    IER |= 0x12;  
1 p. P6 N% O; W3 }2 M4 z    CSR |= 0x01;  7 b# u7 g% C" s7 H8 ^

  n. O) P$ t" j6 c7 i, A& K
$ K- B* j: E1 M3 D9 j( r  f6 {/ V9 c
还有就是两个输入输出函数:
2 R" a% z, |9 J$ h& ~: v9 `9 Xvoid output_sample(Int32 out_data)
5 G" N5 P% ]$ V: w{) F9 A  H" ]3 B* N
  AIC31_data.uint = out_data;  
  k: h) g2 u6 r8 j% N  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 I* @# }+ F/ N
}7 w# P' l6 F7 i7 E, _6 Z. e

0 y0 }5 p1 {5 V  A1 |! S" K0 }Int32 input_sample(void)
! L1 O/ M1 n; p6 \( r6 k/ K0 e5 u; }{  
6 k6 [  }) l- [0 `$ c5 p3 ]1 N2 q* y  AIC31_data.uint = MCASP1_RBUF0_32BIT;: p, l/ }9 A  @' l$ i
  return (AIC31_data.uint);8 U2 f# r* k! Z! d
}8 u1 z: ~* h% h  `8 `( E: D
9 _0 z: Y1 G: R5 M; d
分享到:  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-24 17:14 , Processed in 0.039791 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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