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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; M+ p! I) x9 lmain文件:1 H' H! ?: F! M
interrupt void interrupt4(void)  5 h" E- Q4 r: V% w( ~+ G5 r6 S; y
{
2 j: ?- V5 Q  y9 h; H$ \9 I  Uint32 sample;# e8 q3 u: t$ T' A

5 X( x6 g4 c0 ^% i  sample = input_sample(); // read L + R samples from ADC
( O6 Y- d/ R# z  output_sample(sample);   // write L + R samples to DAC
) g6 q3 O( `, I, `5 W  return;# t* H2 a6 _. ]9 v) z* N
}: E& l2 B7 ~- L
, H5 \/ [; X6 W+ ~6 k; D. C
int main( void )6 S5 v7 H6 t  K- k
{) n- X! D# @  y- r! g5 i/ K2 n* h( k" R
$ V: x  x9 j+ P5 y" T3 y2 g) o
    /* Initialize BSL */
2 @; A8 U; f3 `% l# w. Q. l* s    EVMC6747_init( );% T) I( f$ \8 }9 [+ P! Y
        /* Call evmc6747_intr function */
( G; Z# W; x: r9 q    aic3106_init( );
4 H/ @7 E+ m& a* T        while(1);( o) X  s4 J5 @) N0 y
}/ s: b( R. O  k; h

7 ~( e* n: c# Z! p! s
3 S: b7 }/ m* m/ ?( Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  G  {. @) j' Y% w/* Initialize MCASP1 */8 i, W& ^. ]2 _/ j2 [8 X3 N0 |
    mcasp = &MCASP_MODULE_1;
/ v1 U4 L7 y$ V! f    mcasp->regs->GBLCTL  = 0;       // Reset" J. h, v& C. x/ ~) i
    mcasp->regs->RGBLCTL = 0;       // Reset RX/ B4 ]; T! p. }( Y( L! }
    mcasp->regs->XGBLCTL = 0;       // Reset TX* ]! f5 D' y# `6 g5 a! S
    mcasp->regs->PWRDEMU = 1;       // Free-running* r1 @( h) g+ D. F% w1 f
   // configure McASP0 receive registers9 X: f! S' U' v6 P0 g6 P' L
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% k. o& P$ i+ @; d    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! f# v% O' Z* ~: R/ }, j" S4 ]. r    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 l7 h3 u: c. t, {3 w6 M; [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 n( ^( }1 y) V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 S; Q& D0 Z/ w: s+ z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,13 g0 W( F9 `; A' {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 m+ G$ A. f/ A    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 O2 q7 l7 u# ?$ X: G
; K& \( l/ z0 E& ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 u. w. K' z: G" _" l    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  J$ M8 B4 v- W3 M
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 C5 m+ i4 J" x9 t$ f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% g* ^7 W4 }$ k5 I: s- g- t# S7 `    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 R) J% E3 N' f' B4 D' w/ P  N    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- D1 h' y, w! t  s, U+ N& y  n% ]9 ^
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" m2 S# m' t% d; R) J    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% F. k) M2 Q" x

% S5 O. s. q6 r5 N, O7 n/ |" y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ {( {  ~3 k, s! f7 {
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ |8 I! h5 I. b- D+ ~8 E    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ W: k% B, Q1 \- W( c+ I  m$ d    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 p9 c# Z8 p% O; D; o0 m/ K% O% g* C2 e' ]# }7 O
    mcasp->regs->DITCTL     = 0x00000000; // Not used
( J, T- r* S5 q- r! [/ q2 C+ y2 T    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: Z' c' J; {! E    mcasp->regs->AMUTE      = 0x00000000; // Not used1 R& W+ t& g4 e

5 Z& h* x5 d0 H( [- m" d/* Starting sections of the McASP*/$ y  x* O" M$ {6 d; U& i/ i
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# ^+ T3 D  K- l$ [6 k7 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & N- E* B2 L# ~2 x
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( A' c/ l1 W8 m) P; D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' ]) ^* V1 I% e# Z" k) ?0 _+ E9 _5 z8 H- m: h- b& b
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 U5 \( Q  _! h: `& z# ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ n2 s" c. s: j2 c+ C" l. s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( v7 y( o- J3 M4 |3 a: c/ |4 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ^- l- ~) h4 ~& n/ O5 o3 i( C; D, [4 z* M2 \. O
    mcasp->regs->XSTAT = 0x0000ffff;
' l' r1 A+ O# P2 G# T    mcasp->regs->RSTAT = 0x0000ffff; 7 y6 k2 T" z- N

* v( d& ]' \* v$ F. l    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ k+ P: {8 i5 E& A) T; g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; G  c( k1 B( @+ I  ~! P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 s0 F7 r3 _8 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; P" y+ h2 [& r
% V& J2 q4 p5 j$ j    /* Write a 0, so that no underrun occurs after releasing the state machine */
; X4 {, j# S8 l. \# q. y* _    mcasp->regs->XBUF5 = 0;! b- N4 ^6 x$ |, m8 m" T8 e5 g
    mcasp->regs->RBUF0 = 0;
( ], O4 {+ N4 K3 }6 d8 _2 L7 Z; B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( R$ j' w2 i9 ]" R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  y; r& O! z) |6 o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! o/ k$ u$ H% e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' K) g0 A* {/ I3 S$ k+ O) a' P, Y( N' ~( G; g
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. W% |. n" s: t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% ]3 L) r! z! N  |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , Z& C7 _: _  C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, V, \8 R. f* P( r# f6 k. G) D$ h! }- R. F  w0 k* d
    CSR = 0x0000;* {2 i3 V+ e9 _; t5 M
    INTC_INTMUX1 = 0x3d;
  ^" N+ z8 ^2 {" [! P% Y    ISTP = (unsigned int)vectors;
" ~& ^% m0 j. J    ICR = 0xFFF0;  2 x  H4 n; I; }: Q+ L1 H
    IER |= 0x12;  
) `5 S, o2 S/ D/ Y$ C) L, `' i    CSR |= 0x01;  
- n3 W8 @, G8 d2 O3 e3 P% m9 d$ U; l. n
3 |5 T% r9 Q0 o; P

! s* V2 l( w. f0 s$ y  B" x9 J2 j还有就是两个输入输出函数:4 b, S' z( H7 q* Z1 ?: u- d7 E
void output_sample(Int32 out_data)
- w7 l9 O5 c. G9 m' j$ a$ L{1 K: G! Z* `( ^7 y3 t$ ?: c6 E
  AIC31_data.uint = out_data;  
! i% N% ]# e' U  MCASP1_XBUF5_32BIT = AIC31_data.uint;. {5 h8 f; F: \( H
}
4 J: W  o) [  F* s
/ m1 f1 K5 a4 r4 u- B+ H4 T3 IInt32 input_sample(void), @: _9 K2 r  K0 l- L1 J
{  
( U; s0 }' X* l+ I; ^% x  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 F5 m) b3 g: O- M" v4 d  return (AIC31_data.uint);
; [0 F) A& r4 X5 B}0 g% W! O) d  [0 o1 R7 M

- m- Z. v. X* D- ?1 f4 w
分享到:  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-4 18:14 , Processed in 0.040294 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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