C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; t% ]5 O5 p, I% R2 Cmain文件:
/ M8 A3 J# h9 t( S( i+ Zinterrupt void interrupt4(void)  
6 u; ]6 J: p% y- Q6 W# l- @1 @3 ~{
  k4 r0 e6 |8 }7 n8 g! J  Uint32 sample;
" _) B" o6 H' A
2 z/ l/ u5 W) O; _: i, H0 V/ `  sample = input_sample(); // read L + R samples from ADC0 x* T  A( {( X$ Z& H3 Z) w+ r
  output_sample(sample);   // write L + R samples to DAC ! k9 ?: S! m% O) M3 F
  return;
, O. z- y) L: |5 W# g, k3 o) _( S}1 ^# \. L: f% M% t) K. ]2 K
" ?1 ]3 u- r& e" o/ w8 f( P, c/ K- ]
int main( void ). d+ l3 F  e1 _4 L
{
  }6 A" ^/ S. h& A, Y
7 G- r0 l6 x$ h* r7 \4 R    /* Initialize BSL */
( c3 m# g1 V; o8 V5 m    EVMC6747_init( );
( b* m  X1 u4 ^5 ^; h2 g5 k3 U        /* Call evmc6747_intr function */
" S$ e/ X) [# X. {7 y% i6 k    aic3106_init( );
# S: b8 @' C$ [& U5 Z$ S        while(1);& A$ `8 A/ S: j
}
; i8 p9 H5 n9 r+ A, L3 @2 c5 R) i, G; Q6 O2 @9 ?& t
( g+ c1 |1 ~7 f3 }) x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* G& M  [$ j- ~; R/* Initialize MCASP1 */
0 e, p6 k  }( |$ Q. r% E    mcasp = &MCASP_MODULE_1;
# l" k2 |0 F8 z0 p8 z1 n: e    mcasp->regs->GBLCTL  = 0;       // Reset
0 z- v! t% Q; H0 ~    mcasp->regs->RGBLCTL = 0;       // Reset RX
: H& e% k4 k5 N! C* u: m% c    mcasp->regs->XGBLCTL = 0;       // Reset TX  ]4 h3 V9 t9 \- [, P% j. ~
    mcasp->regs->PWRDEMU = 1;       // Free-running( Q, r& t7 B7 V$ \1 ^1 J8 l
   // configure McASP0 receive registers
0 f5 `3 N) s4 Y( d* [( U" b3 \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 A6 k( @( d! ?! \) N    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- Y6 y1 E% k0 |0 D) L& ?7 a    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, L/ e' P4 m& Q0 Y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 H( Y" f" X% ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  m/ t8 ?9 s/ x4 a3 `+ J# @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ ~' Q+ p% t, }# n$ k; }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* V/ k. r) c- T" p8 [1 |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; G2 E; S! a' u# b

) o0 ^* F6 f$ x" p% Y/ e& ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ h) o! r& N( J# j! L( s  y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. D* T6 g/ @7 E% _9 G' S7 R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 l8 j. C* l% f2 A6 s+ _
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: @- j& f+ y/ X0 @  G$ x3 o
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# R& F& b4 G9 u* h6 j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; F: d& j. F; ~0 C% Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' b8 \( H- e) [- F& C0 R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% _# m' K1 I) R& k! m( ?  o

8 D( X0 \! S0 N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, {1 z9 N  Y. Z2 J& R, J: v4 d- c7 K    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: ]2 ?0 {3 ]3 p; L( X9 ^. p! Z* w( i    mcasp->regs->PFUNC      = 0;          // All MCASPs+ {" A: C$ m, r& a/ Z& L; ^
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 L* j4 e1 C, l- b5 o

# E+ \  N; S+ f% i; p' A    mcasp->regs->DITCTL     = 0x00000000; // Not used! X" ^/ D! r( l* u3 G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' z& l4 j2 T- f& Q/ a9 D7 U9 K+ F
    mcasp->regs->AMUTE      = 0x00000000; // Not used$ ]' x8 L: i; }) f4 l
' m+ A6 I' h- @- v) X' S9 E
/* Starting sections of the McASP*/
+ M+ Q( l+ E+ W8 ?* a5 p    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 U, H* }( ~) r- {' l, J& r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
; ]+ ]% ^6 P% j  t0 a! a    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: Q6 ~' [( a& ^; Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 D3 n5 P2 X3 U1 Z% l
! i/ _" ~# T7 K5 U6 E" f; i) m
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& H( \. n+ m  p: V1 G; p& E0 C5 q8 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! V+ R. d4 g. W4 m
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : [) |/ m' ?: |) Z3 W- P; ~; K( [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! ?; v1 ^. |+ k" n" A. _6 S7 A: t5 A/ l) N0 q4 e
    mcasp->regs->XSTAT = 0x0000ffff;
! _$ s  Z. g* ?) k2 M; m. s8 A    mcasp->regs->RSTAT = 0x0000ffff; * a4 c) v4 C' y

/ p7 @- `6 _8 \, N% w# ?    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" ], k% `& h, h% I9 [8 q$ p/ H5 [, I1 f( t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" h& a$ I1 d: s  N- Q4 W. m    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 i# |0 K# S' U' s+ t7 q3 ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ C; e0 Z; ^" v( Q/ i, i0 K. o" h9 V0 i
    /* Write a 0, so that no underrun occurs after releasing the state machine */& R6 h5 ~1 e) p" ~$ A+ c
    mcasp->regs->XBUF5 = 0;
4 M2 H: t- K2 }- K    mcasp->regs->RBUF0 = 0;
& g1 p" d0 C; H) c* ?
) `8 s' W) B3 F0 d) t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + c) p) T/ n" D( P# }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& w' m$ Y( X8 x! I+ E- d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 ~2 z8 V. x3 A$ H* [9 d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, o+ E, F7 U9 f4 S& ?; h+ @$ e) U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - `+ I/ h! h" {, q& }/ W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 e  G$ o4 z$ l) J3 X
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 W2 B1 e1 I  @% A* ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" v" s, N1 a) C! f4 i: S4 k, s: m
    CSR = 0x0000;' j1 l1 M; ?% y
    INTC_INTMUX1 = 0x3d;' O/ p5 {" [! X* q: m
    ISTP = (unsigned int)vectors;) n. W/ a( I3 s$ _* {" ]
    ICR = 0xFFF0;  
, y" ~" R! P- a- c, |    IER |= 0x12;  
$ @5 o) ^/ R1 a- a" k    CSR |= 0x01;  2 L% H6 `% P8 L) J0 Y8 o5 E
2 L! F' u; a1 ^" u

! h1 t1 ^$ S1 }; n
4 M  @, r4 D  n# F0 E还有就是两个输入输出函数:3 Q% k& M/ h& G4 n4 l+ H
void output_sample(Int32 out_data)
+ j( y6 K( {5 N1 }' I{
! a/ t' v! B  k& i+ u1 _: I- O# \3 @  AIC31_data.uint = out_data;  
5 H1 T# @( h7 n; n# p9 s  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 x' T+ q( L1 L- b% E0 B
}0 w; |0 H% v. X& V- |
- p1 b! `; I7 y5 I# D7 z
Int32 input_sample(void)
7 c- B. f+ O/ I7 o; ]% F{  : x, Z8 |, v. i3 H7 @6 `  b9 D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* [/ L$ V& u8 Q; V  return (AIC31_data.uint);! S5 g# d5 u1 R' J; C6 f
}
4 s; t, X! q0 Q5 s& f) t7 C7 D8 C6 O6 d! W) m8 u2 R
分享到:  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, 2025-11-24 17:05 , Processed in 0.037810 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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