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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 u! S) H; m5 b/ rmain文件:
6 L8 q- {6 [; o# x7 i2 u7 qinterrupt void interrupt4(void)    U- b% X+ r( Q3 B
{
8 y* F1 ?0 h0 z# r1 {  f& B, E( h& l! z  Uint32 sample;$ I9 G8 q8 b4 Z  A7 G1 \
) e; u+ a. F: J; W
  sample = input_sample(); // read L + R samples from ADC
- N& V" s3 P8 _  output_sample(sample);   // write L + R samples to DAC 1 J- l5 X- s/ `9 I
  return;
" a0 @) |  Z2 ?- W2 r. h}
: m* T7 u; ^6 R
9 b+ u- M9 R" f" tint main( void )
  `" b) N( V& d! e, }7 U8 I{3 v. _1 `$ z( T: }( w
7 g0 a9 {" g' T4 t
    /* Initialize BSL */2 v) N& W5 Z) C5 {
    EVMC6747_init( );  v" A$ {' Q7 p9 X- Z  B  j
        /* Call evmc6747_intr function */' p* Z' L& v3 A5 B' i
    aic3106_init( );
% \. T- L! \. z- \4 \7 i. }        while(1);
& |  `6 ]7 T5 M; p) o( G, U}7 C" g( _- l( S' F; o$ `" d
8 }$ W' C0 Z0 f- c. D

, t7 R  }; S" a7 l" z4 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, K  J: `3 \3 a" _/* Initialize MCASP1 */0 u3 h, a7 K3 j( ^# {) t! r+ e7 H7 U# b
    mcasp = &MCASP_MODULE_1;
% d6 I- r- p' t$ ?. I2 `2 [, m    mcasp->regs->GBLCTL  = 0;       // Reset4 y) y, ?( a: ?/ j  a
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% C. ^2 R" Y# @3 m, o3 O    mcasp->regs->XGBLCTL = 0;       // Reset TX$ Y3 g8 C% u$ T; J( E. p5 E
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 X9 m- a1 M% K( x   // configure McASP0 receive registers% K3 ?1 \3 r) [0 w# \5 q# ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# R; y8 @% o+ k. Y9 g: z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* Y  u% d" w: L3 w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ M6 {6 r7 h/ B8 k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( w% i& Q+ I# w9 Q+ k# K+ a& i
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- q' k% Z- P5 G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ z& r1 s. M+ ?& G' I/ W+ G
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- g8 _6 U: P  e6 \6 K% ~/ F: d
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% p, \+ u6 ^# o) v5 ~9 }! M  ^6 P# Z; y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  L8 g: ]  c# L7 N* H6 H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* G5 g( H: |4 S7 _, a8 X+ U    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' X( r" v' K0 q# A/ {" C: e. e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. J, t# x- d9 O, P8 l4 l    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 a8 B- e/ ^4 |3 A2 p2 v: k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ R1 O& I8 g5 J$ u) Q+ @& z0 i
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ x4 s1 y1 R4 J0 i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! k* `, j) F4 \( p
) A4 i9 ~( n# }  m    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 b* }7 V6 Q- H  s" n# E! ^
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- M+ n. r9 t- D2 D: E
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ J8 B1 C; J: M    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 B  L9 Z" V+ b# q' w8 y& V: \* r! C9 g/ ~  b0 |* i9 y
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 Y- ^$ i8 h9 ^8 I1 d
    mcasp->regs->DLBCTL     = 0x00000000; // Not used; o# u6 Q+ y, D8 z2 V* `; g
    mcasp->regs->AMUTE      = 0x00000000; // Not used; w, s) l& M( T  p) B/ a

# b" f5 G" H, }% N: d- A/* Starting sections of the McASP*// N0 r# f2 C. c
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: q; q7 k! O& y9 k8 q& S5 h' G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( F+ @& g5 s( W- n2 w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! _& _( U7 P% P( {5 T. J- a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  d8 z. f9 Z- A" }2 c6 T' C; g3 u

% J: ?/ |% s8 v3 H& P- V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # V* _  r7 l$ L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, D* v8 c. ?% p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , N$ b; R* h( {( }/ o$ m5 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 E% Y. f  X7 K8 d* N6 ~+ G
9 E5 F7 P- h. f7 g    mcasp->regs->XSTAT = 0x0000ffff;
/ l2 O0 C6 G3 n8 s    mcasp->regs->RSTAT = 0x0000ffff; * }/ }- u: J/ ~4 H- C3 F

4 L. l- _8 D. f) h$ k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 g( H6 j* j. m3 T3 }0 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 Q1 |$ v7 o& W9 ^2 a0 f' ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' B) W3 }2 s1 L) `# ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& p0 J: W0 n# w. _" y- U% b5 C
' W1 P9 _  F. O9 H+ s. _. ~    /* Write a 0, so that no underrun occurs after releasing the state machine */' X0 F( S9 |: t' v
    mcasp->regs->XBUF5 = 0;8 Z" h5 Q5 N. s
    mcasp->regs->RBUF0 = 0;+ U4 @9 L' J) X- }

) B( R: T3 e6 V- |/ [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 a- o4 C! Y# F/ z1 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; T$ G0 g- r7 h% @" \  t# K
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - z9 X: E* v: t' j7 r$ F  A2 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% c# f$ U/ w# P. x; B' B
8 y6 V( v7 ]$ @+ M  o' q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / \# M. v6 i9 m& d- a6 N& ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 N. H. K+ b9 r; e% G; N! N1 |" i5 P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 H9 V  _4 y: h- E' p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 y9 \, h  e6 j$ l. o, Y) q$ I( d# H+ Z
    CSR = 0x0000;2 @* x' B& z; L/ O
    INTC_INTMUX1 = 0x3d;3 j# R0 N0 u  S; F  O1 Z  o. X
    ISTP = (unsigned int)vectors;
' J+ ?' _. ?3 E$ \0 X. C    ICR = 0xFFF0;  
8 r7 d( ]9 \) ~- t# N" Z    IER |= 0x12;  ) T6 `- {5 U1 r; \2 V
    CSR |= 0x01;  4 k  V$ }4 p8 L

) R  O8 Q4 Y4 b2 x
' P6 L  Y6 b) @% `& L4 R
' Q+ u6 j* z1 H) M; X还有就是两个输入输出函数:0 I* g0 M- {; j
void output_sample(Int32 out_data)
" g9 j- u* \" |! p1 _5 Y% L' f; f{* b3 p7 P. \- T& X
  AIC31_data.uint = out_data;  + F$ }" T7 P' |1 V) k
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: G" }/ a" G: O/ J, \* o}. h& ]2 }  e$ g' U6 x& a
3 t/ B5 N6 t5 p& C3 [- r
Int32 input_sample(void)
% u5 I3 q" M& k{  ) M4 {6 L9 r; L% c: z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# z! @0 I) ~7 f  return (AIC31_data.uint);  z3 d) K- @& m7 P5 \, Q4 }
}
, u! e$ z* U8 w2 n9 v; K, {
2 k# I+ ]" U' G5 g6 d5 f
分享到:  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-30 15:58 , Processed in 0.039711 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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