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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; F5 W' j9 Y" Z. W, _- x; {# F
main文件:
4 z4 V( S% G! N7 ]$ Iinterrupt void interrupt4(void)  ' n7 w' B# i# }+ M5 ~
{' w" Z; E6 m! K3 |% F
  Uint32 sample;
# F" K, e/ Y! V, _/ ?4 o; q  }- j5 F; Y, a3 O* v
  sample = input_sample(); // read L + R samples from ADC
. H, T; f2 o3 e8 [  output_sample(sample);   // write L + R samples to DAC
6 m+ N6 i* {, C7 y  return;; L* T0 _9 T- M1 O4 _
}
& b, v- K- \$ F+ L# a+ k7 k( J; f; u4 Z6 A( ]
int main( void ); j* ~/ w% I! |6 ~7 {, e3 V% ~
{$ ~& a- ~) Q9 f/ E4 G$ a5 q

% _9 I+ \( o" Z5 y$ q    /* Initialize BSL */
: A: r" G+ l, z- D. e* S( a    EVMC6747_init( );; z5 A2 X$ [" o
        /* Call evmc6747_intr function */- ?0 K& x0 i8 K# z6 C. a+ ~( T
    aic3106_init( );1 z" I* C% c& {9 J
        while(1);" P( h, |+ L% J' ^$ t% C
}) a; A0 ]9 A  q% r9 ~
0 y7 c9 Z1 X5 J
' j% L% {) x! Q/ [7 F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ @# Q6 M4 s7 p& Z/* Initialize MCASP1 */
) V) v' S* u8 d8 N* R    mcasp = &MCASP_MODULE_1;) T% O2 {3 h2 [, ~" k, }1 g
    mcasp->regs->GBLCTL  = 0;       // Reset, {0 O- k8 [/ i* C" e
    mcasp->regs->RGBLCTL = 0;       // Reset RX
) l- z$ ~3 }! {2 {& }9 N    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 w+ r# n5 Q9 E    mcasp->regs->PWRDEMU = 1;       // Free-running1 ]8 w6 h. q3 B8 n# `
   // configure McASP0 receive registers
3 \1 y" G) r' O' T    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; @/ u; J# P  ]0 `  Y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) @/ U/ `$ t6 N2 n2 ]
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! r. k% z7 a% e$ n0 K5 ?/ Y% K) e    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) |; i: Y9 p8 z% J3 v5 p, g/ A$ K
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' _8 E+ E5 K, p7 d1 k) c% `3 [. e
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. l. C- Y- k' P' a$ S' c" b    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  Y) Z8 e7 K6 p& Z    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 c. ^  l+ ~& K2 j9 ^( a* D

0 c3 F* }- Y4 z# \8 X- }2 @    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! C- E5 \. S5 c( V; I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* U/ L8 }4 w  G- f! Y1 C; Z6 E5 a    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) s. n. ]1 Y  ~" h2 d: F5 m& `    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 O( ~, n, C# o" @- U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( m$ v- s2 ^6 ]; u+ Q1 p8 W( C$ k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 E8 l, n' v& f4 w4 Y( S" g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& {0 d5 D- z  I, l
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& D7 X9 e$ D% ]6 D+ q" w* J8 Y1 t, j3 H& _9 g9 S/ h% k
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 F1 G) D5 ]+ a; [, x    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! Z; d+ @+ `- H2 w' t1 o3 K    mcasp->regs->PFUNC      = 0;          // All MCASPs
( V' [- J7 p8 H5 ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 v2 J1 I7 y3 N8 J

; {+ ?, v) {5 o) D5 E$ W$ B$ V    mcasp->regs->DITCTL     = 0x00000000; // Not used
* j9 m6 Y# u. n+ P* P    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 S% y/ L/ Y  y( v& U  u7 R8 _0 ]
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 Q; e% L6 Y- N6 ^9 j7 @7 ]. p4 a  H$ G
9 \" c2 e( V7 ?! m
/* Starting sections of the McASP*/; T3 T) h; E) S* i3 l  O0 j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 o6 I, T: L- T7 i( L. X6 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ q- h- w- m( y' d: r    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " A' h* D/ ?, f( l8 D2 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. H2 o+ T( @% t4 u1 F/ {
/ H; K+ ?* p1 P6 `/ j( e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 a7 a1 k! V# v6 D+ s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 Y4 i1 T4 _/ ]7 i( Y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# k1 g: C$ Y8 k! Y, o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; T) V2 d9 W; l2 l" V, v1 x8 x
5 i8 T( d2 u  l6 c, W( S& R# ^    mcasp->regs->XSTAT = 0x0000ffff; ( l# G! p( O/ H5 w& u
    mcasp->regs->RSTAT = 0x0000ffff;
8 L  p" |# M% u4 H& [/ X5 V0 E: D
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* t6 \# X  s7 o! j& W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: k, j, s* y0 v& y( Y7 S' v2 z0 S- ?' F5 L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 Q! G% ]) G6 ?  C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. k1 b1 I* K2 ]- f/ e* V
, X2 t& E- }! I3 D0 }    /* Write a 0, so that no underrun occurs after releasing the state machine *// i) U# |% m! I# I; R
    mcasp->regs->XBUF5 = 0;
) a! Z/ M1 |9 P# e+ D- ]5 Z    mcasp->regs->RBUF0 = 0;9 `2 ~# S; N2 x7 d
5 ?1 y9 |" x" ?# [" p, J* b- J, z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 `1 N0 x2 ~3 m$ \" i3 s) Y2 j. m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  Y/ W2 h# z, H! g. F# `! V3 s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ l: d; m" P: e6 k! H' k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ F) ^! G6 t+ h; F
  O! S9 G/ d/ l! w5 `+ e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 c# ~4 x3 C" i5 Q0 F' n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 m& q6 V* P: L- o, D# O3 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 l% ?6 D  g; [( R4 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* B; w  b8 e# ^
1 [! K6 M/ ^$ r* t# E7 ^
    CSR = 0x0000;
2 j. ^( j, ~; A0 _$ p    INTC_INTMUX1 = 0x3d;7 I7 B; {, A4 Z" `" q( i  R3 o
    ISTP = (unsigned int)vectors;5 ]$ v  _: n# n) P9 P
    ICR = 0xFFF0;  / l; d6 }0 S. M6 k, {7 e" G( e0 B
    IER |= 0x12;  5 X6 N5 T' w# }
    CSR |= 0x01;  
' o1 O: C6 n/ U# Y; \" d+ ~% V/ q& ?9 M) x! m/ D

0 K5 G7 U9 ]4 c) X/ P  g# ?8 ]" r5 a  y7 K) T
还有就是两个输入输出函数:  K, n% U; f3 `' J- P/ @& m$ N
void output_sample(Int32 out_data)
: s$ `4 M6 j7 d0 ~{4 I9 ^7 v, ^$ `$ U+ D0 v' C' _# F5 F) T* X
  AIC31_data.uint = out_data;  * i; i4 R3 T' v/ Z1 S( B$ v
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 g6 n% b7 a1 f" ~& ?9 t; e8 C}
  Q6 J- v3 t  r7 s: L" O
# W0 w* E' \  {) |9 w+ HInt32 input_sample(void)
5 `# ~$ `5 X% i0 G{  
' q7 h* C; }) Q2 l  AIC31_data.uint = MCASP1_RBUF0_32BIT;, Z4 a3 X( b* q! v( |3 I4 A7 F9 d
  return (AIC31_data.uint);- X3 r0 Q: `+ |4 \, c
}8 Y# f+ c5 h  @7 p2 I

% B1 b- b0 J: |$ j/ v# V. N
分享到:  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-4 03:38 , Processed in 0.039993 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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