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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. {4 w' H  C3 j1 i* u; [
main文件:
2 }" e) g/ X" ~interrupt void interrupt4(void)  
. g. M1 Z* o$ w- P$ _8 f{
% [; C$ n4 b/ p- B  Uint32 sample;) s. l: o9 T- T% w4 {, R+ Q
' F# o9 |+ o8 ]: p* N
  sample = input_sample(); // read L + R samples from ADC3 ~: t/ I# c% J' I* u
  output_sample(sample);   // write L + R samples to DAC
; C* ]9 t  `, \0 [6 R  return;& V& u" h1 r7 t( i1 l: m; K, `
}3 b3 f9 ]0 Z. @; R. Y" X0 I# c6 H

- T$ u' {  n* G2 }+ L: J3 N* cint main( void )* i( J2 @0 F" k% ~6 J
{3 [6 w+ T+ ?. r
# i2 I2 H$ a; Q+ @% a7 m; l; t
    /* Initialize BSL */
% }. T( |7 v. _1 L, B9 n    EVMC6747_init( );9 y3 [. ^; n, P3 c! L; X1 V2 ~: o
        /* Call evmc6747_intr function */
* H1 ]* F" x2 @. x1 i* i3 ~    aic3106_init( );
1 F5 k6 A/ m! G& h9 Z        while(1);8 ^# n( n$ s* E9 f7 T
}+ i- W7 Y6 _5 N7 h8 N8 L
2 c( j3 M, F0 |5 }. y9 ~+ C! a7 n
# H3 R6 J& D4 ~8 p; Z5 K  O6 J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, D+ \- m! a* C  R6 R
/* Initialize MCASP1 */- n$ I2 v- Y7 _; f/ G! Y
    mcasp = &MCASP_MODULE_1;
6 P- \2 x4 J; u- g    mcasp->regs->GBLCTL  = 0;       // Reset
8 r* y2 V$ V' n# R$ `4 C    mcasp->regs->RGBLCTL = 0;       // Reset RX$ w. ?' }/ `/ x) |. J& C
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 l2 ?" d- Y& S, f1 }% w7 P8 D
    mcasp->regs->PWRDEMU = 1;       // Free-running
8 a% u. W$ U$ F6 R   // configure McASP0 receive registers: R& F: g" [2 o$ p8 _9 K: z$ R6 Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# x" @: n( }7 N, l7 X4 Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 y% Q' L) d( ?  a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 Y' u5 x. W8 E1 i    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): R# x9 f0 N/ h: h/ G& z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), u1 B" L( ]5 D1 i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% X% {" ?4 j8 ?* i
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  X% M5 p  }) r" G" B: c: Q  C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 J) k. s5 ~" A# P/ h# t; B
/ {0 [& j% Z/ f1 y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' e/ h3 u! V) X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% @% p. ^& j& y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& O7 u) G5 B" b2 d    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 ?: C+ X" y. e3 [3 Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, U( P; \; r; x# O4 z( W. F    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- D" @! Z2 _# j2 G. w4 E/ f    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" R7 e0 n, G$ h/ J5 }/ M
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 ^( W8 w+ H8 D& I/ c2 N' R. M% B* G: D  Y0 D; v1 W  t& Y1 f. S8 M9 |$ I1 V
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, g4 q9 w% X& p9 j8 D% i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' u* z4 d7 S8 J  t2 t$ d    mcasp->regs->PFUNC      = 0;          // All MCASPs
- j7 j) x, J$ ~0 [    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& G+ }0 O* D* u# H6 q
1 B1 K9 j0 h% \% }- \# Z
    mcasp->regs->DITCTL     = 0x00000000; // Not used6 U; n7 {" _. y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( i6 s5 J! Z5 Q8 E
    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 n" w2 \8 ~( Q* o- e* I
2 \! n( G' `9 G. }$ [6 _6 H& X/* Starting sections of the McASP*/, h: M& ]: I# z: _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + U/ j# c5 a7 z4 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % u- Q2 Y1 |0 j# C3 v! y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: M9 }; {5 h, D3 I0 I$ I: [6 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 x8 `4 G& R$ L1 y% d. C. P
* m! o. F$ q' J; W' z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! R  s' \! O- f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' R: q7 h# s  F+ E+ }    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 y0 P) Z% \6 v8 n( g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: q2 N4 H8 n, J5 G+ O2 d) D) Y% h
2 f6 c' Q7 _- l. `0 ~: B0 g    mcasp->regs->XSTAT = 0x0000ffff; 7 `+ g9 E+ g6 m& C
    mcasp->regs->RSTAT = 0x0000ffff; 0 g3 M6 D6 I& T) k. i
( g& Q5 }" e  {; ?5 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 U. y6 T* _; R$ k- k; T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, r" E! b: W- w9 D+ W7 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + Z% W1 E: h% I; u8 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 }9 i2 B; o/ N1 A+ O
- j, x; G7 W7 C$ @8 l( |# T    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ {8 T# C2 o- w8 ^* F& q. j    mcasp->regs->XBUF5 = 0;6 a5 X+ d6 q: E! r# Y9 d( V
    mcasp->regs->RBUF0 = 0;3 s8 S' T; R& W7 Q+ l
+ g1 K0 F+ a( n% A' _  g6 u# n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; W* C1 L) ~+ W- q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% L# l: d. n( D, J+ s- p& Z, f
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " ~4 m3 t! |/ E+ o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 [) @( h/ U3 a- {

# x4 ~: w- [) i. P5 Q7 h! }! V8 U& N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ z2 @/ B. a. ?3 p, ~& G$ j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 q0 X4 |1 t$ N1 d  R, R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 m0 K; `, Y! K; v6 W+ x+ ?0 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" ^: Q/ Z+ v# I7 Y% a1 I5 Y
# a& I9 c) E* ^( f$ C, w) q
    CSR = 0x0000;# `% P! t2 K& D2 L0 F
    INTC_INTMUX1 = 0x3d;
7 b/ \9 E/ @, c5 F9 t    ISTP = (unsigned int)vectors;' k6 Q" q% w5 W8 T9 J5 q
    ICR = 0xFFF0;  # h  d0 l- ?- e, B8 r8 }/ W/ P; }
    IER |= 0x12;  ! X8 u$ `1 H4 W4 r2 M+ [* K2 z/ O
    CSR |= 0x01;  ; _8 c4 }) l+ |- l# E0 `9 S

) X# c2 }6 r6 G8 v  r; V/ V1 l) b% R3 t5 m# T6 }, T

+ O3 x3 W- j1 A" g/ V! q还有就是两个输入输出函数:0 N4 u0 ?- y( V" r- F" f) c) Z) ~
void output_sample(Int32 out_data)
7 I9 C) C6 T( f6 [{
$ ?& _6 [: `* q5 n& I  AIC31_data.uint = out_data;  4 D& x' i1 V7 x; j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;- S' Y- D5 f# Y! C! z4 e
}: \1 H2 V( L0 W$ Y
: |' o3 C% l+ m( ]: u
Int32 input_sample(void)
! l% N. W- V/ U{  
4 j$ n/ K# d' s8 R# C  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 K2 d6 l8 s4 t5 n; P  D; L
  return (AIC31_data.uint);# o  D% j6 x* m
}- k. b& A6 F" Q/ E2 t; f
  K2 D7 r$ w  _7 M4 a: X* O
分享到:  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-1 12:43 , Processed in 0.049002 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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