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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) C  ]7 Z# }6 m) W3 Q( s* ]" [2 emain文件:
# H4 p0 t4 K4 Xinterrupt void interrupt4(void)  ) K( b& T$ _2 a; _) d7 A+ |1 x' b
{! w, Y: b4 l3 r6 x" a( n( C
  Uint32 sample;% [) K2 [6 z0 @6 B# |

0 g8 U' y2 ~7 n# @. U  sample = input_sample(); // read L + R samples from ADC3 j4 v8 T3 v# c) t$ f
  output_sample(sample);   // write L + R samples to DAC 2 b' x3 ^. ?6 z5 c) t! g' g0 ~2 C
  return;+ v2 m3 M3 |: q, p( ~2 v
}7 m" ~7 ?$ W5 U9 o0 X6 Z) W
% i# S# q0 f0 |* w9 Q
int main( void )* k/ I2 b- m9 a) H: A
{
. `9 D$ e# a% v! Z9 Z  w
. Z4 @$ g1 g. |5 `! T    /* Initialize BSL */& @8 X# ?7 g2 p
    EVMC6747_init( );, X" u4 L$ z8 ]! ?! o) c
        /* Call evmc6747_intr function */
. D' O4 s5 }, [+ B( t    aic3106_init( );
1 H0 C/ h7 B% y$ O3 N1 ~        while(1);$ o" G% m0 C  V  B5 ]
}& i! t/ Y$ c. Q( i( N6 M4 i5 v

, Z% u# v) E' K  ^& M3 t1 k+ ~8 d, D7 Q2 i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. X& g! V: D" M+ C4 Z
/* Initialize MCASP1 */( c, b- N) g5 a9 k2 w$ p
    mcasp = &MCASP_MODULE_1;
3 E& w  G: Z2 w! c    mcasp->regs->GBLCTL  = 0;       // Reset+ I$ B$ k& E" \6 V9 K
    mcasp->regs->RGBLCTL = 0;       // Reset RX$ ^% i$ |4 F+ p
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& j3 ^4 E5 O  Z    mcasp->regs->PWRDEMU = 1;       // Free-running! V$ m. T+ U$ C, \: X
   // configure McASP0 receive registers  F0 E/ i. U" K; ~2 p( R) h# h" V- h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: A$ y9 L5 |- t% I2 P/ x. o/ ^. i$ r
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 j$ x7 Z# ]0 }) ]$ u
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  m& I! v9 x( X6 n( [7 ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 d/ @* C- N+ Z+ [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 F& x+ B' z. R- |& s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' F2 A! z/ l8 B5 b: O7 J
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 d( z. ?2 ]* ^  i6 r    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c) w6 c4 }2 g1 `& N! P; J
* \$ a5 d# ], d
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 ^/ Y/ c( @0 f& m" c5 d6 d
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. |, |& s4 x0 ~8 H+ z! d  @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( o8 Z# ^5 _$ L2 U" s0 D% b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 S8 p4 Y- Q6 n; ~: Q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& ^' @% i7 w4 x% n8 _7 T1 o% i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( `* B3 M6 F# M+ C: G( X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* p4 f7 E- S, g! E" \) u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: N# T3 K0 i! `$ ?& M/ a# V+ d

; r# G8 v( Q3 t0 W+ z& v( f4 G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ w. m  D4 D4 ^- A% V, p! X
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* ?8 n7 F2 `! x7 R3 j+ U9 B4 x    mcasp->regs->PFUNC      = 0;          // All MCASPs7 _' L, t& n6 o
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 `, Y1 `  d! s( F2 N4 Q* Q6 ^
/ i' s* d' c1 t6 e6 p0 I. s
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 d, z$ {  h. q8 g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" U, X" Q+ L( m' V3 P. N    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 q; a' L1 I& A; [! u9 Z" \" p0 A' f4 e$ D# ]% ?- Z5 f5 o0 N
/* Starting sections of the McASP*/7 Y. g! I6 g6 [: q+ L) o+ a% d
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   D! a, `9 A8 K1 a& g  t$ R5 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; X$ v; P+ l' R5 K; _* }2 \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * K5 I/ x# ?# H# q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# I8 n& b5 \6 k9 i  H7 y

2 g) G, g8 @! A  [# J' S. x+ |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. `2 u, g6 i% p, s; W% r. I% v4 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: M- X4 g3 K! z3 g5 f1 B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + A5 l4 Q$ ?! G8 U* j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 O9 W7 z; ]# _( @

8 B( O1 d5 x5 ?; M    mcasp->regs->XSTAT = 0x0000ffff; % N( e- t, a2 ?# L' l. t9 w9 J
    mcasp->regs->RSTAT = 0x0000ffff; * `0 [1 K) }* j5 ?0 f
+ `& I! \( x* Q, m$ Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 X) r) j, x2 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- h# q- _9 ~% k  Z- p5 V9 d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % R3 G, |1 n4 I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 U0 ^' `9 V5 A9 Y7 |$ D0 i
& J6 P# U. J: q
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) L  D* p6 H2 R- U7 S! m5 `    mcasp->regs->XBUF5 = 0;
  j4 y# f) s7 A    mcasp->regs->RBUF0 = 0;
6 P6 r! t$ }2 r# i8 O7 B& @# X( n+ _& m. `$ V
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- T7 J9 U1 E2 F; @6 L- c. D4 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 E3 D. p, @( q3 g' o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 p+ p0 K- |( q  s0 T: t8 F! h/ @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# K5 K3 y* R/ p, @3 |9 q) B6 u
% Z' ~" I5 @2 S) w/ k4 i9 K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 Y) ~: q/ W: w; {) W4 Z/ R: T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 V" _( P) a  B" w' C+ z6 U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 o4 z% X- d& R: y' V2 `/ t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; o% l$ k, p: v" p% |6 h4 e( S& E% j0 L2 w. H
    CSR = 0x0000;6 D& n+ }$ v) V- F: O
    INTC_INTMUX1 = 0x3d;
0 ~: c. x2 @+ N    ISTP = (unsigned int)vectors;3 z0 A; V, }0 P+ Q4 G
    ICR = 0xFFF0;  , Q  n! S3 x  a0 h& V$ y
    IER |= 0x12;  
" `& s+ J) E5 L    CSR |= 0x01;  
/ G; b. U; ]: j2 z
1 S9 k/ U+ C. p  \# N9 @$ ^9 N! x5 k$ Q

- Q* V* |; r+ n( W还有就是两个输入输出函数:
/ A) \$ L+ |/ E0 D4 q( L, Wvoid output_sample(Int32 out_data)
6 C- d2 D0 `7 A/ s3 c) O8 I{
8 x/ Q& b$ o8 H- k1 z% \, M. B% _% s  AIC31_data.uint = out_data;  2 X( ^+ Y4 ?& U9 M$ Y0 B
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ z( o, H7 {. G+ ^  T) }
}2 D$ d3 A, Z3 I  _- t# y( Q2 p' n9 w

# ^% e% X- a; n- nInt32 input_sample(void)1 ^5 u; Y$ H4 E9 Z3 s8 I. x) _! F7 W# l/ u
{  
  M, I! u! T- a3 D( H% B  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 ]2 S* U$ ]# e+ w) H
  return (AIC31_data.uint);
# _  w$ u: L, S0 }}- L4 o+ G1 p8 A1 A

: X0 o  R. H9 ]9 j; [5 X
分享到:  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-31 00:53 , Processed in 0.039186 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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