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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' V, {  N3 }3 g9 Y7 h. S# C
main文件:
  D8 O; ~/ [8 L3 x3 ?" rinterrupt void interrupt4(void)  0 a. X3 x9 \) X" [5 \( {. g* _
{
  s. l7 U/ V7 h6 K9 y. A  Uint32 sample;# Y0 r) n' c8 W6 J* I5 W
9 U8 T8 w0 t  U) H& T
  sample = input_sample(); // read L + R samples from ADC
  ]* _" F- L; _! h! t% {" g. G) N  output_sample(sample);   // write L + R samples to DAC ( q- B9 A$ L+ w  @9 y3 M
  return;
/ }. W; ]% c7 o1 W- M) n3 |}
+ P8 @9 a8 H% i. Z8 |3 T) }: V- b# v: C& J: _% p4 a2 X& [
int main( void ); V9 t% y, J: i- y: H) p% u
{" f% v3 S: }; h0 }! i$ o

" n8 O& @% F* T( Z: o' J    /* Initialize BSL */
* ?: M4 B  g$ z4 m5 J' o6 s" L    EVMC6747_init( );
5 ~: a* i. c/ x5 H' x9 ?: S        /* Call evmc6747_intr function */
& }4 V2 x4 x! Y. U+ K8 q    aic3106_init( );2 y& K2 x- ~. q: L: A9 t
        while(1);; G" ~, Y# {, Z
}
7 i5 ?" x& C& I5 Q. R5 g) c' W- f! }7 w

$ _0 D. M9 a3 [9 h, laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& Y' @. E8 z4 i9 ?/ T. W
/* Initialize MCASP1 */
$ k& D6 V7 {4 f4 S9 e9 ?    mcasp = &MCASP_MODULE_1;
9 |8 v2 N) |+ d% w* a5 I    mcasp->regs->GBLCTL  = 0;       // Reset1 m+ P/ v( K+ f
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 y, @1 I7 ?% h; N6 L' Z
    mcasp->regs->XGBLCTL = 0;       // Reset TX. @' @9 Z9 C' M' C
    mcasp->regs->PWRDEMU = 1;       // Free-running: M! G9 c# |( T- M* X% s" a
   // configure McASP0 receive registers6 S; D3 b+ M; C, h4 [* i% D
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" k# b: }6 W+ q; _  n: n9 I- G4 H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 \5 c) M. X" H; t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" T- e+ R+ b& E' }' k+ T    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 R- U8 K& o3 S9 \    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) s8 A+ ^  u( o% V3 [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# n/ N6 ]! `* l( @0 }    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! R+ X5 F: G. q8 B/ p" _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; {1 P2 B" Y0 H5 U" [2 H

3 s  K, W" |! ^4 |3 L4 a: S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* H& B* g* k' A5 q9 `& @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) K3 [- Y' {# U( q' S( [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 x4 p1 |, ?% V' ~+ ^4 ^! h7 E7 Y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% K: g1 b& ^- w    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% l" }4 u. L) v8 u% q" n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ r  [" D' q- X( L6 H! e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! m' v6 N. o: O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% `8 p& o0 z) N
4 _# \' g) H' z3 X  M    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) X6 @& L" c' D; U0 a# `$ \
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ M. i# w8 k- k) r2 H" A! O
    mcasp->regs->PFUNC      = 0;          // All MCASPs
! t# O9 L1 L  l5 I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: l: L' B4 O% k/ u# o
: k9 h3 U9 w) ^3 x1 r* _    mcasp->regs->DITCTL     = 0x00000000; // Not used% ^, Q) I9 Q# i7 L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) P0 d& ^: H/ r& z    mcasp->regs->AMUTE      = 0x00000000; // Not used( v9 {$ s( d/ A$ E. V
3 }; s& b' f7 q9 b
/* Starting sections of the McASP*/
" }! P' x/ [7 p. G, p8 [    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 D5 d$ p* h, m, B/ G- z5 a" a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : H% G9 K! F6 v" w& G9 J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. ^) O# S' F7 B7 e: p. m' }8 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. U* ]6 L3 z5 Z' Z+ Z8 f1 f- E, M2 n
! i0 h% R) S0 B( c
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 R/ z/ c& `1 X( c! h! Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) p! R! k! Z( j: l+ W# H/ N" S& I& a3 ^3 k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " B/ _7 |/ A$ r0 W8 Y0 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ A, S+ b9 {1 k$ ]
8 ?$ Q6 C" C: H8 [8 J4 T
    mcasp->regs->XSTAT = 0x0000ffff;
9 k. ^$ s. `  Y0 O+ D6 X! R    mcasp->regs->RSTAT = 0x0000ffff; ; c% Q/ a* N$ W. n
1 z7 ^% w8 e! }
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 p' F9 O& p1 R: ?# E5 c* o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* K/ u. r6 S) G. i% h5 i2 V% O$ C& g
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' k6 A; J; x& a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: u; n- B8 Z% J, c0 d: i* x3 ^4 [" @5 W  i, p! E9 }: E
    /* Write a 0, so that no underrun occurs after releasing the state machine */: i$ w" ?6 x3 D6 A
    mcasp->regs->XBUF5 = 0;4 \* l) j' p; F( G  a, p
    mcasp->regs->RBUF0 = 0;
& s& I  }* }! r& V; s
* X! P' E) d& q" w8 H* ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , _+ t8 m3 U- `- s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% }$ l% W; R" |- _$ n6 I4 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ K& ^8 a0 Q( J& R5 O: l* z. g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% [, A; L/ s' H. U- s7 _' |% c  m
( K. T8 y& U2 A4 r5 G    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 w6 l8 [1 U( N7 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% m* \6 U/ f; ~% G    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% i& j" {; J$ G. {) @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ T0 }8 H2 M: `+ Q4 H
5 J& {7 i! z: T
    CSR = 0x0000;  C5 t3 d/ Z& p" v
    INTC_INTMUX1 = 0x3d;/ m4 o! J. ?/ L. d, f9 S' y
    ISTP = (unsigned int)vectors;
4 O& R' p/ A5 w( G& j    ICR = 0xFFF0;  3 n, ^) p+ T4 C& M' g. s* F
    IER |= 0x12;  
- j7 D( o+ y% t( I  q" s; {& p    CSR |= 0x01;  
6 m3 F0 W. ^: ?; m% T9 m) m& D# Z  e- |5 w! J$ x# K2 a; |) e
, b8 Y$ A) G# ]8 `% I2 }
& Y4 Q5 Y, e" T) S7 U) E$ u5 R
还有就是两个输入输出函数:
! J5 I# s8 Z7 _8 _( ?# Tvoid output_sample(Int32 out_data)( F2 I/ p5 ?' A( B3 ?
{( H- C( H: p( u
  AIC31_data.uint = out_data;  
) I& F6 r7 f5 `# Z* s  }% {* q8 a  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% s; a6 u' k! ^" J' l}
, O5 h" [  z- p6 H4 y- y& L) Z. t  M7 d$ y. A
Int32 input_sample(void)
* I- @  h4 R" x{  
4 |. x' Z0 M) X% e9 r( Q5 V) Q  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) h0 V; g; Y% h8 F4 V  return (AIC31_data.uint);
1 }2 m$ v! ^! F2 s7 I; M2 A}( |& W2 a6 S7 `0 ~7 Q8 K5 U) G

; Y, ~3 I1 I! F" ^/ @9 m' w2 I
分享到:  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-3-27 01:35 , Processed in 0.041555 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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