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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 A$ r% O& Q, h7 [0 qmain文件:+ L2 W  K) _) O8 ?7 W2 m- w9 k1 B
interrupt void interrupt4(void)  
7 Z; n# d: C/ R! R  P& I6 J% [) X{
$ h  u: }5 [- m3 @0 j8 H  Uint32 sample;9 |+ I& C5 p1 G
& [5 ^( u# Y8 r2 I
  sample = input_sample(); // read L + R samples from ADC/ n- z4 Y6 S9 d& F
  output_sample(sample);   // write L + R samples to DAC
( H0 \) z* U  r5 W5 O  return;; y! g' w, K0 s8 U* w
}
$ ^! h0 n! U" {1 s& P- s
- b* ~& G# E. r  H6 yint main( void ): m# q& c; {8 Q3 Z5 v! g
{$ t! C! k9 @! _7 s7 P& i( y5 W  ^

4 d2 |' v8 |8 S6 g+ Y  @    /* Initialize BSL */
( x. Y& ?. w- [, m8 T, |) ^7 ^    EVMC6747_init( );
+ J. G5 h$ q) Z* G( y7 n+ r, b' e        /* Call evmc6747_intr function */
( v- f: U& y' F* X0 l$ M1 `    aic3106_init( );
+ K/ K  {2 L" t5 R: R  G) r        while(1);
' M. K# \: B# T0 J}2 H0 _1 f4 n" v2 p1 b) q
& p" C2 W5 }1 F/ d

! W% V* `( y  t! a) F1 V4 Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( x) m* G) ]* \: O  U
/* Initialize MCASP1 */! l# e8 U3 D8 C. B3 p' f' |
    mcasp = &MCASP_MODULE_1;5 ~' l4 C* c& _- I9 T, o2 U& t
    mcasp->regs->GBLCTL  = 0;       // Reset
3 R/ i0 E0 e1 }9 N    mcasp->regs->RGBLCTL = 0;       // Reset RX; _! f9 w# B  \* |- q' U
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& K" u- p2 e+ W  Y    mcasp->regs->PWRDEMU = 1;       // Free-running, y- L' o# c! a9 e& Q
   // configure McASP0 receive registers
, q8 a' D2 N7 O& B0 A/ K; s    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) A. s& f) s$ `4 y* J8 w
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 G8 p  J; ~# f- z+ r7 M
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 v" t2 ~: \6 E; l" l' G    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 S- a, c' `# _/ g  K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 u9 u6 |' H  {+ f/ L* h  G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 H" h8 T& h' }  l4 O* s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ _1 B9 Y6 B/ J5 D( Z! Y0 u    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: S& o3 p9 b3 E' z; v7 U
; m3 g2 _/ {) ~, H* i3 `% B  D
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, L2 ?: d8 `# r  q/ H2 o# M7 [    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! z7 F& ~/ E4 _' q0 V1 D4 l$ Z( B
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- `( h6 N7 H; y+ N9 r
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( Q7 N8 {, i7 K3 J5 u, @* R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" }* I+ B- a6 S( C$ C+ f5 ^    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 L6 |- `  k0 h, [6 N: N8 e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 e/ [7 J% [- ?0 ]- a
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. i, L5 n* Z: ^+ \6 a6 x6 `7 q
- s5 G7 }! b  Q: C4 l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 T& Q7 P9 B& W3 L2 w% y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 v& b! v& C* V5 p' K* r  \
    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 a) V& s5 h& O9 B+ U: e9 J/ j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& E' L1 U& S+ g) _; S+ s8 a9 t! w

! B6 K) h3 c! P2 v+ k9 b9 o    mcasp->regs->DITCTL     = 0x00000000; // Not used8 Y8 ^% ]9 P% [+ [/ d" |7 `# I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, @. ~, ~( Z6 [; Q1 [. z- |5 g
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ p9 A: ~) V7 u$ _2 Y
( W4 `% z  Y' \: B5 A$ N# s/* Starting sections of the McASP*/
8 n9 b9 x; u* F    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . F; A8 u0 L0 z; e8 }& x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 E! o9 v' L! D/ [2 K" ?+ r/ E3 N
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 V( B- l$ v% [# h2 }1 l. \( E; k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 f5 S5 U7 C' U% h0 a- Q4 F4 ~: u

. D; L0 L# W2 [    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  B: Z0 w7 F* Q0 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 [2 s  @! }. `6 X" j4 X6 ]- x    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / p5 U! H7 U& G! ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, n: n; ?5 q0 C% o9 p5 S
7 u4 _# n. b" h+ ^
    mcasp->regs->XSTAT = 0x0000ffff;
) v: d; s, R8 i. f    mcasp->regs->RSTAT = 0x0000ffff;
& p* n2 M6 v- g5 H* S8 Q/ L/ O: `, B7 s
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" s5 O+ _9 x6 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! W# r3 D% R1 H, U( W# D- j    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   N/ r# h( I; ?$ Q7 G5 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. [2 F! {5 R8 C; [
( |1 z: @2 I) Z+ O7 U    /* Write a 0, so that no underrun occurs after releasing the state machine */: l" I( i2 g  C; P, X: s1 L8 A
    mcasp->regs->XBUF5 = 0;8 i6 I9 a! A/ N1 b
    mcasp->regs->RBUF0 = 0;
; X. ^( }9 y" @4 R( t5 W, v& o4 u2 z* a! G* C( b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; }3 P1 _5 K% y7 v- R- |8 k' v) p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. S% U3 c: i6 G# m% C. A0 S    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 h# u3 Q& l( y0 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 y: g% u- K5 y* y6 G1 L
6 T& r# g& ~5 ~9 _- n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * I6 N# K; w' k, u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. k( t# y/ P( n  d( t3 G    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : V! |- Q3 I' h/ |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 i7 A" j6 L$ I/ Y' t( c/ T7 U

0 p3 `% L2 Y3 u1 A: _5 W    CSR = 0x0000;8 x$ K6 x% Y3 ~2 H
    INTC_INTMUX1 = 0x3d;/ a. N8 u$ h9 O. z, d; y
    ISTP = (unsigned int)vectors;; H6 ]5 F* `9 X
    ICR = 0xFFF0;  + D8 z* H) C2 q# x
    IER |= 0x12;  - A6 q9 k1 Q/ A- ^
    CSR |= 0x01;  
/ a* r& R- o7 `' y& \: f
* q; ?; d/ H& Y, S0 x4 y- B6 R8 c7 _2 o" f: k. L! U
" m2 {( S  Q0 ^# R2 B0 p
还有就是两个输入输出函数:# y7 ?# d% E. x: {/ z
void output_sample(Int32 out_data)  e( v5 F9 s* [. q) D. b/ o+ U
{
4 m1 Y2 c6 X& x  s$ `/ }, q3 Y  AIC31_data.uint = out_data;  8 E. C7 i# L& w0 c; h, J' T
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ P. Q+ I! V" [* G# \; z/ g
}/ G  @; w8 ~* ~& x

7 j% p. M' b' u) M3 xInt32 input_sample(void)- K" T# {; k$ `4 u- l3 n- b8 R3 P
{  # p0 ~2 o% x" W1 i: R
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. @- i; o; {7 o- j+ Y" n# _" k! ^' x  return (AIC31_data.uint);
) f' U; C, I. i  F& u* h( h}
4 N3 V+ ~1 m& h% n! |: P, i* {1 ~1 f, l3 w* M" H' v
分享到:  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-26 13:20 , Processed in 0.056542 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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