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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& H+ {6 y" l7 [0 M; H+ z+ U! Tmain文件:6 ^6 ^& n6 R' c) y" }: p. J
interrupt void interrupt4(void)  
# g7 E8 {8 U' z3 L! X{
9 J$ K, w) J# k! D" b  Uint32 sample;
; G3 k) m+ ^/ L  ^$ V4 M
) |7 q( E- p2 n& m  sample = input_sample(); // read L + R samples from ADC
  p7 _  p+ C3 A' k, c8 ^  output_sample(sample);   // write L + R samples to DAC : A* v# ~( y' a& Y( M4 g
  return;
& I/ M" ?0 J' r/ V* X}
1 M* b! T. f$ W( I" l
+ U) A: o' G2 T# yint main( void )
2 X. k( f/ q' c{
1 ]: \2 u8 }7 J# u0 [, U
. J& Q  x3 D9 C  a; C    /* Initialize BSL */# }% Z. b0 _/ M# O. W
    EVMC6747_init( );$ j! @+ u& H/ T4 F
        /* Call evmc6747_intr function */% e0 y3 x% g) z! n" Z  `, x
    aic3106_init( );
8 e; F* S6 y* n9 E        while(1);
4 _) t3 N5 B% H6 S: ]7 S# t/ L! M}
! x- X- N( P4 j9 L( v4 Q6 _2 ]3 _  a  A" G; ~7 g6 G* s% s% n  l/ k; f

4 z4 `% m8 v- n9 N( d) kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ [9 V; H7 ]2 F" ]/* Initialize MCASP1 */# o7 J# P2 y( U, z# i
    mcasp = &MCASP_MODULE_1;
9 J9 j9 r3 b$ L, y6 b" ]) b6 [    mcasp->regs->GBLCTL  = 0;       // Reset) \- d  D* @0 B5 ?: [3 D( G3 b
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 S4 H, @  Q, v8 x7 ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 l+ |; a4 J( v6 I
    mcasp->regs->PWRDEMU = 1;       // Free-running, w- D$ v% a1 e1 L) ^
   // configure McASP0 receive registers. L4 M- D8 J6 [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  N% b0 n( W9 {
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( g" R4 c. m. {+ I, n7 Q3 S# ?    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! \3 U) E! O: L8 f0 J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% u  B  ?" \* A! [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ ^& M3 a" i+ O" ~7 P4 Q6 M
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 O4 U: b9 a: T8 T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' h! g/ q5 E) V$ [
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ g6 v0 W0 v& ?5 {1 N3 D4 z6 i+ N8 _
# ~0 W: n+ u/ v& v0 L' C    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. A- v+ d# Q( W$ o; v
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( q3 R3 {# T: \& i- ]4 s" t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# M( \: j6 V( w6 n( q: W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 M4 i% k9 k: B; S9 B, d+ R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& X) G  P$ k7 b5 h1 f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, S7 Y% _+ E* }/ r0 K( \+ R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* N5 o# X. j$ w: o& y- F+ L/ k0 D    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; h2 K6 C% N. ^- V  i( K* h7 e: Q2 l! c& e$ z0 i3 T3 y! r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 u( t1 [4 x; W
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! ?" u% u) ^$ P3 |6 |) E* P    mcasp->regs->PFUNC      = 0;          // All MCASPs
) j- c0 y7 h9 x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. `0 t1 [. C. D% ^
( Y& L4 O, G* ]    mcasp->regs->DITCTL     = 0x00000000; // Not used& ?# k5 m+ w. W$ x; A6 n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 `1 y5 j) ~+ i: N! D4 z    mcasp->regs->AMUTE      = 0x00000000; // Not used# K9 S8 w1 \! y' W, e# L+ J# U

) }+ J7 O5 R6 A3 n5 N' D- `/* Starting sections of the McASP*/
8 p% f% f# l3 C! d2 {  r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 S( ^5 _! A6 v/ ^  ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- X( ?! n7 i6 R9 y* W# h) P    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; f; w) ]/ e2 a+ U* T+ ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) h3 n# k- _3 s3 p" D. b
7 r) j  q# V$ \5 j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 z. x1 z0 K& }$ v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 I; P3 q! S+ Q6 n  k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 j* W" B" F' O# w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! T: J& Z3 X3 a% T9 x% M
1 l( o* o) N( j& F
    mcasp->regs->XSTAT = 0x0000ffff;
7 B! L% m) H6 g$ y2 @    mcasp->regs->RSTAT = 0x0000ffff; # s5 U# h( }# p3 q0 m: ]) q0 v
" X5 E' P/ e8 E6 I  k+ \! F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- d" g) n1 s( F' ~4 ~+ @* @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' T* l- s- c& z( F8 |" L6 k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* x8 N( ~8 t3 e" j' y  v' U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# J% K: F, d& i( Q1 u

. F6 G* A2 g! o- y8 G    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 r/ [& `# i$ v0 G8 i    mcasp->regs->XBUF5 = 0;
  m) s& c* O1 V# j  J; B    mcasp->regs->RBUF0 = 0;8 s" a7 o; c0 J8 |8 O" H

; \0 @" a! N. C6 {1 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * S4 C- N1 A! @! I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- S1 h; M/ c- }3 X3 s) x' H5 p# B    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' r  x1 C" Q0 i$ O! J, W7 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! B0 u4 P. A; R" j$ E2 z1 I, }. y( s' x. ^# }
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 G, Y% t) z# X8 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 K. v: x: O% g+ S) Y; j: `  \
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, _( `1 z# [; W0 ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ y4 S, w: I2 p: V% N5 ~% ^  A
; p: d; \' Q: [0 x. o: q% Y$ W    CSR = 0x0000;
* b3 e0 I0 O3 D' ^, R    INTC_INTMUX1 = 0x3d;
5 d2 w- D, s7 S1 w; @    ISTP = (unsigned int)vectors;# I4 \+ Z3 n5 F9 {5 E8 L* [
    ICR = 0xFFF0;    J, \/ ?: H* y
    IER |= 0x12;  
/ S- @% E8 n: x! F    CSR |= 0x01;  
1 M* C* q/ l4 B9 J4 G1 G# l* B) c. g. L! L! y1 S$ w; }
- E/ }% s; Y: u  X0 j+ b( K

: s* K" g) f4 ]. e: J0 q还有就是两个输入输出函数:! i  ~0 ?; _3 W+ A8 b2 S+ U2 I
void output_sample(Int32 out_data)' r$ n9 f7 }; l4 N. V, a  J
{1 \! s  o: r/ m4 `
  AIC31_data.uint = out_data;  
3 O( [& B: ^) s. B- J/ I+ f  MCASP1_XBUF5_32BIT = AIC31_data.uint;! D4 q+ k, `3 h+ h. x; ~
}
) S, M3 N5 ~( J- a- x+ m. L0 H8 r" _( W  S0 m+ ], Q& D
Int32 input_sample(void)& m: `  c0 D4 |0 E& N7 E
{  0 F. g6 i% w  I$ e
  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ W& n( K, g# a+ d, s
  return (AIC31_data.uint);
- v' M% C, @% y8 ^}
" t, Y: i/ l1 ^1 t; M; O
5 Q6 t. a/ G' a7 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, 2025-11-22 00:17 , Processed in 0.038479 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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