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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 T+ u9 ?6 F5 i
main文件:/ p' t$ A5 x6 Z4 m2 F3 w' _
interrupt void interrupt4(void)  , m- y! W! h& c7 `8 O# g" m
{
4 v4 L' i3 A# J' d. x. l  Uint32 sample;
4 i( x( N, C* P  ]6 C/ ^
* |) v5 v* K0 c( i4 l( l  sample = input_sample(); // read L + R samples from ADC1 p- R) u2 {% _2 O/ w, l
  output_sample(sample);   // write L + R samples to DAC
# q3 ~6 T" b$ p3 v  return;' E0 r! k$ B& h7 ?( n
}0 a0 L! i3 m4 Q1 F

5 K. P/ X# _4 u; C3 i' H6 k! C3 g( tint main( void )
& l9 g8 _9 F* }7 l) k{
1 z/ T  G5 C! g) G6 ]* [7 v7 v& r$ v5 P7 O2 j! C
    /* Initialize BSL */
' @" ~! g- Y( M+ |    EVMC6747_init( );
) Z0 P* W0 ?4 t! i        /* Call evmc6747_intr function */
: E, r: K" q) y# N' I" _/ `% L4 X    aic3106_init( );
7 |* W+ s" F: ^* n- {        while(1);
- l+ D9 K/ u& k5 @, m2 t+ K}' [7 B/ ^  b' i  i1 I1 y
! ~" \5 I8 G3 E2 t" t+ x* [3 Z2 h: b
* S8 P1 T3 g) F  ]1 U  B* z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& N- n! J- f) c6 W+ ^$ _) d/* Initialize MCASP1 */
" E, j; U' L* C    mcasp = &MCASP_MODULE_1;8 U0 ?2 b7 u# ~/ E
    mcasp->regs->GBLCTL  = 0;       // Reset
/ `: V0 `/ `6 X. i7 b! b- @; h    mcasp->regs->RGBLCTL = 0;       // Reset RX
' p3 B9 Y. D: K( Z5 f+ L    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 M& K6 _) M0 [. `$ ?9 G    mcasp->regs->PWRDEMU = 1;       // Free-running
2 V! i; Y$ s+ V+ Q  S, \* B   // configure McASP0 receive registers
+ O2 f* P+ f) S: a( u2 ?- f5 v! U    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- e+ `3 D3 r; _6 |$ i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  b/ k- c* U+ R    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 r/ y% h, J/ Z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ H5 D( c! [5 r. {    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 t3 G2 m& x! `# ?& m2 G. r    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! N, W2 N" P! e# ~4 ^4 }7 k2 ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) \7 z9 R7 o9 ?  g+ j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ Q  e6 n" L1 z8 a, |

7 M! E1 c1 J4 \; [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 U; r4 t1 `- b5 i
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 Q; C+ l: Q" O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& y4 {- H  p/ g1 B: [1 ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 a1 ^* `1 n$ b1 C& A4 T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 x$ b% ^6 g/ e2 A" `' D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 K# a/ M4 e. u6 {7 ^" ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 K% x, X' D2 \: z9 N* g1 E; n
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ I6 B. ]3 I3 X. y; G/ F
, ?! Z) Y5 b6 u5 V2 _, O
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" W' w$ P; H7 I' B* q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  a. L: C! W' O$ V$ \
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ {0 ]" `2 r6 N9 c- G2 K% a    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 O9 m9 \$ b& p% B1 i- n% A8 O7 u) R4 p4 j5 I" E
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 N8 ?5 k5 i6 l  s/ Y' S    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ M0 ]1 J5 [) B, |% C- M0 Q% I
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 y  E+ s9 A% e) f/ _5 j) F$ X0 |0 i
2 W. g# L* m8 r8 _  u; d" i. Z
/* Starting sections of the McASP*/
/ P3 L$ {7 `- m1 w2 t) J5 D2 |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) V7 a$ H9 W0 G% O* g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 P! W5 @( f, y9 s5 i& Z1 W: N    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . c" Y0 x- V9 L3 n0 j. E: R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( d8 @6 A# r! @# S
" v: J6 A$ l4 i6 M3 v5 b2 d; c# b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* N! d4 G8 X) Z4 ~( ?: n  t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 t6 A: |2 E; h; ~0 i6 o3 W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 Q/ L3 L8 P! n6 K0 I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' u% [7 b1 Y6 A  ~* V4 P! ~# Q' l

/ b' P: {& E% r) E    mcasp->regs->XSTAT = 0x0000ffff;
! U! q) D. E7 q    mcasp->regs->RSTAT = 0x0000ffff;
- E6 b* r6 g" D  Q) A
  p3 d2 d4 T5 v& h% c( G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 R. m: @! V- F3 E7 _# d& f  I+ C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 u. O3 o% b, I6 f
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 f" Y* X) U+ \* i- O& `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 `' H) P/ B, @* n3 P, ]8 f
; _8 o5 n1 u& C3 w    /* Write a 0, so that no underrun occurs after releasing the state machine */
* z# X) s# b3 ]    mcasp->regs->XBUF5 = 0;
( e% c$ w! n' T5 e( J. D$ V2 U    mcasp->regs->RBUF0 = 0;
" F+ i+ c, Y0 S# }. K+ \% b$ Y
% \/ v  s0 V( X7 {9 L4 E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 E( w. K# ~: s( C8 @4 I9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: H% @- s9 H8 w  f: x; M: d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 c' D6 G& f! x* z+ m/ `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 W3 B# Q* s* C/ J8 Z8 a

$ I5 w+ I5 P9 `" n8 `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( _6 V1 R' _4 ~. \5 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  H8 R9 I  B/ G( U# v/ p- F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" \5 S# c" X% \9 i% ~3 w- P5 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  z4 S8 S/ ^' ~3 ?

0 R  X$ }) _% u, G- S    CSR = 0x0000;8 ]/ z, v  G0 \$ \8 A1 k
    INTC_INTMUX1 = 0x3d;
3 k9 B# ]5 q4 p9 _) y    ISTP = (unsigned int)vectors;  ^8 P! |3 ~; g/ O
    ICR = 0xFFF0;  
$ a& a$ q7 X; @0 w" q# e/ q    IER |= 0x12;  + H5 V" Z: J1 n! i( O9 d% r& r# w
    CSR |= 0x01;  
" x% U. H1 Z% H/ l! W& y# d9 ^
, n6 P: g9 v8 e- y$ H
2 O: {+ ]2 ]* A3 K+ i" l  Q8 P) j' A5 ~. i, `1 Y
还有就是两个输入输出函数:
6 h9 |' T6 M5 C, G" d0 Ovoid output_sample(Int32 out_data)" V. A" M! [- r
{
& A+ d$ x1 W( p  P8 @. G( y  AIC31_data.uint = out_data;  
" M! a  l9 a4 |8 J' W  MCASP1_XBUF5_32BIT = AIC31_data.uint;' p) m7 S; L$ W$ B  Q( ^
}% N. p. J( I5 o' W1 G. q  y

, I8 R' X/ g9 yInt32 input_sample(void)5 h; q5 T" k% S& S9 f/ J, e# j; t, H
{  7 m6 c# a5 O& Z- [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;* ~4 m* o9 K, q2 h5 `0 J
  return (AIC31_data.uint);
2 t8 S8 }, g, m  n4 Z}
6 P  Y: y. e$ H+ m
; I. B! i' k( P2 |
分享到:  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-2-2 02:39 , Processed in 0.059798 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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