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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 S1 G" J# {6 T
main文件:: Y+ F5 D" N; \- W9 ~' D7 h3 V' A
interrupt void interrupt4(void)  ' O8 w: j, P; V6 U! C3 H6 O
{8 l0 I/ ^/ S4 z$ A
  Uint32 sample;6 K+ v2 x8 h# l5 @6 i

& T1 y& p, b0 X* X& ~: O+ ~- R2 c  sample = input_sample(); // read L + R samples from ADC
& E8 B+ ~- A6 X0 Y  output_sample(sample);   // write L + R samples to DAC ' I' q( |# T3 G' i# T% P+ p5 h6 l
  return;) @( s/ a3 C% ~
}! }7 U- R7 c& d9 |
9 P7 j% Q9 z4 Y7 c: i0 a1 Q
int main( void )
7 L' x2 X) c4 h% `+ Y{! C) C. M3 U( L; Y/ P$ ]3 \

  P" O/ Q+ W5 p3 G; i! R    /* Initialize BSL */
- W; I5 r5 K3 c6 Y9 ^4 g    EVMC6747_init( );
2 Q! V5 z: K9 t        /* Call evmc6747_intr function */
5 H+ u/ J: ]4 s0 h' j3 g, S2 p    aic3106_init( );! C8 }- _0 }& _% @. T
        while(1);
9 U: S/ P. R: l! h1 q}
9 G. a- E7 J: n0 b, `2 X0 W9 P
8 h! ~2 c3 |4 E5 I
0 s' P6 P  F4 ^, vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& ?( B% O5 z$ v: a/* Initialize MCASP1 */
0 w: H# P7 U' w4 D    mcasp = &MCASP_MODULE_1;
8 X0 j' X* r  {6 O% k    mcasp->regs->GBLCTL  = 0;       // Reset
% l' s0 ?3 H* o9 b# X7 P- Y8 i    mcasp->regs->RGBLCTL = 0;       // Reset RX7 f- |, G5 l2 |* }- h0 e5 V, ^3 @
    mcasp->regs->XGBLCTL = 0;       // Reset TX# t2 Q! V" X' f6 F
    mcasp->regs->PWRDEMU = 1;       // Free-running
" K5 w+ [/ q* Z0 x; I; [5 f; l   // configure McASP0 receive registers
( b7 F8 q6 x/ U    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% C( T- b7 s% n9 k+ r, m- V/ }5 W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 @3 Y6 k2 Z% u7 p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& K; A# k: }& F' x7 v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 N+ x9 h- j1 U3 }1 j/ A5 L2 V
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; m4 O, b0 n8 i3 z+ G  Y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- t9 I9 b9 ]" `% y5 Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ C5 f! B' y. [, i% s    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% u" s5 s' V( o( f8 W
: Q" A2 P" Z3 I7 X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 j* y7 C* _* g. J7 P, S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. C% ^* O! o. n. f" [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 y- E* a; _3 f- s) D# b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! G* S" `1 _3 p4 h' y; }* Y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. t) k1 V1 S9 s' A7 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ S7 g5 N7 j+ q7 I( F' ^( g$ l
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: @  {- ]' h9 ^* S' V
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. M6 F+ H' |  S/ V
2 [- g$ j' I! y# |2 h! s% k
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 B! F4 B8 f' |- ~5 ?( C
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 W% P3 G* L0 F3 c    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 w( `* |, ~. o    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ ?+ f# J: O& w& A' O

% d& K: ^: r: z8 }; j; O    mcasp->regs->DITCTL     = 0x00000000; // Not used
: x4 u/ X( A9 I# S- `7 ^  b    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) Y+ ?) o0 ^! f7 w4 f. W. F: I- }4 g3 z4 H    mcasp->regs->AMUTE      = 0x00000000; // Not used
) V7 R) e! ?1 k0 s6 D" L) m, s; A0 b
/* Starting sections of the McASP*/$ v. i9 n5 b6 `$ b+ V* K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " v! t/ o2 w+ e8 _# }# _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 o$ t5 H5 w8 i2 r. ^6 k% r( e    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / L: w1 e3 r0 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" Y. J) Z  k- g& X4 S
7 ^1 J/ D& X% S2 [; a$ t. p9 K1 ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' }" E1 X$ t/ e: p- M- C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 U3 D% {! D% J+ W, J1 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) v) w3 L3 }7 i) f* ?' r$ Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& X" H: [* S) \. ]' k
$ V; o( M2 R  x/ r( G/ e
    mcasp->regs->XSTAT = 0x0000ffff;
8 q; O1 H" n& e% F6 c, @0 m! P    mcasp->regs->RSTAT = 0x0000ffff; . R! \, C( g. ?1 k& i9 |

/ e; ^1 r( ^( B7 K$ g4 P& w    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 o2 W8 j0 d& E# V& l+ f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) n0 r2 V" ~8 d* B    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 r' H; ^8 A) W* M3 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% u) k0 J8 }! \* h& [( [$ j- [- L3 k
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ K+ j* ~" K9 M    mcasp->regs->XBUF5 = 0;
+ K$ J* `1 E0 @: b2 V$ n    mcasp->regs->RBUF0 = 0;; ]# _$ X0 ?. z
2 A' I( r9 x# D3 J/ V
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- b) e+ c! [* j5 @+ z! m% k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 y$ j: O  j4 k3 q& c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* S% h, R) v6 _) O# m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 Q' _/ h, V  _3 i$ u
1 s9 x! @# \- y! @* W! a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % @8 F3 ^" Y& _' u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( i" Z( v$ g2 x+ K  F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ K0 z; I0 m# C, e4 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# n2 O6 ~$ T' [) L

! h& O# q7 V' k- D! t, ?: v    CSR = 0x0000;
- i' p, L, L6 }! z1 `, b! `$ F    INTC_INTMUX1 = 0x3d;3 E2 b1 h0 ^$ e" [( E
    ISTP = (unsigned int)vectors;
5 l  c1 z' i! _* p5 \8 u    ICR = 0xFFF0;  " z9 i% f8 i/ L- v2 Q
    IER |= 0x12;  
& {3 |+ @6 P9 q7 A& ^; V0 g- W* g    CSR |= 0x01;  
7 G7 |' |2 p3 l' J! E' Z$ d, L" g4 [- |
. V+ O. ]: f* D) Y2 c& ~( s
* a6 `3 d! ]7 ?1 p
还有就是两个输入输出函数:
& \8 u( W8 u. n+ t3 i2 Tvoid output_sample(Int32 out_data)9 r/ Q6 v8 O% A+ J9 `* F
{' [  a/ d9 B( y5 ~
  AIC31_data.uint = out_data;  
/ L9 t, m' N: d7 b! r- J  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 L: w; z6 a# R" v% S' u3 J
}
! n: C$ u7 w6 E4 ~3 ^6 c* r. `
1 P; C( J8 @. y+ J- _7 n2 wInt32 input_sample(void)9 s; k$ V4 `- t5 s% K5 U
{  
9 i6 ^3 V# q) W' ]* K# J  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& `9 g4 _2 W- {: ~  return (AIC31_data.uint);
& j7 F: M* _4 D3 `  T7 k}
; q& _" z  O; Y4 F0 M$ X1 h$ X4 d9 c% ~' q+ s# p6 u' T
分享到:  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-4-3 06:53 , Processed in 0.042374 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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