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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* \3 o+ b% Q- N: u7 [% D2 i# F
main文件:1 n4 x9 q# [/ {% E
interrupt void interrupt4(void)  
3 `3 K. w5 f) y/ k8 H{1 v/ I9 G& J) g/ W
  Uint32 sample;5 N( d* {) L: k7 O
) V8 X7 Y/ G. u7 U2 ?) ^0 g
  sample = input_sample(); // read L + R samples from ADC
1 B3 j, j: g$ |  output_sample(sample);   // write L + R samples to DAC ) Q! u5 v$ ^& L, j! U( t* g" m
  return;2 h" [$ Z: j, e
}
  F8 w- c2 B) [8 S; u1 |6 _: H
1 v* G- R! Z/ W- }8 h% _( r& Uint main( void )
( l8 x' {$ k( ?. G{' Q; t  K; m3 E3 r

; b- A+ A" N2 W2 D8 _" a    /* Initialize BSL */
3 \, `$ N: Q+ P: P2 e    EVMC6747_init( );
! L9 g" z% o, C# E- y1 q        /* Call evmc6747_intr function */) J$ u3 X+ g' {- L
    aic3106_init( );3 R. z. l9 T( U3 B/ N9 o: ]2 f* R
        while(1);6 \  a, o8 w( s7 Z* f6 o
}  B$ j" c" s' J$ h; J. ^7 @

$ P0 e$ p7 x" l3 _( D
$ y4 p% J  D4 ?/ ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 _# Z4 |3 t) f- ]# l1 `+ T; K
/* Initialize MCASP1 */
  |4 G! V  Y8 s' {1 I    mcasp = &MCASP_MODULE_1;
& p7 r) q8 [7 p* s9 [    mcasp->regs->GBLCTL  = 0;       // Reset
  ?, w1 d7 z  H9 R. \5 g    mcasp->regs->RGBLCTL = 0;       // Reset RX
! k% F" I9 ^0 n$ |    mcasp->regs->XGBLCTL = 0;       // Reset TX; z" ^8 O9 S& t$ o) @! \: ]
    mcasp->regs->PWRDEMU = 1;       // Free-running
  b7 @7 T6 W# u% i% c   // configure McASP0 receive registers( {+ U9 J9 o8 o$ t
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: |8 `) k3 a" Q5 v9 {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% @& R& g: B0 T8 r1 J" r* F
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 j8 _' U8 x' z: u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ O& ^% H/ [5 S" u. j3 l/ _
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! g" x7 p- j& e0 P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) ]- D# Y1 A  F: B: O/ M
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 ^! T' W$ n9 E  W) F3 d- E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! i* p6 p& }5 T% @6 ]
' C" D' L" y( m" f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. i' t' O% N3 [  H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" X7 p9 i/ a& E/ i% h, f4 v# l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ S! J  J; f  z, F2 O; i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! T9 V/ \7 c" Q; C% Q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 f$ B7 [8 }. [/ F% E% n3 z9 t0 S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 i) N( T, H. O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 s! E! h' z4 s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 u' m/ @2 F: D7 j( E1 H2 H3 m

, Q; {1 y. \4 B% C; U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" B7 q$ m" p+ V8 i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 S6 U+ H9 ]: {2 O, }    mcasp->regs->PFUNC      = 0;          // All MCASPs
% p4 j3 o! z) J1 T, W$ p: L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 ]4 p, h5 e! e# \4 y

- z4 w4 i: {0 |0 B8 L    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 D2 D3 }) F' N3 [( E/ K    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 y  |$ O+ V  u! Q0 p    mcasp->regs->AMUTE      = 0x00000000; // Not used
: x( x" e7 g- ?  d8 `8 S1 r7 F- t7 _4 J6 |* O! e2 \0 }9 u$ Q
/* Starting sections of the McASP*/
& v" S0 L" ]8 }" k* x5 i1 ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 o9 W7 \+ h* E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' j: G6 W! C! p' r; k- m$ F: J/ H* F1 v    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 R/ w2 _- \- G2 Q/ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, B5 l2 ]! A( s* ~- d7 T  K7 d; |( C  A4 u. f) q$ Q$ h8 v1 ?" \
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ F' D- Z, L& w2 {$ @1 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ b- I" z5 C5 W' t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & O% l' J4 m9 F' h" S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) H" D& \0 p+ K; E) F; p
+ r8 s$ C: T1 P    mcasp->regs->XSTAT = 0x0000ffff;
( x& K4 s' C& i* _1 T6 g( X    mcasp->regs->RSTAT = 0x0000ffff; ( }8 M3 `' j0 O. ^& B; r
) D" y9 n) X2 ]; U& Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 a' W  r2 C8 s1 _$ u: r) M+ [, d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. D7 O" E1 j2 T8 c/ N& ]0 G/ @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 ~0 M) `6 F8 W  K; B8 w1 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 m- ]  b1 I# U3 p

+ V, a" V: }2 F: J; N    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 C: L3 k% @8 T    mcasp->regs->XBUF5 = 0;  B1 _) J5 G) b+ P; O* b4 O
    mcasp->regs->RBUF0 = 0;+ I: L/ n4 r* i/ d9 U. x; R
+ J- b' \& S9 H  G2 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 l5 K7 _. |6 I/ K( V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 X/ D3 U& [( V2 T9 S; [1 M4 J0 V
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 H- p6 N. x8 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" P( i) w7 Z, h0 r/ s

( |' W7 d, v  C$ ^+ G( c1 b    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ ^( u) w9 ]3 H$ [% m; v$ h% f. B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ m8 {. x; @, x) H+ n$ a# r
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % E! F- D5 b9 Q2 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, \0 k0 P" n) v3 `% o/ S1 D9 |% W' t" V; }
    CSR = 0x0000;
/ V/ l1 q9 L# O/ D% \    INTC_INTMUX1 = 0x3d;
! g( ?: |, @: K    ISTP = (unsigned int)vectors;% ^9 f  D% x2 z
    ICR = 0xFFF0;  - F5 A- n% G7 l: R+ a4 [
    IER |= 0x12;  ) K' M1 Q- F0 }, e
    CSR |= 0x01;  
* q' ?' E) {- B( e# T/ [9 U( G3 M
! _2 {, A1 e6 b+ t6 N8 X# n
  g4 r8 d8 m4 f; L# q" I. P
5 N* r  O6 [- ~# i% k还有就是两个输入输出函数:
$ u9 j3 R9 R/ Y% q0 X/ _void output_sample(Int32 out_data)' @9 t$ G  t% K
{
3 e5 D5 C5 g( [9 W* S$ Z# W  AIC31_data.uint = out_data;  & E1 c/ W* U3 o
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' @+ H! j% r0 Z; X3 Z8 B
}
& m' V0 T8 H% }7 e- f# u0 H1 D, `
7 y- K) l6 u# Q' G) F' d: a* ~! Q% ZInt32 input_sample(void)9 y$ u: W3 C7 {4 T: h
{  
% c/ {* b$ v# ^0 z/ s; i  AIC31_data.uint = MCASP1_RBUF0_32BIT;, o2 q2 ^" S: |, e6 }% {$ f% X5 x
  return (AIC31_data.uint);; J1 b/ o, k9 P1 a* \; p
}
4 j7 i% {/ W4 y/ I5 H+ C
6 {5 h/ x6 c& ~" m; V
分享到:  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-26 22:02 , Processed in 0.041795 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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