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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 @1 r( W9 M% s% K9 X5 e
main文件:. ~7 z0 S' U' f, S
interrupt void interrupt4(void)  
/ @- ]4 w# t' Q4 p6 v0 ]{
8 N7 E* z( I- h6 }' M! M4 H) C. Y  Uint32 sample;
1 @( @- {2 h+ q+ z- {% U% n& ~
; j' _  J! J# D  sample = input_sample(); // read L + R samples from ADC6 H) Z' h8 J  U% a# M
  output_sample(sample);   // write L + R samples to DAC 2 D. L/ ]8 p/ w4 W: F
  return;: c- v* D5 P) g7 f
}
6 }) k6 I& ^5 A* Y. A8 s  U6 t
* l$ ]$ n# ~0 W0 C; h, iint main( void )' o5 X2 A  [( d
{* u* U7 S9 }( c) p! ]+ @

8 W( d6 [3 t0 Z9 i2 ~3 u) J$ f    /* Initialize BSL */
% c+ \* g$ d7 ^1 O1 {    EVMC6747_init( );
  I) p! X4 |( m% e9 }  T8 k4 ?        /* Call evmc6747_intr function */
! y2 i1 K/ z2 f( h    aic3106_init( );: }' O9 \, ^2 n
        while(1);
( h) R0 J5 H* h% n% J! f}9 m3 o* O, ]  p

" ?' p) \5 O4 k( d9 i8 Q
+ }2 H5 m. X' caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 n/ R+ i5 N& w( i6 r4 \  B  o/* Initialize MCASP1 */
0 t+ r- r4 m% ]6 @* c; f  Y" E    mcasp = &MCASP_MODULE_1;' y3 d. o9 m- L5 b
    mcasp->regs->GBLCTL  = 0;       // Reset
: ~9 F( x6 @* n    mcasp->regs->RGBLCTL = 0;       // Reset RX" z" i; {& _2 Y1 d
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& u) t. L" w) \( C& y0 k4 r    mcasp->regs->PWRDEMU = 1;       // Free-running  l! N) j+ b+ D. w6 I' X. \9 j7 z
   // configure McASP0 receive registers
) i$ \% W4 v1 d8 R3 b    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. a7 y" ~# G' l7 {9 u    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 C! b5 A( @0 R4 j$ t- O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( Y: c3 j- U# }) c4 o; A    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 c( s3 r3 E3 T    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 Z; E' v' \8 }) n
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 z+ ]4 n* f* s# W& U1 m4 S( Z    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 f/ U" Q9 P- X: d9 Q% m
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  |; y! E) Z% O* Q# r* n/ `0 o# J& ^1 }4 q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# B3 }$ m, O. m- o7 }
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 l# f$ L4 Z3 Y8 r0 R+ [, w9 |" q
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& P8 F1 c- L  Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 a3 V3 w1 F$ e) O& o% ]9 P' {
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 J( ^$ C& I: d) Y+ i" v8 y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; S" Q7 K! W" q1 t5 C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. M6 N" A) ~6 G7 Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) j& u- {% k3 {& t  a; G

* u3 q2 K6 V7 V    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* Z% z+ P5 a! N# G    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% ~1 I% M& D8 m
    mcasp->regs->PFUNC      = 0;          // All MCASPs
. Y6 `# w/ n' O( m% {- ~% c. A    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, k; r) p+ l* i- T1 a
3 B1 w( k  }6 \: ?9 w, F9 ]! p4 D  }; D# I
    mcasp->regs->DITCTL     = 0x00000000; // Not used! |7 ^8 i8 P1 P2 @- N  C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 i' P2 \3 G7 M/ b5 X* z" \    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 l' b$ G( n2 ]1 u  W& K, k5 t3 C8 x2 K$ _8 ]4 b
/* Starting sections of the McASP*/8 p3 Z8 o# i8 n1 `# @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 Q- j. `5 O$ o) V- S/ W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 E1 I0 Y( G4 F  \1 ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! S/ v8 o+ L+ D4 a! o7 Y2 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 e" B& a* n+ I2 ~3 F/ ]

2 u! ~, L& Y1 t    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 f3 [4 T0 u& k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( L- _/ S/ I; _% i6 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ A: g5 Y* Y( r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ j* m( f! c, @7 c6 `5 f/ W

) m" S, i7 `% g. q0 x3 h    mcasp->regs->XSTAT = 0x0000ffff; / I2 Z2 _; p. Z( F7 X8 @
    mcasp->regs->RSTAT = 0x0000ffff;   L5 N( `' v3 f1 X- q

# P, _/ S: q6 ^$ y- ^    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ b# k- h) _& l  |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' M( l. s6 T( Q5 B- d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 g# S* }  ~9 M. g$ P+ E; I$ z5 x1 S: Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 p0 L; {& o- z& L8 G

( E) n# G% a7 i    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ B% B' O2 s% D' W    mcasp->regs->XBUF5 = 0;! C% |- l+ W7 M2 Y$ U* h! s
    mcasp->regs->RBUF0 = 0;
0 ~) ]0 S; b- y4 \+ l' t$ f+ }. b! U! E2 Q) D3 A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 e0 a/ ?$ d) X6 Y# {( ^8 f! R, |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 L! q- ~! I! m+ M
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 }0 u: H. R  E: M: S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, O" Z' f2 D- O, A

9 ]% p: V6 W) U- `& b0 X; R5 |    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& V! S3 [% `+ |% U! R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 u& e' ^" e% v; N( r+ U2 ^) D* C    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; i+ v1 y2 j8 E! P( c9 v: r8 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) l& T8 H( V" h

5 f3 m) G3 M7 _. r5 c, U( H    CSR = 0x0000;
. B; C  x4 A2 a. {5 w! g) U) K    INTC_INTMUX1 = 0x3d;
, E) X( c4 S  v    ISTP = (unsigned int)vectors;
9 C4 L8 L4 ^. |! |( F* d% q    ICR = 0xFFF0;  
6 S, B5 K& v9 H$ s2 E+ `: c    IER |= 0x12;  + K) Z. F/ H  }- b( J6 u
    CSR |= 0x01;  
2 w! u8 _- c: ^2 y8 D  ~- M' F% i; G2 U0 W- j8 n9 f$ j1 s
; q: U7 g4 d7 J" U# Z
) ~, z/ |: @( o+ ~4 N) B5 c
还有就是两个输入输出函数:
7 Z8 C8 H1 v  A( Avoid output_sample(Int32 out_data)
0 Y! y; I0 B: L5 }! i, b+ p+ B{
/ Q2 Q: W9 r, [+ E2 u& n+ N: b) f  AIC31_data.uint = out_data;  
! W5 P- D6 X* Z- @& q2 f0 Z  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 x- C& k: u4 d* f}
6 b3 }: i) ~9 M& E3 z
* i1 H5 Q$ y, F$ Q$ |4 s+ I9 A0 QInt32 input_sample(void)
$ R3 u  i% |, V+ K: A8 g{  
( c4 L6 N" t  e" N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 |& G& _; {. @/ C1 [  return (AIC31_data.uint);  _7 t/ S$ R, }. F4 \8 k
}
7 z3 G. F. ]# Z: H4 }6 \; H+ W% w: F% ^1 Y* n2 `$ R
分享到:  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-5 00:18 , Processed in 0.038312 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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