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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 R, K5 `' V, {2 @# M( Cmain文件:5 f' f8 b0 ~6 o. J0 N: k
interrupt void interrupt4(void)  
; x7 U8 h6 ]# U& \1 k{* o5 T1 P& }/ K# Y
  Uint32 sample;
, {( b$ Q7 t6 {+ O. a1 I
4 f1 q2 Q, ~' r$ @  sample = input_sample(); // read L + R samples from ADC3 H: }6 c# d- U& V8 V+ W5 B' p
  output_sample(sample);   // write L + R samples to DAC . s( |) X, R0 S- @) w; E4 h5 W
  return;8 A' c& M2 o8 r1 x
}
6 |1 U3 V+ R5 k  e
2 K1 P8 f7 _) cint main( void )
# d' o; Z) b4 q! V  M0 r. z; ^{
0 e- u4 i1 t% n! X3 k6 k" }; \4 S2 H1 ?6 k7 X! Y: U
    /* Initialize BSL */
3 L& G" P4 x# A- h( _( E    EVMC6747_init( );; P8 V  F1 P* Q' z, B! m8 M3 Q" d4 @
        /* Call evmc6747_intr function */
: o% X) _6 A! P8 d# o    aic3106_init( );
% `4 Q+ c, b& k        while(1);
1 n4 m* x$ ^0 ]- q* K2 g}6 k. U/ P3 l, Z

/ U' s2 X! n1 B" ]
! L! d, m5 p# c- maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ Q- ]- g7 B* g; `2 O) O/* Initialize MCASP1 */! v$ Q9 ^- J. B
    mcasp = &MCASP_MODULE_1;, ?3 g1 h3 b8 @5 |5 w
    mcasp->regs->GBLCTL  = 0;       // Reset. Q! U2 ^; o( r2 o8 K
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" w6 ?+ t' A" \    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 V7 o/ }% y: y0 Q    mcasp->regs->PWRDEMU = 1;       // Free-running. A# r, O+ x: x+ V' F+ l
   // configure McASP0 receive registers
; `* L( r; j  F& ?' j7 }5 {" e- F    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 O$ \3 {. @# X) E# Z# F0 t# A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% H7 o% ?6 ^, P* M* P  c) [    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 d' ]. Z. o3 o4 m    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 G, t6 l/ I, v/ a5 `    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. ?2 ~+ @" Z9 J3 I$ A    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" A- ]. N" h* Q" L. U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 b6 Y, p6 Y* Y! R1 Y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 d2 y) K- U1 h) x$ Q
. }6 M2 s. b4 G# U5 p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  }2 w) C% s% K1 ?, n* ^! A& Q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( N" ?- G) y( {' n- U/ Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# r2 I+ z+ ~4 |5 D% {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* k  @! I, T1 f, |3 A, A* _  H3 M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: d8 K& L6 M$ o) Y% b    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 ]: P8 W& S. B4 j9 H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; i2 i/ G; _9 W( X6 g* K7 t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ \; @* T6 K; ~! ^$ h5 @1 ?8 E+ }7 d9 t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 R* A7 o" q9 n, t& g1 |) W2 x5 c2 c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- I) `1 [3 }' }2 P4 \0 u  z! v    mcasp->regs->PFUNC      = 0;          // All MCASPs
# v( s# ]3 p! A( v+ P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' T, N; p( @- S+ C# H& B! k8 Q! A" N2 o$ I$ e) W% M: C
    mcasp->regs->DITCTL     = 0x00000000; // Not used# z- q5 ?& K7 k0 j  L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 @$ t( T& ^9 N" m! v, S  u' l    mcasp->regs->AMUTE      = 0x00000000; // Not used
. N: n" n* j: [9 X7 [
" [; o6 p) B+ a( K2 g/* Starting sections of the McASP*/
( O+ n3 C. c: }4 G5 C    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 g9 g4 C- S- t6 a: p& B2 e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  A6 U) r% p& C+ E3 \2 W4 I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 W1 j% ~$ ~; ^2 Z0 {. j2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- S$ K2 z% n& e. m

2 Q0 U, i" p& r  X0 w0 a& l    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 }! n0 F! }$ p8 a5 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# Q/ b( g8 K2 g1 c8 S# H  Q# g
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 ?) f/ @, R$ _0 W6 S+ n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& x& J/ @& N' u, R! y

8 P$ K' y! |9 r  D1 P    mcasp->regs->XSTAT = 0x0000ffff;
3 |5 @1 C8 `. k+ J4 J9 n    mcasp->regs->RSTAT = 0x0000ffff; 2 n9 `1 C8 B' u' A. f% g; y$ v

( q8 e, u/ S7 f/ D* y8 b    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) g5 S' D; g& R. v( O* q' m9 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 u: h# q; G8 U; p/ A- Q- G/ x% I
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % f+ [! U- E4 s) E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: H7 O/ ~$ T+ @, ~. d
6 A- H' k# j: O; u7 Z$ x$ l    /* Write a 0, so that no underrun occurs after releasing the state machine */, Z% S: h/ S+ a% @
    mcasp->regs->XBUF5 = 0;
- z  G# H3 `0 F8 x    mcasp->regs->RBUF0 = 0;
" t8 a& G) l6 Z7 M0 j& e' ]' H9 n% B* }5 R
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 [3 I! s$ B8 }& _7 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  p; p9 J# ~: m' {' `3 z/ o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " c1 U: V/ r) d" ~, z/ c. C$ f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ g# a; w1 C0 a

8 {/ D! I, l3 D- G. h    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) y" R0 Z+ m5 O  N5 r$ h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. J; `* n1 a' n8 L  ^/ D
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' T, m' a4 }* A" L" G  c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 @# Z( {# ?0 J/ ^* K% W# N& r
- B+ N; }0 ~# X% B9 H
    CSR = 0x0000;
3 M: X. w! D9 |5 a) J( y5 C    INTC_INTMUX1 = 0x3d;
$ l1 {' K4 Y. O  _    ISTP = (unsigned int)vectors;- b& q8 h( [/ t. \/ F
    ICR = 0xFFF0;  , K* Z) V: m) D0 T2 E: G) ?& G9 P' g2 Z
    IER |= 0x12;  ( c+ P6 C, H0 T) F/ D" G; q
    CSR |= 0x01;  
% `. ~0 Q) e6 M# c) L. |# H$ B. ?& k7 b! C8 k" D6 Y, Q

7 P2 k# W6 ^7 j0 M  S
* s% n. o5 Q8 K" u; a8 n3 F还有就是两个输入输出函数:1 N- Z7 e& e4 P
void output_sample(Int32 out_data)8 C. f  a, i; i( V7 f- c
{% _) B$ J* w# x+ R# v- D* d. i* a6 O
  AIC31_data.uint = out_data;  
9 f, s$ o  k; x  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 B( p2 J5 J- R0 O: z+ R% p}
% D" c1 Y. ~! v! f, Y% X. ~2 a& F1 I/ T$ y- k/ o; p7 O, y
Int32 input_sample(void)
4 t' d9 U* P0 L5 f% h{  $ E. u  m7 \4 m7 E& o2 b# ^
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( ?7 w2 q) t5 g  \1 D+ U  v( U7 A
  return (AIC31_data.uint);1 }6 H& c0 ^8 [. j$ l) R4 i0 l
}
. ^7 v. B+ Q( H# d* s) Z
- m% S4 {; S! x  J6 p
分享到:  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-1-23 18:54 , Processed in 0.042095 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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