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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 q- C7 O  D8 i# \. @" s' b. ]5 Umain文件:
6 u1 x9 |$ k$ O9 B3 [; \1 pinterrupt void interrupt4(void)  
! \; D$ u! [0 S3 [; x6 C{
. ?) g2 N! ~8 K7 q( N' P% `# F  Uint32 sample;
% X. a8 O& W% v8 ?& Q, l* n  z, H1 H& o0 ~* X; n( n0 a2 m& k
  sample = input_sample(); // read L + R samples from ADC
- w2 ]: J; p/ i# |0 k  output_sample(sample);   // write L + R samples to DAC 6 x8 C2 F4 a. |+ R+ N# s
  return;
/ e/ v7 N4 w" w}
3 M0 U' Y2 i8 @7 B
  ?) M% e; T6 w0 Mint main( void )
' v- [/ S* Y9 M/ P* P7 U: ?% ]{
& U4 j! q; G; [% n, S0 E, e& ]' A" E6 g8 T
    /* Initialize BSL */0 O2 S" U: ]( \  ^; i- F: r
    EVMC6747_init( );
- v7 ^  j) Z' [" {        /* Call evmc6747_intr function */( h6 ^3 g% h: {  F/ C- R( N
    aic3106_init( );
% j- V7 H5 V' J1 v) I/ T  Q0 j8 z- ]        while(1);
& X; ~. `/ J- L( f' V}
+ L& ?# f$ [  |: Y4 I3 |* Y8 J, ]( G+ v# ]' t1 r( J

" m9 k9 G3 j9 a. ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 e+ \; i2 d/ r8 d- V: H+ ^
/* Initialize MCASP1 */
" t2 S4 B8 T6 a7 W& F    mcasp = &MCASP_MODULE_1;. V& m) E2 J2 O. e) i7 S
    mcasp->regs->GBLCTL  = 0;       // Reset
  e2 ]5 y9 o" C! y; M0 j+ V3 l, |    mcasp->regs->RGBLCTL = 0;       // Reset RX( _* D) ?/ a/ m
    mcasp->regs->XGBLCTL = 0;       // Reset TX. [( O8 P0 C* t& R; H( k* K; A
    mcasp->regs->PWRDEMU = 1;       // Free-running8 ^9 M) I+ C2 Q
   // configure McASP0 receive registers6 _( ~! X8 C5 \$ l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 l4 F- Q7 M. H    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" I& M. @3 ]/ }; j' S+ N! U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, Z6 C1 N7 N- p. f# D* C- @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) k) ?. A1 C5 ~/ b. L; c# P1 |' W
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). i9 ]/ |% @3 s. o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 S( f9 ^" p8 ]
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  l, W  z! Y3 A9 ?7 w/ o/ s    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 Y: u8 ?+ t8 k
% j# V! v! J7 S& g3 }6 n    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 z( Y; n0 K+ x. V7 o% C    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! {3 @  k: o( F) `) }    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( E( i2 w: O7 k8 k( O7 }5 A! _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 }/ z, r$ U8 w8 ~2 T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* P8 A* C. Z" G! X& e1 R    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 m+ s9 P- J4 J
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! E( B. @* K' g3 M
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ ]& q1 h: V. L! G" K5 b
! l0 j7 {6 Y5 I# T+ S4 M' K- J
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 z! V$ @& Y: a+ j    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ w3 i0 d  a% b2 v( {    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 B( H& C2 Z, Q1 K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; n! g( S' C# @6 |
9 D" z7 C# [" H& [
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% \: ?9 v. B8 ~- v: ?9 p8 b) m0 K5 i    mcasp->regs->DLBCTL     = 0x00000000; // Not used- O: I& F/ K% K, T: m
    mcasp->regs->AMUTE      = 0x00000000; // Not used" @- {& N; N- f6 ^3 ^

/ `8 V  ?9 C$ z6 D0 u0 u6 X0 R/* Starting sections of the McASP*/
' [7 n0 g8 e6 y1 o* t3 t0 Q5 x7 m2 c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 N; p1 q* k6 z! U1 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 q  \  l& d! O/ I* ?  @, J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * j4 s9 ^9 Y3 f; b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% Y& d; T' C! A. }" u& M
( \3 ^- ]1 i- Z+ Q) a7 D- _    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% e* O, n# B8 H$ ?# X2 L3 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& P9 K% C4 W8 X1 H+ s+ N' J* ]
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( I0 \* K7 G+ X% U# w" W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 B& O$ X1 }4 Y0 X  S' J. h+ Z( P$ K; _, ^% b1 C
    mcasp->regs->XSTAT = 0x0000ffff;   `* g1 {$ a* I
    mcasp->regs->RSTAT = 0x0000ffff; 9 w; }9 Q* m. n7 _

/ H0 Q+ w) v+ F2 i, O! m( w    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 `% h  k- F: r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% y3 z1 C, c+ G( L3 `
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # b) g, }  d8 w% q% w2 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 X! I  H5 P6 u: r4 r- G9 C7 {0 U! t/ j
    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 F( _3 Q* _& t1 J8 g# F    mcasp->regs->XBUF5 = 0;
1 U) J. ?# ~9 l, _% }  c    mcasp->regs->RBUF0 = 0;- x  a: |4 J; |

  |4 z* {3 T6 t2 h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 s% E5 \2 f% C$ P! b3 }: c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& |) M/ i% e( S1 K) l
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) o3 L' }9 M$ b( {6 j) h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% Y7 j' V. J4 s2 y8 X8 g  O; d9 a1 O- U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , K( e# f+ X6 }2 Y, C+ c- X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; h5 I  K) l: O
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ y# Z3 C! E$ S' h% W1 Q' W+ n& v4 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 n- v* |8 n  _! t

+ Y+ h) Q% c4 q    CSR = 0x0000;  c8 }9 a1 M8 \9 c2 p
    INTC_INTMUX1 = 0x3d;$ Y! [2 ~0 K8 v0 \
    ISTP = (unsigned int)vectors;$ ^' ]: C6 e3 z; A! Y
    ICR = 0xFFF0;  ( t7 K* f2 w( I9 Z2 |
    IER |= 0x12;  4 ?! i* }0 N9 P" v) a
    CSR |= 0x01;  ) x# @8 K4 F# g2 i
* F& C: C+ s& ]& ^7 p$ d7 s7 E

# I; Z7 ~3 [! y2 w  h$ R2 Z( V7 C5 Z6 t/ d2 s/ k% {
还有就是两个输入输出函数:9 k; x, c7 h- t! a( I8 ?
void output_sample(Int32 out_data)
* d9 U! G9 [4 S7 v- _4 e: v{. y$ E! x4 e% C; h$ w9 X
  AIC31_data.uint = out_data;  / F- Z: p8 w& F/ ~
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' N1 T0 H; z) Q" U" b  ^5 v
}
# C/ c5 o6 Q) ]8 ]; i
. M8 r# n: |9 Q1 S9 rInt32 input_sample(void)) p, ~; M9 N% h
{  ( N; F$ q, z' f- [3 f8 k0 [% C/ {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 I" F. S& G" ]; O0 {8 j
  return (AIC31_data.uint);
4 r# ~- H- [3 G! a: A}
& Q  s; o1 i) }' L
0 j( C& `5 q5 Y6 \( |% ?
分享到:  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-13 03:11 , Processed in 0.038433 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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