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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ q5 C$ L6 s5 c
main文件:
" M+ f+ l/ w" }0 [7 M4 l& C* a8 ninterrupt void interrupt4(void)  
  C' i) ~; U/ I* N/ Y8 c: Y{
. u$ S, ^/ m2 [3 @" S) X- W$ ~  Uint32 sample;
5 Z: \: R( @. X+ p9 w& d) W' I0 U+ I7 `& h/ J+ E4 c
  sample = input_sample(); // read L + R samples from ADC
* @  W! j( e( ]* v2 L  [& K. J  output_sample(sample);   // write L + R samples to DAC ( N. g4 ^1 q% B
  return;# p" J5 U3 ?  x' U# n; H: x5 X
}
$ l2 I3 B5 o: L1 V. p7 v7 C0 x  h  B, h' d
int main( void ), I& f( _! J  g. D, E! R( m
{
* m8 G6 e6 [  G& n5 b5 m
+ L+ l, b$ J( f    /* Initialize BSL */
% s8 m8 v, ?6 |" A3 o    EVMC6747_init( );$ \% l4 a. d+ {
        /* Call evmc6747_intr function */
9 {4 b) B9 W- v- P/ K    aic3106_init( );
" A1 S9 r/ V# D: e/ D3 Y' {4 u        while(1);& B$ T; k" D& m& }
}
1 O! e8 U) b2 h  l- n& u
2 @) D8 m- p5 R0 |2 I# S, t1 p0 o$ U& r+ D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 {& y  v. k9 Y( l8 N/* Initialize MCASP1 */
5 p( }- S# z" ]$ {; X+ P# z    mcasp = &MCASP_MODULE_1;
4 D" ]% Y) ^  b2 V% W$ ~: |    mcasp->regs->GBLCTL  = 0;       // Reset
! ^0 [8 I' D' {) A! \  \3 E1 A3 l$ a    mcasp->regs->RGBLCTL = 0;       // Reset RX
* S, ^6 a7 A) `( f) B    mcasp->regs->XGBLCTL = 0;       // Reset TX8 Z: H1 o4 b6 n1 r. D
    mcasp->regs->PWRDEMU = 1;       // Free-running7 A2 r$ h4 ~: h% T
   // configure McASP0 receive registers+ m; Q" K$ d8 R% v; J4 h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) K+ [" i2 b. v; K! x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 a0 p5 j  U1 B7 Z7 f- I) _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, i8 b- W& r" s3 b
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ X5 {6 w+ h8 y4 N8 h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ q& R& x0 L0 h9 D& \, L
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: G, w- ^% f0 G4 }3 _    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' E: S  I' `' ]- G- A/ ~+ D! F    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# |0 j/ z) t- \+ w7 \; J! y7 W* I& x% u6 ~1 X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ B6 M3 O' k& d' [4 o6 R0 u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) r/ ^( w: G* A7 f) r1 E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" v" C1 {, l  Q0 G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  _( c- q( |9 Q5 h    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# F( K4 Y0 X# ~- L0 S( @% G; B6 G
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& S2 P2 E% }. z$ [7 _; u$ ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 W) v) K" q: u1 d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 r$ e$ @% ^) P1 \  n* }

& h  S1 g+ G  h/ r    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 d7 G) j3 u) x, L4 L    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 w- k+ W; Z" O9 z. g& K    mcasp->regs->PFUNC      = 0;          // All MCASPs  v% v0 ~1 J6 p; D0 t# t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! ^. x' c+ b5 K( }& ^: c

& P7 O4 Y$ {  n    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 ?: `/ x( s9 O    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& X3 @" e, N: Y, A" S, h    mcasp->regs->AMUTE      = 0x00000000; // Not used: I* p) D) ^) m5 O! ?8 U+ s" ^6 d

+ m- o# r& v9 [) X9 v9 \3 H* {/* Starting sections of the McASP*/
) N2 Z) }. V3 e  ~: U    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / ~; ]" G4 F4 j: v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ x* w& g) j" x8 x6 A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % g1 y1 R( B# n, ~; v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 U6 a! C. x- G$ o1 i# w. m/ i7 [

7 Q& ?5 ?' o8 B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ B- X4 A' J+ \& y) m$ T: n, B- Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 _+ Y* p, Y/ Y3 {: G  A, e    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 K# C' q6 g% o$ e/ ^/ s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 T; M3 @8 |/ V& g1 i) B

+ J; [# ~/ e  E6 U; n1 M# A    mcasp->regs->XSTAT = 0x0000ffff; ; l, U" H8 c3 u/ s/ a  c
    mcasp->regs->RSTAT = 0x0000ffff; $ w# ^) r9 x$ m

9 M8 |( q$ A3 d6 |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  M2 ~# h( r# Z+ z2 D7 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ I+ l. T7 J) J  z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 g" q6 q4 p8 h. i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* a8 G/ r1 Z9 G% U! r( i

' s9 Q) s' L. k1 t    /* Write a 0, so that no underrun occurs after releasing the state machine */5 ]: x" |4 n: J
    mcasp->regs->XBUF5 = 0;! |4 F' W8 z) n# V( `
    mcasp->regs->RBUF0 = 0;, O( e  g. h' M) M

4 u3 {) d+ U# d' K: A6 L    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - L2 Q" H0 O" F! |* J* y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ ]; _( W: D$ c; `- G2 s: q" H$ z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ ]  g8 _" s, i7 x" L3 i% O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 S6 y+ G, {6 g, O- t3 `
+ D; I2 E) x# J% B* ]! d9 T2 f# h
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 i3 l/ O# f: M) L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 t) j- L2 J* q9 N$ l1 q$ p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) W% k/ p# e9 N+ T  V/ _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! B2 k# j: `1 v) p" z/ z( q5 O' a+ @
+ y" B% k0 t4 N7 P1 f0 O    CSR = 0x0000;8 r( C/ O3 d  }5 ?+ _
    INTC_INTMUX1 = 0x3d;: U0 h5 Y  J! R3 J
    ISTP = (unsigned int)vectors;  I3 K, C: M# k8 F! @2 b
    ICR = 0xFFF0;  7 ^. Y1 s  W" s3 r) Q2 e
    IER |= 0x12;  
( d8 F: T( F  s  G4 P% L    CSR |= 0x01;  
7 o0 `0 B/ i0 G4 `/ y$ ]. S0 s- P' }* G  E2 L! z( G8 t5 R! [
$ o& W4 R+ Y% }# C9 W
8 r7 s( a. }3 N+ w. @1 a
还有就是两个输入输出函数:: r- X% L2 w8 A, S  ~) Y- R" k5 P
void output_sample(Int32 out_data)
+ u: K+ A9 w- _, K- Y  b{
7 K* }4 a+ |: S* ?& g  AIC31_data.uint = out_data;  
& M5 Y5 u' D. p  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 E/ l2 g& m  a$ P  h, j' I; D}* }6 a9 m& U3 v# F7 m7 S

7 N8 a; q4 e+ {" E  [- }2 XInt32 input_sample(void)! ~# j9 V  D! [8 m" B
{  1 s8 ?. I  e# V" J* y  T9 B/ a( d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;. ^3 Y& F# P$ o# x) O
  return (AIC31_data.uint);: l' y# e0 J- x0 d: [# P' ?
}, O6 P" D" S! r+ j

( @  l; L# ]8 u. 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-8 01:51 , Processed in 0.043512 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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