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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ U7 R" t# A7 smain文件:
4 O& |' J5 Z0 E& ainterrupt void interrupt4(void)  $ D7 B/ a2 `2 `1 ^, d8 s# e0 V
{
9 u0 g7 M, R# B; u- x- T  x% A  Uint32 sample;5 ?  @- W! {) q; {
2 `" T4 u6 v) X) a. i
  sample = input_sample(); // read L + R samples from ADC
# s$ ]! A' U6 a6 t) W! X# N; K3 l  output_sample(sample);   // write L + R samples to DAC 6 t/ A2 @* N/ a% w) P; T
  return;; T* R4 F5 k* o
}
) Q# v% Z  U: g  x
6 t" n& \/ E* P- T* D0 }int main( void )4 X  [* |& E( A$ D' {) _3 ?/ d1 k
{7 k- j. ~( I/ k
" b  i! D4 H, K) {, t  v. k
    /* Initialize BSL */. |8 y8 _6 p7 U' }/ X; L8 M
    EVMC6747_init( );  N( C6 Z: F# y) E7 M& I
        /* Call evmc6747_intr function */- ~% B  f+ o' s4 q, U
    aic3106_init( );- P$ P  E, _/ G( d! A
        while(1);
5 N; o% B" r- m& s2 r}* _7 x. ?* Y) p8 C, s) l
  M/ a! a- w: G+ b2 M0 w. Z' B
- \( E6 I3 U; b) O  p9 Y  Y" C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, c4 @# q& S2 s( Z: r' B' U5 V
/* Initialize MCASP1 *// o% F# n- c, i* S4 {5 n- W6 k! X+ r
    mcasp = &MCASP_MODULE_1;
; Q+ @: o9 A. H; P/ b( t  L    mcasp->regs->GBLCTL  = 0;       // Reset3 g0 v" c& H' w9 r
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 W# F( w) V) c9 N; B' V% ?7 N
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 T3 M5 V2 h% _1 e2 O+ |( y    mcasp->regs->PWRDEMU = 1;       // Free-running
! q5 y+ R* b, {! f& ^8 Q6 d9 ?1 h/ Q   // configure McASP0 receive registers1 U: `1 P9 A& r5 B/ J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 H9 I+ M8 ]; u8 u( v: M4 a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _: s  f/ {  V" D6 q5 d  u
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! V) Q2 X  U' B
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 n$ E/ V& r: b. X' m. t( [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( f9 W/ X1 u7 \( T) }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 w7 U0 H, g4 r. T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 K( ^' C+ y8 _3 k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 g* R; t# X' z, r+ G

( E; R* J3 S9 g& [( i' A5 P& x    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: K: G& r+ G: l' O+ _' [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s  [2 [8 r% G8 ~- c0 {! K4 h( H7 i& p    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! G/ ^5 d8 P' ^( ^9 ^; F! o+ n2 Q* \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 L7 L" B" P/ @6 W) m9 x4 L- c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: g* j  C4 f+ }0 G7 q$ F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. b1 k5 q8 a' J1 C6 v7 |    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. f9 c9 O% ~0 D1 M* U% D
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' v  T, r0 l. f6 G% j( p1 c4 W

) y3 B% g: L$ W# C. {% J    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& B6 P/ ?, j9 A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& P) N  H7 {( a1 \8 Y% H
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 p6 V  H7 H3 l  Z" ^4 r" M$ k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  h7 s+ M  s6 b) Y) o, F1 s: H2 _. }4 v8 P& J. u2 ?" J
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; I. Z! J3 w7 g. P/ w6 \* g    mcasp->regs->DLBCTL     = 0x00000000; // Not used. q" X- d1 Z( G
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 [4 b5 A6 f1 N/ `$ g" h- D
, `0 w8 `+ z4 \3 g4 _! a
/* Starting sections of the McASP*/3 t9 v: u7 @+ y9 Y9 w
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 G7 w. A. F' p. `4 M; ]: t  ?! l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 s( f0 c2 \) X! Z0 j
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. M; r' r( p2 P* g  U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ b6 l0 r* D& f2 K- W2 D' s3 d5 m) `. W4 |) ~2 N
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 S# [! V% C. b$ y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 \) H6 Y4 H4 z# ]/ L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, b5 B8 R9 o3 `7 O( c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# j0 r' J7 i/ V. ]- Y* _9 ^" E% |/ P$ e
    mcasp->regs->XSTAT = 0x0000ffff; % P- ]9 ^/ }. L% }6 ^6 h% F7 V2 F
    mcasp->regs->RSTAT = 0x0000ffff;
, e& Q( ?" l5 e9 T* k! c7 g1 ?8 {6 s8 \3 Z/ N: _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 [5 N5 f+ e1 e4 x# H# y+ c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- C* N8 E( t& p* `8 }. X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 o! N' N/ G& ^3 ^2 g) H# j/ K) ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% P5 ]8 \# z$ y1 M
* d+ w: X+ h' M0 u* v    /* Write a 0, so that no underrun occurs after releasing the state machine */( t6 B% c! e# r. i+ C. S
    mcasp->regs->XBUF5 = 0;7 K0 O  G& p% n1 F- A, H+ \
    mcasp->regs->RBUF0 = 0;% {4 f! F9 q$ O; k, Q+ ~
$ M" \+ K. d0 c6 H
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 o; e* D& b) {8 R) n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ \. W- X; O  w' _( G
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ I4 Z) r! r* b% e2 o: N+ W) I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 A( F  ^$ t8 Z' ?) C
$ o# B0 w% n4 _6 D
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ \, w7 C  m3 Z3 j1 ?! u4 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ x+ l* q+ T- ^7 m! z. f5 v3 @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * R) |6 t) w: p7 m  W5 w+ f% I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 F- G  i8 E; X

1 t' b  P2 D) m1 M0 P' R9 n    CSR = 0x0000;1 b4 L$ t1 u- K& c6 Q+ c
    INTC_INTMUX1 = 0x3d;
# f% A* R! a  H3 B    ISTP = (unsigned int)vectors;
; }. U: b& H! O+ V7 o: \/ E8 I    ICR = 0xFFF0;  
7 h! K; e! }$ O7 J7 r    IER |= 0x12;  
% P9 r+ h) _5 R: j    CSR |= 0x01;  - r# P# k  X: z! E: H
- i4 |7 J$ P6 b5 T8 d
' ^- t+ }8 s) E9 M' I/ U1 D
$ d# f6 ?1 x! h( @% w4 O, b+ G8 J# Z
还有就是两个输入输出函数:' ~7 a; F( B+ [1 y/ W. p$ z
void output_sample(Int32 out_data)% C4 A* F) E7 l- Z5 P) C3 y  ^
{6 `. u+ K8 {- _
  AIC31_data.uint = out_data;  
6 F& g- G' I) Z3 b9 G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  A. ]; _. |* o+ T}* h0 c0 \, w& z* d
; [1 c+ m3 Z4 O" I: X0 c
Int32 input_sample(void)
! n; g/ I; q7 m) a{  ) s2 F8 d6 ^/ @1 S( Z, s
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
( z& t0 F: c/ o! [* N% d# d2 y  return (AIC31_data.uint);
$ E. i6 F6 _7 m# f6 k" n4 S}! ~" k# D6 Z! @) d; C
! d% i+ b" _- a. d+ A- e; O' B5 N5 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, 2025-12-11 04:42 , Processed in 0.044118 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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