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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! O1 d* W" l* ^
main文件:
) H2 v7 P! N, T1 v3 {# k( ]( o( Ainterrupt void interrupt4(void)  2 ]: _9 J+ I$ i5 D' U+ I7 P# d  a% d6 X
{
. Y" y  b; ~. H6 H+ ]+ _- x  Uint32 sample;
4 }- l6 P1 n- g; O0 T
% ~6 `$ |9 E* ]: D# l6 ], C. v  sample = input_sample(); // read L + R samples from ADC, S8 N3 N9 M4 N1 L) J8 v  p. [
  output_sample(sample);   // write L + R samples to DAC / ~) |- r9 p7 ~" {
  return;
1 n( s. I2 w, F, M" w}
8 u7 B* X3 Z  v* W" e" U+ @8 O( e: R$ I
int main( void )* ?1 E) n! w5 v9 J: ^* ~3 X& k
{
0 C: Q# e/ d+ M2 y+ M+ K# J6 e# V- t& q/ h" b5 Q/ g5 ]" O5 v
    /* Initialize BSL */2 x) ~3 g) m$ g/ b
    EVMC6747_init( );
0 }5 y" ?7 n: o  T: H) @        /* Call evmc6747_intr function */
3 C6 U8 O5 G" c1 F8 D  f: d+ A" |/ a    aic3106_init( );
% S" p' U! _2 ~" l: L6 c% `        while(1);
, l* ]+ |  U8 r. v}
/ X- v7 Q* ~) a0 \1 `+ j& s& `8 b
, y: P) ~& r" d' P( ~6 O4 r% Z6 s2 f/ ~; H; a  C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 ^( X) W5 W' g' f' G- D8 `
/* Initialize MCASP1 */( V& o* i6 ]6 ^& ^; ^
    mcasp = &MCASP_MODULE_1;
4 r$ c  d( a+ u: |    mcasp->regs->GBLCTL  = 0;       // Reset
* \6 ~- |" ?7 h5 p9 G    mcasp->regs->RGBLCTL = 0;       // Reset RX- l, i5 C; m" T4 d9 e' l4 I& E6 \
    mcasp->regs->XGBLCTL = 0;       // Reset TX
) v* Z, g, {: }    mcasp->regs->PWRDEMU = 1;       // Free-running% r! y) |5 l7 O, M
   // configure McASP0 receive registers! }3 E4 @: L" o: }, G/ p; i
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 c/ u5 T5 v: t7 |) \* T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- B7 d9 n% k+ B5 ^) E
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: B  N  `/ x0 `0 d" [    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& I0 N, P+ j  c5 K6 _" e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ t8 b0 @" `1 {/ E' B/ S2 A4 f    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 k: M1 E8 Q0 B& n7 X/ H( T- F    mcasp->regs->RINTCTL    = 0x00000000; // Not used# a. N& z- _+ R5 F1 H9 V
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! G% j7 D% h% E6 A2 Q+ z
. T9 X9 G: W, x$ l4 X6 ]$ y" @    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 b9 {* C/ J- o0 B2 D: u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# }) j9 n& {) ]7 K$ s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' P# W$ K# Y0 w$ N( p" X5 K& k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ W  e2 n+ B6 D3 u) p2 A/ A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 o& J+ O$ g* k$ p* D: _9 U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. H' k. v) N+ i2 r1 U( ?, T4 m* h/ b) \& R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* L: E8 O* F0 x/ h, E1 f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 R; X( H# ?- r$ w" n
! v) z  Y* X; C0 r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  \  ^! V' w1 D' _% X! Z9 K7 f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- s% N5 v8 F  q1 U- |; }. G5 f    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ ?$ ]: ^3 a1 Y- \    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. `: ^/ Q0 d7 U% |6 U* g
& j$ ], w2 ?; k- t  V
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ @3 p) i/ s& ]  w# A1 ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! f& |! e7 ~6 F$ k$ D    mcasp->regs->AMUTE      = 0x00000000; // Not used/ m/ C/ j" C. K& v0 ~
8 M$ b/ u7 {& B; S8 [$ X9 s
/* Starting sections of the McASP*/6 [7 o: c  v: u1 J4 H9 W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # T) Y! p+ f6 N# G3 ]6 |$ F' g- A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / x" Q  X$ w" I+ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
8 }% U$ K9 i, V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* C& n) n5 z) z

# s4 O& t+ T& \0 D( U, v# o# I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 X& C% D: V7 E( l8 m) d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ s( N0 Z: y8 `6 w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 [6 E. @5 r; V0 M/ u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ O; ?$ N# V6 \

  N3 c- R) U7 [" }$ o7 C' `6 O. H# T    mcasp->regs->XSTAT = 0x0000ffff; $ N% j8 z, m0 h! n: C: {) n' B
    mcasp->regs->RSTAT = 0x0000ffff;
6 ~; E, E) y1 B. s" U; V4 b: ?) L5 T/ {& C
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ `( C4 I+ H9 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 v4 X$ ~+ l5 z6 H, K
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! x0 B. k7 U3 \4 u; f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' I4 H0 x" a2 b
  s, z4 F; `4 F' q& s* V/ R; W# _, N
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* |: y1 e1 ]1 [$ Q( p6 r+ e    mcasp->regs->XBUF5 = 0;
8 W8 p1 M) w, B6 I4 ^/ n    mcasp->regs->RBUF0 = 0;
7 p' X. G' W7 R9 m
  R! b5 b" }6 D6 D+ J: r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ l. B  t0 l9 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! t, S4 G( X+ d* G% O* ?    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - j+ G4 }8 N- z- Q. k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ F4 O* Q: n$ H, K. C2 l) G* Q4 ~( P, F/ S4 N3 B1 l
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ Q2 h" `% Q8 l* m) T4 F' I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- U5 D/ B) v5 \7 P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) F: f  Z8 J7 R; m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ s  p4 e+ C3 G0 `
( r$ u7 M4 `) H# K9 X2 O
    CSR = 0x0000;
6 Y5 G% g, j) c8 ~: `9 o% S    INTC_INTMUX1 = 0x3d;
2 W4 y: X$ Q( G, J1 T/ C* C( z    ISTP = (unsigned int)vectors;  \+ ~4 T/ @+ O, g
    ICR = 0xFFF0;  
5 g2 o( [+ C; ]    IER |= 0x12;  
& @) e! D9 w9 Q    CSR |= 0x01;  
( |& F: O  |6 N% a9 V- C' T9 ]3 t* F/ ~  [, y

+ O8 f$ w7 M4 q0 _  \0 B6 t7 K0 m5 |
还有就是两个输入输出函数:! D/ @$ q2 n- j
void output_sample(Int32 out_data)2 o% ^2 F. b/ Y. e
{2 z* d4 h( q$ ]0 T' @4 _  A
  AIC31_data.uint = out_data;  
. X, h2 [" S! q* ~5 [* v  MCASP1_XBUF5_32BIT = AIC31_data.uint;& J/ q. [" p3 Y5 p. o; z
}
. \! e6 U/ `4 s" k# A5 C1 r- \7 b' `* v# P2 ~4 ^6 e; K# T' |
Int32 input_sample(void)
- Z+ @4 n6 \6 E7 h* t0 e{  
% ^( ^1 J$ ~0 u% n  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 k" y3 q$ T& C  _0 r- q* E+ J; h* v
  return (AIC31_data.uint);1 I5 a- L7 m$ ^5 d
}3 J0 D4 G. P; o% o8 ^  q. ]

$ t3 i% b4 Q' a6 z* h6 f+ \! w
分享到:  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-23 01:57 , Processed in 0.039704 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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