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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 p7 Q- q! g3 h  B, w/ R
main文件:
) T: c% H: F; i) n4 c+ xinterrupt void interrupt4(void)  1 P: [! w* M5 e/ s
{; S! V. M' H2 O0 n+ B. ^
  Uint32 sample;
) j! n+ M; p  d6 {" l: R
! S) m# d7 m' Z% E  sample = input_sample(); // read L + R samples from ADC
- N# @8 H. P' R, M& L1 p  output_sample(sample);   // write L + R samples to DAC 7 M, l0 h3 f3 G4 [' ?6 ?1 B
  return;$ w- H& z) S1 X; e4 c% S+ w
}
( {5 a) `' J4 G+ E5 a& p. M$ z
/ j) i$ E4 o( P0 L+ Lint main( void )
+ y. ?. ^& B8 }7 E2 k& y2 p+ S- J{, T' O7 A' j6 y# m% N$ \
" H5 X* C+ z) j' S7 E4 u
    /* Initialize BSL */
/ u0 f9 y; u% v' ^6 C% N! q    EVMC6747_init( );
; d* Q1 d: e* ~! i7 @1 ~/ p9 Z, {2 v        /* Call evmc6747_intr function */2 S- Y; M. i% I
    aic3106_init( );
; g5 ~$ W/ t! j: h+ W        while(1);& j7 y* _% z5 K) y
}0 }) e: B+ V# F
# I. h, ]* ]3 d8 D6 E

- \! w3 y6 `' Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 \/ V" H7 `% l5 o+ F% _/* Initialize MCASP1 */
3 [' w; e# A8 I& K7 \; Q    mcasp = &MCASP_MODULE_1;
4 Z" d8 M4 a+ m% \! I# J) W    mcasp->regs->GBLCTL  = 0;       // Reset) \  V5 t; A: Y. j6 l
    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 u# @# r. l+ b, H    mcasp->regs->XGBLCTL = 0;       // Reset TX7 p8 N; D. S* q: n
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 R& R0 T! k7 t0 z5 A   // configure McASP0 receive registers
7 o" P1 ?2 r8 K" }5 `4 l( S% j# y. _    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 O3 `9 v! e* H. `' c8 |    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! Y8 C1 L* Z5 j! X" I: S0 F! X! p' s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# u6 j. F; P8 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 x' ]  `* k6 K) N6 X7 M
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 O5 @3 t5 p8 g3 L5 p    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& W4 ]6 }6 @8 R9 }0 ?- r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" J; f  f- T, @% X5 B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 p; a& }3 r0 }/ K
4 E/ R, H: O. z1 e- x    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 U+ V4 }7 E' [; q2 k* }2 f; \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" l/ K8 ]8 S5 w  v% O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) Q  E, z, c/ t- }& R( e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ K6 j3 U6 I$ N$ x$ \- t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 E0 M; v% _( I* L$ L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ ]6 d. O* e, |  J+ c
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' R! E: b' x  ^9 }( x* j: U    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- j  Y/ t& h8 m! S- H
, E+ ]0 ^) }4 K4 ?" Z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ Z& H; [& j  i  }5 M% }
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 M$ N! G2 u4 _
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 K) F: {6 f1 w% I. w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ Z, g0 u( {* }8 r( V* @& N" d* j# M' d# o% m' w9 R
    mcasp->regs->DITCTL     = 0x00000000; // Not used; F: }$ @4 h" O2 `9 r6 l( Z3 s+ w
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) A* h% R% x9 x" n* B    mcasp->regs->AMUTE      = 0x00000000; // Not used' [# b$ h% b9 |8 D- \
/ |; ]: ?1 t+ T0 D- G
/* Starting sections of the McASP*/
3 c  A. c0 e" o5 H: X    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 \2 e$ N0 b7 M, b0 v3 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ {9 W, D5 u& i) Z! o' M/ R! ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , r# v7 V2 L# V: A- y3 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 u: E+ V% y+ B& s1 T0 l+ P
0 O- z; w) _  b) s" h" }- x1 v7 a    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 s$ g# L0 ~! [+ o7 t, b+ r% K+ b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) J) f1 d: X, ^4 Z  `+ x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   K. I- i  M- m  j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 s* G9 J5 {% z) c- D, c# C. ]* ^& `7 J% ?! l- E; t2 ~
    mcasp->regs->XSTAT = 0x0000ffff; 3 E" r% s* V9 D" }, A
    mcasp->regs->RSTAT = 0x0000ffff; $ z4 a1 b. ^& l$ o8 o3 `

2 I7 o: O4 N  V' s    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- E( y5 Q, S$ B! D. j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; f6 w( f2 Z4 `! \
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" I. p( Q' }' k7 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; S8 ~) P7 o2 c7 j2 @" |: ~( s1 H, v$ M4 v) l' P
    /* Write a 0, so that no underrun occurs after releasing the state machine */! ~1 V! P8 s& [$ @
    mcasp->regs->XBUF5 = 0;) z2 A, ^" A  J! r4 G
    mcasp->regs->RBUF0 = 0;
9 x# V# Y/ C# }0 `- B: z4 ]/ G5 g, |9 a8 z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 Y; u/ R$ {1 e, e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( C  l( j- |( u( H/ B% _* J0 I    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: d# H* H* [6 R2 R0 o/ y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. E! v/ v0 |4 Q" m4 w0 a2 i) f
, u# O, i8 x. h9 {+ [* H9 p* Z# p) T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   a  C% p' Q/ @! q! t+ t8 o: h  P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% \! V2 }9 w( K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 l" q& G, \5 |7 ^: T" ~1 S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. a2 m- Z* y5 W. v2 Y( V. [
4 b9 A9 B8 @" W' @7 j! m
    CSR = 0x0000;
( \4 J$ |, Q6 ?* g% p( `    INTC_INTMUX1 = 0x3d;& @. W/ R3 }# L: [7 H# f9 d  A
    ISTP = (unsigned int)vectors;
" k! X, \7 l5 i8 ^$ e3 J    ICR = 0xFFF0;  # B  Q4 l$ l. y7 i, @
    IER |= 0x12;  
! O  g2 i. D) Z# ^( _$ S6 F1 M3 W0 v% L    CSR |= 0x01;  0 @! U2 T7 y& l! V* H; p
" p! q" c1 L) I. f$ h3 F' @
. ?, f! d* v' ^: }, c) s# c; O  I6 n) C
  ?' w2 b/ Z: U! V0 z( @9 E
还有就是两个输入输出函数:. y3 j! N) s! r% q$ T" x* L
void output_sample(Int32 out_data)
/ S7 G' T6 p- c( y- ?{
$ B# ~7 s2 {; t) N5 {* e# h  AIC31_data.uint = out_data;  % d8 U# z, p$ _; f
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( O1 I4 M/ t, q2 X4 x( r9 N}5 ^; ?* J; A6 x8 I% u' X

6 y0 v8 |, N+ GInt32 input_sample(void)0 m8 y7 ^$ T% v6 J2 l8 t- g
{  3 ?4 u9 ?6 z: S
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- J- G& Y! k( Z! Y  return (AIC31_data.uint);& |/ X- g2 G9 Q$ U$ c% f' O
}
/ F5 j$ f+ M4 S% A! b; O) C+ A4 A- ]2 A. Z1 h. Y* ?
分享到:  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-24 15:58 , Processed in 0.041302 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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