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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* H/ _8 P+ j4 B+ Y1 q5 a' s3 \
main文件:% P% |$ p, t5 L) p1 _. [3 k
interrupt void interrupt4(void)  
$ v- \$ o; N( g% U6 I& {{1 [3 M: x, p: A& H1 B
  Uint32 sample;# \0 j; ^9 \: c8 e5 d: m
2 {. f, Y) S4 r- D, n- w
  sample = input_sample(); // read L + R samples from ADC
2 @% b/ _- q, }) b! K$ }  output_sample(sample);   // write L + R samples to DAC
- s9 X( w$ x( }" h  return;$ g; E! E& A0 S& w! y
}1 q& Q0 p9 g/ M7 {1 F5 ^

6 B) w- S# ?# Qint main( void )% D2 S8 e$ a& K% f7 a. o
{4 S$ `/ ]  W- t% p

: C5 R+ ^  ]* n: h8 t( }! z    /* Initialize BSL */: w/ D& H4 n9 J# N: l+ G9 N6 @
    EVMC6747_init( );7 g: J; P. P/ _' N& b* d8 k  e7 I( B) `
        /* Call evmc6747_intr function */
! M) r  j) H0 o! G7 ]/ I    aic3106_init( );
, c+ a! U# |) D7 ?) S* c        while(1);' Y7 x9 p1 M& i; d( @$ x/ I
}1 t" h& Y, ^5 f8 K2 F  f: L2 m

2 ~/ v- m5 W; B( z8 }! Y( W; W- u' V' o$ P3 q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% \  p$ i& J' a' u1 K& P4 o6 i
/* Initialize MCASP1 */
9 z5 A: o/ I  d    mcasp = &MCASP_MODULE_1;) I# N6 k8 Y3 G' ~
    mcasp->regs->GBLCTL  = 0;       // Reset) T& w) t, i) l3 Q! k. C7 c" a2 D5 Z; v
    mcasp->regs->RGBLCTL = 0;       // Reset RX4 D* W. ~% Z2 e6 T& }
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; y( ]( ?5 U' E    mcasp->regs->PWRDEMU = 1;       // Free-running
4 A+ S' g$ w$ D! n$ J' u   // configure McASP0 receive registers
/ g5 a, j& w1 p& h" K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' ~* J1 S4 l3 h
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! u: I8 c+ I$ O/ ^0 K# @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; B/ N& T0 f. I' Y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 t" g+ `" o( I# Z" W
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; \9 z* N; I6 S+ f. P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& x" q; k7 j. r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 v: l4 [' ]  v5 J3 i    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 U/ V. l$ S/ E: g2 t7 N, C
3 t7 O5 T. n/ L) d+ T' e- e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 O8 t& e9 @9 N8 E  ~$ A    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 D* y4 ?' Y  ~' i  v; M: }8 f
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! o2 K5 E) M8 n$ G& ?4 ?0 {$ T0 N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) a4 U. Y6 ~8 i5 }+ f$ Y% I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( M  v7 k& _6 ?1 q. x
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
0 |0 U6 H7 X3 ^6 M3 D0 F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 U. x) q# \( a! L0 W* p
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' B$ |' p" t; v7 I+ X. O8 u& {) g3 J+ e1 Z, A1 X) F: h6 H
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  F* ~; B. W1 O! }7 Y) ?4 Y1 X3 |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 r2 I+ r1 B( z/ m# x3 g- }! B$ O" [) v
    mcasp->regs->PFUNC      = 0;          // All MCASPs( p+ M! R$ s& I& R* S& N
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 H  Q5 k. @( N, }$ q. J# l' \

4 p$ M* I4 f: {( _/ ?    mcasp->regs->DITCTL     = 0x00000000; // Not used1 Y4 n; E. c$ K2 \3 ?! d3 h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' v! E5 }5 Y$ _+ ?3 J0 @" Z    mcasp->regs->AMUTE      = 0x00000000; // Not used5 M9 {8 Y/ e2 d0 S/ w( _; w
$ E. G$ E  m& s# w
/* Starting sections of the McASP*/
$ b+ V: Q) f$ j6 y8 \    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 d4 Q. ^7 u- ], q/ U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 j! ~, g' S1 q0 K5 j( _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( w- l, e; ]8 k0 s, L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( R* d% D/ d; t, X) p; i  b
- C" j0 x' O5 D6 G6 g9 D
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" |- |8 J# b- F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 ?, B' v# F0 {. ]% w  k5 Y/ ~: y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 _: w& p5 N. z) Y: A' U5 @. X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! g& S8 i5 k  x8 v
) S/ E: c- c: ^+ R. Z1 N) w    mcasp->regs->XSTAT = 0x0000ffff; . ^& c) K7 i' {, d8 X! a
    mcasp->regs->RSTAT = 0x0000ffff;
. a2 u" \& Z! j  ^; j$ O6 b/ L: u% b2 i0 L$ \9 A! k' Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 R* C; F* h7 ^% `. m1 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; ~  X. j$ N& d* z2 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & v1 D5 A9 P1 p" f# D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# N: {) i% C0 g
" E, ?/ y  S* i2 P, B$ `
    /* Write a 0, so that no underrun occurs after releasing the state machine */- o/ B% t- t% M" w8 Q% y
    mcasp->regs->XBUF5 = 0;4 ?7 C, Z: r9 t2 a* d, m
    mcasp->regs->RBUF0 = 0;
, ^: M5 q7 D' G$ L& p9 S
' m7 u$ N' L/ A) l/ [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 O4 e/ r, B- G: v. V: ?% o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 {8 o$ x- u& R5 ?8 e! F; z2 k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 w& [& U! n2 P' A/ ~) V  E5 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( d. Y/ @' {( A( V. T+ O

* ~9 x0 }/ U' W( P  C    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 B: l  \/ b, S7 n" e4 }- d. O* f5 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 F; p- k# q5 w& a: z3 R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. z; G; r6 |( }* ~3 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& o8 D/ x6 M/ d' @' ], x; v
' n5 \# ?4 F$ U( d7 G; d7 G  ]    CSR = 0x0000;; H7 [5 c  c3 X' t1 S" `  `
    INTC_INTMUX1 = 0x3d;
/ R; D: L% f5 y) ^2 V- T    ISTP = (unsigned int)vectors;* T& U) s% p: V4 \5 h& i
    ICR = 0xFFF0;  8 C3 ^$ ^* r7 t  y6 L1 y1 X
    IER |= 0x12;  
" J* I4 W0 G6 r" m7 y) g8 l$ ?. z    CSR |= 0x01;  
& Y/ I* t$ c' h6 ~  M$ S) n! I0 `% K! l  V& M4 \! K- B0 Q7 }5 V6 m9 N

+ l9 J4 L+ T6 ]8 o. g! R9 ~! o" C1 @( _2 }" b' x
还有就是两个输入输出函数:- z/ ^1 M4 o% C. a  P9 f, B6 R6 V
void output_sample(Int32 out_data)
7 ]$ |9 c  A4 W{
6 V9 P$ k5 q- w2 G& B" h6 j' T. c  AIC31_data.uint = out_data;  
8 ^9 ~8 `# v% B' E2 d  MCASP1_XBUF5_32BIT = AIC31_data.uint;* l/ d* I: @# ^( L1 f! ^9 x3 J/ C
}
5 I1 [( v( O& ^% w. S: W8 W8 \
  f6 Q( P7 `( ~+ ~% tInt32 input_sample(void)
- N( k2 U% l! h) Z! P4 T3 }+ b2 x{  
3 n; X+ P6 p" }1 @; O! r& S  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 q; q- `* y4 Z5 o  return (AIC31_data.uint);: B& B+ y) V; W
}9 L$ M8 b& ^! r5 s

' o1 I1 e& q' A0 p/ X
分享到:  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-10 00:24 , Processed in 0.040161 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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