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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 f6 S7 h- F. o+ U/ n2 F
main文件:# E$ U+ B- S/ V1 |' ?: C" S
interrupt void interrupt4(void)  
7 H" D$ Z! o& t& N{- {& i( U) g+ j8 v9 \1 @  ?
  Uint32 sample;
0 V( M2 k1 Q: h7 g! J. A3 x
; r, X, y+ T: ~$ \& n  sample = input_sample(); // read L + R samples from ADC- f5 o3 v( `3 N
  output_sample(sample);   // write L + R samples to DAC 9 Z' G! f  S4 T
  return;8 K. a, D) @# `2 H" ?# [6 X
}
  D5 E9 C7 f0 Z/ ^6 i) ^! l2 ?
9 E5 t. N) M( ?* P+ rint main( void )6 T' v" V( o( c. h3 D5 G
{7 `. P- V& j4 V  r1 u
; I8 J7 C4 @8 T& H8 H1 K
    /* Initialize BSL */
/ y: M+ H, J4 }    EVMC6747_init( );  K9 e2 }4 [# n3 [7 S% [
        /* Call evmc6747_intr function */
5 a, J9 Q- a: U9 S    aic3106_init( );
& L  O) \: k% o3 A9 F' G        while(1);5 B/ V4 j* t! @/ k; {2 ^# R5 \! F1 U
}
! X7 ^  L8 `0 Y. w+ v9 E: y, t
6 F/ c7 j' ?4 Z
& b5 c; G. P" u: Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 e( q) U% ^) s" E& t% G/* Initialize MCASP1 */
% A+ a. |! p# B* _( _* B3 \6 j    mcasp = &MCASP_MODULE_1;
; _5 n1 n1 p0 a$ K; C! D7 |    mcasp->regs->GBLCTL  = 0;       // Reset
) x3 L0 U6 ~6 m. `    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 A* d  h! C. ]1 V    mcasp->regs->XGBLCTL = 0;       // Reset TX0 C# z8 M* ^% b* i# Q' c) w
    mcasp->regs->PWRDEMU = 1;       // Free-running
9 u( B0 f: |' I; A! a   // configure McASP0 receive registers2 ~# s, H& k* x/ s5 w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  t" y9 k( ~$ [& D% r' J8 _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 ^& m$ P: |; y# ]3 @0 A    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( A7 A% ~* R5 X' M$ ?
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 J' F. B3 N4 N) z' c( |
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* e9 Q3 \' R+ v! Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ q, f/ D# c/ q3 j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 [3 y2 X3 }- }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; `1 Q2 C' i3 n% m& x
8 W9 H' j1 K" V( N. U7 M& P$ _9 q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- c5 x: I" Y& F  i2 w# ?. U
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* }, |: h2 h2 Y% K! y+ W0 M
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  L/ F& {: ^, C. {
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# X  z3 g& y6 ]5 X. Z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  M5 }. P: ^- l1 `+ s! o( N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# `; g* ^/ `: s. W, y1 Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 p7 E+ @4 w1 j2 \: Z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' ^: E# ]: E" t- p$ d/ x8 K

1 C# {5 y- ]" o" O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 @& L; S8 [7 p% Y* `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 g+ C$ G. v& t- h. d
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ s( s8 F# I  p. N    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 I- S# Y' b$ H
/ ?: g! j: P" \( p* b8 u- v' A  ^
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  e. ]) ?# v- \9 Y4 i4 b    mcasp->regs->DLBCTL     = 0x00000000; // Not used& M/ G6 B9 [# j! W: R
    mcasp->regs->AMUTE      = 0x00000000; // Not used! k" J# u2 Y8 }. g; w
# J, V9 o0 f) c1 o7 [5 Z
/* Starting sections of the McASP*/' n  O  s( \: m+ _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   F, W* O/ y( e" F6 ]% L8 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( R1 H) F& S$ H    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% H- V6 f, d' K5 C$ |: i9 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! Z5 R2 ]# q9 K% n% v' p; U
9 z# q! L  P; d9 ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , m! F- }  l; u, Y0 r- f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! y, y( n; v$ A
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 G% c& h& _$ R  Q  `- F! |4 s" h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, T4 C0 {5 H- y+ q  I1 x0 T& f: x

( ^4 c9 N8 t2 y, u' M    mcasp->regs->XSTAT = 0x0000ffff; 9 x7 C# w0 _' r3 T& Y
    mcasp->regs->RSTAT = 0x0000ffff;
. B" l6 T9 ^. [4 J
5 C& ^0 G' p( |8 D8 y4 E    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- v4 x9 H1 C, E" O8 ?* G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ M% o; Y! J6 m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ e8 W' }; x6 \) w/ g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) l8 G  |# `5 i9 ?

7 {. E1 x/ y( Y" h6 W    /* Write a 0, so that no underrun occurs after releasing the state machine */
. b; }" S6 {2 `) f) R6 T    mcasp->regs->XBUF5 = 0;$ n6 a; G1 I; f
    mcasp->regs->RBUF0 = 0;) p: }' \  v1 P7 W+ o7 e* d8 d

  g8 v$ V  l3 _4 n    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ W3 H$ ?/ S  k% a* i. m/ T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' k& H& P& E+ l( v5 G* Z2 U    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# W" F) V: l" Q& n; q8 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" t; N7 d" `# `/ ?- p% {- s
7 {! F* |! _$ r* T6 d+ p
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 w. F% K" I; k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 }# s3 ?: G3 n1 x) ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& h; f5 H3 z% s% p: @3 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ z5 s1 b4 g+ r& z' D
" J# X7 E3 m* B) g8 a8 C
    CSR = 0x0000;; L& {3 q! h) {2 F
    INTC_INTMUX1 = 0x3d;) \! p/ e* ], {! R
    ISTP = (unsigned int)vectors;  U! r/ D; C/ r! k
    ICR = 0xFFF0;  
$ X. z; c# `- t0 {    IER |= 0x12;  
0 \0 D. v1 J. f    CSR |= 0x01;  " x- G/ a% O4 x8 l1 J5 l

0 F( M$ r) r3 x* o# ^& W" p% Z2 H
0 j  A: o" t! s5 o6 ?* w3 {
  l  {4 p9 f" N% s  T) R4 K5 d$ g" g还有就是两个输入输出函数:
: i( K6 F( R4 M8 N9 u* P, z2 pvoid output_sample(Int32 out_data). E. z/ C  ]# X# T, K- c
{
: X' k' Z! U7 H7 a; b: a  AIC31_data.uint = out_data;  4 E) D# ]$ L3 i% z, w: D( G
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* l6 z; J+ b- d3 F# n1 A
}" h" h8 u1 ]* ^; z; J

! {" p, A9 g4 q) e- F, DInt32 input_sample(void)
/ N2 w  A0 G3 @; f5 v{  / I7 a# q  t8 ]0 N  q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 Y' `# N; t9 Q/ D4 u& d) A) W  return (AIC31_data.uint);
! Y, @7 D, t( o  S7 ?* h}8 Z8 O  a6 H9 V- @8 r
9 O, w+ i7 n7 I( H" 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-3-20 16:14 , Processed in 0.047341 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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