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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: d- h; u  _) l& G/ l# xmain文件:- ^4 G& @4 N" Z6 q' X+ z
interrupt void interrupt4(void)  $ K) O7 v- K7 B$ H* M7 X1 W) Z2 m
{6 I5 M  c. ~7 O+ ?- R( y( o
  Uint32 sample;
$ ]4 P6 H' Z* q& I
+ g% O7 O( S0 p% [& A% f# `  sample = input_sample(); // read L + R samples from ADC- p/ \7 T1 ^* D9 Q7 D% a
  output_sample(sample);   // write L + R samples to DAC
4 O" ^, b% S3 Q  return;. C; D2 {/ U) H6 n) q# X; Q
}& P! n4 \' e. u& }/ \+ x- r; P
. a& O' j6 [% k
int main( void )5 I! E1 ]' y! Y/ r& W% \
{! ^/ U3 w$ a2 U" I+ F; x1 X

, n% b) V6 X# K5 A& \    /* Initialize BSL */. ?% ^* h* s5 H* p* w4 T+ p; t9 l
    EVMC6747_init( );3 G: D/ I: i: m/ ^9 G
        /* Call evmc6747_intr function */
9 t  f7 {# m) c9 u- W1 w    aic3106_init( );( c3 D& M: `: d: O( J# C; G3 _' ^1 ]
        while(1);- m1 a. H8 W% ~' Z$ ]
}) `- a* a7 Q7 [! Y# h9 I

5 h, t* V9 I5 f% @% N
* u( u, r  `7 vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 u9 w3 f8 Q$ J/ F) w3 L# a7 ~: Z
/* Initialize MCASP1 */5 y& c/ s( O6 c5 i9 c7 ^% Y# r
    mcasp = &MCASP_MODULE_1;" f) i2 `# K, ^# _$ p
    mcasp->regs->GBLCTL  = 0;       // Reset
, x$ [: K+ i& t' v) s    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 B. a" J1 s0 E. D" ?    mcasp->regs->XGBLCTL = 0;       // Reset TX7 X- M/ I. y# Q, b
    mcasp->regs->PWRDEMU = 1;       // Free-running$ N2 G; j  j- B. C# [
   // configure McASP0 receive registers
9 E( e! ]$ I0 m+ x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% l4 a3 |6 o( ~: C$ o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( ^* k+ O. N: i. Q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 P3 e8 b0 \5 F& m0 E) @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ {4 R( p% V& r* u2 r2 n% B, _9 M7 Q: t
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 D! I5 Y2 f; h$ V# C5 ~: A  o2 _    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) Z. M5 D* t& O* K8 k1 v; r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 }' B" J# ~6 q6 }" n$ W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! d; f+ {3 G7 ^7 ^

" q% \% F+ u/ E% p* q% D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
2 v) b1 W% i' @/ i    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 A0 O0 N% u  w6 |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& F& q; P( H+ [, \! f; D+ n
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 h/ h# f- s- }; C' K    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- D* h. {' C& ?% P5 u
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 D: C( C, c3 C& W( h% g3 w  A
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 F; V7 F& t1 u4 P4 K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- g0 m( X: i- B& B6 L

3 \% W6 Y% C; ^2 j, ]$ M- f* q- g& a    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  q" ]* d, i8 Z% f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 Q. j/ T/ g' {. o    mcasp->regs->PFUNC      = 0;          // All MCASPs& [% }$ E  S0 i' j3 d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& Y, k& ^' D  A  ?- _4 @
: T0 f9 U  Q9 N) }
    mcasp->regs->DITCTL     = 0x00000000; // Not used& G" I0 E# v6 `1 ^8 V
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 f4 p' r. A- d, S( \1 w1 e    mcasp->regs->AMUTE      = 0x00000000; // Not used% d3 Y! R6 ?/ e0 A. H+ c) C' i! Q7 s

$ y9 f: v) {5 ?8 o5 h; \, V3 F/* Starting sections of the McASP*/( z, z7 X& K1 S9 w
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% K1 s. w( q2 W# R2 z/ N# ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , ^4 }! S, e2 h3 f* }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / i2 G7 ?  B+ D6 w# C6 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) }0 R9 n4 `& }& j8 l& |4 K( d

; @; J' g0 z! y- F7 M* f+ c% R% V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' L! |' w: X/ x, g  B! i( l; }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 p. ]8 h  F# ?$ X; v4 M5 U    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# v1 h$ q5 I' R4 v. z/ C' O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! U. G# a; j" m6 S, P
6 }0 p- t9 M3 X# L1 X
    mcasp->regs->XSTAT = 0x0000ffff;
7 G" Y7 E+ [, ]    mcasp->regs->RSTAT = 0x0000ffff;
+ m. _$ P  i/ l. E4 e3 D6 C. \7 p0 G2 s) K: `; |$ p6 z, ~1 B4 I  t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- L) a. x! S& N' ~; s6 S, w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 h- ~' I  E: \. z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # K" u# J1 {# ^6 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 s! Y! E# ^4 X( G

  R, N9 C% H( N* v  h    /* Write a 0, so that no underrun occurs after releasing the state machine */2 ?2 Y6 H1 B$ E' B6 m
    mcasp->regs->XBUF5 = 0;
: A( M% ]' s" S4 [* Y6 M    mcasp->regs->RBUF0 = 0;% D" l# y  |* t" U$ f) |, B

, ~7 e6 f' @' ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 F. Z! o* c5 B# x! u# H- D8 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& C, r6 o" _+ I& y, t# s2 M
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 Z' a+ ]! K* M' b% p0 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 y+ s! W1 S  Z  h( f9 E, D
+ |) l1 B5 p$ Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 N$ a) p( X2 T- k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 R, l- B- E* s) U. {8 u) d2 i
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 m. a  S# q1 N: [$ t2 M( g# q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* t! n" t  M5 s% B- _: c& q
8 ~1 [- c! l  F. v7 J) P3 A) ?5 x
    CSR = 0x0000;
: L$ ^3 ?1 C: T' X) G    INTC_INTMUX1 = 0x3d;, A: ~: @6 _, n8 z
    ISTP = (unsigned int)vectors;# n1 g6 Y3 s5 j! E" A
    ICR = 0xFFF0;  ; d6 k6 Q' X& c$ a# u) t
    IER |= 0x12;  
# D! A4 o+ g( g1 a. F2 C    CSR |= 0x01;  
$ Y; l% C/ m$ E' F! S) f2 U8 X' B- a0 y& K0 J( C; e
& R1 n! r4 x0 O( ^8 \" F/ m
( [. z) `5 G% X+ g3 n1 q; I, b/ U
还有就是两个输入输出函数:
' Z9 C6 n, R: Y$ J  kvoid output_sample(Int32 out_data)& B2 ]! L; v+ i( J+ b7 A
{5 ]8 k( }' q9 g% i2 m: `
  AIC31_data.uint = out_data;  
$ M& ~9 J" o# T) u. b  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- N# P& P: w4 |  Q) J}
5 s) W/ C4 r; N6 K9 `3 S* d$ W2 C( H3 a4 R$ r& v
Int32 input_sample(void)
. a- h; f" Z  w9 g9 [- i{  
- t- o9 Q8 ~& I9 l  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 r* H/ {  L/ [& W4 o! V! @  return (AIC31_data.uint);
7 @" t* `2 F" r0 I' ^9 p}+ W) h9 y$ N! c: L# Q4 W! A

5 K+ ^0 R9 O! a1 t1 Y$ ~* f
分享到:  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-7 07:06 , Processed in 0.047792 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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