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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 R9 V! h! `  _& b+ _$ xmain文件:% G8 t$ q) h! }0 y8 c& ~3 \5 S2 V
interrupt void interrupt4(void)  
9 L& N0 N3 z% G2 [" ^{
) q) \! ]+ A0 z  Uint32 sample;$ t2 I, ^/ y) `
0 ]% P( ?7 U* n" s7 d: |) }+ u
  sample = input_sample(); // read L + R samples from ADC  }3 \7 i& Z; J3 t* `# v8 e
  output_sample(sample);   // write L + R samples to DAC
5 T% E6 w5 c  X+ I+ ]) e  return;9 T$ f" K, [2 U6 W& ?
}
, P  i" F& |$ K* F3 C* I4 L! B) G8 @+ k1 N& x8 y  I/ ?; z$ O; ?
int main( void )
0 \8 B3 M1 @! i1 S{9 U0 G* y) m- J

2 r7 d% X2 u+ |/ ~7 l    /* Initialize BSL */3 H& i' e3 _) b. ]" W: V* T, {
    EVMC6747_init( );5 `/ ^" w9 g  Q$ k) [
        /* Call evmc6747_intr function */5 E5 B- G: F8 V+ O$ S* v
    aic3106_init( );) J- I: T' V- @: T
        while(1);6 K. X+ c5 j$ k% C
}
1 M6 M8 o8 A' F/ U: T2 ?) T- f+ c: m$ @8 T# S. l6 u$ m2 |
% `% z* e- m- R: ]/ ~& }- w! q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, i( k9 [* G/ }/ D) H
/* Initialize MCASP1 */
# u% [; K* N: P8 y: s  G    mcasp = &MCASP_MODULE_1;
, t5 Q1 A: [  I    mcasp->regs->GBLCTL  = 0;       // Reset+ u, G8 I& j1 r3 ?) o8 _1 S; T
    mcasp->regs->RGBLCTL = 0;       // Reset RX! R+ C. O# e  D  F
    mcasp->regs->XGBLCTL = 0;       // Reset TX, H; Y1 P: }6 ?
    mcasp->regs->PWRDEMU = 1;       // Free-running
/ M' }% c) g2 @1 W! v) x4 w* e2 Z   // configure McASP0 receive registers
( g2 f6 o3 Z1 q9 p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 y) R1 c! ^) I. \4 O1 Z5 ^. {/ C
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 b* W+ B1 j* U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 g2 |1 }) O( q2 x! O" X7 l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ e5 t4 z* ~$ K7 i" z1 o& v/ U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 n- Z3 g, {% D( i: R9 S" K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ Z$ d% ]. y% {* Y/ K    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 R1 p4 O5 G3 v6 A' W3 \4 `$ Y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 @2 C3 b% I, u7 }/ C
7 Z8 S- G2 i: T& p    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 i( h8 p2 i- q. v0 u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ U3 M4 i2 A5 a1 E0 J
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 v8 I. ^9 |  J0 {9 a    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 |6 v- S/ ]- [) W/ |. h
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 K9 ~) b2 \, C* W: V# y, U3 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 ~/ D; K4 x! U  Y) ^    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ m; m/ Y8 C. H( C- x$ Z  s7 P9 H    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' e9 K6 p; X/ ]! I; D! H" h+ w8 j  u) Y, X6 G. B
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 P! h' S) R6 N" [) J5 o% e3 j: d* i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: g! L3 ?6 i) L# \* d' I    mcasp->regs->PFUNC      = 0;          // All MCASPs# g  y4 N/ B( _' ]/ P5 _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 k( g) R1 [0 D7 B+ N( @
3 `( _+ z* }9 k! [
    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 O. o3 f! o: S    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  d$ n# O. q. T9 v3 b$ ^    mcasp->regs->AMUTE      = 0x00000000; // Not used8 _5 ^5 P" b; w4 d+ `9 ?5 ]- W+ Z0 i4 ?
) d  z4 w$ w* d% l$ `, P( X. m
/* Starting sections of the McASP*/$ `+ J) D& ?0 `) K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 Q: @  B. u3 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % Q- ?- Z' q) g: r7 y8 ]& z  x5 P& `
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' z2 h) R$ A' g8 z! P( [0 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! ?8 `" ]! N* ^$ E) y: ^' |1 a
! I8 x6 m* q# {& F! O% S4 h' v9 o    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 ?" T" p0 P6 W  I! a( p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 ?6 q' t2 I4 S' D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, T9 b9 g" ?. a1 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& Q" S. m( O! M7 a: _

) H* Q2 \& k. I    mcasp->regs->XSTAT = 0x0000ffff;
& Z& w! R5 \. }* B    mcasp->regs->RSTAT = 0x0000ffff; & C/ c) b2 h# Q
7 {+ d6 d5 j8 L& i8 Z  ?7 F0 }) j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% X8 a# V& ~( q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) A& a6 O: N7 R    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % J1 B! M" I, ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) S0 L3 G) {# P' V+ s- y
, H) s& X' E& R1 J. S
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 q& d0 `# `* c
    mcasp->regs->XBUF5 = 0;
+ a- c( ]6 `, E; ]* A% p& p$ k    mcasp->regs->RBUF0 = 0;
7 o! }% e7 j% S# n9 c, [% v2 k8 i' a; u5 r8 Z; l- Z1 j( y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 W& c" h; ?% ~: O. A0 c9 j( j! i0 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, i" M1 F4 R! c
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % M# F/ S# n4 a( {/ e- x6 j0 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 Y) ]' {2 }  O# Y" }2 B

& |2 o: ^$ C' }+ q- z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# |- @' k" y( H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ |8 z% _3 e/ d  G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' H) h: m5 v' D, I. n. F' C) }3 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, ~/ m1 K( ]; O0 T  @$ Z
( z. n0 E& f: {; S  ~6 @: |6 v    CSR = 0x0000;' _. A5 b6 o0 M9 z! U
    INTC_INTMUX1 = 0x3d;; I5 I, @& ]2 V& r. x
    ISTP = (unsigned int)vectors;3 X( H+ }3 W+ [- d: ~
    ICR = 0xFFF0;  
/ G! R) o4 U0 P- |0 u    IER |= 0x12;  . G1 o* F# w' t- |
    CSR |= 0x01;  
% Q: c4 D: x  D" |. Z, @
( }, m  Z4 v' z) q" x  X4 F* J' b
2 ~; @# r" j) ^/ ^6 A( n" |/ A
9 ~: C5 _& B6 T: y* E% M还有就是两个输入输出函数:
' T$ z/ E7 ~" O9 qvoid output_sample(Int32 out_data)% y+ S  }& E3 V+ ~
{
9 U. n% f  G. c( E# m3 m  AIC31_data.uint = out_data;  
3 {/ q& D% w- s% ~( I' ?( _* s: k  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) Y6 Q* z1 z; o0 Z6 A# k}
! c% @& B* g. |: g8 d$ Z  B5 e) a7 u
* c3 e1 _, N; x7 bInt32 input_sample(void). w; @; D& e2 ^5 I+ A& t5 t
{  
+ a1 ~9 B1 R2 ^, E9 y" @" @  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 q  x  |0 G( I  r/ Y
  return (AIC31_data.uint);- J) |' X2 T: M% }/ }# H
}3 w. g4 i% a& V" ^& o5 v4 ^/ l

9 h* U  H/ @) y1 a6 ~% ]
分享到:  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-27 13:26 , Processed in 0.041121 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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