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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) v: I. Z- ^3 ?1 B$ t- j
main文件:
6 U! p8 e: N5 g/ ^8 q( m1 Minterrupt void interrupt4(void)  
5 N( _4 `: O- g1 s& u3 B{2 N7 H( s  c  c3 \, p
  Uint32 sample;7 k3 E. l0 \; b& d$ ^" f
9 K5 h. ]" b' }+ ^+ _
  sample = input_sample(); // read L + R samples from ADC% N5 o% P& C; `. ~0 _9 z9 W
  output_sample(sample);   // write L + R samples to DAC % L2 Q& b1 a* W% n1 S3 v
  return;
0 S0 V; c% @& h+ e: \}( X1 w- X- s6 ^2 F, A+ d
1 S8 \' @" k7 H( a5 w! \# \
int main( void )8 }. Y5 \' l) L3 R1 a
{
& G& `* ^' u+ \6 p- Q- s. g3 y) c
, k1 z+ Y1 h5 `; Y6 s$ W  E    /* Initialize BSL */; l. _& q$ o8 V5 `. m, Y
    EVMC6747_init( );
- x  O5 d- p# J" g& z- \. ^$ h2 H7 R        /* Call evmc6747_intr function */: T% P; ^( s$ Z2 b
    aic3106_init( );7 N5 A+ K, R" T; W3 G( z& f. E- p+ ]8 ^
        while(1);1 f2 s" z* w3 [$ z
}6 Z8 k$ B" X* y6 Q$ y+ ?; a7 z
% A6 K9 T) F0 }& m- |: `

6 M( w8 A3 r! F) N& T: z% Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 {, o) j  O9 w6 ~
/* Initialize MCASP1 */6 x7 L" P) [+ Y5 }1 H
    mcasp = &MCASP_MODULE_1;7 K0 D, Q. y% y& D4 h/ I; k
    mcasp->regs->GBLCTL  = 0;       // Reset
; {" z: G; Y) D6 O$ `& c    mcasp->regs->RGBLCTL = 0;       // Reset RX
* `8 S7 l! f- R) S    mcasp->regs->XGBLCTL = 0;       // Reset TX
  F1 k& d) J" I  v8 Q1 f    mcasp->regs->PWRDEMU = 1;       // Free-running3 k& a( r! Y, b! \6 H; V3 R" c
   // configure McASP0 receive registers
  t; k4 x8 e, W) p2 B/ c1 t/ R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# P; N9 _# O' ]: c% l$ h    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 C: |3 @) N' j7 L0 ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( ], X4 E$ D# y. Y/ H/ n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 j$ T+ g5 y( {! q( T
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& ~7 P- C% Q6 r( @( h* x$ N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 a$ m/ p; e+ i; j/ s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
% `8 Y3 l" K3 Y, Z6 L- K4 `! S    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  F, R8 X5 I2 J! A+ P  ?# T1 d$ B6 d9 D6 t+ ?
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 `2 R% x2 ~, N) x1 v# l& _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. I/ ?; O( ^1 [2 x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ R: ~6 c5 |) |' F! g& n1 T& }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- |, G! h. }% t1 N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* [) _' B3 F& }$ X7 I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 ?2 x! r2 m3 m  m) Q1 i4 O* v
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* p+ j: ~. p2 r( s- Q* Q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# p5 N7 k7 k6 B) T( X: p6 X4 ?
8 @' m* V9 E+ e9 k1 _/ `8 d( e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 K  M; }4 Y/ ?; [4 q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% S2 c& X/ `, e2 h) ]7 B' Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 ]8 K( `5 H: A9 j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* S) S+ h+ t  M5 n6 D+ ?6 a
* n+ {2 H* O; y3 w5 }    mcasp->regs->DITCTL     = 0x00000000; // Not used6 z+ |  |% T+ O; w4 {' K9 h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ _0 m! b% i! l0 ~    mcasp->regs->AMUTE      = 0x00000000; // Not used
# M- B# M' V* i$ D% S
1 p9 }; L4 b& Y; K/* Starting sections of the McASP*/
% W9 t2 Q2 W1 n- R5 v    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 v7 Z; e9 N7 p4 U3 i! F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 q" L- U6 y0 }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 b; D( |/ j$ ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! ^) i8 q( w; l( x6 C
1 l6 `- l# x9 p% ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* x9 C7 o; N, p) g+ S; \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( c8 l: }0 Y+ ]( }( B+ n. }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 B1 M( b, J4 M4 T3 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' b; N; z5 i- x% A9 g' N$ Q. R

$ q2 Z; O. j- `9 f$ i$ m$ B    mcasp->regs->XSTAT = 0x0000ffff;
; a- t6 T8 Y: D5 `* q: I, W1 C' J    mcasp->regs->RSTAT = 0x0000ffff;
9 m- H7 Q7 d2 j9 }
2 R- R9 {' m! c" h: p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 `" T. n+ }) _; k. G4 H  j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: q3 Y7 S) l  \
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 T+ i, f2 |2 ]4 \  e5 e1 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 d! x: r- y" j# O7 \3 S- q
' d$ @$ V6 c, M+ a5 Z7 h    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 t0 u6 j7 v- m7 h! [# R' U- p) ^$ D7 G    mcasp->regs->XBUF5 = 0;
, ?! _7 h. I. T% }7 ^    mcasp->regs->RBUF0 = 0;
- S9 T+ Q# n6 K2 n" A
* E) E) T2 H6 `$ Z: p% D    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 O& O) q; g2 C" {+ Y7 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, h& d; {# T& `% t& ?7 e. L1 Q5 l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 U' I; H" n) x5 E! W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 B) M3 l: g8 N5 z: ~2 u
0 N* ?$ y4 r7 o, J  U) k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - z2 `) H' t9 G% ?' u+ i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 J% Z* d/ |; c" d    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 u" m# q' a$ Z1 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 `8 g0 h4 V4 _. O/ h
9 t0 R* g  j2 E  K1 L% M3 V% T! x& @# U    CSR = 0x0000;7 r: g' u3 v- @! H! l4 a0 V/ e- O
    INTC_INTMUX1 = 0x3d;
. k. y, c. h* k" j    ISTP = (unsigned int)vectors;0 x0 L+ S+ l5 v0 C0 W4 D& G' b
    ICR = 0xFFF0;  
9 I# G" _' X5 Y/ p1 `: L    IER |= 0x12;  
# G% h* z( {4 {' h    CSR |= 0x01;  ; `/ k* v( |- A4 _

4 d9 z- t3 G" O5 F% l
9 {9 O, K, ~- }* E
9 m( K8 @6 [/ H8 d% Z0 t) u, ?还有就是两个输入输出函数:  t! p1 D7 @% ^' S/ a- i6 ~
void output_sample(Int32 out_data)
+ {1 O3 n% M& q+ l, g{
5 v8 E% n5 D, G' w/ i( e+ p  AIC31_data.uint = out_data;  
9 t! _5 S% o) z! w; ~. p# d  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 ], t2 D; K+ z* T2 w/ M) m}
$ x$ N5 T9 A: Z3 b$ n" L9 A8 c3 D5 h% W; @& B8 p8 m) Z4 k
Int32 input_sample(void)
8 @$ e0 _+ [. q0 }{  
* A1 _8 V' n$ l$ x" k  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 d0 X( ?: ]/ A* M9 L
  return (AIC31_data.uint);' P- t5 i5 D" h2 \) ]9 R
}
, @+ s" \, K( o% S5 y* J, A3 L* o8 S6 A- X$ p
分享到:  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-11 01:38 , Processed in 0.045794 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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