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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 c- v) E& u* {; g, mmain文件:, n' l9 v4 }9 ^: u0 ]
interrupt void interrupt4(void)  
7 d3 F. z1 g5 R{
8 i. e7 E  T  H& s/ W; U  Uint32 sample;
- Q& m" ~- i' n5 P6 q! F
/ B: O# B$ p" v( B- ?  sample = input_sample(); // read L + R samples from ADC3 g  K) Y: g& o: Y6 {2 u2 L
  output_sample(sample);   // write L + R samples to DAC 7 n; q% J4 U* W$ e( Z% h
  return;
6 B1 O4 Y/ I# R4 l2 f7 l2 |}+ F$ H& Q2 X+ ?( k/ S6 C& M8 |1 {
* l4 w# }. q( {6 ]6 v( _0 |
int main( void )
- L! e) l' z5 r# e{
2 T+ V7 B! [- T; N( `: h
6 p6 z( W7 Y+ H1 r) y0 W    /* Initialize BSL */
, Z1 B  L) b7 ?1 ^% {  H! h4 ]    EVMC6747_init( );
( _! H8 m* S. Q3 E- f" Z3 D        /* Call evmc6747_intr function */, c) |7 r* ?: x) Q; }. n
    aic3106_init( );! B" r4 ]+ j8 ]( e2 I- r  E
        while(1);1 G. z( r' c2 v2 l+ c) c
}
( t5 m/ }2 |1 X" {* k$ Z( d" O  s
5 ^1 t3 Z7 R" F) M0 w
6 _; m9 v% J0 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 @6 w/ |; h1 e  x0 ?/* Initialize MCASP1 */
( U& y' h( h6 d7 @# g    mcasp = &MCASP_MODULE_1;3 N- z  d& m* j
    mcasp->regs->GBLCTL  = 0;       // Reset
8 \6 Y: p( S+ V, e0 u3 c    mcasp->regs->RGBLCTL = 0;       // Reset RX. Y7 H* X: m& A& N
    mcasp->regs->XGBLCTL = 0;       // Reset TX' c  k- ^5 w, e" y3 `- @/ z
    mcasp->regs->PWRDEMU = 1;       // Free-running
) n+ O3 F8 E5 [; h8 b- ]' W6 a   // configure McASP0 receive registers! W+ H" ^  `3 n; A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) u1 E; M( b, R
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: v4 a7 W6 N6 d( K6 Q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& z/ }8 E' H8 u; f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( B# W1 W4 S% ~) ?* ?+ [; L+ E3 G    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 p; b- h( w; I# ]0 c2 N1 f
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( D; l& l' v4 z+ ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( `5 r* ^2 b7 H$ m    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. T8 x5 o# Z4 R5 g" c- F
9 l7 k. L$ T  i; R% x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( W0 Q  L1 E- X' _( ^# C$ r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" h* i% W3 e8 T) h; e! k
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- V) s2 E$ P; x0 F" `3 D    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) {  N+ i! _9 n& r( O0 X    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 n* W0 T9 ^3 Q% A9 s) x
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 X2 I8 ?: F" W- R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% O# g6 }( z8 \+ p    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' j  F6 \7 n6 b6 `8 A7 }& g+ p3 J; ^' q( Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ b' u8 _# g; P# `* @3 K0 y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 _" D+ B6 E+ w3 P. G
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 o4 V# j$ F, W, ]  |# G5 x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 ]# C- O' j/ e0 [( Q

1 A, T( X( K1 w7 u/ J! J6 H9 y4 O! i& L    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ _6 [# k1 b  K* O# V( e    mcasp->regs->DLBCTL     = 0x00000000; // Not used( u# T; A  o: y5 L; E
    mcasp->regs->AMUTE      = 0x00000000; // Not used( j3 d1 K. V( r
1 y( L4 j1 T4 K: {, q
/* Starting sections of the McASP*/
% O" u6 h1 r% h* l1 C3 d    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ [# E2 y' W& Z5 N3 o& J! ?# t5 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" P$ H/ g3 s1 X& W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ k) S; r2 J3 p/ n+ m" ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. Q8 t9 _3 {# h+ z% E
9 `  r5 W: Y2 Y7 y" S
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, P! C, }2 K- b7 `& s9 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 b& X" j$ M! U/ S    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 \& N5 z6 F4 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# _8 _) N, M( v
/ {6 N# n0 n5 _3 S; T
    mcasp->regs->XSTAT = 0x0000ffff; 1 F4 c1 D# L9 p% f( ]* }" E& d  b
    mcasp->regs->RSTAT = 0x0000ffff; 3 o9 t, ^! `& C

9 c$ f, {4 r. V. h" @. O    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; [& f$ v/ `; ^! Z" |7 b& m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* N; b5 T4 W. D' t6 h! F" P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 |9 S9 J7 i- O/ C$ V/ {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 {. W3 `/ `( N# Y' A
; ^* P, E6 A+ G) n! \9 a, Y    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ u9 [$ A; \- O! r/ o, p5 t    mcasp->regs->XBUF5 = 0;  r# ?% ?5 S- p% _- B- T
    mcasp->regs->RBUF0 = 0;
/ Z/ C" ~" [. ]$ a3 Z' b5 Y5 U5 A' f5 E. ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! Y; ^( r) m* ~# J% M( P; [6 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, B, N- ?1 R; x. g* c9 H& K
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' t  e% v. T  j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' O% p9 I# e7 j: |

4 r' R3 a+ m  i4 r8 `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 c  c( l9 b/ T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& w7 I3 v* h) ~: y# K3 G5 q& H# Y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( g8 _0 v8 v+ X' p+ z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" |4 L' |1 R1 X; p' m
/ B+ n! r/ I' V3 L& c5 _7 t9 P    CSR = 0x0000;
/ f  u" G* M# n1 E    INTC_INTMUX1 = 0x3d;
  X0 i0 e  G0 g2 R0 H; Z. v    ISTP = (unsigned int)vectors;  G$ ^, L. [. Y* p  C6 G  a0 r: ?6 p
    ICR = 0xFFF0;  
  {2 I  o1 R  V    IER |= 0x12;  ( J$ g  q* J. E) W" m, h
    CSR |= 0x01;  , ]# N  q2 N5 g" f! o2 H
& z2 ]8 {. ~* [2 n0 R

( _" a+ k. s5 r! S! S& {4 C* t8 O# Z+ h/ R6 G9 ?* r* e
还有就是两个输入输出函数:
$ C, ^6 z' G( B% ]1 Dvoid output_sample(Int32 out_data)
- ?7 ^' x; J( h" O4 U4 g{$ A' T3 \; l  m$ ~. M3 s
  AIC31_data.uint = out_data;  % d% Z8 K7 I" V/ G/ x. j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, n0 o1 [" q% l' \0 u7 Y
}
  q! q/ K% }8 h8 {- R1 `- q" _4 G6 u3 G" U  ^, f! z
Int32 input_sample(void)
/ R2 K$ G' b1 R* r9 \5 _{  
, S/ o  A  O# \/ _/ ~  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ W; u/ a2 t& ~, H* V. X& G
  return (AIC31_data.uint);
& c3 V8 t! O4 e, F* n! C) T* j" A}; R: m0 M8 k: b% [+ E/ ~
) f2 K4 K/ j* d; P* s5 c: V3 v! O: F
分享到:  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-19 18:45 , Processed in 0.041634 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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