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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ f' {- f' q" A9 _# o
main文件:0 y+ A5 ^! G  ~3 T
interrupt void interrupt4(void)  
! i- e- K; {2 ?{; Q7 y0 P0 w7 R: K: d# S' N) z
  Uint32 sample;
! Z. u9 U0 x( O) {& K2 _3 G
) o8 u: N! h8 Y3 Y  sample = input_sample(); // read L + R samples from ADC
. x' K/ t, S) l* E$ a1 E, N( W  output_sample(sample);   // write L + R samples to DAC
0 w/ G& k5 X- }- g  return;/ |, [7 ^& f' j+ w) y% n
}
3 q- `- ]- s) u) R) `6 k
9 r* A/ V6 p) X, @3 e7 iint main( void )7 j% G+ Y% H$ T4 R% L. \
{
# u7 f. x, J" j5 o- R" \6 ?$ ?: }1 a/ W$ ?  ^4 c
    /* Initialize BSL */
, b6 }  w9 r$ }- X    EVMC6747_init( );
! Q" F. _% V$ e% S/ {% i        /* Call evmc6747_intr function */( a" F3 t6 p" d% i
    aic3106_init( );
4 r4 B& P# Y) R5 G! Q        while(1);5 \# V5 l# K( i( o. M
}
1 o* H! x) ~0 R2 l- J) d3 E$ [- k. s& o$ `) u; K
+ D+ W+ P! p* f. y: F1 p- o& f7 W7 v
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- F* K  H0 H) a/* Initialize MCASP1 */$ E6 h' b. C: _4 c5 _
    mcasp = &MCASP_MODULE_1;
8 @0 F1 R2 H: h# c( G+ ^    mcasp->regs->GBLCTL  = 0;       // Reset/ y1 c! \2 |+ j' [
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 G  n* W1 B! r    mcasp->regs->XGBLCTL = 0;       // Reset TX6 v' p; D8 |0 U
    mcasp->regs->PWRDEMU = 1;       // Free-running; F$ p, M1 T3 a0 ^
   // configure McASP0 receive registers9 b: q9 b( L$ X% c% h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. j- l! Q6 ^: Q  ]8 y2 t    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s0 w+ j; T) f' k) P/ U    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) o; s; W; Q' S5 y6 c" R; S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 S2 N; S4 M3 e7 F+ b  u$ ^7 Y) q! |    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) l1 D" E6 ?/ O
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- e; C8 Q3 J8 ?% _  E3 N6 W$ }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. I7 o5 c( c  f8 Y1 i1 f    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: m1 t. H9 r& V8 u, D
8 Z3 G; n/ |, \8 L8 g0 G5 B% |2 E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 [- A' z: _0 P* `7 F3 g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% l/ _9 x* R1 a$ I/ O$ y/ e* F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 l4 Y! h! s/ \9 m  [
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 i& @% z4 Z0 Z- Q8 J
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 q( ~) Q" D$ A3 B) r3 g
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' ?7 Z% M7 s8 m- V, g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 T  `( c" W$ t# J# ^    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 t# N+ |9 ^  m, ~9 J" ]: h5 r

! \! y! t) q( z5 _    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. y/ G& C% ^3 e. O" c7 Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 x. A9 k. n* Z# y4 Q# t    mcasp->regs->PFUNC      = 0;          // All MCASPs+ Q/ U4 `2 p6 L8 W$ I+ \( K: l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ P5 }! |' k! @- a0 W6 x7 A2 O2 P  o) l2 I) z
    mcasp->regs->DITCTL     = 0x00000000; // Not used# d7 @' D$ E( N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ J* L! e. R( @, B/ `2 E: a    mcasp->regs->AMUTE      = 0x00000000; // Not used3 W9 E) A3 ]2 s1 W6 n2 j

8 n( a! r; j" W: Q6 ^( @1 T/* Starting sections of the McASP*/
" V' ^3 R( Q$ T( F2 N, ~% J" \    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 B* i  u! ]4 x& U1 s! {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    [: S. |4 T. N; g7 J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % A6 F6 q5 w1 v% l( @$ l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( N" R7 @, U% I4 u
% h) b  |& d7 m; |+ t. ?5 @4 J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 j& B) z5 v/ E+ O' B4 F0 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# z5 G! `7 g1 d# d; U1 V$ m1 ^# t
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 }4 H, H$ l' h; r5 i! c5 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% f( V' W6 \* K# p' x! j

% h( e  i2 S. B: t, ^" |" B    mcasp->regs->XSTAT = 0x0000ffff;
6 s% g0 h! X& I+ U    mcasp->regs->RSTAT = 0x0000ffff;
! V, W) \) f# o- G4 m& C; `- g/ y# h1 j- L( ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; [8 f( K( a$ n6 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 J9 H3 E$ V1 x! r- q" C& d+ l7 K# |
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 D: |6 }& a, l7 s: B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" z, ?3 o/ {8 |* z  |
* u: a" Z- B" b. |6 `1 X
    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ u3 }4 u9 U8 f* Z+ m* H    mcasp->regs->XBUF5 = 0;
* G: g2 k7 I! T5 T& o; Y    mcasp->regs->RBUF0 = 0;3 A  ?: x6 o9 D$ }6 }0 `4 [+ U
7 \/ I0 ^! j. s$ P) t* X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 w/ w8 P4 {5 h- Z0 L) X8 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& o: L$ l: }( S, V" x    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 J7 {/ h# z- o/ N& H0 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 H7 K2 v" a% k1 h3 U
- U  o. l* M; ~( j) w% F6 I
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 h# d8 ~/ q$ U+ x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ ?$ B  x" p* y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 t9 b# _0 w7 z. b9 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 d6 D9 T/ E* Y0 u" Z# B# z1 E  G. Z5 d2 M$ O
    CSR = 0x0000;2 p- y  j: _4 r1 z( }+ G: @
    INTC_INTMUX1 = 0x3d;
! i$ P# C/ v1 l. d; q) C    ISTP = (unsigned int)vectors;( c' C/ q3 e9 [% @6 p
    ICR = 0xFFF0;  
2 p( Z( t+ n3 t    IER |= 0x12;  , a  m; U) F" ~+ W+ |7 G5 i
    CSR |= 0x01;  
3 O) U7 e6 S2 G. y6 J
- [9 ?5 t" q# i9 ^" E/ i" \! M2 Y0 @- {; @# h* w- g  ^
8 g. E) F# l$ D/ {( K1 X6 j# I" G
还有就是两个输入输出函数:
5 Q9 N* C& e/ W7 Y' k5 ?void output_sample(Int32 out_data)
8 w! E0 Q# X2 u% R{
0 K) N& y) s! l4 w; C$ N; b  AIC31_data.uint = out_data;  " S/ _# V* A' V- I, Y( x- u
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 l; b$ ]# f6 x8 N
}
2 b& N- d4 D3 j, k) S+ o2 l
' I8 D# x) O( R" }Int32 input_sample(void)
- m& [+ N1 ?( x4 [. `7 T( {3 O$ p# S{  % d$ A7 Z2 W! M* L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
( H* S% ]8 i8 O5 e1 }4 s  return (AIC31_data.uint);
* m0 q; C6 f7 n, c; a9 `9 q& f+ {}2 O3 C9 ^+ p- n! P2 K1 s+ L. V
  G) q, O, R' f& _7 \
分享到:  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-16 04:41 , Processed in 0.040792 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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