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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* _. d# K8 C) ~& t6 A8 u% I
main文件:% ^) S' {1 G  n
interrupt void interrupt4(void)  6 z6 r: b& j3 n
{, q2 h, ?: X- G& j! b  y
  Uint32 sample;% D6 V+ R# L. Q" _8 i
  ?7 L+ z9 J2 y$ X; \$ _
  sample = input_sample(); // read L + R samples from ADC
" |6 |5 v3 h/ d! I5 ~1 L& t6 u4 X  output_sample(sample);   // write L + R samples to DAC
; h7 A+ u# L/ ~, h: w0 [8 O& f) H  return;+ K& P" W$ f8 a0 P, N5 g
}
" T6 t  t5 ]1 g& S3 [
& o, t! h0 j6 Dint main( void )+ R! l/ `* N$ D, l4 _+ d
{- [3 y. N3 C/ p, }9 H) e7 K/ W( T

& ?% H4 q1 H- m; x  `) H  d    /* Initialize BSL */6 l5 m6 C0 U) h& A( d# T. h2 h# o
    EVMC6747_init( );
5 f7 G6 K9 b5 F- W        /* Call evmc6747_intr function */
7 u0 @$ b3 @- `8 ?    aic3106_init( );
" L( C; V( T/ s" K; f        while(1);
$ ]% B7 \  s" a  h6 l}/ R0 c! u  `: l' i

# R( @0 i5 s' D& |; d: q' A: i# p0 G/ H9 u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" z& \6 P6 A  g6 l1 {& J: R( a
/* Initialize MCASP1 */( z. Q, \; L2 a7 p5 Z
    mcasp = &MCASP_MODULE_1;
  Z- i' u  S) O1 B* J    mcasp->regs->GBLCTL  = 0;       // Reset+ C' Q, H  R# y9 g
    mcasp->regs->RGBLCTL = 0;       // Reset RX
( [$ A' E2 t3 y& ?. ]0 ~    mcasp->regs->XGBLCTL = 0;       // Reset TX
" `( v; l. Y  e5 U6 [' [    mcasp->regs->PWRDEMU = 1;       // Free-running
' X* {6 v/ |. e! z9 Q- A/ U   // configure McASP0 receive registers
! e, f! b( @( J. G2 o7 ?8 H1 I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, M9 @$ d. y% W# N# i! V0 M# p8 M    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 Q5 U7 O% [! X- Q- q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% i! C" y4 L# z; [: e/ v# @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), k: \! S" I, _5 o
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ o# M0 @* U% d. h, k/ G- G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 b9 Q; L' p7 _/ \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 q" p7 t3 T9 L! V    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 h  i/ S* j) F' d

5 e  Y; x' r& ?- P' M- v' ]& [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# j4 W/ \! `- F    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: q: g0 ]& a* P; g! ?7 V5 o    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 n8 I& w- z# H, Y1 B
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 s4 L. N7 [! h0 H' Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( R# j& c# B' h; }+ e    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" u( a( j- O' a+ y# V3 l4 Z- l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 ~- P0 ~% U& y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 H+ s; }- Z. L- y4 q1 r% {/ |5 K. t4 q0 Q4 |+ \$ f" B; f$ k7 k
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 n5 H8 C  A" J2 k5 N5 g% E$ S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 R  ~8 L$ |5 O4 K
    mcasp->regs->PFUNC      = 0;          // All MCASPs
: M5 t2 v9 j+ f    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' w& f6 N0 r+ v) D

( L0 K. D; b: ?8 `, ]. V1 Z- k4 [    mcasp->regs->DITCTL     = 0x00000000; // Not used. m' R. L3 E3 k2 t
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 K9 A+ U( T3 t5 |' X" j    mcasp->regs->AMUTE      = 0x00000000; // Not used  m  B( {3 p6 C% _: K) s' B: h
: F6 l( y* @. z0 B3 \* E+ @
/* Starting sections of the McASP*/6 E( C7 M  @) X" p, k
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 M; K! q( o' c; J$ m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 m1 R% e8 p; b$ U+ P' {
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! o. V1 F2 N! @+ m& k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 d. ^1 \5 X/ Y% b

: u" p1 L* b0 X; H0 W- u+ h    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - c, S# r6 l5 d4 g2 L% Y3 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& h! ], g* `5 F' @" J5 f6 N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 Y6 D4 w% ~* E; b* s" m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 M1 V+ q- c; ~& {- w; p: o. P5 o: |! L- l! y! A6 G
    mcasp->regs->XSTAT = 0x0000ffff;
3 l2 i) v5 |2 H9 _0 V    mcasp->regs->RSTAT = 0x0000ffff;
8 T7 s1 t' S9 X% J- S+ [* F6 n; }7 e5 S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( j6 o0 o0 ?; a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 ?0 V: @: K% {' n    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ ?) F, T) N" w! O% a( ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 L, _# ?% V  S( l$ X3 j6 K
, \5 D2 i. z) t. d2 V    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 K# y/ j. b. {, w# O' b1 j. t    mcasp->regs->XBUF5 = 0;
  f* D: t- \+ D; t    mcasp->regs->RBUF0 = 0;
5 Y7 I, f6 I) N* i8 |0 a) E0 n5 o" `$ {/ {0 K8 F/ ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & e6 x" Q( I  Y, x% v4 I2 m" Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" c( u: [" V, J3 Y3 J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 O6 F2 e' i4 |' D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 y: P# q8 T* Y: D; p' v6 t; I

! c; M4 ~. g; ]6 g2 e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ ?6 l/ _3 f7 T! E, O- b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 B' f/ v, d7 n! u
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 g) L$ }( z0 d1 d' z' O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. `" z: N! Z; l4 {# \5 p1 l" W" `3 T
6 H8 O, M0 M  {0 n5 t* C4 l, U
    CSR = 0x0000;3 B3 X. M8 }# |! ~$ v: E
    INTC_INTMUX1 = 0x3d;
- M0 R* ~3 E( H+ \    ISTP = (unsigned int)vectors;
5 G7 q: o2 D! t# T$ b% N( E    ICR = 0xFFF0;  : {5 B- k" S3 b
    IER |= 0x12;  5 Z, K$ j% Q4 Q9 k
    CSR |= 0x01;  
- l) G; w6 \0 N4 y6 l
$ |1 r. ^$ P# o  ~% _! l" s+ s& g  e) C" \% [

/ ^$ ^: M6 o1 r+ f1 y0 o还有就是两个输入输出函数:
" Q( X! |) ]- b! }3 ~void output_sample(Int32 out_data)
  k+ L3 V0 |6 x{8 X1 F/ s4 Y$ U9 L
  AIC31_data.uint = out_data;  ) h4 @1 ?; R/ V" P5 q) z
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ t, b4 t" }1 b- T}
; N% p& a" l# P( {! I* |1 k
1 c; A. \7 d" i' I5 L( ?0 m/ Y, {Int32 input_sample(void)
7 R" b: t1 ]# Q' l: Z{  
. G: x% M+ R6 ~' c$ K' H' u! G  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ y5 B0 \! {/ A  {- b7 `4 T/ I# `  M
  return (AIC31_data.uint);
) P# b, Z% N3 h) C* N}: |3 T5 K9 m5 s( N0 y& j9 X* p* a

6 w9 ~5 L9 P( r2 ~
分享到:  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-1-28 09:34 , Processed in 0.040785 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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