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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 w$ C/ J; Z3 J* f+ Omain文件:
% T& s; I# @% Q% m3 Tinterrupt void interrupt4(void)  
& V9 c) l' Y3 G4 b! H( ?4 A{
3 v0 N) o3 `! ?$ E  Uint32 sample;
4 A$ \6 w) ~! R) Y- \6 U, H( [% u. m* X1 I3 u
  sample = input_sample(); // read L + R samples from ADC! a0 _0 I1 Y* q9 p5 s
  output_sample(sample);   // write L + R samples to DAC % ~8 m) @; r' i7 a1 M
  return;9 y- z- \4 T6 G! X+ @
}1 S) _+ D1 C0 ^5 _

" {3 k6 r# w4 @5 E3 mint main( void )! d8 W- Z) E. A5 r2 w  Z
{
" H7 P- {6 E: o' p8 i3 l
2 c& R* c2 r! B/ g9 v    /* Initialize BSL */
7 K5 ]6 q8 y( L7 P$ q3 H    EVMC6747_init( );8 T) k) P* O. m9 J
        /* Call evmc6747_intr function */
( v# g' Y' b  ?- Z1 i( H    aic3106_init( );  l# |; t2 p% f
        while(1);
% Y" `6 g3 t7 e- \}0 `0 v+ q. Z, {2 B% `

) V2 a: f0 Q# p3 i3 J4 D4 `5 d, k* B( S7 l# E8 L/ z% c  Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 S" p" @$ v- I9 _' R  W
/* Initialize MCASP1 */. A5 v$ e$ W4 ^
    mcasp = &MCASP_MODULE_1;
! S( K" q% K& H  Q" B    mcasp->regs->GBLCTL  = 0;       // Reset
5 B; d3 c6 B6 M  i/ {    mcasp->regs->RGBLCTL = 0;       // Reset RX" p! b% M4 C; h1 d" |! P
    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ d* o' p/ G# [  d. P    mcasp->regs->PWRDEMU = 1;       // Free-running, Z9 n: U2 V/ T
   // configure McASP0 receive registers
9 F. [; N, z' i: S/ `) C  v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 K. b# P: y4 _' Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- y, p5 S) |- k4 X; ~    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: T, u" u+ E" [4 F; n) l, s; ~    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  C5 P3 U: ~9 C1 U9 Z/ g    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" J5 {- P9 [7 ^& i& j6 k5 O6 o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, d* N/ c; {8 R    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 W( ~5 O6 G$ M' Y/ q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% T; e% `( }9 i8 D# P! m

" G( O" E7 z( j& Z( ~" d( |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) {& d4 A8 a8 q7 @" z3 B% W+ A    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, T5 D% e  @  c8 L( A- a    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 t" x- e' T" U/ @
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' |( t+ E8 ?' C$ k    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
2 g; o# S# M! a- p! `+ Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 i" p' d+ v9 Y2 c# h# x9 o7 Y0 ?4 F
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# ?0 O& ~/ b4 K+ ]    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 B. M6 d% K1 E0 y: z' [
6 r9 P8 o# e) w0 e) }7 Y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 m1 P4 U7 K; Z) }    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 G7 t3 E3 B3 f' R
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 G4 e4 f1 v! N1 r9 q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 a+ E1 \7 Z# q: t% G5 O

# U" `/ T  G' G    mcasp->regs->DITCTL     = 0x00000000; // Not used1 {4 x6 R: ~; g* e  y/ x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, q; l1 s) j7 }
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 H" b5 o( H" _( g7 `9 S  `
8 \# f1 p) A7 U% s6 i3 `2 q: N6 j
/* Starting sections of the McASP*/
- _; Z- ]7 u8 K- }    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& Y4 w6 A  G4 s% q0 P# X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 O; P: y$ C5 ]8 w    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" f3 M4 Q/ N" i& k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! g. a8 e/ H: N' l: g( x2 z, S/ S6 ^7 X% d5 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + G  G0 m7 D- U" b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ e- E- C, n# o, s, H
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : a* H0 U9 q# h; K* }- E1 X# v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' D/ k, c7 ~6 L
; Q( u* ^2 N0 G0 n+ w# a    mcasp->regs->XSTAT = 0x0000ffff;
% O3 f  g  d) M) n4 e    mcasp->regs->RSTAT = 0x0000ffff;
# S6 o% B& X0 ~8 n; e: S  H5 f6 q" l( h9 Y+ @* f& E: _" c
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 h4 S% n9 F: W( _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. `2 b) @  E8 t) M0 N+ Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 m3 \3 c1 Y3 e+ a4 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 @* Z* P' C# x  t' `8 k3 _8 e, e  q+ I
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 j* e& D3 {: ~( O; N
    mcasp->regs->XBUF5 = 0;
1 c+ G' l' @3 |    mcasp->regs->RBUF0 = 0;
) S2 x' e7 R8 e1 C4 x
* u% ]' L7 ~8 r  s: P2 `; @/ y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 f2 ?& v! |2 D6 i# R1 z+ ?" _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) v2 h8 G- B  p) I( n4 c  {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! J* \7 S/ `3 v6 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( z! M. t7 i; i6 B( c+ H
0 x/ u* \7 Z8 E: v! N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / B: @. g4 \) P4 |2 ?3 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ t/ H8 G; N2 g2 _
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - c1 a, Y* T, @* i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' ~6 L& \% o1 [; w5 C6 X% r, J8 |
% `, X7 X9 ^/ y+ N- F    CSR = 0x0000;7 s9 J% A( Q) W  |" q6 w
    INTC_INTMUX1 = 0x3d;
$ K9 y2 n6 g, L! w3 w* d" s    ISTP = (unsigned int)vectors;% U4 {4 r1 }+ \# r, n: D7 D
    ICR = 0xFFF0;  $ E" m& j  B0 g
    IER |= 0x12;  
4 m! }+ Z: P9 p3 k) t3 ]1 f    CSR |= 0x01;  ; C4 L# |% X+ W
& s2 u; \. y1 z- r7 J8 j5 h

1 f, n4 U) l+ ?+ n
  f; Q$ b7 B1 X( D1 a还有就是两个输入输出函数:2 A. V- r: b8 ^2 H  `
void output_sample(Int32 out_data)5 s9 S4 J: {* P7 C) l: `
{
- j6 z) W1 g# E0 \  AIC31_data.uint = out_data;  ' G) E( E+ U. ~2 [, ?4 F/ A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;" f' U# F  o* P4 L
}3 T! h3 [- H7 }1 ?# K( o

$ M' D3 L+ q0 t3 z/ T$ V3 [Int32 input_sample(void)  ]0 ~3 F1 L: r1 ?
{  
5 A4 h+ B. o  u4 m( [. U' s  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 Y& `" _7 ?# U6 J. F+ j
  return (AIC31_data.uint);( r4 ~" d1 X' S" Q* R
}2 ?8 ~: M6 k2 g8 S9 `: d( u
9 f% J! M1 \6 x. L
分享到:  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-19 13:01 , Processed in 0.039372 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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