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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 x6 F% O2 j( T$ V/ u+ k
main文件:7 |9 H6 i" Z. o7 v) l" E. d4 ^
interrupt void interrupt4(void)  6 `3 ?1 H# _* ?; @# E5 D+ g
{
9 I: @2 C4 ]6 L$ W% x* J' W, Y  Uint32 sample;
) v* C7 A- t) K9 Z. \% g* t6 i# k2 }/ v, z8 M# u- j
  sample = input_sample(); // read L + R samples from ADC; e2 F1 B3 R, I# L0 Q( Z$ o/ z
  output_sample(sample);   // write L + R samples to DAC 2 \7 h) ~0 D& r" W
  return;: G5 v( J- u" u. s8 W1 X) S
}% A. _+ t% j& F7 |# {+ B  T

4 x: d2 j* p) Q8 \$ T1 Oint main( void )
# N' E0 Y: N& H. q$ ~{" _( Y7 f7 Q# {( O1 z3 }( a
* w5 [. p  a  j, Y4 n0 l. u
    /* Initialize BSL *// ?" W# B, |; |& t8 \
    EVMC6747_init( );- w* y" P5 Q* ^' [+ u
        /* Call evmc6747_intr function */
/ ?% d3 Q) G) N+ r/ ?8 K- j' \    aic3106_init( );3 q5 j" b; K0 f! L: v
        while(1);
; h& b* Y  z/ m  _& z}- D( M, p+ O* Q: H/ u: \

0 T" Z* ~' {* r4 I9 h  \. C; M7 ]6 q2 y% L3 I: ~# |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. H  j, g: Y1 a
/* Initialize MCASP1 */
" ~" y8 ^+ m' ]3 q    mcasp = &MCASP_MODULE_1;
* Q# q8 p6 z- c) W$ Y5 C    mcasp->regs->GBLCTL  = 0;       // Reset
, y& P; K4 G5 L+ R    mcasp->regs->RGBLCTL = 0;       // Reset RX
( Z5 H. G& b+ w5 x9 H$ `    mcasp->regs->XGBLCTL = 0;       // Reset TX* N# D9 {1 u8 g8 L' P
    mcasp->regs->PWRDEMU = 1;       // Free-running
9 u# w8 ^5 S5 u5 S7 H   // configure McASP0 receive registers
$ V) n9 L/ r4 J7 D, c    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: r9 F; ]' H9 `" j: e/ R* {5 b  E1 U    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 N; M3 c% E( N    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 C: B1 ~! F% k
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 b: D! D; D: t; b: T    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* d+ J: e! r' U* t# O    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( f7 D% o7 L4 i2 C: M. x) o
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& A" H$ A) T" `9 i  l$ Z    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 `/ Z/ K2 E6 a7 t$ ?/ |( G
' ?* U. n4 h& @  x% f) p+ i5 Y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! @. y' Q8 L; H' T6 A6 B  g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 b1 V. w9 M5 F* O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- H/ g0 [% P( N2 z$ L1 v    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- S- A5 ]4 i# b1 B    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) z- c" I8 A& _( A+ Q; W4 x6 m+ q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; |" L$ _- F0 {" f
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' I+ j+ I/ C& i# U
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 I; F) d, u0 s: O. h$ u$ M
: X6 B0 K0 l  T- `( a3 ^9 X    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 F) [/ x* ^& o5 `, v* T5 J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- s: f8 H8 u& W( c, b2 ^. V  D( E    mcasp->regs->PFUNC      = 0;          // All MCASPs! O; h' p% S  l7 p( n. q- }. O
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 q7 K0 p6 C6 ^

, _: B, e7 P0 L) t    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 N. @% M+ N! T0 ^8 O# K    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) T; l( `2 u& J/ P/ d$ L    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 t0 d/ O9 h7 U6 N6 d* J: r' Q6 W3 P" Z
/* Starting sections of the McASP*/
2 ~) l' [5 v; ^$ V4 M  L    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) q# B+ S( u  ?9 Y1 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& D$ q8 T# s( ^+ G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 f% ~% N: Z5 L! U7 v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ N% J9 Z3 \# ]0 P5 ~' y% i

% Z6 J* u" T8 q# e' D    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ b; Y3 R5 O2 J: x. E/ m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 `& |8 W% B$ b' H8 r- I/ [, f+ n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  V7 G& j; K1 o0 R% F" R" g4 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( k' x! ~1 p. M3 D2 J( k' n
# D% t& O6 K( _    mcasp->regs->XSTAT = 0x0000ffff; 9 a+ |' |8 b) Y1 G
    mcasp->regs->RSTAT = 0x0000ffff; + [9 d( Y4 v/ P. ^# P

0 I# U9 ~( V5 X9 {    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# P' |$ E" a5 m* |1 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! f- r3 p4 Y  k( u$ l' l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 n; y, @+ m& }- r6 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 O5 C! M! J. ]7 W2 J7 O# {( M+ c0 E
    /* Write a 0, so that no underrun occurs after releasing the state machine */; Q0 |# d- ^9 f
    mcasp->regs->XBUF5 = 0;
5 P8 B7 Z  k. R    mcasp->regs->RBUF0 = 0;' _' q5 g" f* B2 [$ Z( }
( y( c% U* o" F( S9 G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - W3 `1 l6 V* u8 M( n  Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# F0 C' d7 D5 u  Y5 H5 \1 z/ l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  V. d2 v# ?  W  r* R0 g0 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ?+ y0 _. |; Z
3 Z" g# T6 _- Z9 c% }4 s! G' P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; r$ g- V* i+ l( w6 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* R$ A: A7 U* H5 x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ _; p* O; d+ q- E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. d9 a; ]! y9 X% {, c
, B) {5 P! w% ]' l: P! v' i0 T    CSR = 0x0000;
5 M! f& @& {7 N, i+ p: ~2 |    INTC_INTMUX1 = 0x3d;' U2 v9 }$ T% H& c/ Y" h1 h
    ISTP = (unsigned int)vectors;
! B% q8 s: h, r2 J: I% \1 ^    ICR = 0xFFF0;  
2 z: R( S0 O( {5 _* k0 D    IER |= 0x12;  $ b! B4 N% s4 ^1 q( Q
    CSR |= 0x01;  
  C% [+ i/ C. _
. a) J' U' g6 m; m
3 |! j1 q: F+ ?: X) o. L/ k; p+ t/ w8 ?' K
还有就是两个输入输出函数:
8 j# F! U. U! w1 tvoid output_sample(Int32 out_data)& y  _0 ~% Z! s4 D! k9 k3 P; S0 J8 t0 s
{6 k3 M- U6 _6 V/ p8 Q3 N. l8 Q: \3 b
  AIC31_data.uint = out_data;  
$ v0 b& w1 \3 y+ \, V6 @  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ P. `# T) n# {6 u; E
}
5 d9 p$ `% u+ a$ Y6 a, z2 X8 K$ |: {/ l5 W& M3 {$ J2 F
Int32 input_sample(void)
* V# a% V3 Y2 [/ @% [{  8 H4 B5 r* {' Q. u- @4 L9 \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! K5 i# r- @" L% Q! {% f  return (AIC31_data.uint);
( E  C' J  J7 Q8 ^/ W' b}
& F# B' j  s. q
# G! E3 f+ T7 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, 2026-1-28 16:31 , Processed in 0.041239 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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