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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, H0 a" @2 m. p# Y7 ?, }main文件:6 t1 Q9 }, }7 j% n
interrupt void interrupt4(void)  
  j* y- [( y2 G{* Q4 T8 L" i: L" {
  Uint32 sample;
2 i0 A& E6 d5 H4 }4 |2 |: b
  i" p! i1 K7 t: Q! z  sample = input_sample(); // read L + R samples from ADC  |- K  j$ X) X0 {! p" D
  output_sample(sample);   // write L + R samples to DAC . z4 B9 m4 X$ ^
  return;
# G! c# i, z6 R! h- H2 ]/ Z}
6 K4 ]+ R$ f% i3 C# J! W# Y6 e- B4 d
int main( void )
! J1 W3 \8 P( i: M- s4 @$ q; X! w{1 A* Y5 v; e! Z: X) r" T
0 O% m0 T& f( x: p4 p% M* s3 U. c4 C
    /* Initialize BSL */
" M- w% K7 O+ m5 g! p    EVMC6747_init( );8 l; N& A5 N; {/ B' I/ R4 e
        /* Call evmc6747_intr function */
0 t4 d# V8 `2 c/ w    aic3106_init( );4 W$ r8 s2 u: [4 i3 H6 A
        while(1);0 m, }& Y  ~. p$ T( {8 V
}; ]/ |. g+ I( p* B8 ]
) ]( t' m3 c4 t* L# v6 k2 U/ s# J
3 p0 H! O+ D0 K+ z7 l2 {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 a; ~& B2 U; f/* Initialize MCASP1 */3 V* d" ]5 r/ V- _9 L2 j8 o8 k
    mcasp = &MCASP_MODULE_1;
! U+ y2 |0 e1 i7 j    mcasp->regs->GBLCTL  = 0;       // Reset
8 ?( O9 M! P3 `) D    mcasp->regs->RGBLCTL = 0;       // Reset RX
- X* v+ p- v. P; D& K& p/ S/ u; O4 i    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 o$ U: t' \, I  |& ]1 g    mcasp->regs->PWRDEMU = 1;       // Free-running
5 G% I. n- `! ]- ?5 C" L/ Z   // configure McASP0 receive registers% T5 @. p( e4 t) m" v/ D1 J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( }3 Z/ ?8 L2 |; _3 @1 I
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 l- q, F4 x- l" g6 P, j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; m9 J+ v; @" C1 e) R0 M
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) V2 Q( T$ k' B' C
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 Y* R& {. R2 H- F- T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; Z  b0 Z' B( n  D) k: M5 G
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) l% J8 `8 F) S- P9 j& G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* q- {" g8 }0 w* ~* d
& j+ p' V1 K' n9 l2 i1 l    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 X. [5 Z" ?' g; T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' i+ J" @; Z: ^0 g" Z) P' j    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, Q9 C' u9 t7 [: P! f8 }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: t5 H# K$ o1 E, C6 J& Q4 n: z) T. ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 }+ \3 i, u) C) i$ H    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 N% N7 \$ `! C) Q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# p! P: Z+ Q0 P. B& K* o    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 h& |, j! I7 H! z

: s( Y2 y6 I! l  X' G4 e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 _5 A4 C' J4 B1 P2 k  S0 j  p    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: v- J" t4 v! y+ i4 ?* h    mcasp->regs->PFUNC      = 0;          // All MCASPs+ }0 }: L" b$ H$ v# v7 B% z6 t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 ?6 V7 t+ x4 i0 P
( O4 c0 H* @( N4 i    mcasp->regs->DITCTL     = 0x00000000; // Not used) a/ o' u5 O9 J: l. m
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 h, U5 [; f0 {& R( ]& q' w) a( ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used: h" I' w/ k4 M$ ~
- m0 W% F: n0 w1 A  f- ?0 h5 M9 ]
/* Starting sections of the McASP*/
, e: g' C) C: l4 j    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 |7 W( n* n* ^6 n# a( R0 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 i8 O* u7 t1 S/ o( g0 b, p
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( B7 a' y5 f7 V% R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( \# z7 f4 E! ?; u6 T
- w5 M# F, D; y& U  l8 p% i    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ x  g) h# [2 n- l7 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 W6 u% N" m2 l# a( d8 D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! b& a0 g9 A/ s! o: S3 ?1 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( D% j+ `7 f$ i$ q5 M6 d/ H4 f' f' s8 d+ `% [/ z9 K' Z% [
    mcasp->regs->XSTAT = 0x0000ffff;
& e# B! t  c5 J    mcasp->regs->RSTAT = 0x0000ffff; . ?9 `1 w" r8 \; f1 `/ [

* `3 h2 o9 `9 w8 e: J  z. h% ]/ |( h    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) A' Z$ H7 D$ M8 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" A# _5 J' a  W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 Z0 b7 A) M3 u- {6 |0 c8 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- l* L  m% K9 p1 M" e! i0 F- `) w" F
3 f- o% |8 s! ^! L    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 M1 I! G, r1 S% e9 \4 X: z    mcasp->regs->XBUF5 = 0;# q+ n3 \; [! O8 L$ e7 a9 c& _
    mcasp->regs->RBUF0 = 0;
) W! K2 L# }& [: h& K6 v1 Z9 g/ i( J, U+ ~. {- W# U
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + j: s9 J/ u7 E( D- r) ]: S3 C' m, a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ m8 w# @% G5 L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  y3 O! U" _- ~6 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 N) X) _- S( u2 e3 r3 @8 n: _, P9 o3 M9 A# d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* B8 ^0 C0 X' S, K# |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, c5 i4 U4 d% j: o1 D# w) K& l% [
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 @' |% i( J# B8 T- s' u' t' M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! Q" \: \- ?7 R: A

* a3 ?8 F! c. C% ]    CSR = 0x0000;
3 }! l- ~% Q- \3 f  L. q1 {4 k    INTC_INTMUX1 = 0x3d;
5 X* o7 W2 E% b2 p. s( @    ISTP = (unsigned int)vectors;* }9 ?: k% |& \7 {, l
    ICR = 0xFFF0;  3 U8 a2 G1 ~% q  i6 G
    IER |= 0x12;  
4 [  n" F3 j/ W3 v7 |5 [" p    CSR |= 0x01;  ! k, N/ j3 j- f' K7 \+ O( l

9 }" T3 A1 p: U. X( P* L1 t5 D% I
$ O3 U. Q2 P1 F9 h; x2 Q
还有就是两个输入输出函数:
! @9 v+ t$ O7 fvoid output_sample(Int32 out_data)+ G7 x7 }( |1 O! F7 P
{  ]/ ?$ a0 o8 c8 |! E
  AIC31_data.uint = out_data;  
1 x1 x* j$ `' Z% b8 i  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 B" |7 c2 B( f, Q! B- z/ X) Y( _
}
1 ?7 A* b) _6 f/ q2 J$ z4 S" H7 t+ H
2 ]; t9 ?6 G/ Z1 V7 \: f: T' ~Int32 input_sample(void)# i# e# W4 ?) f
{  
; X% l5 C$ k6 y8 O  AIC31_data.uint = MCASP1_RBUF0_32BIT;' [/ M, t0 p! n* l3 \1 z) G* F3 B
  return (AIC31_data.uint);
+ N( g1 D# g& @) ^) r1 P" n. t3 V}. t3 ]: l0 i" R/ z, h& Q

3 a- H( V) \5 d
分享到:  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-12 07:12 , Processed in 0.044737 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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