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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! e% h) _: e7 @2 n3 ?4 O5 B. e
main文件:
, e0 q0 v4 Z6 T' winterrupt void interrupt4(void)  
) Z9 Y9 m7 y- x6 ]( b5 q, w) d3 O{
0 i& H7 \6 K3 D1 d9 E5 y) {; y. [1 }  Uint32 sample;; g+ i1 w6 Q8 m6 L; d% `7 y

9 c1 l9 {+ q+ ?/ K9 w& D  ^  sample = input_sample(); // read L + R samples from ADC
2 L3 q: ^: L9 f. f- B+ l  output_sample(sample);   // write L + R samples to DAC
6 l: e/ n* _% S- k+ R+ M  return;! m( d! f/ V' M0 s4 }( M
}3 \) O2 \6 q1 Q* }: H( m" y

8 R6 s  |6 N+ ]: ~  vint main( void )0 n+ u; ~& f; ?7 e& w
{% o( |! `5 t& r0 f. \+ a5 [
3 j  n8 H# n- m. n0 M1 w
    /* Initialize BSL */
" G! M7 B8 J7 Q    EVMC6747_init( );+ o) ~" u$ p  ?# @; }
        /* Call evmc6747_intr function */
  s  q7 t1 d2 w/ b. ]4 \" g    aic3106_init( );  S; f7 n  k4 J. t: M
        while(1);6 J4 w" ^& C# a7 L( s+ y9 L
}
1 f; q* n  K  y, S% P: T1 G' u& Z6 U! m. N+ Q6 F' j  E

& _% N2 k$ X6 Q( J* u4 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  w# ]3 W! O8 O/* Initialize MCASP1 */& @  D* B9 f; M. U5 n: P
    mcasp = &MCASP_MODULE_1;0 C% i+ ?5 H6 |1 [& s" }
    mcasp->regs->GBLCTL  = 0;       // Reset
( U% R/ v# ~) Z6 t  `( e) f& U    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ w  O# ~9 w1 @    mcasp->regs->XGBLCTL = 0;       // Reset TX* {+ G+ F) H4 s( B, c) Y, f& ]
    mcasp->regs->PWRDEMU = 1;       // Free-running, A4 S" m% p! j0 Q) i9 m4 R
   // configure McASP0 receive registers, ^) t2 ~, i. ?' g' H. a
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" q7 o/ a( m8 r/ \/ o: D( j+ h    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 i" U1 W) L# k8 b# Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. X* ]; u/ i1 j& y2 r' t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" t: s7 q6 N6 I7 O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& V! d" z2 {: l  I/ x
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 W3 o$ v$ _4 ]7 `9 ]; ?/ p    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 \+ T" r6 q- `    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: O" U6 _4 ?8 M) U

# J% V+ }( f$ z3 W  z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- z/ y) s( @  A# Z/ n2 Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 Y2 b# g9 V, E2 q$ [; D* \    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) o8 _/ ?- u7 A4 R* Y: s2 W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 I) J) f+ Z8 V5 W& \: P% |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- ~+ h: O/ J7 H9 e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 z/ r3 }# i' X+ L: w: {8 g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 J  H/ p. B7 |( r- R7 U' r
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 K' @2 _( e. o+ o" U" S
% k! \  {" U  ~8 E, y5 V  P1 U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 ?& H3 ^- A* [- |0 x+ V6 e    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  r0 J4 p, C9 ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 i+ }/ r2 @; g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; L! a$ j+ D1 Y$ }) n6 E4 J
0 B0 M0 t3 L* X& C! _: }" y+ W    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 V3 T2 h* t* n    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 }# {( a" n; r4 i- t    mcasp->regs->AMUTE      = 0x00000000; // Not used: H* p2 b7 D2 v' b1 g# l

' Q& `5 {* P6 D  Q/ b( L' v0 G& \/* Starting sections of the McASP*/
. |9 ^8 F! V5 O# x0 `4 A& G    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: W. E* w7 T  @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 x& t- \7 c* l  {' s2 z    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ a/ k, d7 ?! f+ {2 D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( @! L3 x& y* {9 d7 ^$ ?( E  F' @# N/ G9 X) p# `& z7 k
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 M% e* N( z. T. F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 w* V6 m  S0 }: j; g
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; Y3 N! W% K# i; t3 u& H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% G! x) ~+ ?+ K# k% R% `3 h$ |; S/ Z3 D; t
    mcasp->regs->XSTAT = 0x0000ffff;
2 F, v! b5 F$ o/ z) n1 g    mcasp->regs->RSTAT = 0x0000ffff;
7 o7 }1 R+ S2 ?# f+ o
) M! ^$ @  Z/ Z4 ^7 o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. b4 W, E  v0 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; N0 {3 P7 {* {3 p% A
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ N, G& \4 }. u, B% J6 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ S' @7 c4 C: j- M4 g7 m1 G7 [& R6 Z  I! q4 Z8 L/ X
    /* Write a 0, so that no underrun occurs after releasing the state machine */4 M( l; e9 P: x! P
    mcasp->regs->XBUF5 = 0;5 g5 r$ d. P: r" O+ N
    mcasp->regs->RBUF0 = 0;
6 [+ V4 j$ D) X/ F  [' q+ q/ m
2 t" {" k1 @+ P! \( r$ [/ b    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - m' _' H; G) r4 Q" A9 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% h5 s& c2 e: N. w# S2 ]' b  t    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # d$ p& T, s( K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% S  v, G  l  A% n2 ?
) z' K- r- q, T% F
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / v$ O5 B/ j( R) J; _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 V7 l) U9 H, Q% f3 ~1 m3 x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! F  s9 p# G. C" g! [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) k) f, M2 r! a. ]$ x. S6 G7 g0 f; W/ |+ Y
    CSR = 0x0000;, ]; a5 j/ j, }+ `$ S8 _
    INTC_INTMUX1 = 0x3d;: i4 W2 I6 e0 ]
    ISTP = (unsigned int)vectors;
% o3 H' I7 U3 q* F% |1 W9 H. U    ICR = 0xFFF0;  
, s5 B$ E9 j8 h/ Z1 H; W& ]5 r    IER |= 0x12;  
! B" j3 z( k+ u3 a- J) q    CSR |= 0x01;  . G$ U- ^3 z$ z4 x+ e0 [
+ F: E/ g7 Z! u9 m4 S

. {5 d2 Y" `, B8 N8 Z9 Z" ]+ x  m0 o, \- `7 E& Y- U$ D
还有就是两个输入输出函数:& r( g, w. ^8 ~
void output_sample(Int32 out_data)4 _6 `% u* [3 i. g+ ^9 q( x0 j" _
{
) Z) U0 N3 S9 I  AIC31_data.uint = out_data;  
& \2 k7 V) T. a" S* Y- Y  MCASP1_XBUF5_32BIT = AIC31_data.uint;: _  T, S, H/ H  q, E, Q  i5 Y
}  e- j6 N- q. F# A& c8 D
0 ^' N) e5 V/ a; l. b" S  n) T
Int32 input_sample(void)+ X/ H: x1 ^7 r5 E5 n
{  0 W& c( A" q' {! ?% n6 x
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 w, {( e3 C9 m. `7 h# E2 A# B2 Z  return (AIC31_data.uint);) |9 F: S# C) n! s7 g5 e% j6 p
}+ t! f; ?) F7 C  ~( _, W2 q, Q
- x8 \% u( F) e3 f& P, c
分享到:  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-15 09:33 , Processed in 0.040866 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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