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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, g2 N, J, {* Kmain文件:  O# n4 A$ @2 N3 e
interrupt void interrupt4(void)  5 o5 k4 _' b6 `5 E0 h' D
{4 P( {+ O- ?; E( j% Q8 R
  Uint32 sample;+ {+ @' g! K0 y9 `) o
2 e2 j4 ]$ y4 W- @( G
  sample = input_sample(); // read L + R samples from ADC  j& O1 B. N$ S" d2 x
  output_sample(sample);   // write L + R samples to DAC
/ u# ?8 b* }2 v7 n5 L) V  return;
8 m. i! n9 ?2 U* ?. `: r3 [}
$ ?' N4 Q3 `2 |: M% F
. m5 J' k; e$ ^6 Aint main( void )
. h9 o2 O* _" P: u: C& q{7 b" X/ T5 `' c& W) ^
7 B  ?4 I1 Y% Y: D' W  ^6 o3 x
    /* Initialize BSL */
8 d0 H+ T) A* G    EVMC6747_init( );
8 k' N* k) V. d0 F( L$ E        /* Call evmc6747_intr function */: H7 g4 Y8 S+ J4 w& ^9 s( w( y1 B( x
    aic3106_init( );* B8 m/ J3 i: x: l
        while(1);9 D% {1 _3 @) |! C# a& Q& Z& w6 |
}' b8 a/ \; z; T2 }5 W4 @6 R. ]8 K

, u4 k5 \3 E6 C$ _
+ h' e, K' U) @' A( raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) k# r, s7 Y! ^+ F+ q" f2 {6 f$ Q+ L/* Initialize MCASP1 */
' ]/ B( f" H; B6 l0 z    mcasp = &MCASP_MODULE_1;% B2 ?. L5 k) K! f2 o
    mcasp->regs->GBLCTL  = 0;       // Reset
2 l9 Y2 ~8 R# Y/ @7 J0 C    mcasp->regs->RGBLCTL = 0;       // Reset RX
, ?. P5 U7 d+ E4 D- o1 t    mcasp->regs->XGBLCTL = 0;       // Reset TX7 d/ O& n7 j: c
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 X( Y* P. C. `4 s$ _   // configure McASP0 receive registers% |+ ?& e8 Z: K2 M5 z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: {. v2 v: u8 `4 ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! C# h& W( X) Y3 \2 ]4 `! l4 ~9 W
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 K+ ]! y. P& Z4 ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ c* @, Q: M. }. {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( @$ j& z3 ?' U/ [' X    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! a2 Q/ l1 A4 Z6 B/ A+ y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* z; b4 a. O6 \8 h. D1 [    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ |3 [5 Q' Y8 @5 w

6 y# ~  C! @: |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 V: ^( n# |9 r' R4 N/ Z9 }    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! ]9 `% y/ W# a! e& s; t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 m* A  w' m  }3 d8 |
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 Z+ A3 w& w! X1 @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" |* A1 \3 ?: `$ y, B* t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' y5 @- l5 |" d5 e6 A; K
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' s, P5 r  Q4 }2 k0 C4 d, E- d    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% B& T: `1 {5 g# R" u8 w

- S) v1 {7 r* V% Y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  e: c" U3 T, T6 k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
6 {+ {, m/ K$ {, r    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 I3 ^: `4 ^' {7 X+ i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 A' z& b: v& h
! U8 J# ~+ F: E5 q5 S9 }    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 y8 Q! v# q5 H& u2 [    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 J! Z. S' g% p6 a/ D( T    mcasp->regs->AMUTE      = 0x00000000; // Not used
' F* i. N& c* A3 _9 @1 u( ^; y% Q
/* Starting sections of the McASP*/6 F3 E1 P; |. t8 W7 \8 v3 m1 h/ Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & F8 `0 t( N6 |" p" l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 @2 a* `) j2 H' D" E  H: e( X; J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 ~9 [% B( ?6 H& v$ G7 U3 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' }5 l! `, W  Q3 X, m( P0 ]

: W  s3 n& M& F0 a( G! V- b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ Y$ Y; x9 ?8 ]* M3 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! p: u# u" l3 d  t
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* ^! _/ W+ _1 F  K# r; N- r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ t, ^+ C' d/ d: `- x2 l3 U

8 I# q; b8 R6 B$ I* A) M! Y    mcasp->regs->XSTAT = 0x0000ffff;
! c1 ?& J6 n" l! t    mcasp->regs->RSTAT = 0x0000ffff; ) \6 O* i- p5 |" V
# V1 n7 R* O. Z4 D. H, S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' f& h) e- l  ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& w6 S# Y! l( k1 J, [" Y; d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & b) U( O% E/ M+ Q. O9 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, J( g) g/ b) v6 Q# ^0 Z0 b

- m/ ?2 E. I, D9 t2 J( E    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 m. U* n: W" M  |  k8 F    mcasp->regs->XBUF5 = 0;4 m2 |/ A# r7 H7 d
    mcasp->regs->RBUF0 = 0;$ T- H( h7 t7 u
8 O! t; h& e" I$ ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # B* B: F; f4 ~& _* D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) x( n# s* [7 z  r! s( X7 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; k1 B. j. ~3 K- h! K& ^, M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 U- v2 k& e; ?8 `5 T) v! e

" _+ x! ?  e$ E    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 |+ b8 J& Q& b) y8 R/ X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% y; V1 K3 Q; a* w. _    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , g9 S. }* H2 t* V* A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 ?2 w6 k6 P, P8 b1 F0 M! U

2 R  h5 l$ o' r    CSR = 0x0000;
. ^$ P. ?* L' L) ?. G    INTC_INTMUX1 = 0x3d;
- `( g: U' O' _/ w4 q* l$ a6 L    ISTP = (unsigned int)vectors;5 _. r# a* x4 Z
    ICR = 0xFFF0;  8 |$ e! G+ |+ F$ S& b" T* N
    IER |= 0x12;  
" k3 n9 ?# I! p2 f6 m$ V. g    CSR |= 0x01;  , g% J2 H5 q0 k0 L* x+ t

  i$ t1 t& ~: X8 q
& [# U, t- o* o2 q
  s; _. [) N! h+ m- x% J还有就是两个输入输出函数:0 B. x4 C5 b8 K& q' x
void output_sample(Int32 out_data)0 u2 ~9 d; z5 q* V$ j- k. \, l
{
; q, ~; d, g- N& N* {  AIC31_data.uint = out_data;  
/ z) L* X- D9 i; B8 c( C  MCASP1_XBUF5_32BIT = AIC31_data.uint;% p& ^0 b' z, H
}# C9 S* ~8 Z( d9 W. v5 G9 |
+ d5 y2 R! C- @% x8 S
Int32 input_sample(void). A; N+ u1 p9 o: @( h0 H: E
{  - {; ?8 S' Z+ v7 @, ^. f0 f! C' t  z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;& I+ E3 p+ ]  ^8 l& o: E5 X
  return (AIC31_data.uint);
) U3 @" X2 r/ M1 r) c9 D% [}4 S% E' K/ P% D: s+ y
" h0 u6 P9 M) y& U* y. v& ~5 u
分享到:  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-11-30 07:21 , Processed in 0.039538 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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