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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 ]- x+ z7 _; A- H: m" q
main文件:
* A3 b+ d- V, Dinterrupt void interrupt4(void)  ! M% o3 f; A& ?  f# e* y" p
{
9 L1 k5 o' S6 }4 X1 t/ r  Uint32 sample;
; i" ^# s$ X; d
4 d( Y$ r+ G7 c5 S/ X  sample = input_sample(); // read L + R samples from ADC
8 {. [+ H7 l4 e' r# J+ {7 @  output_sample(sample);   // write L + R samples to DAC / O& J* {5 f# V
  return;# [" {& I, M& h5 P+ E7 u9 t; `
}3 U% ^7 \$ a6 T. a4 n2 U
% ^; V# P3 B9 ~/ j( D7 e. H$ I
int main( void )- j# V- `% I  H1 \( g# k7 i
{4 h* J7 c! v4 l/ `6 }2 V- J5 _

6 O* w, g- G: n7 C, y! S. l+ m) K    /* Initialize BSL */4 K  U" f, [' i& ]2 i$ i
    EVMC6747_init( );
4 t2 s1 c0 i# w# [- p% a        /* Call evmc6747_intr function */
, W5 t. P7 m9 j9 M    aic3106_init( );
$ D3 \( C% S7 o- ^( ]        while(1);+ _+ A3 l2 f8 E4 ]8 t" ~" M' `" A, {
}
, t6 D4 k, H& v% ]+ a* v
5 j- g8 B/ S9 m! a; D6 G" H" P- M; G3 f7 F1 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# a7 m. H5 S$ }; v3 f6 r* U
/* Initialize MCASP1 */' `1 @4 _; D* j( Z4 k
    mcasp = &MCASP_MODULE_1;
4 A/ `7 d& J9 S; ~    mcasp->regs->GBLCTL  = 0;       // Reset
- l) t! Z6 F5 z    mcasp->regs->RGBLCTL = 0;       // Reset RX0 G2 s; z+ j2 p" c, D! d
    mcasp->regs->XGBLCTL = 0;       // Reset TX5 l3 J/ Z8 @3 m. s/ h' K
    mcasp->regs->PWRDEMU = 1;       // Free-running4 L+ t) I2 R; D; w9 E# k6 y0 S% G
   // configure McASP0 receive registers
% z  @% t3 }. R; k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 R# f0 l+ c, i1 Y' ]% K7 }9 W- P, p    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 ?3 N  p. V! q, d3 i
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 N$ m- f/ p  |$ _0 n5 p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 m. x: F: Q2 Y1 Q8 G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% K% U5 M7 ?) F( c6 \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 T# p' g4 i3 g  t" i6 g' N6 L7 o
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" y' E( F) O+ x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( J: d( c; F/ F2 F/ X5 z& G
6 B) M* C7 X% h' L! {. q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ Z9 [2 x( a6 U* h& c- r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' W7 F1 E+ a9 S& I. ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  G: S# g0 \6 W2 D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: U$ }8 C, k: V* A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ y$ K5 |% k! i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 a2 j/ r# w- w/ R1 y: c: r# |$ d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& O0 i% P) m3 e" B
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: h* N; ~" p# \8 E) i+ l' S
( Y$ ]! a' W3 h6 [; v
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% [: W2 v& V9 H    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; i+ Z$ w/ c& I8 p' X" k- J    mcasp->regs->PFUNC      = 0;          // All MCASPs( V5 G: y: n  j9 e* P# {; j) m
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# Z, L6 s2 n$ c! t8 {; d2 ^5 F4 Q% {& p) X2 p5 l3 r
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ y, \4 J0 g! o+ _" A5 d6 l4 w- S4 k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 S( H2 b& G* d4 k7 v2 e    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 L1 o- G  t/ V' [" V. ~* |: R+ `" v$ ?, [
/* Starting sections of the McASP*/2 I" \& ^! \: H0 @% N% h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 N: K7 v" P0 `" L/ S; `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & W( I! g; q3 J2 v* k
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! u) E& ~# I0 t' W" D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 v3 d. _7 X5 ~
4 N; L7 r! g* a3 r. p    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* j5 `, w; X0 k4 K) ~/ _% R# U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" l1 m: D% r! G/ h* E- y7 T    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; M6 b8 y+ D( X; l! W0 u" e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: `/ }6 X# h1 V8 {

* q# ^7 h2 ~+ C, I    mcasp->regs->XSTAT = 0x0000ffff; ! r; u& y; d$ H' }2 B' m3 ]; C
    mcasp->regs->RSTAT = 0x0000ffff; 6 X+ B4 M9 A- t3 [( {

: V1 F. e4 _' q5 ?! }  H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* V+ C* d; {7 a7 }# k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; f6 f; B0 w2 k' T( S. e    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 `) |8 @& f2 x" g0 r, t$ w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ F9 m8 Q8 I- k& X5 L

3 i) A2 S$ Q4 G$ i4 D1 }, L. R. p: ^    /* Write a 0, so that no underrun occurs after releasing the state machine */1 G! V1 s+ k' a& b) k
    mcasp->regs->XBUF5 = 0;: d: C* d, R  X* ?8 ~; }
    mcasp->regs->RBUF0 = 0;1 f- x3 z+ R2 W: s' `7 F( h* v
6 e6 l- X0 {8 U0 t# g% o5 m5 L
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' O/ j- T, `5 Q, m0 U% C6 f  h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& g  j% }; m& C" C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; v0 U5 i) d, P- ]7 r5 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 b. o) V4 }. @5 _# U) K1 O; Q2 R7 W/ `! Z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 _: I% H9 W, q- y5 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! t$ b4 V) f3 R+ E% O+ [& u! k" ]
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- x' t5 x4 P$ c6 U. [5 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* x+ @+ c; v1 V. `8 [1 k+ n
7 H7 R7 C0 U: s2 s3 T8 ^    CSR = 0x0000;
! n) j& M) ]: Q7 v    INTC_INTMUX1 = 0x3d;
1 n( Q* n$ l3 T7 e) }2 a    ISTP = (unsigned int)vectors;
, Z* p2 c- Z. E$ {3 ~    ICR = 0xFFF0;  : J! f* }$ ~$ |
    IER |= 0x12;  
, P( n( @7 W7 O7 X7 D% ]% z    CSR |= 0x01;  0 c; W$ i- X4 C  a0 S3 q

8 ^. p* i4 P4 Q. u; @. c5 a
8 S2 I, E: f# x; j9 N( W7 H
9 c1 m' f% }2 n还有就是两个输入输出函数:5 P7 X0 f# q9 H5 ?; K% H
void output_sample(Int32 out_data)
1 x( N" y9 v' t{
( c, w. a9 O3 Q( ~  AIC31_data.uint = out_data;  
; L6 ]* H- ?2 t, q6 G7 V' L  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 n" m1 |; y! i0 B+ |
}4 n0 d3 q1 b! D" P

# q1 k3 i& H" ~6 P) S9 O% dInt32 input_sample(void)7 |0 c5 ~. _+ J6 a5 H- i) Y
{  
# U4 O# j+ c! `# w4 i  AIC31_data.uint = MCASP1_RBUF0_32BIT;: ]; z) M' e$ ^. e8 b
  return (AIC31_data.uint);8 m7 f5 P% N2 A& A1 I0 D
}" K# U& R0 M+ i. t, L
( N6 l2 ]* C9 w/ [) e3 U' ~
分享到:  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-19 21:14 , Processed in 0.042176 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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