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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 v: a/ n3 h* b/ ]) l8 Umain文件:
9 C, t8 q6 Y' linterrupt void interrupt4(void)  
1 l' c5 C0 p& ~+ B% j9 B! @% ~: A{
- V7 }' K$ a! j! }  D' z  Uint32 sample;
0 S, o5 s6 j( ~; f; k% J5 Z' |. h- P. [; a6 R% L
  sample = input_sample(); // read L + R samples from ADC3 i7 D3 c. B: ^
  output_sample(sample);   // write L + R samples to DAC 7 B+ P" t' W- s! ]# M, O' ]. S
  return;
. t7 ]/ }5 j( C}
  u# B- I  v* o5 u! J0 z' s6 w7 r( ]- y5 k/ }" L; V: F
int main( void )
/ }4 i; g& s- ]+ p! a8 M3 j8 P{
2 W* g& E0 V6 Q5 \% G/ E  y, c
6 o, ]9 t) ^* }( f$ P5 ^$ t. o+ O" b    /* Initialize BSL */" u, p& Q: U9 p8 L+ Q9 ^
    EVMC6747_init( );8 L9 \* w4 k) ^! n; Y
        /* Call evmc6747_intr function */
. W7 I* W7 ]) E9 v1 Z: ^- a    aic3106_init( );
! L/ f8 E6 u5 {. x! D" j' T        while(1);
* S; ^: Q6 C0 _6 K; n; ?$ x, m}1 ^- {/ v' b( ]9 P# q: C8 O4 D
1 |( c) [7 C9 L' a3 e- q

1 t8 Z" r5 ^" X3 i5 d9 ]2 maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 H0 W/ T2 p( n( j& a) f
/* Initialize MCASP1 */
( f& B# {3 V, n6 _! b    mcasp = &MCASP_MODULE_1;
7 o, M" |, P6 M3 T/ n& ~" `    mcasp->regs->GBLCTL  = 0;       // Reset
& x9 ]' s! ]7 I+ h4 H    mcasp->regs->RGBLCTL = 0;       // Reset RX
* D; l' z* _$ v% Q# ?    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 ^9 t# ~; f% P2 q9 j; @* i0 }# [8 u    mcasp->regs->PWRDEMU = 1;       // Free-running
' ]/ d+ {' l: U   // configure McASP0 receive registers1 t; v! k5 T3 Q+ H3 W' z9 @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% A7 z0 z, q0 v9 \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# r$ ?7 |! V+ v    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# C& l$ i$ d: E* U) v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! n6 m; k& S8 i& ?) D, @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 h* {+ _# W' U( H: d4 n0 A0 B  ]3 G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 b0 c4 w; h; {- S' J    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 w. p' S: {  n0 p! J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% a4 m7 R2 G' p1 d3 U5 m) C8 g+ o$ o: \7 F8 t' `4 D
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 g, A& W) y2 R, e2 z# `: a$ |
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; Y) ]5 K2 o, }% `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! F/ s0 x0 p; m! V9 @$ W/ d    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  P) z6 A) P6 _; i: V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; [9 G2 ]. a3 c$ B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# Q0 O4 r0 _$ m$ v! Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- S6 H: O2 g- v3 w0 S/ b9 C
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. Y$ |7 B& \4 Z, |: U, ~7 O0 v- t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 d- S4 A) g+ h5 `3 i* K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) p- O1 y, C, U8 D1 M
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 j: R% a! V) W( @# A; y3 M& l4 c; W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# h2 X$ n6 z( x" n* Y3 ?4 }- X. t0 x& U  ]! M6 G5 e6 W( g
    mcasp->regs->DITCTL     = 0x00000000; // Not used% H6 J  s6 _' k( b, {9 [
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 e6 e  a2 V5 ?    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 O) w: c$ H& \: M- ]  m% G, L- P$ u
7 T, `, u  a2 q* M4 [/* Starting sections of the McASP*/
+ \; n4 ^- C  G    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: _3 t3 H4 W7 q/ m  @7 K8 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 U, ~- V! ]+ I( W% {( `/ ]
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: z: }0 Q$ Z7 f! [% H" G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 S4 f8 U: L0 \4 j/ P) M+ O/ q' d! F. D2 P' z7 T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 M  ?: R6 J, R9 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 |& y3 L0 k% `) h1 V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ t! I' R% s/ f7 v7 x" N9 T# h+ o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ U; e# R' I1 b/ N0 v4 r( c- Z+ k8 u& p" u, W; C4 k$ w- g, O
    mcasp->regs->XSTAT = 0x0000ffff;
+ z/ o+ q4 W" ?( L* y    mcasp->regs->RSTAT = 0x0000ffff;
5 ]$ K- z% ?# r8 q% I9 F
1 \8 c# q2 W4 B2 ]8 l4 _2 z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ U% j: x  y  v# ~. v, v' v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. R- ?+ P- h0 T4 a0 \$ X7 Q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 ^* n* m4 L0 S; r& c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 m; ]6 o) }& a: ]# [, o  B8 K
% n- ~+ m/ R# i4 y( ]5 K. e
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 Y7 H- V9 m8 Z/ S; n6 }
    mcasp->regs->XBUF5 = 0;
/ Y$ ], d* D* R6 }3 L) T: P    mcasp->regs->RBUF0 = 0;
2 P6 O. z) u8 w
8 }' V* O- @7 [; T9 `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 a$ \8 d" j' N( Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ w" T5 `6 I; D/ h' u4 g    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ e$ y8 i- l& s& G# x) X& q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; }! T  w; R( w8 w' ~1 _/ d. U. ?' n3 J
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # D/ i6 ]2 ]% u  f1 |2 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% w+ L. }3 F2 h7 C; t, }1 M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 w7 v3 @8 g! U4 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 h. t8 M5 {4 g: g4 k! O* Q8 G4 R1 s1 ]! p: i2 |/ e
    CSR = 0x0000;
; P& K4 J% B, S8 Q, [% T    INTC_INTMUX1 = 0x3d;4 [5 ^' ]9 U, z3 n$ }) S
    ISTP = (unsigned int)vectors;
( h2 _& M, z% P& H  F, b) ^' ~    ICR = 0xFFF0;  
# y$ l3 q; S8 T& d, a    IER |= 0x12;  * Q% b: J2 m& g1 l4 R
    CSR |= 0x01;  1 b* j/ a$ D& s6 n- N" P
7 L9 D8 U! X+ e/ \

' n& X5 x) C- H" D% y, P5 Q! k
  x! A  |  |9 x1 A8 f还有就是两个输入输出函数:
! }; n/ P! Y3 u# p: s9 dvoid output_sample(Int32 out_data). K4 x1 T% b5 ^6 ^* W
{
# U7 U6 K8 V2 b  S6 q  AIC31_data.uint = out_data;  8 [4 Z. f! e8 F. P+ J1 c- [3 H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 l: G) ~- d& M/ m6 q
}8 H2 |) Z/ N: Q+ ]% z

* C! ~7 N: M4 Y, |- `9 s0 f0 i9 |0 MInt32 input_sample(void): j4 g  A" e; M/ ?
{  
! e1 |+ H7 O/ q; X8 A+ a. |3 Z7 y  AIC31_data.uint = MCASP1_RBUF0_32BIT;- D; A9 I" m! k* F
  return (AIC31_data.uint);1 \. R, S1 n/ w; g! [
}
* w0 @* q$ \7 o4 c# x; B
5 J/ V9 ?$ ?' k; |
分享到:  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-5 00:53 , Processed in 0.042907 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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