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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 c1 l- Q5 z2 E, g3 r2 D4 jmain文件:- ?% K0 i" H" u/ Y
interrupt void interrupt4(void)  0 F7 C7 x- F& q' r, @
{
% ~/ [2 t& t, _' t  Uint32 sample;( l$ P  a. l+ N* {5 L
( E& l" T: m& f3 }
  sample = input_sample(); // read L + R samples from ADC- Z( Y% `+ ?2 V4 m% f8 ^( T. N
  output_sample(sample);   // write L + R samples to DAC 8 u  \- a; Y) c- n. g6 `
  return;1 Y; D- @" T, `2 K
}0 F1 p+ x6 O' ^2 O; Y( w5 D' ^; j

& o2 \- X8 f  \7 Hint main( void )7 ]9 H) i1 o4 g- ^! f
{
& ?1 G$ p5 n/ H! O7 j
6 ^) y  t5 `6 R  J    /* Initialize BSL */# e$ W0 C7 s) I( Y* Q8 p
    EVMC6747_init( );1 A5 b$ D  Z0 C: A' p4 o0 ]
        /* Call evmc6747_intr function */% |# u) Q! [! m3 s/ Q& f4 P
    aic3106_init( );
- A6 D: Y1 r5 U- t  V6 m" _- B* \        while(1);8 b% M- _  H( s' ]3 N
}
: L0 z* j# S% c7 y+ d$ r5 x
% Y' G* [  E6 F5 o( Y5 @3 p) p: j  O: O6 n4 I/ z6 z3 y, r0 t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, m- W$ R  X6 p; N; U5 M- b; k/* Initialize MCASP1 */: K7 Z" V* m# X, ~! }2 v
    mcasp = &MCASP_MODULE_1;* B! U! J) s! f: ~( K
    mcasp->regs->GBLCTL  = 0;       // Reset8 p/ D/ `( g8 J& M; ~0 q+ D
    mcasp->regs->RGBLCTL = 0;       // Reset RX
: ^  s2 M9 Y0 R2 D$ M    mcasp->regs->XGBLCTL = 0;       // Reset TX3 J% t9 F- {1 q5 F4 P9 v+ n
    mcasp->regs->PWRDEMU = 1;       // Free-running8 D! B* a# H$ y, N: `1 w  {* K
   // configure McASP0 receive registers+ F! p: S4 g' a  v7 X! r+ @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, ?3 B) x0 M" i- ^6 i( ]' ^7 O8 R! P    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 z; u% V& k: W9 H4 c- A6 l
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! x( C0 [/ v! T9 z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 r# R& T6 N1 n# b+ ], H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: k- Q$ q: C4 b; @" x9 l, j/ l& W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ [' o& W& U7 O. e8 r    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, d1 F* Y; L; {  ^    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 I- O1 A1 g9 E( O; d
3 W1 e  v3 s+ r# a
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: \: G4 T2 d6 o) Z' \( V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ q6 }& U2 O; f. }0 v3 x6 w    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# y8 u7 y' O, ~; x( F1 d    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* k" t5 E; @1 d6 e' T" s3 S
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. t! K! l7 ~& ~  X* \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ l+ P+ J0 o/ L% m' N    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ j1 N" a/ x: Q, N; Z% H5 D8 b8 F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j7 P# {  d7 |
& @3 f5 B2 z& X" O1 N( [    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! b1 ~% ?$ `$ Q, `1 K* p    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* G  @5 f! Z* @& G) ?
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 u& B6 E8 u" }9 H4 T+ o; g
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# J& S/ ~+ _% c2 `5 x
5 `! Y- N, W3 `" G: H
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 P; a  e8 o. ]7 D3 M8 S    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- `1 f& ]+ f) v8 v$ j6 D1 r" R    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ d- A- T- S6 m8 ^1 M! M, o& ?; V9 W& n8 Y3 R4 p
/* Starting sections of the McASP*/- Z3 ~! T5 o$ ]+ e4 k7 E
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 R( S0 m2 p% m9 [0 e$ Z2 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 Y% O7 D/ D6 k  L+ S& M- A, t0 r
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. ?6 P& I; V; c, t, j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 m: @7 i1 |3 `6 q6 r) N& |/ ~

% P: c' z& G; D    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 K; c- ~. Q0 `, W. |! Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( v/ b& l  e+ V! O% n+ W4 u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ {+ U% D* y; k( J  d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 c; T$ p) T! ^- W

- z: A, [7 L6 e3 _3 }/ p    mcasp->regs->XSTAT = 0x0000ffff;   K4 K" `7 n! f+ x- j5 \$ k) ?' {
    mcasp->regs->RSTAT = 0x0000ffff; 4 e* D6 \7 z! o: b. R) m; B

" F$ @% k6 O, e2 S! m/ Z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) H" M* _6 |( Y) j& l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ^0 l& k& n. E' Q6 J" |& v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' D4 j6 x& ^3 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( I/ j8 _0 N5 c5 I

1 g1 R# S( T5 b    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 u6 S$ _; a. }5 h2 W! n    mcasp->regs->XBUF5 = 0;: B9 h% L1 O2 [: K
    mcasp->regs->RBUF0 = 0;
; p& J" r! W8 D+ a( H1 x) h' g
; L' S! n* S6 H# {! t/ D    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, w8 Y% p( K3 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- E3 T2 V$ V6 O4 G6 A6 O& k9 H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: Q  o1 e+ f8 `& N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( a( m( X9 e, A

  G# K4 M5 Q' Q: r  Z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# O/ k0 @: A( F- T0 J/ ^1 {) X6 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 H+ @. ^2 g# P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 ^9 M' p: j& b7 D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 ^7 `* s5 ]( V+ f4 t- \& G. ~/ i8 P( @5 k# U( C# Z6 L
    CSR = 0x0000;
0 n. k! R; C/ v/ @, D: ?. n6 n    INTC_INTMUX1 = 0x3d;
1 ]: e" p* o- g9 m    ISTP = (unsigned int)vectors;( A; \) g3 T! ~& X
    ICR = 0xFFF0;    j0 a- \5 e6 C$ f, V  A: I, t
    IER |= 0x12;  
+ Z7 b, z3 U$ b# P$ ^    CSR |= 0x01;  . w7 Q$ ^' v; r/ f! E
- y7 k( E5 r3 j; h

7 w8 u  \( q% K9 `! [
8 v- e6 e) K8 P3 B还有就是两个输入输出函数:! \+ W8 ^. U& E; L0 a* n- s  s8 V: w
void output_sample(Int32 out_data)
& B" B, j& x) M+ `4 e8 O+ V. V{( C; i# Z# ]% O) A7 J( m3 a; e! N
  AIC31_data.uint = out_data;  
" g4 @, c  E/ V- b2 X4 n  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ q+ f$ J6 s, s' }2 d}7 @1 a# ^% v2 X1 I/ z
5 L+ i6 E- j; u+ z+ Z$ ?
Int32 input_sample(void)
5 \/ K1 `+ x# Q0 N{  . _0 C7 l: |5 N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. O4 H7 h2 [3 U: J  return (AIC31_data.uint);1 G' ~6 b" d3 _( `; m
}# C& Q, s! P4 @' x2 s4 k

- p; e. G3 ]2 T1 Z" M, F7 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-1-28 00:20 , Processed in 0.041761 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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