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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% u' N5 [( [; ^- x0 p+ y
main文件:
- F" g9 r; v+ a1 [5 iinterrupt void interrupt4(void)  
1 S$ F3 j& u, e( ^{
5 I' t! m. S. Z# y& \0 Z  Uint32 sample;
5 P% Q5 e" g) s9 J
/ R* A+ p/ w  H: w" B( H  sample = input_sample(); // read L + R samples from ADC6 I  x; u: H( ^, ^2 ^; {
  output_sample(sample);   // write L + R samples to DAC
# J- Y) ]7 R* E# _/ L( T  return;
! X0 J- r/ r7 S- ~}/ K9 K& C, l' ~8 b9 k
0 ~7 f1 `. {; i, G1 f9 `2 N- u
int main( void )
7 ?$ }* ?; ?: y% D8 Y$ O" f! U{
/ ~' d$ K1 U0 m5 Q0 U
3 G6 l! p  Q+ j" J1 D    /* Initialize BSL */
0 ~* N+ e8 F' E4 ^7 V" n    EVMC6747_init( );- C4 ^7 g! ^  z
        /* Call evmc6747_intr function */$ q1 E* M* k* k4 \; ?
    aic3106_init( );
3 T) M; Q9 q( M' _7 O        while(1);5 h  G: L# y: A+ N3 j$ f
}8 x4 t8 a! l7 I  ]4 T
2 X! p5 {2 ^# H1 Q/ j5 W9 ?

6 T  \& w6 P( ?/ l  Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; l/ [9 U: ?" c( a; b9 T
/* Initialize MCASP1 */
4 n: h/ b5 R7 y' t4 j5 L# u    mcasp = &MCASP_MODULE_1;
* H0 ]; ~, p/ o' `3 D    mcasp->regs->GBLCTL  = 0;       // Reset1 r  z. L9 o  E; `# n7 c
    mcasp->regs->RGBLCTL = 0;       // Reset RX. A! [, G$ {5 E* U- `
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 C8 V/ p) s8 a, C% ?
    mcasp->regs->PWRDEMU = 1;       // Free-running5 ?# g5 R3 d  S) h$ c% _# q# \
   // configure McASP0 receive registers5 u% Y) e% b" t6 z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* q/ ?3 C% e0 X9 _    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ P. E& C$ W# n) L3 O% w! X4 n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 u% c: u# F, C% M6 C* ^
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ c, X7 _% ^: V, {  @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 k; ^" E6 H4 J4 X/ T$ _
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  h3 _: N2 H3 V, ^! b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, S! k7 p  X6 _2 D5 b: Z/ \    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 {0 m0 @3 d- o" W0 d" E1 Z% l/ V- @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 o6 c# U( ?3 p7 n/ `" E
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% a! @( _/ p) J9 v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, _6 Q2 }$ N, W9 z6 o1 e
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: m! ^; `+ ?+ ?: B) Y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 V, _' Q# ~0 x+ X, t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ t- l; T5 W  y1 H# z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# n) G& X- J% g3 j3 f, g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  v1 c- y- [: h
) Z5 s! s4 w1 C" p9 E2 P  z" R. C    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 q, z% w; K' ?
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' Z" M! D1 `% ^+ [0 Z    mcasp->regs->PFUNC      = 0;          // All MCASPs
, q7 B: t* ^1 u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ ~% D) _, K% V1 Y' q  d9 s1 z4 _( e& N( g6 }5 ~
    mcasp->regs->DITCTL     = 0x00000000; // Not used- C6 x& Y5 z0 m: W
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' P  z; i6 z6 [' m, W& r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 l5 q) w  ~8 e& A% S& V- G* p. m) q8 q7 H* ~8 F
/* Starting sections of the McASP*/1 l( ^/ t! x+ t( }0 D& G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) ~7 _# |, A) y7 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ A9 r0 U0 d( j; N/ V    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / C* S' a& ?$ E3 s  g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 u  d6 o* `$ ~7 Y
  H2 t5 q  Z) O5 i/ P5 S
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 ?  @8 K$ [4 L. B: a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' [) U2 z& ?5 _8 X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: H: ^( O7 P7 I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ C2 o* L* M+ ?
. u6 l# w' K* l$ z# ~    mcasp->regs->XSTAT = 0x0000ffff;
1 y7 y5 v  t8 D    mcasp->regs->RSTAT = 0x0000ffff;
, d8 W  ?7 ~0 J+ K& m
; g2 K) {% C! ^+ c' ?    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  n4 T; _& I8 S2 w8 q0 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ c+ z! i: Y, k2 t9 o2 E* N    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 i, n. C" V- H! s6 u) _( x# _9 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 W* w2 r/ t+ \, U8 P

, Q7 p0 K  q) U: h4 s# I% G    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 K' z. `! c! `5 S9 N+ o" ~! j2 p    mcasp->regs->XBUF5 = 0;/ @9 C0 }( c& T' n
    mcasp->regs->RBUF0 = 0;6 l" h) f! Q" a/ H4 V- x. J

9 j. Z, E* r7 |2 l! h' I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. D6 g5 D/ s5 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 \' z6 G0 |0 ], [6 }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' U. Q8 M: `) e5 F; z9 z! u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& \( `6 v) n# \" F5 V1 n, A! O
" \6 I# S! Q0 N# I" F. R; q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( h; Q: T4 d/ Z9 v7 ?2 H( P3 N) f. q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# m4 I- F- \5 x2 A    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % V, ~: N4 [' e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: T) k  X7 g+ i  k+ G+ k4 T$ B2 e
" ]& t$ \3 M" f9 r+ \: q    CSR = 0x0000;( R; ]  B# i! T6 j$ j# S+ n1 B3 I
    INTC_INTMUX1 = 0x3d;
. K# Z0 {) u8 z- m+ L' n    ISTP = (unsigned int)vectors;$ `  N6 w4 B/ \. |  }; o3 r& o) [
    ICR = 0xFFF0;  
6 S& z* Q) O% a9 S+ ?8 a$ c1 Y) @    IER |= 0x12;  
3 t8 C  x" q7 i4 x    CSR |= 0x01;  ) ]% w( K% q0 U# f7 j3 H2 P: E

2 \# r/ S/ w) T' _! A8 r9 `& f8 P6 N, Y! h- L; C$ e2 K

+ h- q$ L8 x0 L) Q还有就是两个输入输出函数:
5 t3 U2 Z& B0 A% _# R) o( s. H( E0 Xvoid output_sample(Int32 out_data)
2 v' o/ c9 n. w3 }{5 ]$ h  n% ^+ j
  AIC31_data.uint = out_data;  7 `; |' b8 E. \- m/ f
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 R- f4 K* v2 I) i0 I' j; d}
$ y/ i. Z; g6 K8 Y" s9 J" z) Z% @5 c
Int32 input_sample(void)5 u6 Y' O) P; J3 [/ T. t! S
{  
7 O2 m% G" |" J' k6 ~  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 Q1 k4 c1 l5 q! p4 M6 a  x
  return (AIC31_data.uint);# \6 K, b5 }+ z4 p8 n6 f) c8 O' ^
}
" r- t0 x$ X& I. l- m# U+ U2 D" }5 l+ P4 w; c: _6 b5 v+ u3 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-2-18 15:31 , Processed in 0.046891 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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