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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: _% S% B* F) k0 v' k9 ]  R
main文件:
# b( b5 q: V. M9 c% G3 H& Minterrupt void interrupt4(void)  
' B/ q5 I9 U8 g" s( o+ y{
% `0 _3 Q% W% K2 ^. d! t4 d  Uint32 sample;
( O9 m1 s/ T; T; {# y& ?1 N
0 a# w! @6 }$ n% I4 H. Z  f. {  sample = input_sample(); // read L + R samples from ADC+ x- s8 n8 W) b: B+ M+ Q
  output_sample(sample);   // write L + R samples to DAC ( c% Q' n$ F* J& N# K$ D& V
  return;3 t3 m9 ~3 U' M, V
}4 e1 U# j- j5 _) z6 N
4 `! X7 j$ j/ I  Q5 h0 G+ _
int main( void )
/ R1 \* i% L$ O- O* U' o{
, C3 f: \2 F0 o3 j0 S/ h, _8 f5 G  a  c& T( y0 q+ Z
    /* Initialize BSL */
0 W9 V  q% `8 p$ M& {! ^2 ]: [# U3 t/ l, G    EVMC6747_init( );0 H' @* }% C3 c: j0 f
        /* Call evmc6747_intr function */
1 I! U4 S  G+ E+ r8 Z+ V# X* `    aic3106_init( );
' ?2 s. {5 x% f6 M7 N  p' W1 A- _        while(1);; m1 y9 Y- G$ _$ }
}
9 S6 Z# j0 g" v, Z/ ?, k/ h& l" r" }* i" T' @8 A

! t2 l0 h8 x% P$ [0 Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- ~  z; L/ l9 d+ ?
/* Initialize MCASP1 */
4 \0 ?" F9 l% z" l' j    mcasp = &MCASP_MODULE_1;3 B1 `0 j6 t, I' K
    mcasp->regs->GBLCTL  = 0;       // Reset1 r& l" w+ f+ o; x1 o7 Y' @" T3 D
    mcasp->regs->RGBLCTL = 0;       // Reset RX5 C3 N( `( }1 z0 T8 R
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- ~0 w: Z% C) C3 L  }- C2 d: P  r    mcasp->regs->PWRDEMU = 1;       // Free-running
1 X* v2 s( `6 x! F* A+ B1 l   // configure McASP0 receive registers
9 u2 p$ F5 y* d+ f3 {    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 U: [5 Q1 q+ k3 ~2 E; Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 c4 Y& V% L7 H9 r% P* ]
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) }+ d& r' E) t: t9 l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! i( @2 X& S. T, D6 p7 `$ M' p* p  L
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): {2 t$ g3 z( `. z+ m
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 }; E* t+ _; a) L& u# i* ~, ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; r2 G5 i  b7 j9 V# A; V  E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& W4 Y8 ?, V; m+ w3 m: [! a
9 W+ Q$ N; Y, H2 B: O    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 r7 ~. p5 {2 a+ @" }" V7 B4 o( o
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! O$ I" Q, v- c0 P: G    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 t  ^) g7 X% }+ i: X/ }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# N6 R( |% s, h  O; S( Q9 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 M% Y3 D, u2 `5 V4 c& Y" ?+ b/ L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 i8 _1 x' V1 w: ?& [& V$ n# I2 X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 f7 ?4 b' o' `$ `% ?$ L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: B1 I. S  ^7 z$ c8 J) O1 \7 ^3 a5 t2 A+ e) W* C3 b" \
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 N, v5 s, ~) K3 o% N; j( y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- T* c; b8 \9 ~2 ^) F. O
    mcasp->regs->PFUNC      = 0;          // All MCASPs) E; ~0 T( D) {3 y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& f- H; V$ Z0 \2 T# F
2 @' s2 H& D% R0 ~1 L/ x9 N    mcasp->regs->DITCTL     = 0x00000000; // Not used
# J8 b' ?% }8 Q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 }/ q' w/ E1 ]  C    mcasp->regs->AMUTE      = 0x00000000; // Not used) |5 a$ u3 N" M) D# B: \: \( A: O
" k$ ?( b1 B* J3 |
/* Starting sections of the McASP*/
/ p/ c. \: x* P8 u; y$ p* [    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 W( `0 _2 C/ x* w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! ~. g: q$ b7 J6 R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . r% {& l9 `5 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( [6 O, y! W" n3 O/ ~/ A0 s4 C" _) M# X) v& H$ [/ s
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# B: H& P  a6 d/ i/ N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! V9 e7 t/ m) Q% V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# [0 m; w: Y& ^: u6 y: J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, |9 x% `, D  t
& p- [7 e8 s) U1 |
    mcasp->regs->XSTAT = 0x0000ffff;
- p* b  J9 o8 y/ V4 [' j    mcasp->regs->RSTAT = 0x0000ffff;
) P4 }* s# C+ w: A4 N
+ A" q1 J/ t/ D" d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 l+ [! y0 }+ `) ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! F3 \1 E& Y1 M( F* T- ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 L7 w8 K) U; Q8 @; ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 H% v; V+ ~$ H
/ }- P# ^! \! _9 R
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 e4 U+ {  k4 U3 ?
    mcasp->regs->XBUF5 = 0;
/ ~* ~$ b9 @' X# \    mcasp->regs->RBUF0 = 0;
2 g$ H7 q6 p$ M* r) ~' }# V  e. q' ?3 n" N: f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# g7 M+ S4 U/ ~% M" r1 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  N! N% Y+ a" i8 O+ G% k& c
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( n  {9 ^# {* E! A2 ]% t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  m! z( R. P/ C/ E, d' F5 d" _& @
7 ]8 X. y. y4 u7 o1 {2 g2 W    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 K( ~* d9 P& w: L5 o' v' A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ ?$ H3 I$ r; X8 k/ }! L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' _2 Y5 }' _( c' R( X* D% r( ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 K& H5 P. k8 |2 `: ]* m- P

. _4 L1 W+ V- N+ h: _8 B; @    CSR = 0x0000;
  Y8 s( m( t  d    INTC_INTMUX1 = 0x3d;9 m7 \& m" }" M2 ]
    ISTP = (unsigned int)vectors;; R9 a- Z# O- C, e: N
    ICR = 0xFFF0;  ! H8 K2 n2 G5 C( {! e
    IER |= 0x12;  + _% M% {- f% R  ^, s3 V
    CSR |= 0x01;  " ^% _* F7 ~5 ?. _
, q; \( R4 R2 b

% D- f9 ^4 ^( C$ h# K3 h: m
: ?$ A2 v% I  b" B/ \/ s/ f还有就是两个输入输出函数:  L5 u7 {0 N+ Y+ N
void output_sample(Int32 out_data)
/ `# D! ~% t; `& ~; K# o{$ u' [/ \, L7 v) ~. h
  AIC31_data.uint = out_data;  + @+ a, X* H" y( Z
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ A" P& @5 [0 }7 H6 |
}' Q5 W1 k5 y3 P- F" ?& z# N3 D
, H: _4 Y# h: E! i, p
Int32 input_sample(void)
7 X5 ~& A' }3 K; c1 v8 k7 {- R{  3 s2 O" R% m8 T) }) e
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 H1 m3 w9 P% i1 \9 [) X  return (AIC31_data.uint);
; ~: s$ F6 w# [6 \}
- r3 l3 N2 |6 w0 R
+ v) ]3 D) ^; h7 q- D  R  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, 2025-12-7 11:47 , Processed in 0.038123 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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