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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! t% x8 |: E3 n. I# j4 k- w8 N
main文件:
. Q6 L9 L+ d0 x& B9 O6 Ainterrupt void interrupt4(void)  
; l: G0 T: D2 }* C{" ^2 L; J& n: D4 a* a
  Uint32 sample;6 I2 c9 x0 @: ?/ }. i1 Y2 I" f7 C: T
8 k+ F- w# F, w0 g1 X+ _+ G, G
  sample = input_sample(); // read L + R samples from ADC9 n) T+ R2 B) c4 V7 _% A
  output_sample(sample);   // write L + R samples to DAC
* [2 H* {) R2 W0 ]1 |( F0 T  return;
( A7 E  j4 M8 R3 [) S" i0 w  l}  Q# c9 c" e0 h# ~& ]
( T% i, J8 X; p+ l
int main( void )
0 g0 A- K; P( B: H8 F3 p5 L+ `! m0 k{: ?# N& x% _2 N7 q8 w" f& J; K
, n- A/ o* P1 d
    /* Initialize BSL */% l- a/ J9 G6 @2 V
    EVMC6747_init( );2 b3 p/ D8 D$ p7 z# ~+ _! ~+ r5 r
        /* Call evmc6747_intr function */
; ^$ a' a; G( N2 \" l! t/ ^    aic3106_init( );
: T7 Q6 {8 |0 z4 M+ V        while(1);
% z) u# g7 G, q}, ?4 |* h) I' Z$ {, Q+ ^
* ~' D% T3 S* h7 {3 q3 d0 d

4 }- H- _9 Y: a3 D* P; kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& H( }1 E& v3 |- L$ p/* Initialize MCASP1 */
6 B6 w! w0 T; r2 `; W    mcasp = &MCASP_MODULE_1;
/ A  ^- Z5 ~+ S; _: N0 Q6 \    mcasp->regs->GBLCTL  = 0;       // Reset7 |  h1 p, \$ c0 P! N1 @8 s2 ^
    mcasp->regs->RGBLCTL = 0;       // Reset RX* n& p$ `# n4 ^
    mcasp->regs->XGBLCTL = 0;       // Reset TX% I" _; ^. k. d  e( s4 @2 i
    mcasp->regs->PWRDEMU = 1;       // Free-running: i* W& A% K3 S6 _
   // configure McASP0 receive registers
: U# I$ s" `, {9 Z; k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 b, _$ R9 ^1 n" g3 c8 ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 y% p3 v5 K" ?- u9 h; E- E0 N& G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% c& i! }# I: W2 O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& I5 Q: a2 S1 k* Z" t0 S" t3 k" i
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# c8 U5 h# ]! a6 K# j( y" ~) L
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: a" _9 ]% i) G& u9 |    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ [4 A7 Y7 o; Z6 |7 }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. T, y: r7 c2 P! M
& G4 S% k3 D( ~  W1 O) e
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. o; i  y* e  b- F    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 H: M# W; |8 V" l# ?/ |9 v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  ~9 \( r6 l) Z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; ^/ f* H2 i: n- V5 q" Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; B& U/ d3 Y9 X" K9 S    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 P( K6 s4 d* _1 y. {# h) u% n8 j    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ q/ f; o3 g  S) L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 _2 ^  K3 y4 l" e" I6 L0 ]% q- ?) \. m" h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  A' E1 p$ i' e) D6 W4 C
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 H( K8 C+ X% E, Z; j! q3 F
    mcasp->regs->PFUNC      = 0;          // All MCASPs# O& H7 F& B% r3 C1 D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  f4 o1 I9 n/ V- Z# K
8 v4 G7 c# r1 E% \; ~! Z3 w    mcasp->regs->DITCTL     = 0x00000000; // Not used9 r  \) C/ ^: x7 e: h% D
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 I" Q; e3 ]( N% f    mcasp->regs->AMUTE      = 0x00000000; // Not used! ^+ [( L* `1 g

4 ~; |% x4 \  U, Y/ i4 i0 s/* Starting sections of the McASP*/
+ t' B8 G: `9 c; D  i6 t' @    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ Q3 t& l) _- T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) ~0 G. g  W) m: q8 {& ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ S0 d" P5 Q3 c  _  h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 P7 X, a$ Y* {" o& F

+ m$ T; k, [% k$ p    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 i1 e) z* [/ U9 ~2 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ `8 x9 V4 A- N! r0 u8 |& q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  j, m" C: C% ?8 n' m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. K# f- s: Y" C- L
0 ?+ ^2 e  c+ v7 N. g8 O
    mcasp->regs->XSTAT = 0x0000ffff;
, u* b, B8 X- }; ~7 |# a    mcasp->regs->RSTAT = 0x0000ffff; 9 G/ A% [. w" }1 t. H: `6 |
8 q8 u3 c1 ?3 f  x. ~5 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 K* E% W5 l, K2 s% T1 ]: I# {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! B. K; p; _/ w6 v! i; F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ d1 z1 x5 @+ Y( f% c% C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# F8 ~" k3 l- z; q

+ x& P  R3 D' ^, B6 e: B    /* Write a 0, so that no underrun occurs after releasing the state machine */
. B4 J6 d& I8 e  K- n    mcasp->regs->XBUF5 = 0;! y6 M: r( C/ U/ Z0 ?
    mcasp->regs->RBUF0 = 0;. W) \( g! @1 f( X  s9 [
7 g1 z( f  r+ }& ?( D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: t0 X2 ^9 }2 Y/ P. ^, ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 @5 v# S8 q7 N$ @" a    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  a0 Z" C  K( N6 J. h4 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 D, B* x4 \  G% Y) ~- O
2 c! w6 F- I" c/ ?
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. [  N# k0 V+ }  u+ L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 B4 ]1 @  t$ G  j" m! j: [. K6 K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" k' e% L/ Z- ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. y" C. s0 G9 ]2 q; ~! y
! j# @  d; d+ m7 E    CSR = 0x0000;+ o6 q# m7 A; e7 F3 s
    INTC_INTMUX1 = 0x3d;
3 A1 l; \5 b( S/ F8 |% x    ISTP = (unsigned int)vectors;& a1 T5 ^' G& G% y2 `
    ICR = 0xFFF0;  / F! M5 o$ J% B4 u! G
    IER |= 0x12;  
% A% k& |. s0 I' n" V" L( A    CSR |= 0x01;  
4 z. D2 u" z( \  \8 a
5 p1 z9 ]4 o+ `' \
& o( F  z0 c: }( K% G) V+ G4 |3 p7 p3 J" h; }
还有就是两个输入输出函数:
# s3 M8 E- _- ^) Svoid output_sample(Int32 out_data)9 `4 t+ d6 v3 G6 e4 t
{
$ ?+ l& f  w& m  AIC31_data.uint = out_data;  
( Z2 A  Y5 x+ T- n) r6 {  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  Y# z! y# g& q# t}
) W! {! W. [( F. V$ i& P2 m6 p. Z( F3 f( `, v% s# a+ d
Int32 input_sample(void)
- l" T. E$ Z3 a) E6 b$ c{  
9 I: t! \% J: t, {  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- r5 a* N6 R6 o  O' j" C  return (AIC31_data.uint);
& [+ _! e9 A$ U* t7 ^  u+ a2 m}& y1 P- ]" l  [9 i

+ \8 u- {0 c) B" I# 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-2-11 11:39 , Processed in 0.044943 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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