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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 n4 _" D* t. Y' L
main文件:
) E8 M" C! {& ~, P4 i3 o7 Rinterrupt void interrupt4(void)  ' L0 g& |# `7 E, C
{
4 l# K  x. T( i  Uint32 sample;1 l( N1 r* |$ h7 d# ], `7 |8 S
3 h  h5 ^) i% M  l0 l$ H
  sample = input_sample(); // read L + R samples from ADC; I5 I4 U1 ~) ~, e& U
  output_sample(sample);   // write L + R samples to DAC 2 v; q/ q0 v: a2 W
  return;
2 l" H' f6 a4 `+ G1 e# k}
# O+ z+ B; V& F3 e
3 o. }9 \3 k. l7 {int main( void )
; J7 @0 U2 T0 [# y: Y+ B2 K7 i{* ^* ?" ?; |, c: e6 ?0 j: V
) r0 z  r9 h+ g2 ]' S, e- X
    /* Initialize BSL */1 r. l8 a: I" v. t& b
    EVMC6747_init( );
) y# B4 u9 k" h2 ?: J2 _; L        /* Call evmc6747_intr function */# P) Y, ^4 }" R& X0 v( e/ y$ F1 j/ v
    aic3106_init( );
# L& i- U" R7 p) ~/ g2 T        while(1);/ y/ `% {$ C+ S
}
* s# X: e9 m& ]6 f
  g7 [+ [1 j2 w$ z6 u6 }7 c( x: d' A* r
1 C+ o7 |$ H) g5 c# a$ Y$ Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ F( m" M! w. M/ E2 g/* Initialize MCASP1 */
0 C& w  M4 U# A( ^/ x( ]    mcasp = &MCASP_MODULE_1;
1 X7 N3 F5 m. I# C4 H$ O2 z    mcasp->regs->GBLCTL  = 0;       // Reset
! U% j/ {+ C) v    mcasp->regs->RGBLCTL = 0;       // Reset RX1 b' N, ~, }: b: }( c  b
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% a; l+ u+ N' d, ?' L    mcasp->regs->PWRDEMU = 1;       // Free-running6 ~1 M' j& U, E. L& Y, R: E( e
   // configure McASP0 receive registers7 k5 \$ K( _7 s& {  h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 w+ a# D) r) R& J    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ s& D, h0 j; o5 h/ E/ I1 {* Q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 b2 S5 H. p8 W9 z. y, [: O" J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  {6 r1 m; M" e4 h$ r3 U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  V  q' |2 x0 G! W- }% L. q+ i% z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% U/ q1 u3 b( A5 B8 X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ X6 X+ Z$ O5 T+ V% ?    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 e, W+ P8 A; e: _. V# Q/ P( R+ r
' S! Q" Z! N+ v0 I# c, b, E- `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 r% T- T5 B! @% T2 c; h    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 u5 O: l: }, I( ]3 @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) n8 L$ Y9 M. ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. ~8 T% x8 X( b4 e: I* I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ u' [& V2 c( S/ q, Y" X- z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 P6 k# x  S& X2 p+ H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& |2 j/ q: G: t9 Y7 m5 y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& U: q9 p5 ]( D6 y6 d7 z( m

" S. z3 V% R% Y8 k4 h5 a    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: O8 S' i4 d" K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( z, r+ H- c+ b# R- Q. H    mcasp->regs->PFUNC      = 0;          // All MCASPs2 u" Y7 O- M1 i9 P% _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 w: D2 g: E" M* V1 @# ?* v" R) _8 z0 l0 S! g8 I
    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 K. R/ b! K1 b& z    mcasp->regs->DLBCTL     = 0x00000000; // Not used" c/ P1 L7 U! k9 W9 v4 I
    mcasp->regs->AMUTE      = 0x00000000; // Not used
" u7 p" G! a5 r/ C9 ~: s  }! e' L% C9 W9 _9 o2 F# ]
/* Starting sections of the McASP*/( ~5 a& c! X. I6 k" O
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ W! g( M. v$ j2 Y" `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 v7 R$ g; x$ R5 `; r    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 J3 V$ d+ Q: Z7 }, W/ w; b! `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 \( U& u8 G0 K, w
! @$ h' n) _# {3 a4 c' s    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ o8 r% n, n; \* i3 @& Z: H# O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# o. Z& f; e" r8 }    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + D* \2 l3 J8 H5 m" a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ y: ^0 ^. L) c5 G! m
3 h/ E5 a/ K0 C" d; j- [3 s
    mcasp->regs->XSTAT = 0x0000ffff;
4 e9 x+ D$ j% \5 w& x  e    mcasp->regs->RSTAT = 0x0000ffff;
& j9 e- Z. l- G4 \+ ]! k5 e2 ]0 F0 N0 }6 j+ V
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 f4 K0 P( ~$ Y; Q* ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; m' \, P$ v6 F+ K. o7 k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 y* n4 p4 y2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) @. H) y  m/ \* B' c: _. h/ J1 W. j/ s! I5 G  _
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 p8 g0 K+ n2 k" N
    mcasp->regs->XBUF5 = 0;
6 o7 k' p/ z$ b    mcasp->regs->RBUF0 = 0;( k3 u. P9 V" A# @) H; ~

: `( a! t, D/ T3 l    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 |* @/ v  \  g. _, [  d! h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# v9 w* D6 x" `; F4 R9 `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' Q, |: ~8 Y  a% H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; N' Z; ]) J, v' S5 D! x
/ c9 h! @# v( z7 D8 F" K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' ?2 }: ?9 z+ @; E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 D! t* y7 o/ f7 e+ k# `3 j    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % E% F5 ?) _- `0 T1 U6 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 g8 X: r& D5 Z2 j3 g0 y

. x+ |7 T* E% c% ~    CSR = 0x0000;3 S8 v' U; o' Y5 Q. j
    INTC_INTMUX1 = 0x3d;
, J/ V: P) q- S8 o; {    ISTP = (unsigned int)vectors;8 r# m0 {& t3 x. x2 f
    ICR = 0xFFF0;  
8 H6 V0 K- L; E  a2 Q$ M- r) d    IER |= 0x12;  
" U2 h* w& Q' X3 z8 {  C    CSR |= 0x01;  : v# _7 M( b' ]5 U3 ^' [

. I: T( q& k. Y5 {6 A# K5 i& N& m( H

1 a& h0 C5 D5 O& a! K  H还有就是两个输入输出函数:
5 |' S: f  c# }void output_sample(Int32 out_data). T, [# D0 `6 _8 O  r+ A
{' j+ Y  S) s8 @" \# y7 u  Y0 ]
  AIC31_data.uint = out_data;  & }  [' u- l6 o, `
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 X+ L, V4 Y5 [* S}) z" X) F+ r/ c9 z
7 b' \6 u. A8 }( l$ ]& i
Int32 input_sample(void)
% F( X* U: F6 L{  ' S. @$ G8 u: G) y; n% y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& k% w& r; e! @3 b. P1 Q  return (AIC31_data.uint);
. H6 w5 t9 a+ n4 l}8 E+ ^! B! U$ e; P2 y2 |
- Z" u( a( j4 o
分享到:  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-1-25 09:56 , Processed in 0.042297 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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