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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 S0 J0 d# G( i' p( a. e
main文件:
7 m5 d7 T$ l& H* k& u4 z. dinterrupt void interrupt4(void)  # {; `* C  {/ w, Y+ D, h
{
9 y$ h2 g& s5 A- ?6 k2 H6 ]2 B  Uint32 sample;6 m; I0 [6 J/ z$ F; C
, e0 @& }9 W' w2 r1 O6 t  {
  sample = input_sample(); // read L + R samples from ADC6 K9 U/ ^" C0 ?. Y' |
  output_sample(sample);   // write L + R samples to DAC $ E7 v2 r0 D; h5 k. z% D
  return;5 k& J5 d7 |# K& x+ M) |
}
* q6 _  S) p' }' ~; q' |& z4 l  d( W0 C1 y+ O
int main( void )
8 T( K/ j9 t' a; m{" {" Q$ Y( I/ h4 }0 e

5 u; v; V" E8 G# Y- R3 F0 P$ T    /* Initialize BSL */
: x$ A. Y. J- w" \. W1 i    EVMC6747_init( );
- s. d" O7 k* c; {& W( K1 ~& P* F$ ?        /* Call evmc6747_intr function */
! N: t6 B( z4 [$ h    aic3106_init( );
3 P6 K: S( S( D' U        while(1);
: ]7 J; z, y( m4 x* x0 {}  Q' A5 O, A( e4 U; n
. f7 d/ l  N: S& W. r

! l, u' }8 \# z: }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 r5 k8 }7 t' P! W/ Q  f7 X8 N/* Initialize MCASP1 *// M7 |" T' _8 i7 d
    mcasp = &MCASP_MODULE_1;
6 I4 O0 y: `7 O2 w  {' ]0 v; p; t    mcasp->regs->GBLCTL  = 0;       // Reset
2 w8 q  m% A) S    mcasp->regs->RGBLCTL = 0;       // Reset RX
: v5 K  ?4 b$ U7 |    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ I( q% @' [) Q3 R/ ~, K, e* `    mcasp->regs->PWRDEMU = 1;       // Free-running5 g5 f" V& d5 z* n# D
   // configure McASP0 receive registers" A. ~( x; Y' q/ w7 G9 a
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  `  z2 V& l# W: q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 n8 u3 u% f" N3 j- r    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: m' [. h( Z0 F6 W    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! A/ U! S# z0 k& z5 v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" S, l' O- A6 [" V) K% z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" T. o  E) U$ \0 H
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 \) y) ]6 e& \' Z! ]' d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 l' g  F, u! N; b; z6 F
8 s/ B- Z; x, e2 A' O' @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' f+ [1 ^  c9 r/ c  p# y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, U3 Y! M4 I( ^7 v' s/ @: _  N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ V6 d( ?9 h' G! b' @    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 a; f/ i' W+ M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 |, ?, N: P1 x6 H    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; I. C+ z( r7 o9 ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! U2 \7 N+ L5 f( H4 C
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ p& }( K8 \" ^
8 |# Y9 \0 J# C2 G- M7 J- h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( n: Y! `7 k. ?4 I
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- g# b  S2 G7 I8 s; C
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 I6 P: V9 Y7 g# Z: ~% C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ L% a) ^1 G" l0 {' u6 E

+ ^+ ^: K2 G9 v    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 g. X3 v2 [- A' z& }! z    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ M: g' |7 l; ?& r    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 x6 a7 q" l' ?( u7 S7 g' x. M: s3 Y1 f  f2 s
/* Starting sections of the McASP*/0 g6 ^' T3 y  s+ m3 _: Y, Q" j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 p! n" d" z5 m- l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 q: f. q. p/ r1 B7 n4 z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 Z# n0 E6 ~. n/ x( U* n  s; ?/ E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ H$ L: P, R, S, D( ]+ v
. h2 o: m' }7 G# k& ]
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   @: A6 G  l) }. G; @2 y6 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 X# d$ v4 ^- ]# x( Q; P/ R0 K, J7 [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) i- \1 A* {) g7 y0 h. ~$ x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 D) [% C7 x/ a1 K; e1 o% {
: k1 l) z6 M6 s2 G, s
    mcasp->regs->XSTAT = 0x0000ffff; ) ^$ z, r1 s( @- i" v
    mcasp->regs->RSTAT = 0x0000ffff; - R2 r) T4 ^  o" s* V2 o% Q
+ U% O* [/ p. p# h7 N' J5 F+ s
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' m! G5 `1 W& m, p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) b4 w/ R7 x+ e    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   Z. Y' v" C1 t' a8 C  s7 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 B. c" p: ^6 ]
8 P! a/ J5 I, h0 G    /* Write a 0, so that no underrun occurs after releasing the state machine */
% v0 k# {, l5 h* v1 u6 o- W& F    mcasp->regs->XBUF5 = 0;9 U5 H" C3 p+ T. L
    mcasp->regs->RBUF0 = 0;- a. f+ X7 U$ I8 F; e& K

+ F3 G0 t! ~2 X- [: `. C    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   S, Y$ g: a. A2 y; h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. y9 L# t7 ]3 ^9 f) \    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 m3 J6 |$ T, b: P" a# b1 z2 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& A* u$ k8 ?- q
7 S* Y6 r+ }5 \* `2 b$ }- ]; P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 i# p, E+ D: e4 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% M. B% N' U% c0 h* s1 H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & [7 N! T- F6 \- F- d6 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: a9 p  k2 g: J8 k5 l3 H
& E7 N% F$ a; P. }' N
    CSR = 0x0000;8 m2 a+ @$ c/ K- y* T8 e& W
    INTC_INTMUX1 = 0x3d;
4 ~2 t3 O9 h9 W5 x6 S3 S    ISTP = (unsigned int)vectors;" _4 ~; Z7 @* P. g/ a
    ICR = 0xFFF0;  
- `$ }+ o; f/ Y$ I' X/ w4 \    IER |= 0x12;  4 Z( j4 y( d; T0 e6 M1 `
    CSR |= 0x01;  
/ m  w' t9 M5 }! g- e* j' z$ Z  P: i' K6 }1 A5 P  e: o! C
5 E1 Y2 R& J: J, y% y1 ^
" n6 Q" ]" g: H4 g
还有就是两个输入输出函数:, x' x/ C/ `8 Q
void output_sample(Int32 out_data)6 e3 G0 b0 T+ y
{
! T8 j4 N3 c  M' |( t7 x  AIC31_data.uint = out_data;  7 ~! X+ ]( P- T. Q* w" F1 e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 R. M0 d# g0 L
}  N( q" I4 p2 ^- _  z4 d1 S( T

. ?: i% m; X/ R" _Int32 input_sample(void)- I; L# r+ \9 d% G) J
{  
7 O+ n, G- {7 G; B  B$ C  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 {0 r" y' o& [5 Q+ j  return (AIC31_data.uint);5 |; n9 X8 u/ K% p9 p$ Y
}
0 p1 X6 _2 k- W$ r& k
0 @2 T2 s4 c5 T2 n% l" f! V
分享到:  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-13 16:42 , Processed in 0.044735 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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