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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 Y$ C3 e- Q! c5 }8 M
main文件:
! h* e- B' k0 ^interrupt void interrupt4(void)  ' N# Z& C0 t0 q. {1 z& I
{" {7 v$ X0 D3 P) B3 P
  Uint32 sample;6 f' u9 t7 l" k: M, P7 c6 W$ [9 k
4 K* k; C: v' f& t0 N' t
  sample = input_sample(); // read L + R samples from ADC
3 l# P# }# J5 p3 x: u( d; `$ M  output_sample(sample);   // write L + R samples to DAC 2 m5 K9 I# r$ b  {* a- k1 \
  return;
1 r0 M, L, D; S0 d}/ ~; g, X8 F  [+ H0 `( d

' ]1 E% t5 {8 A6 ]# [" |  {int main( void )
$ N! d% k: W/ E! W2 o5 A3 L% b" t{
0 T$ e  n% |% g/ W, w) X9 r) r6 q  \
    /* Initialize BSL */" I' O! _0 k8 Y
    EVMC6747_init( );
3 o7 W; |# `7 c6 m: ~/ ]) X& ?        /* Call evmc6747_intr function */$ B" N  U3 x2 f; I: y
    aic3106_init( );
1 b7 Q/ t4 c9 i2 [  S0 L        while(1);( ~+ I( G5 F# _. V7 ?0 K
}
4 q( x3 R! i- G' ]* V# x" n- I! ?- v) K2 N# `  j2 K

9 E7 Z0 Y6 s! y4 f9 R  r4 Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( b; H/ I, m* X/* Initialize MCASP1 */
: k* Z1 N( [& `# g    mcasp = &MCASP_MODULE_1;
1 s  s2 |) B9 x- E    mcasp->regs->GBLCTL  = 0;       // Reset" j; D3 T$ j: M% |) a* r2 i
    mcasp->regs->RGBLCTL = 0;       // Reset RX' h" O/ N/ H/ M9 ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX: e: }+ e- g; A% _
    mcasp->regs->PWRDEMU = 1;       // Free-running& L2 {5 A1 E7 C
   // configure McASP0 receive registers
! V, `+ k- V0 v* [' b    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: ?5 v( _( t+ ?. S  T. h; k. P. L
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ~0 p) V, x0 e4 O: e1 d- U/ a! }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ }, X- X# G9 v- q% \; }; `
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  L' G# ]. k4 }8 M: C; Z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% I7 P3 W0 a5 X0 x6 r8 I1 ?5 y+ ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 x/ a) n. o9 k# f% X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used, _, t( [7 ^" t0 L9 Y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 }; w. B- e1 i% \. m5 W1 H1 ?& e
  X' W" W+ K/ J% ^) R+ v( g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 L7 g/ X& |8 D* F+ G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 u+ }. G8 }6 x. p  F1 a: y! s* h    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! C4 h- ^; L" y* `% H& Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, G- D; k$ ]0 X    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( ~5 G! v  W# Y" f    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 e& ]" ^+ t# I. Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 J9 I: b9 F, S% W    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. s" T( z# Y, B0 q( ~

% ^# Y2 N. B8 _/ i6 ~    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! M5 e) w3 P' b1 R6 S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! r3 N) t7 ?7 T
    mcasp->regs->PFUNC      = 0;          // All MCASPs
: _) \2 Y( _. e( n    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 D% m4 C; `& _5 l  D% T2 D5 s
. Y& c8 W6 k7 p
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; {$ H2 H( A9 f% L; ]    mcasp->regs->DLBCTL     = 0x00000000; // Not used' c3 n- V! {. L( u$ z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 P2 }. |' a1 w" ]( Z% @& K
: y5 }7 V5 _* g/ x5 W/ k/* Starting sections of the McASP*/7 N$ ~! l1 q  c# J1 L" ?% e& S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 Q4 @5 f3 H7 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 W7 g( G% l2 Q& ~( {# d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 f2 n- i% @6 E3 r4 ?) |7 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 E6 v0 `5 X! N! p' }" {% }6 U! c! g* \+ T$ }5 P- T1 w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( O1 q8 W1 y2 H. z* z( c, L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 w' R+ V$ N: P) f6 Z" E
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ G  u+ C( E- z# l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 t" c. O+ Y  Q2 o
: X: n/ D5 W, h3 r8 ^& K
    mcasp->regs->XSTAT = 0x0000ffff;
3 _1 w+ R' Y3 n- y9 Y9 }" _' p! A    mcasp->regs->RSTAT = 0x0000ffff;
1 T0 J1 V5 y5 T2 x- F% J& P: V8 w3 N1 W/ y: J$ q  [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. S( C, H  u- M' z9 T; |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" r% e% n2 ~5 w) ^  R    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* _. E+ P3 z! }) q2 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 D$ n7 u. L' j: u( y; ^) e) A/ z0 e" k) [
    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ q+ c! c* V( c: i' n    mcasp->regs->XBUF5 = 0;' d  v) J+ j  A9 V6 T
    mcasp->regs->RBUF0 = 0;
- a% E. l7 \* c5 Z" ?( [
' E' Z% P: I( C9 c: {+ X    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + ?! n$ |% v, s$ P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& e4 a$ B. O* \/ O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! U0 _& E6 u; I! W8 a# {. S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 S3 Q9 ]( k0 V& k5 V% M
/ L" D' D2 Z- z% L$ f' k/ P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * M' o2 z6 S; ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 U: L$ Y9 U+ t7 h
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 S3 u+ N6 x6 n. Q3 |) [& M# b  P2 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 N2 ]2 n1 e  t
; v. k0 t: Z" L" i3 E  K3 H    CSR = 0x0000;
4 E* V+ a$ M; l) s' U. I    INTC_INTMUX1 = 0x3d;
0 O; p' x, i, F. F, \: g8 L, B0 W0 A    ISTP = (unsigned int)vectors;
) {* O. h) g& T( f! k0 V' i5 h    ICR = 0xFFF0;  4 [) r5 j" J0 S+ \; \1 t7 H0 T
    IER |= 0x12;  
4 Q, E# t4 s& X7 y    CSR |= 0x01;  ' r3 S2 t9 }: g+ R" C

9 i8 }, M+ Z: n6 C, Q2 _. j- A: _- y2 o

5 W* F2 i+ Z0 _7 E! S还有就是两个输入输出函数:9 {5 K) m+ O* T$ n2 f# H
void output_sample(Int32 out_data)! N; d* Y3 [( z2 ]& U
{! a8 v. R9 k/ v$ o
  AIC31_data.uint = out_data;  1 J$ x+ K( a+ t) h/ b& R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 u: x- P" Z- F" b' f}; d( F. Y) {4 M- L$ o0 [  Q. i

, c4 J1 X; M$ N7 ?, HInt32 input_sample(void)
0 T3 b! V; X& i- W{  ) b  _5 T2 j0 W- H4 s+ m- C
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( l  |4 P, P1 [3 n2 P) T7 {
  return (AIC31_data.uint);# v" c' y. K$ ]8 W- U0 z
}4 j- m, P' M) W  E) B, B
* F+ U! P  X% C+ |
分享到:  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-20 02:05 , Processed in 0.088473 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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