C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ Q) F3 ~- M0 H! G7 Q/ B& N2 [) s
main文件:' X1 v) L4 l% n/ t$ M  r8 H/ a
interrupt void interrupt4(void)  
7 n1 d" r2 s! H9 d" d% H0 X{. z$ L& I8 I+ z+ w4 I# B# Z8 Y  `
  Uint32 sample;
9 x7 t9 [0 b" M0 @4 F& K& K9 u* {; U; v% S
  sample = input_sample(); // read L + R samples from ADC: `4 L) `! g" i. \" M
  output_sample(sample);   // write L + R samples to DAC ; i+ Q" L# T& K* Q, Z* N/ W5 k- F
  return;0 \/ M4 L  i& i0 C0 [. S
}
* J$ ?& R8 G. |! c' {! ]# n' L" q% a! d
int main( void )
, j1 a0 k% u# g, a2 C. q$ h7 i{, k& t% ?  t/ B- O  m  l4 F

: A5 t+ W5 S( N' f* i1 u    /* Initialize BSL */- B4 f8 n2 M& }+ `% [  t
    EVMC6747_init( );
" y2 f2 [0 g7 x        /* Call evmc6747_intr function */0 d8 b" d9 l" m
    aic3106_init( );
/ J3 l* b% X5 l2 `+ R' l! n& P        while(1);
( U' C. c& C# [% {0 \% G}0 E, U0 n! d# Z, e6 m

" h9 v3 v8 H# Q9 x. o3 H( m( p7 j" B+ U- S+ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ N, a7 w2 ?3 i/* Initialize MCASP1 */* R  y6 `; {  ?9 u2 Z
    mcasp = &MCASP_MODULE_1;
" R* I( g1 \$ J1 H' B. G    mcasp->regs->GBLCTL  = 0;       // Reset
* D( P$ h4 Q/ {: Y5 Q7 b: k    mcasp->regs->RGBLCTL = 0;       // Reset RX: J% [. ^3 h6 {6 W- r6 a- f) ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 B5 H0 j7 R- Z9 ^3 [    mcasp->regs->PWRDEMU = 1;       // Free-running
8 j0 v8 y) W% V+ f   // configure McASP0 receive registers& f1 g; `4 o: W6 l3 H
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! h# z! G4 Z1 v5 k- L6 P    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) n/ L- A1 M# n+ d
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* {) Z3 I9 _- z8 O4 @& e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 c' E4 c1 c# M7 z, G: i4 ]' n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" E4 d& [' Q5 y* t* e) U' f
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 L3 _# Q: p5 P; G# R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! m6 c( F& ]' ~, B: Q% W, a: w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) y* b5 \. g+ U7 ]9 }8 X

2 y# O' s0 b0 m9 u1 u5 i3 p+ o    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 H- A+ U4 `8 U  z$ D
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 H8 d# E8 v3 \% _& O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# H, Y# z$ T% K  ?7 ^9 R
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ m4 O/ s2 E, q: H
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! W! B. s9 u( d* c! r3 ~    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 t0 j2 E, A3 c4 E
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 ~0 n5 X2 M* t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 r! [; C9 [' B3 h5 M% O5 N

$ O. o7 S+ C0 a) n% }2 N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) J' k+ W8 _* N
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 d) K# ^2 n. K
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 `) ~, Y/ F& ^! h( X1 p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 Z. q5 Z: D; r- m& P0 [  i9 S
+ d( s  W6 r8 S1 ]! ?5 a) f    mcasp->regs->DITCTL     = 0x00000000; // Not used
& C" b, M: f1 d* d' W    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! T! m9 _4 C/ ~9 x1 U5 @3 \    mcasp->regs->AMUTE      = 0x00000000; // Not used1 B" }3 \8 q: ~+ b) x& M# X

0 F* y# I* t/ F- \4 _* E6 F/* Starting sections of the McASP*/
% [2 b! N5 j& d/ p" o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" L% T; Y, J+ \/ k! K! w/ @' h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ t8 @$ w; {; _! E; i& i; w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 s5 a' u: [8 J" i7 {* L& c5 ^& l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# b2 L+ k- P' K  g: j* T2 k, r9 `8 m/ h" L+ n1 W0 c2 o& W. j9 P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! y3 y# p5 X$ n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 X. g( K: b. S9 y8 g# u+ b; v+ B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 _: K$ k( r) _  i- P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- T4 o+ A4 c3 s* A  s$ D
% D2 h0 k( Q! G    mcasp->regs->XSTAT = 0x0000ffff; ; q3 Q" U# j% r4 ?0 B  S; G- o
    mcasp->regs->RSTAT = 0x0000ffff;
1 m9 B, M% R. P: d0 j
1 P) I9 D- D. F; I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' @/ q6 C) `( F& u) U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) `. p: A5 q+ [# `" f/ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 m9 K6 h8 R8 [" p1 J+ g- O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 ?' `& n/ x! q& X
9 G6 U8 y: `) V5 `8 ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */
% p: ?1 Y. r( o4 X. X  O    mcasp->regs->XBUF5 = 0;( r0 h5 n* x7 m: g; y* x# f
    mcasp->regs->RBUF0 = 0;
1 @& [5 }" L2 }7 Y5 u9 U1 W, R& _8 z' q) q& j; X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + V2 `' _! o4 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, Z+ q/ D" Z! p6 q) E    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# ^% H0 s) m# l$ ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 j5 r- a. ?3 [2 y, P' Q0 `6 B

# B2 T7 t- ~" R8 O9 b0 \. j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 ?8 F+ N' L) `5 ~* R; `$ {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( \9 i& H6 ?6 F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 N$ M5 }5 ]; i' O1 y& O  {" A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 l! G- J5 _" G7 l3 I
$ k8 N1 ?  b  ^+ [" `* g    CSR = 0x0000;
! \9 v. O: m1 I9 ^1 e7 V; E    INTC_INTMUX1 = 0x3d;
8 D" T, y; I/ D5 R) G9 s( J8 ~    ISTP = (unsigned int)vectors;
0 ~0 C- `+ d8 c# r6 O    ICR = 0xFFF0;  & U! L" g* t) ?2 @( O* p5 b; W, X; V
    IER |= 0x12;  0 @8 K+ y" k* Y' T3 V# J
    CSR |= 0x01;  ( ~( d5 I& z. ?: U

9 s, N, x1 H! N
' U9 G( ]8 k/ I: j
/ t! W+ n0 G6 L4 J# ]3 [- E0 e还有就是两个输入输出函数:3 r( S5 m( q  A- E
void output_sample(Int32 out_data)
  E9 ]" i5 [0 V7 O/ O* G1 e6 e{
7 {0 T' W+ r/ X8 j7 `" l  AIC31_data.uint = out_data;  
* P$ G5 c/ l' x" _% @* o( ]3 m  MCASP1_XBUF5_32BIT = AIC31_data.uint;- J& ^; t3 t9 @7 j
}/ a8 y. r5 o6 S. `
, ~, T& }  I; ^% Z  W$ F) R/ c; n2 ]
Int32 input_sample(void)
% i: B7 D$ g* v* d{  & T0 C% b( V- y1 A+ ^! j" |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;- a3 N' A+ ^; k+ O- C+ R6 u
  return (AIC31_data.uint);
  g9 D+ }( ]5 U. w9 q, T8 i}# z& \, W# T- L5 [* h, k7 V
6 C/ _! W! S! [
分享到:  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, 2025-11-28 22:06 , Processed in 0.038733 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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