C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 y, ], n4 J/ I9 jmain文件:
: k7 e8 O5 y* l* _0 e) |  pinterrupt void interrupt4(void)  
3 J) F3 q5 G: I{, E$ {. E0 }$ O9 H# ]/ X; Q) k$ Z
  Uint32 sample;& q6 B; `+ }6 \9 T( X
9 B% C  j+ g- D
  sample = input_sample(); // read L + R samples from ADC: I5 |4 P% P( C
  output_sample(sample);   // write L + R samples to DAC
- M3 l5 q6 ~: X' C8 q  return;
5 I( ^5 H5 Z/ o# q! r/ j7 E* w  o}3 ?# B" E. J9 S# R$ M

) K- t/ X! V8 b! [9 O& m! Iint main( void )- l0 I# z% N- J
{
* m5 _) L# v" f* S9 G: X6 d" F; g
' i- n9 j5 [7 t7 j4 n& x9 K" o: j; s    /* Initialize BSL *// C1 o" l9 A0 H1 \
    EVMC6747_init( );6 y& H: t  n/ q$ Y. q0 k3 @
        /* Call evmc6747_intr function */
: N5 ~: f% J. {* t1 ]/ B8 p! ]$ b    aic3106_init( );  g# S/ w, g  C7 z8 w
        while(1);
+ o# v2 e7 F5 m4 y}
" A7 v: V. m) i  l* P. o7 O) I9 Y3 A) ~" A
; b* b2 F  w: ]7 a* @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 R8 Y0 s7 l8 Z
/* Initialize MCASP1 */
* e& I* r6 d  G* v& x' p    mcasp = &MCASP_MODULE_1;
& _& v' G; b+ n    mcasp->regs->GBLCTL  = 0;       // Reset5 a$ V1 a  K+ N- N' l, ~- N" `/ D
    mcasp->regs->RGBLCTL = 0;       // Reset RX( D9 c- v2 v1 O
    mcasp->regs->XGBLCTL = 0;       // Reset TX" W( R! o: o" e2 ?; m
    mcasp->regs->PWRDEMU = 1;       // Free-running
  Z4 [1 i1 K4 B9 Q   // configure McASP0 receive registers5 e: {/ A, K( f2 V1 l0 n& |7 }
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
1 X  r# P$ n& g    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 T7 r8 S0 S0 u% _6 @" n, Q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 C9 @4 D5 m2 v8 D8 B8 S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 _# I2 \+ G/ h* g, V
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 S  [& t! n/ @, f; l4 P' u    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 B2 a# ^: v  A
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  j3 m  k4 m9 ]! I( c' D9 g    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- M# W+ B2 Q& T8 p
9 E* k, C/ [! h: M: C- ]4 u  ]    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) i; W- Z6 Y: b% h9 ?, J- [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- n9 q8 o" z2 R! d4 m3 `( h( w
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) l6 b4 R/ H5 g2 b( Y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 ]% N' H, U$ u$ a' W    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 c( T1 L1 }5 a
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. t& g8 C8 n/ Z) c" M
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 d6 q6 E# ]0 g& O# b) v, Q7 T# k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 g  X% V5 ^0 J, H1 `7 c
6 Z  u  @: D2 r$ ]: V7 L
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 a# {; j# q9 F) E- G/ D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; B7 x$ P2 N. m
    mcasp->regs->PFUNC      = 0;          // All MCASPs
. T/ ^' I6 q  E! E& F, {& W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 K1 o6 K! [3 f/ b

  A) S5 S1 }4 h$ j    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 t2 e# t" \. P( W0 ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used- |/ G0 B3 l$ |7 o. O
    mcasp->regs->AMUTE      = 0x00000000; // Not used
; o! c9 s+ W' t+ z% B, j4 B
0 K5 H# B, ]0 V3 b/* Starting sections of the McASP*/& g; ^4 y8 C, K8 L  j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, V" E  v9 s/ W' H$ r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  n! U$ B7 s" m. F4 o    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( `9 ~* E4 b7 e" V- ?( R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; }+ E- {  n$ o+ A# y: d, i
! `& X4 y$ u4 L) a3 D" t$ [/ Z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; E3 |5 y8 v; W; n' F2 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 y/ Z/ d! o3 R+ X, R5 F* g/ T: n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' |. t0 u7 ]1 v) m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( _! f6 l4 q  x. j: d3 U& F5 l6 ^: L6 p) x  x
    mcasp->regs->XSTAT = 0x0000ffff; & W& J3 v; }3 O/ G
    mcasp->regs->RSTAT = 0x0000ffff; " o; k8 J& f  O- i! I8 Q0 n/ p! ^6 S
: @& }/ d; f' L; \& t; w7 R  ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 f" X. ^+ ^0 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; ^$ ?5 N8 G8 X5 E0 H* ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / [7 Y1 ~, M/ ~+ G* W& R9 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( l) m$ A7 R  r
" C+ b4 j  Q7 ^    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ I" f& ^% |: E    mcasp->regs->XBUF5 = 0;, j, z# G: N3 }) [" j# ~2 _
    mcasp->regs->RBUF0 = 0;
, F% D7 a+ q! [* _* w5 B5 O! F$ ~8 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - |0 p: ]1 Y9 @# A6 i9 a+ P1 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 f8 }$ ~' T; I. P2 F6 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! z! a% E" Y4 @0 Q( c* o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 |9 L9 g7 x4 F- U2 D, w

7 |) S* S4 F* V1 A1 z& g    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 @5 j8 D$ `% N4 ?' j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) E' m- O  z; D. z: N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 \  H1 s" t% {4 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ u! o, W  z% ?1 q% Z% ?( h
  m; j( s2 b, E9 w
    CSR = 0x0000;
* v5 q- S' W0 S. C/ F6 R    INTC_INTMUX1 = 0x3d;* E* x" J# z+ T' G
    ISTP = (unsigned int)vectors;4 G6 v( y! r) A6 }& [3 \
    ICR = 0xFFF0;  & Z$ T  |4 ^5 v  K% o/ q
    IER |= 0x12;  * s2 o: |+ r/ `! ~
    CSR |= 0x01;  
! h. N* S9 x# F, k# O5 P! n  g0 y( w% B+ a: Z

1 q" k0 i8 _) t- k( }8 p# |. {( K4 N, v3 A1 T: Q; x
还有就是两个输入输出函数:4 p9 d4 Z& U/ y- z  ?. S0 a/ C% W
void output_sample(Int32 out_data): ]& N( ]! I  f8 k& R5 z
{' d( X$ s9 u  c1 ^4 ]/ c5 `
  AIC31_data.uint = out_data;  
7 N" Y+ o" H& Z, h' L  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, x3 Q6 ^0 b. R: Q( r$ O, R}
3 c& ?$ [- [0 k; A) A8 C
2 _7 _* b* v  TInt32 input_sample(void)9 c* o6 T6 U0 Z1 C
{  ! g7 O( s. Q. B2 o2 U: @4 `
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 `  ]9 g2 z! u1 }! h
  return (AIC31_data.uint);$ L. t+ r7 O4 Y
}
6 W+ x3 j5 S" I* p2 E2 o" s) J' s  P5 Z/ o1 b# {( q+ m
分享到:  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, 2025-11-28 10:54 , Processed in 0.037020 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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