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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 L& s. I: b7 [8 R. ~" O8 `  J, t
main文件:
! k& X$ I, A) j. J' v1 L; ]& }8 Ginterrupt void interrupt4(void)  ) c( ~$ I" t- P, V$ j* |" t' J
{+ U. m# o2 L6 a- w, L
  Uint32 sample;0 m" Q; w; j1 z* ~2 S6 P
( Z' A$ D' J) I3 w7 O
  sample = input_sample(); // read L + R samples from ADC
" @  M, v8 Z$ i! S  output_sample(sample);   // write L + R samples to DAC & e! j9 J+ _* U% P  n& u
  return;- g  ^6 t# {  j" K5 Z" N( i
}
7 O& O6 i0 E- M( T7 N' M0 m* ^% n4 a) A) J0 D  q& n# p- b
int main( void )3 B; \$ ?4 Q! }, `( Y. ^- n9 P
{4 t/ P1 |: v8 S8 Z* g* K

$ a$ X$ X0 ?- b% t2 Q& q" ]2 A* t    /* Initialize BSL */
/ i. O+ X. y& q4 p    EVMC6747_init( );6 N, I1 @# K! d/ g+ F1 r5 l. k5 k# X
        /* Call evmc6747_intr function */
$ p# [2 L2 j9 B& h/ x2 H    aic3106_init( );
1 u% q' O* |& D' I# C        while(1);
: z1 E% o0 `: _6 t}& U5 D- R, P# X8 ^

" \. [( R$ `/ c) |" f- `6 |8 o
% l$ {0 C$ E! i" X6 b9 [6 e% saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 F. S! z7 G2 x' i$ H/* Initialize MCASP1 */
) @+ x9 r) l  `4 Q    mcasp = &MCASP_MODULE_1;
# o1 G* |- A% `( |% c- x    mcasp->regs->GBLCTL  = 0;       // Reset
. z, G5 ]! k& Y1 B' q  O2 ~    mcasp->regs->RGBLCTL = 0;       // Reset RX# @; b$ A5 ~' A1 W
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 H1 Y0 a4 C$ g& y    mcasp->regs->PWRDEMU = 1;       // Free-running
( k+ [9 C! D, `7 G2 d3 n3 C   // configure McASP0 receive registers
& k# e4 Q8 Z7 ]# K5 R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ B6 z# V* }* o! t
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 r6 @, G  d3 j- P; z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! s4 l5 u: [6 E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 |% n5 n+ \  ^" v) m7 O: V, c    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 T3 n- B2 n$ U4 V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 ?) [) r# q, Q' o  u    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  ]! S0 u- n. s8 C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 I5 d- {+ h1 A

! s2 _* Z" }% ^$ q- r: w6 I) `, A    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; L3 ]) h1 x2 x5 S- \    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" S6 r. C2 ?% @9 L: T! n: i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! S. E2 Z. M; \6 Z; L    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 o6 R- H" g! S9 f/ N: s- L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 p9 P7 W2 Z6 G
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  |. h! [  g, o; M
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 g) k7 o+ r% g! P& {* E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& p* M4 ?0 R& U. W7 b% T2 g& d% k1 ~* S% h) p( G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! m; ^7 P9 j$ }    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% q8 M0 h# r$ \
    mcasp->regs->PFUNC      = 0;          // All MCASPs8 `" \9 q* k# m4 ?* `- W8 j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 a4 H8 i! \; U  s
! y7 e4 S- F5 N$ I: N    mcasp->regs->DITCTL     = 0x00000000; // Not used
" B' Z$ V: K, @2 i( w    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) v! ?5 j' b7 n! k& |- f3 Q1 J" f    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 }- `% r9 W3 \% r% A' ~5 T" l. k! n; f& R! x
/* Starting sections of the McASP*/' Y: A+ h+ }0 m! p4 @: W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 k0 ^3 M6 U/ r8 ?* m) X5 Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 k5 s+ @! v( ^5 [% h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( Z( Q8 h4 p* R% \# {0 l' g: X; U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 N1 X! I6 @7 c
" h0 F4 B$ l: s% \  r
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# t6 d0 \8 I1 r3 r  N" x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% P2 M9 H- x$ m8 w/ i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 w* t* K% T4 g' P* n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 V% w1 ^- _: @, ~' k
  F; m& c5 q: E- ?+ {% z    mcasp->regs->XSTAT = 0x0000ffff;
; Z6 ~: D; j3 Q    mcasp->regs->RSTAT = 0x0000ffff; 8 D4 N4 a8 V5 W. J: _# V
1 [" l  z$ g0 g( B- f1 f& K1 n* J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( P0 G: {6 g- }1 b1 c( C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, w7 E+ R( |& D
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % @5 S) u4 u6 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- m6 Z$ U2 e! @2 }/ m& i7 S! V# }9 F8 ^
$ \" N* Z3 ~1 u; ^5 b- [% ?5 S    /* Write a 0, so that no underrun occurs after releasing the state machine */3 l8 `( M, j% w3 ]) q) ^; F/ g
    mcasp->regs->XBUF5 = 0;8 n) Z4 ]; A/ y6 c
    mcasp->regs->RBUF0 = 0;+ S+ H! z! {6 U' r7 j

. J1 c* r  J; V/ ?7 Z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 d- c2 `( v0 y3 w' B. H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ v; N; k  g. d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 L0 m9 b( N9 I. l; O. z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 t, Q; t, ^+ g) B2 X# X6 g) U

0 e3 Z5 s7 J4 E2 N# o/ k; \- e# `0 \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 @0 ?) |) r* H$ t0 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% n- E* j. z& R2 K2 R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 B0 D7 y9 s7 K7 L7 w2 o! g2 L4 R$ e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 w/ C+ L: s, i1 q  q- ]+ a+ Q, T8 x( x8 f' b- H
    CSR = 0x0000;' `6 c3 j4 ~  U/ o
    INTC_INTMUX1 = 0x3d;
6 b% s0 f9 \8 P( ?% q1 R4 o& j    ISTP = (unsigned int)vectors;9 f: O; l( {/ s4 Y& ?5 `) U
    ICR = 0xFFF0;  8 f% L3 @# C% V7 e. E: {
    IER |= 0x12;  ( M* \4 g7 i. o2 R
    CSR |= 0x01;  
: S4 {0 H. h6 s6 K0 m
$ x% u: F' X9 ?- M: _! M
4 A! Y4 r$ v! p. n) g4 O2 E# j: {  Z5 v( a  E
还有就是两个输入输出函数:
5 u. A  P8 h9 |' G$ }void output_sample(Int32 out_data)
+ R. V0 j& b2 E{
7 a3 |8 N3 n1 K; U7 q3 ]1 g  AIC31_data.uint = out_data;  
$ F2 H0 P6 w% u; d, C/ L  MCASP1_XBUF5_32BIT = AIC31_data.uint;: T$ t9 j- b3 U; c3 f
}3 D! a$ |2 z' F9 Z

7 n9 E  F' L: e* v9 P- H& ^Int32 input_sample(void)
* Q4 }: c: z( D( R: |{  # N& W3 k6 Q; Z# d; B3 \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" ~/ k2 ?9 M( z7 ^- q  return (AIC31_data.uint);
/ N* J, S- u# Z/ b& x}& `7 b- p$ E* {: }1 A

* l5 e/ m! E. P) J& u
分享到:  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-26 14:09 , Processed in 0.040834 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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