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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# K& [3 Z' k: P$ x5 B3 [7 m, Y
main文件:
" e/ g) n% _1 \( W% T& ^) ^9 Einterrupt void interrupt4(void)  
; H" `& C. `( _3 n) S2 B{
* w6 F% f) D! ~! q# R  Uint32 sample;/ T' Z: ]+ W' X

6 d0 F8 l! l) P" e$ I  sample = input_sample(); // read L + R samples from ADC
6 ]. i+ o2 N3 h1 v7 s* z  K  output_sample(sample);   // write L + R samples to DAC & s* ~) j* N, A& I- B
  return;4 \/ ]# {2 f( T  @+ o
}8 j( [+ m, J! k

1 u( m" F# i, e: M+ @- w- uint main( void )
' J. o  j: h, n$ q- _1 U( r{
4 ]  ?- u" x! Y& }% ^% r/ R
8 Z2 ^1 g# O5 S  z# W  L& H; r: }    /* Initialize BSL */
' [# \6 T9 m% x4 I& d    EVMC6747_init( );: k+ t% y2 _1 [8 A  N- C  r* `
        /* Call evmc6747_intr function */
- W% Y  \! N% m8 s3 o! G. h    aic3106_init( );7 h8 b. N( m: ?
        while(1);* c. f# Z* i' E' l4 _
}& G, G2 L4 I8 `+ V
9 r% P$ {. W, C/ r& S% n" q8 a
& a$ U# C% s* u/ f; t# M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- N" a: X0 t  C3 y9 H/* Initialize MCASP1 */
# i" F1 X# ~: O( r' B2 H& q    mcasp = &MCASP_MODULE_1;
6 u- y% j) d- a0 `" B    mcasp->regs->GBLCTL  = 0;       // Reset
9 a8 Q0 X- {2 N: Q    mcasp->regs->RGBLCTL = 0;       // Reset RX* {# B0 B* N, ~) @& v# ^
    mcasp->regs->XGBLCTL = 0;       // Reset TX
! `: d! z" x3 Q2 b4 d% K: d    mcasp->regs->PWRDEMU = 1;       // Free-running9 u$ @- y3 f; l; V2 W1 X
   // configure McASP0 receive registers
: {3 }3 l( X1 t* n    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 O. O5 Z! h1 C0 I4 N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- x7 h1 Q5 j# k$ p9 v    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- ~6 x% |' Y( I2 G0 P  o& H    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( e! S6 E, j6 C: R" c' }/ m    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 C& S, h8 u6 S3 ^& w3 ^# T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 L1 o  I( y7 i8 h    mcasp->regs->RINTCTL    = 0x00000000; // Not used  S/ K% v" P1 O8 j3 z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% C5 r- r5 ^: g9 V
9 S% V1 F- [* k! Z3 e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 N& b. q  Z. r8 ]    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% X( W7 o( p+ _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- Z7 ^3 @  {$ x* M' M+ e$ o& q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% y( D8 v6 p" D5 g; W- B1 V
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 B- O" j( Y- W% M7 d: t; ~9 R6 x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( I6 r' Z) h. ?% D0 w7 I2 e    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; p8 {7 _* S" o! A) x( T0 v7 Q  v4 |
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 B% |2 K; e, J! ]
/ V9 l, z. ^! V* ~
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- d- a% Q7 |0 f5 z    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 F7 W1 J& z( H, f# h  ]) L    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 @  ?" P" ~+ F0 }# [! ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( |1 ]5 P. R; p  n. k! x; E

) B9 x& i! `. b  z' f$ n    mcasp->regs->DITCTL     = 0x00000000; // Not used" ?1 y+ n% U$ A8 f5 D
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 a% w' V; l6 g! f
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 v: x5 v. N( q1 g
" @" D3 T! t' N+ L2 b, o, B. |& `
/* Starting sections of the McASP*/
) B0 s" c* L4 a# E4 L1 `3 [: I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" h, W3 b+ y* E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / A5 ~" U+ L) q+ }: i2 f7 m3 J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ \; Z; L+ W7 }) u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: v$ A- O8 U2 r! ^, W5 S
! r* m8 G1 D; e& t: M
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ b: F" i$ E3 `6 S- k  _- }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: B  o3 I/ @: O$ {( h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 W& q  X1 O- \; ]4 ?0 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ P5 J. Z  d0 u+ b: j/ a5 U6 Y+ j% U5 c
    mcasp->regs->XSTAT = 0x0000ffff; 4 E+ K& x' X! n3 \/ h
    mcasp->regs->RSTAT = 0x0000ffff; + l2 m2 z9 @2 D4 r

* [! v) r8 s' E- d0 k( t- A, C! K" U- C    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( S0 `" o- B! x3 F' E* d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- w# a- F5 w/ H5 V: D3 {9 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 t4 i5 Q+ ^$ c( [9 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" S2 t) X6 Y  M6 y7 {1 U) D8 F/ t! n8 m- h
    /* Write a 0, so that no underrun occurs after releasing the state machine */9 H  s/ I3 O/ h# n1 }0 \( {
    mcasp->regs->XBUF5 = 0;
- E0 y0 d, K0 D7 V    mcasp->regs->RBUF0 = 0;
) J1 ^1 p+ Z$ H6 `6 u$ \/ j/ W3 `% X* ^9 y5 {" S% w
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 E/ T% }% H- h+ X, v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 ]* g' P* D' n9 d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 C4 H7 @8 y! Z2 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 X8 ?9 w: J1 Q  L! t3 X" y$ P, M" N5 m  _2 p+ @
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 i& d. N' B; R9 C. V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 O, u1 j- q: `8 N% T0 J3 ?' v. s, A    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" ]0 S) ~/ E2 D, V5 d7 p2 a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 H, \9 d8 t( n: @

# t* u/ e& J3 v' J+ X0 a    CSR = 0x0000;
" h: \9 e, _3 T) r4 F( j+ _0 b    INTC_INTMUX1 = 0x3d;' Q- z5 V2 t+ Y
    ISTP = (unsigned int)vectors;
% H  U& O) @7 Y2 c' F6 w    ICR = 0xFFF0;  $ Z. ~9 I, B8 m. M, b0 L$ u
    IER |= 0x12;  
& s' ], t! m2 D# I; j# J7 d( L    CSR |= 0x01;  
0 j7 R9 t, K1 ?" r3 B  L
+ V7 ^/ G8 E7 Q; _. A
" Z+ k6 j$ y9 B7 ]! n) w' r  f9 Q4 E) P' [* m
还有就是两个输入输出函数:/ F9 H. r8 U5 {' ]
void output_sample(Int32 out_data)
. r: N2 D5 H, C# B3 L{
3 J; O& P/ n) F' u( ?2 a5 w  AIC31_data.uint = out_data;  % |, B2 o  x$ _8 P9 Q! t& |
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 G/ S& ]" y0 |+ k9 _0 i6 _0 v
}
) L+ {8 T/ I& ~. A9 }5 m( x  \+ a  O; G0 i2 `( q& L5 Z
Int32 input_sample(void)) o1 a8 u' v/ j0 [( D- _/ F
{  ) F( l" U; B( v/ X& f
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 A: X, N1 d/ \% `8 l7 {! b3 P  return (AIC31_data.uint);
3 {/ A* z1 v% U4 X( n7 t}
# _# ^7 u* N" Y" _3 M% D7 y
, u( o5 l6 Y# R* D9 e
分享到:  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-4-6 20:36 , Processed in 0.043177 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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