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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 `$ X# A  _+ _% U0 y5 n6 k1 X  p
main文件:
  s9 p- `( Z3 iinterrupt void interrupt4(void)  ( b; o& c) _4 t. Q- j
{
4 d5 {* l9 n3 r- M  Uint32 sample;
" \* {9 [' {( F9 i: m* w: B4 U' Y* P% o( K+ ~
  sample = input_sample(); // read L + R samples from ADC) e2 p% Q8 g# Z( J$ i  _
  output_sample(sample);   // write L + R samples to DAC
7 p4 b2 k0 |! r2 |( z! L4 e  return;. D- Q9 f/ a3 t# r% H1 m
}
+ T) e. h3 [, o, y2 m% r
( w  [; ]5 R8 O- J- a" ~! e( Nint main( void )& C% F% S3 \2 {5 |1 V! ^
{
3 c8 u) n: O, J+ n! C
8 E" r) g" `! J2 B! t    /* Initialize BSL */. s- V0 T: J$ U/ S; x; I
    EVMC6747_init( );
4 T: z9 _( b9 \6 u2 N        /* Call evmc6747_intr function */+ P5 S! Y3 R7 \; I
    aic3106_init( );
7 l3 v( G8 s8 p2 D; ~2 P' z1 [        while(1);
7 B1 z+ ?' O% j, L}
/ F( ?3 A7 k& Z# l) ^+ i
+ Z% y$ p$ Q7 c) k/ M  r5 [* Y& C5 x- Q, F* d! X7 Q* W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 n8 ~1 Y; a0 _4 E. ^" F
/* Initialize MCASP1 */
3 a' s5 G# y  n& H' N( ]    mcasp = &MCASP_MODULE_1;8 h, F2 z7 S0 |( P0 \- l5 J6 \
    mcasp->regs->GBLCTL  = 0;       // Reset/ \) z# h5 ~& F% l$ F/ `/ j" T
    mcasp->regs->RGBLCTL = 0;       // Reset RX
; n- M/ \& @. ]3 x    mcasp->regs->XGBLCTL = 0;       // Reset TX
" j: E8 o2 t( E: _% L3 Z4 C/ F    mcasp->regs->PWRDEMU = 1;       // Free-running
: j. w7 E1 K, s   // configure McASP0 receive registers* [( Z7 L. b" ~3 c5 K& \/ H! _8 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- N2 V- s/ P8 W1 z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! [% ~2 @- _, |) s$ |
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% t4 h- ?. @1 v% U, Y& o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 X3 z% t' e; F: j( ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 j* O8 W8 Y. m; D8 I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) i2 c! C5 P, f
    mcasp->regs->RINTCTL    = 0x00000000; // Not used  Y8 Z) l( a$ n+ }7 f- w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ {4 I5 f+ m9 K: f6 x6 I+ p. Z* D) e( S2 Z9 t, @' Q- M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ U( v) q5 H, ^& w
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  O& n" D) `4 s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& W9 \' i+ l, |' Y4 R& J5 R    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% T3 I+ R" j7 e* ?% z, g6 ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& c7 v' C0 a9 t* h' x$ a
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. ~% |) d0 P" {* Z% O
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. m7 @3 a8 J: J. e+ Z7 m: ~: z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" y, I6 e9 l* E6 L9 F& \4 e% p8 d7 q7 m) Y) P: l) Q6 {
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ ]! w4 B' t+ B4 ~( R
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  e5 s  h% Z. g& y9 c8 h6 x5 {
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# M6 w( E- n6 E+ t+ e( Q7 e0 ^    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ f9 a7 [& x1 X" f9 X
% Q$ h- C# Y; K$ p# w& j    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 t5 r; u; R5 w3 O+ E4 @8 V    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 e2 J5 W5 i! `# s- M3 L
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 E: a) I) O& n) I$ @2 K& [% w: u1 Y

' i+ ~9 c, D' R' Z4 r  Q$ I$ g7 j/* Starting sections of the McASP*/% e/ F! Z! C7 c7 W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * N. s  l- b5 R" q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    u; c0 F. j5 B8 A  _) ]8 `% n
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 U8 ?/ f* t) M9 O7 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: |; P' i5 l# t3 g+ k% L+ u1 M# R9 u+ A* Q4 C# g8 ?7 H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ W7 M( l' p5 g* }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% M4 T+ T3 P3 W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. _8 c* d# Y' N! _8 _% U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) @% z5 S9 a# z& Q
, }  L' @! {/ ^) \1 I! n
    mcasp->regs->XSTAT = 0x0000ffff;
2 q8 p0 o" W* w) m4 j    mcasp->regs->RSTAT = 0x0000ffff; + m& ?2 a3 k; @

; W- z( a% V& X9 s- p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 Z! N0 d, i; T8 c+ G) ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 X! g# F1 D$ m: M' J    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & T# g/ [- R- ]9 z2 j( @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, z: y; {* [7 j8 M2 ]% C/ ^0 D) S

2 m, G" `$ ^$ F; M    /* Write a 0, so that no underrun occurs after releasing the state machine */( s' B  U& J' C. A0 a2 [
    mcasp->regs->XBUF5 = 0;
4 a7 @% [* T" v" `    mcasp->regs->RBUF0 = 0;
! O: h% ?% \  k7 ~! a
6 S0 k& {! Q4 R* C7 ]! z+ r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# ?; @5 q$ ^$ X% Z* _5 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% y- M; N, v% `; c; X. a; N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 i- c( }" z" H; `% B: E; Z$ I$ D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: U3 X& j. Z- q" u$ C" }" J; q! Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 k; _7 q- W. P, _8 u# F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 y+ \; I1 X- p+ R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 I0 Q* y* `( |* {9 Y; s5 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 l! l. [4 H: u7 U0 J) A

4 Q2 v' u* ]+ v9 J+ r    CSR = 0x0000;' i4 V8 d( `* _8 z! Q& ~2 y
    INTC_INTMUX1 = 0x3d;, U" b6 y8 G5 m( H! g( u0 c
    ISTP = (unsigned int)vectors;4 t" ^1 S' |; S" C6 Y0 c
    ICR = 0xFFF0;  
! X+ d0 w! u* J# t( `9 |    IER |= 0x12;  " ^* z9 u0 Z0 Y; e" b8 c
    CSR |= 0x01;  
8 R' Q$ O! D8 k* N- }* T" X9 G+ w/ G6 g
2 R$ I* l. Z( s6 @5 z1 W

2 O8 ?# o) a" l$ e/ C& V5 _还有就是两个输入输出函数:3 P6 Q1 q' S. u1 p
void output_sample(Int32 out_data)' B6 P$ ?0 o9 a8 w- p$ N
{
: V, I# I$ R7 a3 j: j1 c7 {$ o$ ^  AIC31_data.uint = out_data;  
& O* q; E9 a3 g. s3 F: j% G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. k/ I# N! J( V6 }5 u! h0 m}0 j0 C3 ]2 _8 s' S9 y* }- g* ^

, i0 l* B, V) cInt32 input_sample(void)
, X$ b, G+ ]1 n9 m* V; ?{  
. E0 N0 Y( B+ y4 c8 y7 h  AIC31_data.uint = MCASP1_RBUF0_32BIT;% P; [0 V& @: B  F  l# y- v) @
  return (AIC31_data.uint);! N, |' Q: S( _9 h
}% @- ^, ]6 Z- Q" r! V2 |& f, t
- b  W8 K3 N3 j3 ?7 ?! B8 |8 _
分享到:  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-28 10:19 , Processed in 0.049265 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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