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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% m% `9 s, C  w4 f/ h# e  r
main文件:
' `# y) e% t; f) yinterrupt void interrupt4(void)  5 ]* H7 b( ~/ E+ a" H
{0 X0 d( U+ Z) z) Z5 P! W, H
  Uint32 sample;
# l# U! ]& L! f0 E/ S6 x  V; E# G8 f$ a& d- c0 P2 d
  sample = input_sample(); // read L + R samples from ADC
7 i- q2 d- L5 k  x) U  output_sample(sample);   // write L + R samples to DAC $ m, L2 ]( [6 K6 {
  return;$ b# \5 n! u" [2 B
}2 [. i" X4 m: c" A( b# p

; A" G; C9 S& W, o& x1 qint main( void )
% W* ]- x, i# w3 I& A{" H$ _9 ?- G1 A" j/ w

! ~3 C- v: C" o    /* Initialize BSL */
1 _6 f/ u  h: [' Y* O* u8 D: R    EVMC6747_init( );! v) {: O; f8 i6 L: @0 \# j
        /* Call evmc6747_intr function */
% D4 Y) u: C- q( d$ o( \    aic3106_init( );4 a7 E5 {2 D3 _- f
        while(1);
; R8 V/ D* e  j9 C6 I7 W7 H2 ?}* ]8 K$ s6 H: x: ?

$ p8 G6 E) w1 w
9 ^8 u0 F' ~0 zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 [8 w. ~: G( V4 s, H3 L( R. X/* Initialize MCASP1 */$ _  H5 ~- }" w! K
    mcasp = &MCASP_MODULE_1;
3 W' t, x4 n+ R$ w) b& Y3 a    mcasp->regs->GBLCTL  = 0;       // Reset
' A! {( S9 M2 P5 L0 ]! k5 f7 }5 j- I" f    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ y- b+ O/ `, a6 S4 o: f7 G    mcasp->regs->XGBLCTL = 0;       // Reset TX" `/ @  B0 u8 n: Y4 }
    mcasp->regs->PWRDEMU = 1;       // Free-running/ d7 n) U+ I3 u! [, u! l) l( C  }
   // configure McASP0 receive registers
( I1 [! r# C5 X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ q& a+ {4 S4 ^9 m
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# j: r3 @8 Y( s8 ]9 A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 N/ Z) c3 {( e- P! r0 o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# k9 v, P" Z$ G$ _
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, }2 T7 W9 N2 i/ k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, L0 W; ^4 P" F4 \" @8 ^. C. A    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ O0 z: Q1 a  M2 W9 A  Y4 J4 t
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) {/ ^4 q2 o6 p* ~2 h2 G) e

) d, k6 I9 s+ ?  e' p# [& D7 ^( W    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, q- g1 O9 ]0 S' f3 o% V$ O; ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 E% x) A. t# H* w- {* w; H7 Y+ {
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 j: g" f) C2 y, u3 e& Z& q1 x
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  v$ O# V. D& M2 w7 x5 m; v
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 ?# G' t% [8 w( O' [
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# a; c9 y) |# O, U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; |8 Y& G" G3 Y! J    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 s9 m0 f% U/ o
: w9 p( e5 |& ~7 t, m: U) e
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 q) S# Z+ I: o. I$ P( I    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ G5 u0 _  R; [5 |" a$ E    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 b  u3 h( ~  m9 N    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 r% _4 d: N; A& I+ T! j' I$ h
( O. c' }& W2 c+ G. d4 r
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 A) L5 v8 U3 R' X% b3 L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( m8 g+ X( B; |/ v$ U
    mcasp->regs->AMUTE      = 0x00000000; // Not used  A- p0 |9 n; P7 z' p: E! C; Z" a
: ^/ E  E2 l9 [) t! d4 _
/* Starting sections of the McASP*/
- e" W! s, C" u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 g) V1 n8 N3 Q$ @& J3 L  I! B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 D5 }3 N+ V; O3 A( P8 t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " G: A2 @# c# G- M0 Z) g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 s# F  w7 w, |7 \9 N  _2 c, i5 V- i, L/ t  Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 H, N% f+ r1 n! q7 e/ C6 n, J( y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  V) d) e, Z+ I0 i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 G' u; X1 h5 x" g1 `% m! j6 k- T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! v; N; {2 M6 l* g8 S  y5 v8 G- l! ?
$ q+ G' s, V8 h, [% V, o
    mcasp->regs->XSTAT = 0x0000ffff;
. H/ Y" O$ U8 F4 k- r1 X    mcasp->regs->RSTAT = 0x0000ffff;
- s8 o, X$ t% b: ^, P* A
+ b' X9 [, x, [$ s7 d* @    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 e/ l: o# e! e! w2 b+ x7 N0 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ H( a5 A& h% H
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 p8 Y' H6 S0 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: j0 b, \  N6 Y1 s7 a" o7 a$ X* g0 Q) w# p4 j
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 Z9 p- s3 r1 ?- K    mcasp->regs->XBUF5 = 0;
3 _* Q6 }0 y% E8 P# A    mcasp->regs->RBUF0 = 0;8 C9 U; i, @# \+ z1 F
( x& O  T  u3 |  o, I9 v1 q7 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 m) Z5 g! Z) ~6 M/ A+ f9 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 t2 I4 q' y% s. F9 I    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # ]  g' q8 t7 S/ z- C/ m4 F/ b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 q  _8 t9 @  ]7 V2 g3 Z" T: H( |
+ `4 Z, S) q. M  I( o, W
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: W9 ^4 h5 W  o( g4 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 {2 d+ s% A4 G3 j    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 z' R  }( ^! v3 s2 a, m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 T$ Q$ z1 N" s8 N# E
7 b' s! R2 y9 J8 B, i! Z+ k    CSR = 0x0000;; e. M: `6 O8 C7 W/ s9 l& ^+ d- }
    INTC_INTMUX1 = 0x3d;
. g+ ^1 ]& G# I) y    ISTP = (unsigned int)vectors;: ^7 E2 {% A* d1 Z- R
    ICR = 0xFFF0;  
; |# n/ k( D. ~0 F3 u+ {' l    IER |= 0x12;  # z# y1 p0 q& ]: q, q
    CSR |= 0x01;  % z7 U+ Z1 q9 P+ }! t* N
; Z! z* u, J' N) }5 I& \
3 H- C" A  ~' s% J& G5 m

) C. F) ?5 a4 h2 t, c1 v还有就是两个输入输出函数:
% Q/ d, P$ ^8 ~& @void output_sample(Int32 out_data)
3 M4 u& v! v! M  \, [9 {8 I! a{( B2 h/ a: |5 |
  AIC31_data.uint = out_data;  ! z; T! J- U2 p2 d
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 N7 @. B  A6 k8 G$ \( H+ A6 H
}
7 P3 k. |/ r6 _% z0 @! a" Q4 p5 T5 |1 Z. L: z5 M0 u5 ^1 {6 s
Int32 input_sample(void)# n' \2 {6 j& }3 n* g9 H
{  0 Z) f2 M: p; E
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. S% A& z, d6 Q& T; [  return (AIC31_data.uint);0 [" ?" G$ r, m# J0 @" [2 l6 J: d
}
( J  Q: Z  U( v3 T7 o
7 ~7 [$ Z; R5 \7 d# S
分享到:  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-16 13:55 , Processed in 0.040658 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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