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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# o; N* G% _. r0 Bmain文件:
) B) L/ v  q2 q; h2 Y9 qinterrupt void interrupt4(void)  
9 `) g) y7 U2 Q4 M. \" `" D{
, S* ^" y3 k4 ^$ e4 T3 Y( b  Uint32 sample;; H* u! N  y4 J* I) D' m" Q
9 E. z  y& o! z+ |, u
  sample = input_sample(); // read L + R samples from ADC
+ l. h8 O7 K. F) H# D; O  output_sample(sample);   // write L + R samples to DAC
7 L9 Y0 K2 a- `' W' T) K6 Y  return;
9 m% ^; j7 u6 y}. \( l: z! [: c; `8 }

# V$ P/ F% d8 h1 J+ g, {0 _5 Vint main( void )
' F6 U1 K. B3 D8 ]6 U{) f$ ^/ |# x7 d2 J5 s" p

4 {7 E3 {; ]% F6 T2 w    /* Initialize BSL */$ |( C. n% [' A+ g% w
    EVMC6747_init( );
( M% A* K, J+ t& o        /* Call evmc6747_intr function */. U. G6 h1 V$ g5 ~9 D- a/ m( B$ _
    aic3106_init( );
0 n% ~" T/ x- L/ Z* `        while(1);8 L% [! S& B9 ]) x
}/ I3 n3 S# o4 F" J* \( D
0 k4 ^: }' G& r  E# d3 |
8 K* v1 D! Z" y* a7 Q+ d
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ H8 f4 ~' u; X) r1 F4 I; W$ k* N
/* Initialize MCASP1 */
" F) q/ e& z% U6 s    mcasp = &MCASP_MODULE_1;7 ?& e5 \  ]8 L/ O* i- |7 g1 ?
    mcasp->regs->GBLCTL  = 0;       // Reset
9 ?. u, W- c) [+ L# i) h/ R    mcasp->regs->RGBLCTL = 0;       // Reset RX
* \. P6 I" S" y0 X5 s    mcasp->regs->XGBLCTL = 0;       // Reset TX
# T( d8 C! W, m) s, h5 @& }3 \    mcasp->regs->PWRDEMU = 1;       // Free-running
2 o0 ~+ v4 \3 T+ r# ?   // configure McASP0 receive registers9 v7 k. G9 h$ m% }/ U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 f7 n- d! @8 U5 y! i. U    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: b1 y, y! A( J1 B/ I' S+ |: n
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* L! D1 T- O6 ]1 m
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  ]) d  x. T6 e" l0 [! w9 c+ @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( i8 W# g* O  X
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ B8 b3 \+ [  Z! E: S8 {    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; R* X: v8 O* n5 m1 ^9 Y* ?1 |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# c. d8 E+ @) c2 s0 K* W; B7 `1 _4 p: h( L5 {3 |1 a7 K6 b
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 o# P5 g1 s/ ?
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 R( i  G4 }7 d' h* s1 D8 h7 Z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 i! o: X! C( T4 |2 H: x* v    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. M) w; W5 A) I9 b1 K# S; i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ r) P% @+ B' x2 T0 p) Z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ a7 O, ]% x4 o. r0 D7 N) @$ }, H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ o* F* _$ U/ i8 f
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. H2 ]; Y3 G# E5 M
% ]: ?, m4 q* |( E3 _    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ ]: {. T1 ~: m: _0 I! t- j7 ]    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& j' N* Q: W& o3 w9 s
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 B, b7 U' r$ ^3 y8 m( I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 \1 b# y4 `: @) n4 ^% c
& O* c$ s3 r' o7 m2 M. ]8 V' n
    mcasp->regs->DITCTL     = 0x00000000; // Not used7 T: U0 g/ a, p1 ^. g, X. x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used; v/ d7 D3 {  D% Y0 z" |; T
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ k7 @! [, q. X+ G2 G. ^* x: Y6 W! v) @4 K. J
/* Starting sections of the McASP*/" M: L) s% ]$ @( Q+ {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ q# C. Y+ h  U0 O. g2 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ [1 X/ Q* ~- K" Y: _% g    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; n, E8 O& |2 Y" r$ t/ `" f% F8 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, d  L: e2 B8 B& f  U" j. w6 Z9 }5 S2 _& K+ Y8 v
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 o& W+ ^: [, Y4 Y8 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* u" x& b" \2 I& n- Z# [; C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 L3 j/ S) N' B6 v% l- P& Z& `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 m6 q4 J" K" }

* u# H, l% I$ V  e# e) S$ I) t    mcasp->regs->XSTAT = 0x0000ffff; 3 A# [4 W( q3 D( G3 [
    mcasp->regs->RSTAT = 0x0000ffff; - e) W2 D$ n$ l7 x

: u- z" w  G* l% f! _" H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 Y4 Q' P- t  D9 H: J; M0 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# }- ?) j# C7 L* b% Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / ~0 P7 E3 f& m0 _9 c  t$ ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) |! Q: m: w* ^% F, x% b  J. A4 ?/ \( A7 {, j- e
    /* Write a 0, so that no underrun occurs after releasing the state machine */2 U7 p3 q6 J& l
    mcasp->regs->XBUF5 = 0;
1 d, P5 x; \2 b$ }6 S    mcasp->regs->RBUF0 = 0;
. p' ?; G5 j& A7 O& _
- n+ z1 E5 _! \& L2 c    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! y- M. P+ i* E  n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 F; R" C" p: S+ [7 @6 P* z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' c; h" w/ Y0 @5 I! D7 z. c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ k2 a6 o; n# [; ~* |) j
3 a- z9 }0 Y+ u. Q; t: |/ T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , f% {! g. w: n5 _5 O0 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 X9 }4 ?5 ]" }4 c# E
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' C8 Z- V$ _9 W$ m4 b! f( ?: @' T, a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; R8 g( X( Q  s3 v; Y' w3 v( f( [% d3 V" L0 `
    CSR = 0x0000;+ u3 x" S6 [% v" R, @( ^+ A; N3 r) B: j
    INTC_INTMUX1 = 0x3d;
( t# V; Q$ z# w$ F    ISTP = (unsigned int)vectors;) R% L* s/ X0 k' q" ~" D( Y1 r
    ICR = 0xFFF0;  * H9 V+ M+ {" ?7 m' e
    IER |= 0x12;  * m" t$ N& n) `  F5 H
    CSR |= 0x01;  
# w" K( |6 u) Z4 Y( I8 X  c' Y
8 |# u, d) G) {4 A5 t  J5 U. z2 |0 j  @9 G" t2 `* L

( Z& h" b( H; d/ w% n还有就是两个输入输出函数:
5 C: y: Z3 @, bvoid output_sample(Int32 out_data)
" v- m5 l& J. t: ^4 ]{7 L* {) t; \/ H& }/ }9 L9 o
  AIC31_data.uint = out_data;  
& i7 k* A$ |9 f  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* c; E9 W2 y2 f4 R  C- A& a}8 f3 {- v; m9 Y3 |- E

9 Q. ^" T  x) Y* {4 sInt32 input_sample(void)3 t  M0 Z* V7 w
{  1 Y5 Q7 o& m! H1 {' t, V9 _# r
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& S( E+ J7 |7 K" J1 v1 r  return (AIC31_data.uint);
; T0 x6 u2 g) G}/ G6 Y3 \/ h" A
9 Q& ]( G/ U9 ^& _' C) 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-1-17 21:28 , Processed in 0.051042 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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