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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! Z, A" n3 b/ T% T( qmain文件:' l7 \/ }! `, S" V
interrupt void interrupt4(void)  " G6 V3 S4 F) G
{
+ n+ _9 J* g) |& [  Uint32 sample;( w8 m% J  V4 q0 A
- \, J% F6 U" S1 x/ S9 ?; q2 w! H
  sample = input_sample(); // read L + R samples from ADC$ P+ d: G. D' J  @. ?
  output_sample(sample);   // write L + R samples to DAC
- G6 _# f/ K* f3 F$ G1 ?2 `  return;3 W& p/ d- f  h; Z) z, R3 N" n' g
}
: }9 y0 N- E+ d. g! y5 \; A9 |8 h- P0 M- n: [
int main( void )
  X/ v2 t; r& H* U9 C0 Z# c{0 u1 g4 C# H! R# Q' N4 G; M
5 L7 `- C/ r9 z5 c0 w% ?
    /* Initialize BSL */  o$ n9 x( H( v0 X! h0 A
    EVMC6747_init( );
* Y* ~7 h' k1 [9 Y7 G9 P) V5 A        /* Call evmc6747_intr function */. Z  |9 f( w/ L- e9 A" V( Z1 N, q7 M
    aic3106_init( );: o' Z9 P6 j9 E) S
        while(1);7 @0 Z! w' Y* u" s' H5 g
}9 g3 r. g+ e2 p, o
, ~) z2 s' _" u8 v# k/ ?0 W( w
. ^7 t* M: `- l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* @$ G0 \, X' [( E3 ]5 z3 B/* Initialize MCASP1 */1 t2 @* v# P  p# ?
    mcasp = &MCASP_MODULE_1;  O3 t7 n$ V7 X3 q1 X1 F$ M" s  p
    mcasp->regs->GBLCTL  = 0;       // Reset, ?( ~0 D  X  Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX, h* k- I5 O9 g1 |
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 ?& }. ]  I$ D4 Y) ?/ h+ R$ k    mcasp->regs->PWRDEMU = 1;       // Free-running" I/ \2 A# M5 U# ]
   // configure McASP0 receive registers
) w2 R& |) I2 w7 g( b2 o  q0 a: D' u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 p# g8 Y5 f6 Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. i+ |) `1 c* J    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, X+ `; \$ @+ p8 Z" `$ Q3 }! B
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: o  ]* W$ A) ~# S* H8 |    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ m/ ], ~  n( e8 S- ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) U; X" T8 E6 y, N, Z5 \" _    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. k+ I: v% W" |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* `* ]: @$ c- z, ?$ c) O# \. t6 D$ i) J" P4 e" T1 ?
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- Z- _' J- [2 `- m, k7 z& \3 W/ n    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 k( q' n- D& W. b. Z; z' v7 l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 y5 z: \0 F/ ~  `    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 p- e2 S6 Z$ G/ E2 ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, Y* Y+ b4 f* ~3 D( M" C
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# f- D: Q% [0 Y9 M$ t; L2 Q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, d0 Y% T" N4 I. u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, A' G% R* u6 |1 x
, {/ ^7 {( H2 Q6 W3 q% g% H' l. x$ E, M    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. o; r. q6 H- W2 {, ~2 G& i/ U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 o# `) a* d+ T; T$ A5 K, E
    mcasp->regs->PFUNC      = 0;          // All MCASPs
' k$ ~! ?* o# x7 D: Q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; g  u: J+ Q6 a$ ~
+ G/ j, X; ^% g, h. s1 Q+ P    mcasp->regs->DITCTL     = 0x00000000; // Not used
% _* O7 r! }5 Q1 G* u. m% I* X    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" y8 S$ f# L( B" b* u    mcasp->regs->AMUTE      = 0x00000000; // Not used
  W* y3 G. V8 n' Y6 M9 S- v. p: G: t& n
/* Starting sections of the McASP*/3 Q+ A! O/ S* _* d  g% O4 Z- [
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# M! C& u/ S' [5 E/ n' b8 K+ [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" N$ c! S+ w$ T( u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ J; m; w6 }. t" N5 f% F* x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 T8 z4 I) r+ O, g) S# ^& H7 I- k: N
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ }, @# i7 r! o2 h- C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ v# `/ C- u, H. d/ _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* J) a& e- F- U; W" x; r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* M) p% n  K- o
# e& I2 @6 B5 u4 ]8 r* i
    mcasp->regs->XSTAT = 0x0000ffff; 9 A. G, e1 J$ @
    mcasp->regs->RSTAT = 0x0000ffff;
* F2 `9 G( u* c( Z" p3 D
5 x, _- @/ I, z$ G" r( A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, v& N8 ?6 B9 K9 Q, o, P# N0 }4 U: b) y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 _' [2 p& _* {4 Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* |7 A( x/ @$ S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 p: j8 U. Y3 F7 U! Y  V' Y7 L& F4 E9 j7 n: y
    /* Write a 0, so that no underrun occurs after releasing the state machine */! Z# u: h0 }+ r% @$ n" n
    mcasp->regs->XBUF5 = 0;0 I3 i: S9 q/ W) X- h
    mcasp->regs->RBUF0 = 0;
1 ]; N5 K5 R$ }2 O7 O( R" c
9 N7 x/ f5 k& m6 k3 g; O5 s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " l. I6 M" r5 Z; \, i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  _+ C- W9 U3 |6 W; X' |0 N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 i! i5 g3 Y$ M. A- Q( J' v8 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% X/ a% f/ T2 z  U/ Y
  p( }5 L* _0 l, n+ f# Q" w    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  f/ D7 Z+ k2 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ~8 ]+ n0 l3 ^2 G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 l( W# F. |$ j, i' V9 v7 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 r+ x" v  r" a+ B; B9 c
+ P$ u1 I% p8 W, m
    CSR = 0x0000;8 w3 a; |; a7 K9 Z4 Z1 b: @
    INTC_INTMUX1 = 0x3d;4 ~$ j' {2 y, j' B
    ISTP = (unsigned int)vectors;3 g" O% c# n7 a0 i6 W8 ?% }1 v
    ICR = 0xFFF0;  
1 ?4 R  Z; o$ H5 b5 g! c    IER |= 0x12;  
. a) B$ b- Z* t! I  s    CSR |= 0x01;  
! ]) o* J" W9 G, P2 C% f. w* O& Q9 F9 g2 T2 h' b2 G! L
2 x8 ~7 |% f( G- `
$ k. v4 w* B2 G
还有就是两个输入输出函数:
, R" w) D, x6 [% qvoid output_sample(Int32 out_data), v- E! V( @2 }3 g- d
{6 T6 I4 {2 h6 s
  AIC31_data.uint = out_data;  
2 D2 [, ~2 |: u5 `& R4 {' r  MCASP1_XBUF5_32BIT = AIC31_data.uint;' D' u( [5 X1 p( u, [% u
}
7 k% O! Z/ \. E. C5 d  J/ p( @9 ^  e& ^4 P; v" D) B* k
Int32 input_sample(void)1 N& M# K2 o# N* M
{  
( x7 Z/ q$ l# w2 d. y/ k/ M  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ Y  z' o2 P3 q  M! }" y
  return (AIC31_data.uint);
( i1 Q3 a. |! @1 y! N- P}
3 K4 p, \' U% r: \: {. _! o+ w' I
8 g9 E4 D& T5 d7 Q4 S) U# 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, 2026-3-7 11:45 , Processed in 0.041550 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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