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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ m. @8 w. Z0 x5 w; Dmain文件:
7 M  E0 z* [5 ]" v* f) @$ E2 D- ~interrupt void interrupt4(void)  
$ T6 L# B8 Y( i{
2 N8 y$ ~5 Y: g; ~; L# i, R" A) |  Uint32 sample;* O: M/ {+ q- u& `) V7 {# N! {. X5 R
3 F. _, w) Y9 O2 M% w' {
  sample = input_sample(); // read L + R samples from ADC
! y% a3 s9 `6 ~1 K  output_sample(sample);   // write L + R samples to DAC
6 \7 v/ X: `! [' M& E" U7 }* C  return;1 U* [( U% J' R- I2 T0 \, P4 k
}
9 B7 B8 N# I( B" U" A2 q0 @" F& C3 r
4 \+ _: N1 S' F1 t2 fint main( void )
2 `' t) n0 w! B& P7 g8 @3 s; Y{4 J+ D- [: K1 @7 m$ ~

# ~2 E6 L6 V; v7 \0 z( s. `    /* Initialize BSL */
! b* r( y9 n' V7 ?6 p* F  O    EVMC6747_init( );
; B3 R2 I# f7 k! H* e/ d  {/ K        /* Call evmc6747_intr function */$ S. O1 [# @" |; a2 I
    aic3106_init( );) @" z% W1 I- T* @1 \
        while(1);
) t* {& I' c4 O( V2 q: Z5 J}1 k2 E' K4 z1 D8 Q( @* s- j

& p* }8 [0 c) \6 ^' U& H& u' @* C; d5 y* T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: x8 l' r0 D3 f! Q* J( E
/* Initialize MCASP1 */
' P; k, c  E& Q0 ^    mcasp = &MCASP_MODULE_1;
3 s* @: ^5 R5 u    mcasp->regs->GBLCTL  = 0;       // Reset
2 J  S! R3 O2 y2 {* V" C! M1 c    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 L+ g" a4 `& @, m# N    mcasp->regs->XGBLCTL = 0;       // Reset TX
# U/ n9 }# E1 r! I, _    mcasp->regs->PWRDEMU = 1;       // Free-running
- X) X# A: M! p+ g( P   // configure McASP0 receive registers' T& w& r) l3 T+ Q* J5 a4 k
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, ^2 o& w5 v, }. i5 i# K    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 ]8 J+ Q, c( d, o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( ?  Y! `. j: M4 ]% m# M& l5 L
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; G( V' C- D9 i6 A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& s/ S/ H. m: v$ L, \- D, }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  E, j8 X- ~0 H1 c    mcasp->regs->RINTCTL    = 0x00000000; // Not used' I$ g1 x# r) p) Y) J/ }6 N4 m8 v
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 Y9 D9 Y& D# S" g; S
: l/ g6 l  F) P7 `    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! h0 J6 ^8 i' N7 J    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 d* O: |# ^. |, L
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 j7 A7 W& D/ n2 H7 r
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) S9 C* \7 f8 q" t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: Y) o, r9 @6 R0 E+ y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( ]4 i/ I0 S2 ?7 G" n$ t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- M6 T( C' W* z$ k  G  e
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. v3 D% o% x# c9 A3 D9 k! r0 b! l
3 `1 U4 _0 @& X8 ?) D! l, f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: G, _/ k( K) x8 J$ F/ t    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ x; @! M% ^  s  d7 n+ p4 x% ]  d
    mcasp->regs->PFUNC      = 0;          // All MCASPs( `* v; a' r! Y: t6 r4 d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" }- [7 \( y; z6 `/ R: ^$ I' `% L6 u! G' ?7 _2 n+ G
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 {' }1 ?; {- ^( j% S7 X
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- {3 [3 S: L. D% }' K    mcasp->regs->AMUTE      = 0x00000000; // Not used* m: w$ `# z; A3 h
$ v; X4 A0 r. U- Y. S
/* Starting sections of the McASP*/2 z% c- F: x2 q2 t
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 L+ v8 T2 i: F- n; f/ T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 a2 v- {# A) f1 M- l7 u  P5 S  c    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 O" x& |: ~# ?+ o" h, }; W- M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 a3 O# A% ~5 g! @: M. i% i! X' y/ T* E
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 S1 p7 h, E. Q* c9 H$ v0 p" K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: u: r7 I$ i8 k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! c& O$ b9 A8 t$ \6 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 j: V0 z! i0 S7 [0 |  V; i

3 j2 S8 U6 e% q2 n+ P/ w4 d& W    mcasp->regs->XSTAT = 0x0000ffff;
; V2 ^1 I) K+ @( R6 l/ x  C3 [- p    mcasp->regs->RSTAT = 0x0000ffff;
9 l/ ~$ f/ d, d0 P7 v
" A9 u7 r; x$ _; F    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! I2 F8 r2 }! P3 m& y3 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* j8 j) U6 \0 _# g: F    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 Q6 W  l) v3 S. E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% i" e; B1 _& t. d1 P
  z$ K9 P5 }0 w    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 |/ e( N& _2 X! U    mcasp->regs->XBUF5 = 0;
3 L! @0 h, v5 \" {    mcasp->regs->RBUF0 = 0;; {( [6 o6 S8 j
3 F5 c, h1 G1 i  `" O: x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 `/ r8 F. l" R" N- o& q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! y9 W# q& \/ U. i
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* w! ?/ r1 j: C; A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 N) I) Z. Y% O+ ^: J/ u/ t+ ~
; h# [% [# V3 r  X5 Z1 {    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- I: n0 z' R0 D& _/ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 s7 G, |5 `0 v  @* D( N8 a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ d: ]. e' f% f) @& h) n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 k6 ]) E: w( A7 [. Q. I3 {0 i* C  S+ y5 T) Y
    CSR = 0x0000;. v0 }: ?: K$ ~
    INTC_INTMUX1 = 0x3d;
- w( b5 t+ E; ]* E0 I  U% W" e    ISTP = (unsigned int)vectors;! P% a# T* \& Z1 n0 a9 q
    ICR = 0xFFF0;  - N, }+ D# d+ G- K% l
    IER |= 0x12;  + \* c5 G4 U+ x% X9 l
    CSR |= 0x01;  
* B) e" N6 I% }; D6 r
+ }9 ~! P7 k& J/ j1 D* U% l' o+ ^) [4 C2 i4 j- S" H, R

1 \( o, W2 F5 S! b, ?还有就是两个输入输出函数:' W' x' \5 z$ j& A9 M8 L& L3 X7 I
void output_sample(Int32 out_data)
  Y6 h% ~3 m$ z2 ]{
5 p: O6 g; m1 H  AIC31_data.uint = out_data;  ! t' C/ f2 p& p) k' _  j+ A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. X) F0 O* Z) H3 b/ e: `' t( k$ Q+ V}
3 u. |5 N& ?% M9 }4 b( f, O/ m* w
Int32 input_sample(void)' @: K$ X8 ?, f0 T& h
{  
, I2 h  R& d5 \, s- W% H5 g  AIC31_data.uint = MCASP1_RBUF0_32BIT;* v% l5 S( L" t2 u  y: n
  return (AIC31_data.uint);
6 _' Q4 H$ r# d: m$ N6 R}
9 G5 q' i$ X. B& w' K$ X  r5 A( J7 W4 L( r
分享到:  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-12 14:41 , Processed in 0.040559 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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