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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 C( h, u, E: @$ j, K
main文件:% z+ ~. C( E/ h5 f/ |9 h6 @$ N
interrupt void interrupt4(void)  
5 z. D1 \6 D4 U( A0 Q$ T{  J( y4 f1 ^+ p7 J) K- H
  Uint32 sample;& E) {, L# u& ]. }
: o1 x% C. X' L) A# ?6 t! `2 ~
  sample = input_sample(); // read L + R samples from ADC
- J7 c9 g. c0 t  M3 ^* I  output_sample(sample);   // write L + R samples to DAC & M. J$ K& f# @& F) ^
  return;
( s$ T8 p5 s/ F! T. \: B" P, P% X}, F9 _7 U+ a( X5 l  [! a9 X. E5 X
# Q( ^) G( ~5 U6 r( G1 m' o+ M, i; Z6 p1 D
int main( void )1 Q8 g- ^: w5 V6 g, W2 ~* r2 @
{
+ x' f' O+ i( ], V; z! I0 h: x* P0 ]# H& `. F/ ?& V$ L
    /* Initialize BSL */0 z/ G, m9 y% G+ V
    EVMC6747_init( );+ x" W1 l, A% @4 L5 g" `0 T
        /* Call evmc6747_intr function */
) G. G) a4 q- g* B( Z    aic3106_init( );% w6 O5 \1 X7 n7 |& b- @$ T5 R
        while(1);( a& }/ i7 Y# o, o/ [, @
}
: j! B5 [- S% z
! m8 R  R1 M) o: K9 M" q2 b% Z
' V  y' \7 h+ g- r0 y9 {7 W1 Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  ], j" S: u! x8 G/* Initialize MCASP1 */* b$ R, a- g/ t2 {9 c7 V
    mcasp = &MCASP_MODULE_1;, v% B* o4 f7 S5 \& {
    mcasp->regs->GBLCTL  = 0;       // Reset0 J1 N3 |0 f$ ]) K
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" L+ K0 b6 P! n6 V; u, v. c! ?- v) Q    mcasp->regs->XGBLCTL = 0;       // Reset TX5 o: M: X" O8 v
    mcasp->regs->PWRDEMU = 1;       // Free-running" A) F3 `9 D) f) l2 b# }) \" L9 [
   // configure McASP0 receive registers
* m7 Y. l  h. d    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& c/ t! i' U  V# X. S( N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& V6 H' \' D' B6 R' N. H
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& C6 U& m: x6 A. t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; U1 T# Z  F/ ?& _" h    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% j  w* {- \8 x    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 O" ]3 e6 D& Z) R- y- L    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 S! L7 {: ~% O( I- e
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  L7 j# _  N+ _; D8 M

* |( o  S( |' s' Q# k. f9 I# C* A2 f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; O. R" y+ l% i: i  r) B+ E; @  j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* o) C9 a$ b' c4 [8 F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( R2 t7 j& }) V6 O! Q- L
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 N5 a# ^$ u2 g3 c1 t" O
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ P+ o! {4 I1 Z) d3 Z2 C5 ^8 K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ J8 h; `) j# L8 X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit/ m' z( y4 ^6 D& ~' {3 S" B& t( X. }
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. r5 k9 ~5 k: a7 M- F! [* p% v1 N0 p2 J" X
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 L0 x; L# X) o7 q, u( R  d
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" ]) e" N7 T* b4 A8 A" y    mcasp->regs->PFUNC      = 0;          // All MCASPs, {; w# w$ {9 P8 V0 n9 r0 k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, R5 j- ?+ E. k8 i6 w1 H7 w
! v( T6 X& i+ ~6 K* }0 h
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; n# @" J8 W9 Y3 f4 a* F6 E9 u5 u    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ Y* h; C9 q3 E
    mcasp->regs->AMUTE      = 0x00000000; // Not used3 w. f' D6 v' ]$ p/ [

- q4 e! B" u- G. f" m) G/* Starting sections of the McASP*/0 v* y/ m, [" z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 h! x, S  Q0 U+ E' l9 q  k2 \  s$ k5 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / F8 a3 ?2 {! [" d3 l; h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 h& W. B/ y3 ]' u5 |# T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 S0 F: @1 F9 `% \3 _& p9 X& X# S5 T5 Q) e7 k1 p
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 O8 A' w7 n1 z" V; P1 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 C* P1 ], @& T3 U
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 G: U: r5 R* O5 N# i! l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: ]- t7 d( W: L$ A: y- X  u
" B2 Q4 [9 M" O( h    mcasp->regs->XSTAT = 0x0000ffff; + A7 N0 B6 p6 o  Z" P
    mcasp->regs->RSTAT = 0x0000ffff; , V/ r9 Z. G) I- g

+ x# x+ U7 z7 c. }1 T    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) A1 i) l3 U# y& I: P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ~* b& Z/ r! i! O: w    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " }9 w: e) t) q+ p, z4 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 p" D" C+ o1 b& c, n5 O, `/ j8 [. l( W" `7 h
    /* Write a 0, so that no underrun occurs after releasing the state machine */( L4 O/ n9 x$ n
    mcasp->regs->XBUF5 = 0;
0 z& c7 R& _5 k    mcasp->regs->RBUF0 = 0;& @& O+ B2 g+ j: B) H* ^

9 c+ q1 ?3 B( c# r/ @4 F9 J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  h( f7 J, u7 j, m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ ?( G! \+ i! ]0 I5 Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ {6 Y0 g0 h% X  Z$ n0 w5 h( e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) m2 j" Q- v* E7 y
+ X0 D( B2 u  g# ~, @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" q9 {# _# k2 o" S! g' G( [  M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  \2 i- e+ M- a8 R: u) `1 D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 D+ ^. N# E  g) q2 H1 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  V) k8 ^7 I) _2 U

* Y2 V- i' C% q2 D' D* T3 A6 X    CSR = 0x0000;
4 F, d" A& a9 l    INTC_INTMUX1 = 0x3d;" i& V$ \0 m* M1 p& A
    ISTP = (unsigned int)vectors;2 L7 q  T/ @; y  w* b6 T
    ICR = 0xFFF0;  
: B0 L2 R4 l# x. [9 v! y    IER |= 0x12;  3 P4 C. ?7 t: `; `; U' C: U
    CSR |= 0x01;  
) Z- p0 _% A% ~* X
/ a, ]0 x! M4 ?. t* b! ]  \+ ?* Q* T+ A( b. l$ z

6 }( y& ^8 u, t, z: e还有就是两个输入输出函数:
: e6 m, {. }! ^' Ovoid output_sample(Int32 out_data)
! u0 c+ u7 N! q% s8 N; `{
6 _, c  [7 B& n' u: {+ o  AIC31_data.uint = out_data;  
  w* [5 v1 R& @9 K9 ?' d  MCASP1_XBUF5_32BIT = AIC31_data.uint;- z/ O6 j' Q6 d; X+ q2 A2 F4 W/ h
}
3 @/ U' k/ I$ ?1 e  t& G5 I; I
9 }1 M6 y% e7 i- qInt32 input_sample(void)
; a1 X# I; T  O* y% I{  
; u( i9 W( D1 z) X  AIC31_data.uint = MCASP1_RBUF0_32BIT;. T1 h* j4 L" T4 f9 v2 ]
  return (AIC31_data.uint);
, b- g4 {# x# n" k}! K4 e; x3 V: \% d$ \) a
0 N! R4 q0 b# X" n2 W
分享到:  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-12-23 16:39 , Processed in 0.038045 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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