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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! a4 d2 R5 B$ W2 dmain文件:# ~; d! U, b7 H
interrupt void interrupt4(void)  & |: K! N/ j; }
{* O! ^: \  |: `! g+ \: {6 N
  Uint32 sample;' {+ i9 v: `- t- o' P

$ L- U! ?/ `  Q4 e* r' V' ^  sample = input_sample(); // read L + R samples from ADC
5 G6 W* F5 {* p( J0 C+ c0 V  output_sample(sample);   // write L + R samples to DAC 9 x( p9 |+ S0 Y
  return;; ]1 z, V- C7 S
}4 t/ ?+ a# [9 a5 {( f9 m" j
7 z. P0 O4 S, }; M: r) {
int main( void )
5 a; Q  i: |) N2 D{
" \: \- o! Q9 }9 B1 S5 b
" x, b, ~% ~: Y9 [, R5 Q! J6 L- m    /* Initialize BSL */
  \: E8 G% ^, \4 ?* O/ Q/ Q* B    EVMC6747_init( );
( g. I! C/ s, u2 ^$ J        /* Call evmc6747_intr function */+ I  S8 A  q: E" d3 q
    aic3106_init( );/ B* C. B+ \4 F0 a0 \2 z5 c
        while(1);
! m+ ^& A1 l9 ]  U/ {% H6 s}
4 J% c# k, m' N! Y) F# t+ `! p
& }8 T9 J3 {6 B, D! V/ ~( @7 U6 X8 b6 N5 Q# k: j
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- X; i5 P3 u6 S
/* Initialize MCASP1 */
5 D6 W) U. t# s) m6 t2 o    mcasp = &MCASP_MODULE_1;
# ~$ J) e7 t3 Z% `8 F. u. T    mcasp->regs->GBLCTL  = 0;       // Reset" @; C* x) ~, l1 Q5 q
    mcasp->regs->RGBLCTL = 0;       // Reset RX) u/ k5 \+ e. k4 D. q. l, B1 Q4 A
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% |2 a& l9 j0 h    mcasp->regs->PWRDEMU = 1;       // Free-running
- g- U' `& s: ?6 C5 s" l   // configure McASP0 receive registers- s& ^7 W) p4 k/ G5 ]0 l4 J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; f- B* M! v% E; I! H) r3 A* t3 r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ w% B# P2 G* B: q9 ?7 ~    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( m* @/ M- M* g/ Z' _    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- M: A- j/ A: i/ {1 l  l9 i    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 S& x# h9 ~, V5 q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 T0 B# d( n+ N1 q. J1 x
    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ e$ p2 n  S* E3 l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 _+ \- V4 s- j; O# [' O9 y$ x1 J; S0 A' O& t( f( ], T' t* \
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 d& j0 a, g1 M7 C# L) ?# t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" Q* O) z: Q/ p/ a, P- \& ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" a8 X- R3 p% G/ o( j2 M/ M    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  E4 P& d' j8 u- ?5 T, D- B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 N, J* _! z. m$ a% L! V! P' v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
0 _. }, q. c( K: i    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( X$ T5 E$ n1 r: |6 `. A    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* @" I# Q6 S# [6 V

* U0 a0 b% W# Y* x! \8 \# i8 ^    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% y( W0 }& m4 Z' }" h! ?6 U) @! |9 O! Y5 u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 x( O3 G8 [1 a) f! w, r
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 U8 k1 L+ x2 x0 y0 I( l, O
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' Z! E8 D3 ^& ]/ m) T
$ I" A- m: Z( C2 X* C
    mcasp->regs->DITCTL     = 0x00000000; // Not used5 Y7 H+ D; g- k4 k8 Q% \
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 ?0 a8 [" L" a: x. I
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- `; n8 G, g6 j& d2 e& _2 f' A/ J$ T- N! `; h0 q
/* Starting sections of the McASP*/
* Q2 ]% f6 v4 t! l6 o4 G( v/ o, ?    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* T3 ~) n! E6 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 P3 S4 e7 @0 Y" X( x
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 s$ Q) `* a5 P, x9 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  E" L* t8 c6 N

" w) l+ }% J- ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: f* j2 V  m3 Z; `- T2 w! I! ^9 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ p2 f. V9 P$ L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: D6 z- _% }0 j* _* u! D+ q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  h9 h+ c( s2 Y$ X
8 L+ {+ R& |! H, @1 W- }& B    mcasp->regs->XSTAT = 0x0000ffff;
/ ?7 e& r- L7 L% t5 v) P# A    mcasp->regs->RSTAT = 0x0000ffff; / h; H  h9 q4 f+ R6 W4 u
  y/ R; B  W% F9 u( Z- a) q- p7 X1 D
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# N3 `% g0 D7 D* V% s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ G7 u# L! U4 q  P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 v" F! |/ g1 H8 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 O) @, [) o" a$ z. g
7 A6 [: V( S: u1 A& R, X" v( s    /* Write a 0, so that no underrun occurs after releasing the state machine */" @% C  a  {: P% [8 r
    mcasp->regs->XBUF5 = 0;
& Y$ A5 K, l) b  i6 R7 v    mcasp->regs->RBUF0 = 0;9 B: A- n0 P/ B  |* n
& B2 m" y; x/ g8 W/ M  t
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , b, u4 z! P: X/ c8 y" @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ R" V- X3 T8 m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; u$ \' z+ u5 z1 O5 W5 `# Z/ S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 k. [) e- y/ \' i' J4 d" o. L

7 ~+ g* v4 w  b; M. r0 R3 E; H# l    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; Q7 ^) |% z- }5 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( Z& k& w+ I; Q$ D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ i2 ?3 l) W' v: [7 K8 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 `; e+ M1 g( z. g: p: `
! e- ~: H: D$ C0 u) x    CSR = 0x0000;
$ b/ {4 H# a) ~$ }( `- R$ i    INTC_INTMUX1 = 0x3d;
) C: k4 B% R' K    ISTP = (unsigned int)vectors;
8 ?7 e3 N& E" D1 m    ICR = 0xFFF0;  / M5 j4 r9 E  @$ n
    IER |= 0x12;  
6 T3 m3 i8 F& \5 H9 `$ R3 H' G    CSR |= 0x01;  & s2 b4 ]+ z4 L0 L) L
; [/ G7 d# C3 g; D
' v# k0 t+ t8 E- g) f
. Q( E$ Y" S- D3 F! S# a5 p
还有就是两个输入输出函数:. G8 g# _7 U& u: \. ]) k
void output_sample(Int32 out_data)
9 L# M- b  n" ]& k{" v: z$ V, ^1 ~  m* e' Y
  AIC31_data.uint = out_data;  : U3 \9 d. D1 {" ]' _, X3 a1 _# i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& F6 }$ G8 r8 A+ Q
}  x# Q0 G  ]! S8 t. H) I+ K
2 H  G8 t9 Z# X# f1 }( \1 e! R  f
Int32 input_sample(void)
' C8 q' K0 [7 A+ h  G5 E{  
+ Q6 X, s4 |: k& q) u; E% b) g  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 [5 \& C3 ]- `' Z' I  return (AIC31_data.uint);
$ d* g" D  Z1 @4 \. ~1 A}! n5 _, F8 u% |) Y, g" o# C% T, P

0 B, Y; j6 ]& h) L: L& L* ~
分享到:  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-28 00:34 , Processed in 0.047655 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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