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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ Z# x! c! e' ~& v6 o  P, Tmain文件:
$ x, u& ]( D! n& g1 Zinterrupt void interrupt4(void)  9 w" F/ Y: w0 V4 ~! K8 I& a) S! ~3 u
{
' M( {2 H* U8 J* L4 j3 ^0 M  Uint32 sample;- J3 Z0 F( A2 N5 J
' l4 `: r+ X# O7 B, X
  sample = input_sample(); // read L + R samples from ADC
. z9 c3 V! h% q! P* _  output_sample(sample);   // write L + R samples to DAC " o: ?* R3 G- w1 w+ `
  return;
  C9 D: Y7 u" r. m2 r" Y}
( O  a8 s- _# r& W: i0 O* G8 d+ T# _0 g, y* g$ ^7 S) n
int main( void )8 j9 K" d1 W  \6 ]) u/ G9 F
{: q# Q2 p3 V6 \0 F& g1 M3 D; s

3 V( H# m6 e" @4 A: U9 j1 _; o7 p- E; L    /* Initialize BSL */8 v6 ?5 X; P+ {4 g5 {' G8 U( H
    EVMC6747_init( );
( V# r1 W/ }! J6 Z        /* Call evmc6747_intr function */8 A. U, L$ s3 e/ P/ m( |2 Y7 u. u4 b" p
    aic3106_init( );
) O6 I9 x- W4 h( k, E; U        while(1);+ Q) \2 v. b( c
}
- z3 M  e: x- ]8 y+ e0 n* }
3 Y: I3 Q2 f" ~% L* e
1 `& b+ M" o& [5 _, Z% K. f- t8 E; u1 zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 e6 ]4 q6 R1 U. H( a
/* Initialize MCASP1 */, m. }' \8 x' o4 a+ i7 l
    mcasp = &MCASP_MODULE_1;
4 e* k) \) T& f: z/ W. k    mcasp->regs->GBLCTL  = 0;       // Reset# _6 W' Y) @7 b2 D# h! x
    mcasp->regs->RGBLCTL = 0;       // Reset RX) n- d' ]4 l9 l+ k4 q
    mcasp->regs->XGBLCTL = 0;       // Reset TX. T. K1 d5 T$ W7 T7 H' O8 o: C
    mcasp->regs->PWRDEMU = 1;       // Free-running
! E" X7 y) \; p& A" b   // configure McASP0 receive registers6 g2 \7 G7 S& n4 F# _$ B& ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 X( F  c' x3 Y6 Z1 a# N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 p& b3 Q& r7 p: S+ T
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 n; F0 R! f% `' X( C' E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ g# g, R# T% y  F
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) p! g& E& ?. m2 x1 V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: [. T0 r8 P8 q0 y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 Q# ^9 j/ d3 m! I, l5 R! ^    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" e+ L  C0 e: t) V1 z+ A  I, E: a7 ^' ]5 ]& q0 |( }* U$ s: M* F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 g5 T* e. @0 f% M    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. |8 T5 _" s0 n7 ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 f9 S" R( n( e+ e3 v& n$ t: D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# k# X7 e. s4 s7 S$ v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 m6 @; T0 |: _$ u9 d' u/ N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ ?2 z# O* g! Q9 M* @7 X7 W    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* X" C" W3 }. ?! J% }4 X) K3 e" A+ Q2 T    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( K2 w# a' e* ~% [
8 @, M) Z/ v, ~  P" U6 [# ?7 Y! Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: [8 g2 n8 X: z( I; B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, M+ P# s( P. [! Q1 h1 D    mcasp->regs->PFUNC      = 0;          // All MCASPs/ |0 X/ r+ [' ~2 D; P. T
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) v1 Q, h" d; H
! f4 |/ a, Y6 [5 v  M
    mcasp->regs->DITCTL     = 0x00000000; // Not used( K& U+ Y. H2 G. |# C7 p
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ D" p1 u: s3 Z6 n0 r    mcasp->regs->AMUTE      = 0x00000000; // Not used: k6 _# ~  K( d: F1 [

5 a1 o  z3 Y& R5 x* ~( L+ ^$ h9 w/* Starting sections of the McASP*/3 b! W( J' Z1 L- V$ ?+ R0 E3 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) L* [' {- U$ P  o/ \) L+ l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  T( L% d' d5 W7 n. k3 R4 q, V; f    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 `2 \: u; P8 M- p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) V( l! T1 A% h6 b$ t: s7 f
' R% V/ P' K7 |. q5 l+ \
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 Y+ C# J( t  E$ e. |. t  T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; M& k- Q' h9 d8 }1 `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. g. u5 a; ?, G: M, k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 M8 w# p6 M) e  C7 x0 ?5 |5 `
  g! T) c& Y+ D8 H% j1 a5 u    mcasp->regs->XSTAT = 0x0000ffff;
/ q. E: c$ U+ z- [0 ?/ N" Q    mcasp->regs->RSTAT = 0x0000ffff;
2 Y* z( m5 e% P  x. d; k5 @& e5 l3 ^6 ?$ T( ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ H2 o; y2 y% c' c( A" |8 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ c6 w% Z6 X# C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) G/ R" [! b* [+ r( S& l1 a* U( j- @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& [( I; w! j; [, g2 m

4 P3 |; U$ m2 q" c7 {7 @( h    /* Write a 0, so that no underrun occurs after releasing the state machine */# f- ?! }; e# a4 R. q
    mcasp->regs->XBUF5 = 0;
* e8 [6 r# O$ q    mcasp->regs->RBUF0 = 0;' c  q9 _. ~6 P7 F4 S' F: Q* {
1 ]$ C2 U! r' }2 D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % s- b/ H9 B/ f- m  w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, A2 p6 R2 I/ p9 u    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 ?9 U& t  Q( f/ p7 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! Y; z( s, m" M4 I, f

7 O6 }0 K, y2 z/ c- t( F$ F    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . r) Q; a5 ^6 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% g3 F  ~4 H- P) N* \  _, [# c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 Y; i* L+ |: ~2 c2 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: h( K) g+ u' |6 [0 z4 @5 k& V  q
  o6 q; X% g4 ^# E: H9 y
    CSR = 0x0000;
) N% m" ^3 G: U6 T4 X# ]$ @    INTC_INTMUX1 = 0x3d;
, D+ I1 B# K: d% {& X    ISTP = (unsigned int)vectors;5 a! y7 t2 ?8 ~! Z
    ICR = 0xFFF0;  
3 g! ^# }) u% R$ D  @. j4 Y" i    IER |= 0x12;  
$ q; C& `+ m9 \' U5 k! b    CSR |= 0x01;  
$ S( F6 g& l# ?
- J, C* J4 f4 G2 Q1 Y- d, D# ~2 U0 {( x4 h
9 @6 q0 v0 E7 G' F( Z8 h$ p4 k
还有就是两个输入输出函数:
( k% l% @9 [! c* l8 o- @7 g7 Yvoid output_sample(Int32 out_data)
: V& @: Q% H5 H! o/ D" Z{( t- t: x$ d( R
  AIC31_data.uint = out_data;  
2 c; b" R4 u" v4 ?( N# |. x* X  MCASP1_XBUF5_32BIT = AIC31_data.uint;% R5 p+ F# J' l" N
}- W; a9 A* J9 k4 J1 v
2 e- a- r- B! R0 J+ l
Int32 input_sample(void)
9 T0 ?" b/ l, E5 c$ a# \2 ~, h{  
5 n6 k5 i3 ~8 S/ F% `, s  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 u+ k0 ^9 O5 e
  return (AIC31_data.uint);
) C. G5 h& m" B$ f0 z}
1 r+ s* K4 P( P1 \0 Y3 b* U# A+ x( q% b- @
分享到:  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-2-6 17:59 , Processed in 0.042791 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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