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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! Q: ^* C9 j1 G# y5 L8 q
main文件:
$ S) f1 z- k0 f) k7 X. ainterrupt void interrupt4(void)  
+ ]1 S9 ]9 A% _( e/ _# h) |{2 d3 ]5 d; e. e/ G& \: U
  Uint32 sample;+ A7 r( ?; y5 e) g- R. `, B
" z$ V( D  Z5 p$ [9 R# F
  sample = input_sample(); // read L + R samples from ADC$ e* n8 B9 I/ x2 P) n+ a
  output_sample(sample);   // write L + R samples to DAC
/ O$ z4 y8 z5 [; P9 Z" ^' Z  return;
" ^' T0 c/ B! R, Y}
, O7 _4 f/ ~$ ^7 Y5 }9 D: D) A5 `: w; u7 {  ?
int main( void )
% ]% x, A* K! C8 Q, a{
9 \4 U, l+ n, j9 l% v% m1 Z0 ^+ e% R1 Y+ [4 s# G
    /* Initialize BSL */6 l* |9 M, `# g8 d, m9 }  i
    EVMC6747_init( );
; P- S0 m9 ]; C1 r+ |        /* Call evmc6747_intr function */: U$ o/ O8 j* g- `7 }0 z
    aic3106_init( );# Z* Y: ~8 p& M4 W( Y4 J
        while(1);+ ^  Y0 }7 r: [- J: q
}
) |7 p" o6 L( `0 t* w1 k
2 e- [9 i2 J& b$ z8 H; d# |& \. m# I% q5 r+ e$ T4 t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  G* L1 k; J7 `  S% X4 d
/* Initialize MCASP1 */6 ~" j: O9 i) S1 a$ F
    mcasp = &MCASP_MODULE_1;- D  J/ o2 }5 H- y$ O% c$ l
    mcasp->regs->GBLCTL  = 0;       // Reset2 b  b6 f( d* Z( y: O, ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ m! n! W2 V) s! M+ r) l% Y    mcasp->regs->XGBLCTL = 0;       // Reset TX+ S8 N/ W, K) _2 Q: n: ?/ u/ Z
    mcasp->regs->PWRDEMU = 1;       // Free-running9 @) M% D" V- I2 `# j, C# l6 U# R
   // configure McASP0 receive registers5 ^0 X; ~9 M3 @* f! f# o: t! T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 i( Q( m& ~  A- d$ K4 e! b5 f. E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, i6 G* J7 y) w. e' Y3 s' B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 K4 F' _7 j3 }' ?! ?! S% {& \- {, e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), R. i6 R& ~3 ^, ]$ B4 i
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# g/ {' i' }: R% d1 V+ ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 V" n* N$ W7 m7 f9 n2 L. w
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 x1 L& H: L: E. s4 n    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- b4 i5 b; }  ]; M9 I6 f, Y+ a% o9 d- Y% _; }4 [% h9 K
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. A8 S* u* y, M6 c2 T! ]9 t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- p4 X4 B$ {: x& ]9 o
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 W1 H) Z3 a* f7 v    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' W6 |3 ?, k, _+ i& c9 a6 B& {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 N8 I/ N: o% _
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" N* V; f" K5 T3 e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# }9 M% p# w2 ^! L9 i' A3 p6 k    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( v' c8 F) \% ?% Z
% u& |& R0 B+ q* Z9 c
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 `! ]4 _& N- B) e# T7 u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( I2 K' g, j+ \$ f! t( M& B    mcasp->regs->PFUNC      = 0;          // All MCASPs# l7 S0 P6 n1 v. n8 g3 _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. m" j$ r0 H4 r& ^
& P5 j8 U8 q3 w; ~% C    mcasp->regs->DITCTL     = 0x00000000; // Not used% S1 \4 O8 _1 W: Q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# E0 v- R; S3 }: N    mcasp->regs->AMUTE      = 0x00000000; // Not used0 y5 b) k  x! C5 }
, z' Y' W5 X- R& c3 a6 k) E8 ?
/* Starting sections of the McASP*/
; u. X; I' ?9 Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. V0 V9 Q7 Z& a% o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 {! s/ [& n" W9 H    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. _+ }5 @  _4 W# |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 {2 c9 V6 H" a3 L

4 A8 T3 [5 f! q( V/ X0 |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: f$ q3 e3 u% p) s8 e) e* N- E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 @9 O" X+ p- M  E    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# J4 Q& \5 y" R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* B% j8 l/ {1 f, ^+ H. j  {. q
( [2 R$ {; N3 q# ^; m6 R
    mcasp->regs->XSTAT = 0x0000ffff; 6 |( X: u; J0 E  X* a0 O
    mcasp->regs->RSTAT = 0x0000ffff;
3 C* _, M" g' a- k" c1 x  Q: X7 M7 N7 _2 R* s) T5 n
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# E; \) Z) {; e9 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) @2 B# l) Y& F! P2 h7 ^1 C    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & c( i% K3 J3 }0 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; [$ z! Q: Y" }9 C1 i: s2 R) k; e3 i+ Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */, `* l+ ~& K+ J7 }
    mcasp->regs->XBUF5 = 0;; m& }" I6 N+ z- B  d8 y3 }/ l
    mcasp->regs->RBUF0 = 0;3 V# F) q& r6 J+ U8 l

+ \2 q: y6 [" i$ Q- z" ^, c    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 L3 F5 o6 v0 B2 ?9 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- z4 n' m4 F0 {3 ]. J: @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! o- Y* ?( a; ?- `, v) A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 B* t" r2 _+ R* N" ^

' d) L3 P- B  d4 L+ Z( S1 @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 k* a- _4 C" _+ E% e- }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! L& G  S, E1 j    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  ^$ U6 x5 K8 n1 n. {- Q# {4 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; w/ A( R0 p5 D8 H) m6 B4 g4 W
    CSR = 0x0000;3 g5 l6 V. ~( _4 n9 _4 S
    INTC_INTMUX1 = 0x3d;$ _2 @, b" n2 ~; v9 C0 ?4 A* M6 v
    ISTP = (unsigned int)vectors;
) ]# w& E$ V$ ^9 K, @    ICR = 0xFFF0;  : \9 ~, j- G7 O! b4 x) q# \
    IER |= 0x12;  3 T$ ^; o0 y. Q" G: h
    CSR |= 0x01;  , s" j/ ?6 s" x7 G
, A, |! J/ ]  V  O% j

6 Y, P- r* L/ b3 W, c+ w% [/ c9 a3 M2 d0 D3 _
还有就是两个输入输出函数:7 J/ z9 ~8 B. b" R
void output_sample(Int32 out_data)9 [9 b  ]' l6 e7 v+ T
{! \) {: R- F. I' U# o3 C
  AIC31_data.uint = out_data;  
( O7 E  v4 H% t- e& }0 c) I  f  MCASP1_XBUF5_32BIT = AIC31_data.uint;. E6 l. \1 T7 Y$ [
}1 C9 ^/ Z( G# w$ w" B

' I% k' ~- l: p. n" u; o, G" sInt32 input_sample(void)- |! m$ Y5 A* p" l6 W6 U' i; P, |
{  
: q% q/ E1 W# C+ ~  AIC31_data.uint = MCASP1_RBUF0_32BIT;) A9 u  a9 e3 v
  return (AIC31_data.uint);# _2 r- p8 }* Z
}. w+ ]- [& k; Z
; u1 m4 E- N6 s( @! z
分享到:  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-23 04:45 , Processed in 0.048525 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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