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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; n2 Q! s5 h6 l3 _2 P
main文件:" V* v' F6 ?: z
interrupt void interrupt4(void)  " I9 B5 ^# p7 z% m: n, |8 h- r
{
$ M+ D9 k& ^# ?( h  Uint32 sample;/ |, M: B7 c/ u9 u
3 ~0 Y5 f* o+ E8 I
  sample = input_sample(); // read L + R samples from ADC+ v, T0 v% I9 d7 k: o" O
  output_sample(sample);   // write L + R samples to DAC 9 i8 e; D! C! p( W' W
  return;# ~. b! i9 p2 K* n6 ?& f- L/ F
}
7 @9 v/ q( w1 _3 S- V& b: z
. w$ k& h8 R' p8 N% Vint main( void )
( A& e2 D: Z6 g# l8 ^, d{
% W$ G! r( I9 v* ~) ^& w1 O( W
& l2 L5 F* \( [; Y1 ]; D" j* U    /* Initialize BSL */) ]% r  x& Q, B
    EVMC6747_init( );# H7 Z, G- H3 N9 d- {
        /* Call evmc6747_intr function */
8 f% L2 f$ ]: j2 O. V( v    aic3106_init( );
4 v- p0 C; t. V) z. x* m- [) W6 ^9 V        while(1);
0 `' p5 }" d: f$ `}
8 d% W% Y* T# ]7 @! Y5 W+ t$ d$ e/ R
- K+ r! Z  _1 Y* X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 l) ]1 I$ P- u0 Y2 P- U& e/* Initialize MCASP1 */* Q8 I+ {% o' h0 `) @: N; n; m
    mcasp = &MCASP_MODULE_1;- Z4 [8 A- r5 H, [: y
    mcasp->regs->GBLCTL  = 0;       // Reset% _0 B- F7 z2 B. x+ w' E: U0 G& w/ K
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 ^: q- [, Z: B' B
    mcasp->regs->XGBLCTL = 0;       // Reset TX
" f' [7 F' b$ C9 [    mcasp->regs->PWRDEMU = 1;       // Free-running% q( k$ d# {6 l" \2 w
   // configure McASP0 receive registers
7 S& h" n! [6 R- b* r2 \. Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- F6 s& L' @+ B( l1 ?; ~7 ]    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ ~0 d; F! B  y8 G. Y1 C    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& x' Q, Q, y, ?! Z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; Q) Y6 W% _' o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  v! a, `* I& E8 z$ d    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& N4 d8 C1 S. l0 e% j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 Q4 i" F$ o- G: ]! h8 o+ P+ g/ a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 x0 y6 r& E7 `) `* ^% G
  D: S1 g/ A; o
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; S; E4 ]. e7 u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 E6 c, Y; h9 U% g
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  N1 h( [; e9 J% W; v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 V0 R: r! D" I! L) F9 E/ {6 v) N
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; M7 j( L7 A# n) l: `
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# k, p. Y- P- W- ~, h; _  N    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" }- ]( n7 q- \( y* J' S    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 W2 O- e5 z4 J0 R. N: Z; p7 S, Z3 N/ U
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ _) C1 U6 p* c: }+ Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: S3 w* a# [( X# d1 \    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 t, N% J# r% w! Z  J" Y    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) i0 l8 g7 \& u  j1 a' Z* M: L# o4 q. C9 C0 W* D" Q% @
    mcasp->regs->DITCTL     = 0x00000000; // Not used
( G+ F; u- [5 @6 i! J    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ O2 g; U! N  m: p5 E) K    mcasp->regs->AMUTE      = 0x00000000; // Not used% c7 j% ?  _" m

4 c) L* T! U4 k6 Z$ v/ E# E# P+ B/* Starting sections of the McASP*/
: T5 I( K2 @" T5 z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: w/ K4 A6 G+ R3 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ o. W$ v% X5 k
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + h- L1 V5 Q& P+ b# B/ Z$ k9 U4 o/ }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ I  p3 s1 ?* Z( D9 r

# i2 S: U# m" t1 U    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 N& f( l! L+ r* g! M0 @* Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ G2 T/ m4 q: x5 F4 L, j    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& _  C6 u; E' X- C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% [+ ]5 p( }( K3 r- W# S/ R
) |8 c2 ^7 f" p- h1 k) |
    mcasp->regs->XSTAT = 0x0000ffff;
4 V- w" r' s) t( ~: p5 q/ z( B' Q4 X    mcasp->regs->RSTAT = 0x0000ffff; 9 B; d' }* D2 r; A. g" r

0 E6 u* w* t3 y' I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, M. ]$ X* q' k2 N1 B: K& s# y& C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: c1 b6 J& |( A    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) n, I1 _- U, g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) O0 y$ x. ~4 q2 i* X, M) K" k
; f9 n6 r7 o( O7 h& x. K
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# d5 W# o+ z$ n4 m% R8 X2 _# p9 T    mcasp->regs->XBUF5 = 0;) B4 d5 p& A5 S4 [- P
    mcasp->regs->RBUF0 = 0;6 a1 L5 X9 l" U+ ]  \- I& Z
; k4 T3 X+ J) K; J
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 R+ L) v8 S) S" Z6 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- `- Z0 Z: o+ X    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! y$ Y5 k, C4 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  g) d8 }6 D: W2 \+ L* L; G
5 E5 i8 g; W7 z  j+ @
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 x, S& g( @+ M( p4 Z+ Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# g$ V) m: P- n1 T& \! J2 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - S0 u# G* G+ o$ J7 M8 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# u2 p- }: S$ G/ G1 U* Y! f0 p' s( i( Y/ p# m
    CSR = 0x0000;' [$ _6 @$ ~  y  L
    INTC_INTMUX1 = 0x3d;
* y" G1 B. F( E8 l* S# d- q/ [    ISTP = (unsigned int)vectors;' y. q& ?1 u4 a/ V5 D, a/ z. D) N
    ICR = 0xFFF0;  4 U& T# h' x% z4 c
    IER |= 0x12;  ; [$ [7 `4 ?* ?2 _6 P2 V
    CSR |= 0x01;  
/ b6 G/ e# c8 A& _( y+ l% O6 ^3 g: [* x

1 w8 I2 P) M6 o7 J9 q0 a6 r; W. k3 S! x; j' H
还有就是两个输入输出函数:
0 [( [* H1 H" Fvoid output_sample(Int32 out_data)* i& h5 y3 t2 S2 Q: R
{
2 x# }7 t" N# X  AIC31_data.uint = out_data;  
! d3 ?) G: t8 r. R: C1 q3 q  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 ?3 J- q) |* B0 U' w# G
}
$ @# Q6 i5 l8 V3 [$ s1 G9 B% T/ Q; ?5 e; J) c6 l
Int32 input_sample(void)
1 n/ `! c% N# R( d( D{  
  z% w( [! D7 c- o4 b' t! h' ]  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& i8 w; M; n5 X6 |. f2 J6 R% C  return (AIC31_data.uint);7 Y( i! F+ ]2 k) V( ]
}# j9 v! r0 I/ `% H% ?
7 @5 n$ T) I. w2 [& M
分享到:  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-1-2 15:00 , Processed in 0.041473 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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