C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ v" u* ~, J+ M# t5 c7 I* c; M( Lmain文件:( E1 E* m9 e$ R; Z' r
interrupt void interrupt4(void)  
$ x. |# Q( {' c) x{# J# w& m" P0 K
  Uint32 sample;
6 U' m" e" A1 b* S
% o4 D: W" Q6 n5 j  sample = input_sample(); // read L + R samples from ADC& j& Z; R$ K$ z0 {  \! I
  output_sample(sample);   // write L + R samples to DAC + g, Z/ i6 u+ n" f
  return;
( ^2 ?6 R; B( I4 Y4 F}) `+ I  P. r# s0 j' q6 _: |

9 @7 f, _' w* ]) Q3 T5 fint main( void )
, |) O6 ^% T# r5 G) U  z2 y{
  k- [3 @5 L& D" \
. K) c4 l- d- R, x# b8 @    /* Initialize BSL */
6 Q" Q- `3 {1 g    EVMC6747_init( );$ |! \5 W% r& i' Z% _2 q3 `& L
        /* Call evmc6747_intr function */2 W. }+ A- G( H, H1 z
    aic3106_init( );. O& O$ ?$ D2 e/ Y8 e; b0 _9 c: d
        while(1);$ q, P0 d0 s5 _( t2 T7 a
}  i: K1 e! t9 ?* K# V1 R. `

) H' F6 b" J0 u7 e# f/ N- K4 U8 ?; `+ q& x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' @2 e) Z  ^5 p, f) S( r/* Initialize MCASP1 */
0 i0 f* Q2 e& u* u' {; Y1 q    mcasp = &MCASP_MODULE_1;8 l, h9 p- t2 h; y& B) }& v" d4 W! a# W
    mcasp->regs->GBLCTL  = 0;       // Reset2 z2 e. C* r7 Q  v1 d. r2 Y5 U
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 D# c8 E1 Q1 I) V& e5 t9 x( v. n    mcasp->regs->XGBLCTL = 0;       // Reset TX: K, L% l+ {3 v8 S* k2 y1 L
    mcasp->regs->PWRDEMU = 1;       // Free-running
7 D2 x7 @+ e& D   // configure McASP0 receive registers2 X  J/ @$ u5 R" h' K# }6 K# k9 p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 v0 {& D, Z( l6 A  W. K8 }$ V, ~    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: N; s! T& n" y. M+ W" a6 y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ X% h7 g. P2 D2 `7 c6 C- _) P3 r2 j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 b7 b9 W" v" k% U: q$ c  O6 j
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 P$ \2 B* H$ W& e, ?+ M    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 W  g. C( J4 c) {    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ V" a: s1 I) B1 O/ ?) Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- f0 u* G3 G" H1 a7 C: f; d: H) M, b
8 o+ B4 y/ k' w    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; v! f- J: A& R$ q1 p( H. R; N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' z4 ]9 ]+ _& o& h3 Z! c' a& b
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 N0 d* C5 \3 k6 b1 s1 l( t& z# `    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 l9 R! J9 {: q; j4 I5 g9 m    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 N- X7 K. i' C, D+ V" V; N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 l! B( m& s/ {6 S3 M% v    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ G3 k0 {/ Q! w9 O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ W% C! s: |+ @1 u3 ^

' E" _/ N3 A! Z/ i5 f, ~' r1 N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 ^% i- y( }( W. S) T1 ?  w
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- v/ d. @0 o' G
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 X  ~8 |' o8 q2 R- M9 Z# _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 Z" p5 F1 v* I! E  g: l
4 b, X' K: V- t3 `. Q& u
    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ u  T9 ]) t& C    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ F1 L, i/ I- X9 I7 f    mcasp->regs->AMUTE      = 0x00000000; // Not used
" f' L3 D0 r7 a. p/ w6 b
; B/ ]* q) y* H5 d" K: o/* Starting sections of the McASP*/6 U( X& Y0 a/ t5 M
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 i; n1 C: ^6 U3 L8 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 H! G( W  M/ R% Q  U% f3 w    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ v9 K7 U5 W: G9 Q  u$ X. M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ T: N: l) V" H' h: }6 U4 @& y8 _7 P8 K* h3 b' f  x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% p1 P4 j/ J+ W* b( k9 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! K1 p# P9 L! @( N2 w( O0 m    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % K% l" C% m4 ]) }+ q8 y$ D  s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# G1 D9 m# r0 y+ g2 Y( H" e
, a0 T0 K$ a! x' K% }& X1 Z7 r    mcasp->regs->XSTAT = 0x0000ffff;
. Q* V- N' Z7 u6 j* ]8 J    mcasp->regs->RSTAT = 0x0000ffff;
8 ~; X$ H) T0 |0 A9 c9 f- w4 w; |% e/ x% p0 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ U( X' {7 b: Z: G* G  k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 C1 ?9 q) R+ h' j, e
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& e9 d% c( |3 Q0 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- \& W6 y2 Q5 w! l( X# E
2 x6 t" t/ C, j" l
    /* Write a 0, so that no underrun occurs after releasing the state machine */; `" @! U, ?3 W5 j) _
    mcasp->regs->XBUF5 = 0;
4 R; s% l7 f0 V2 [0 [    mcasp->regs->RBUF0 = 0;
3 W- k( j/ |" j( z* o1 r' m6 y1 S; G- [' N; d7 E$ D5 Z; ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! `) M) o+ r7 K* s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' ]) ~% m/ i! j+ h1 o8 h; J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, e. _6 g4 w, ^8 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ E- N& f/ k. Y, C0 I, K  U8 u. z6 D8 o: S& H- u* {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; Q- i5 ?, [0 L5 }( D4 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# t3 U0 P. e5 K7 c1 ]    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % G2 Q7 K! S9 m) ]+ b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  Z8 j$ t4 M/ U$ A4 H* k1 E( k( p8 C9 S: U7 m
    CSR = 0x0000;
) T  C  k4 O3 y' e4 i    INTC_INTMUX1 = 0x3d;& l% D4 U9 w; \. E- d; d, m. `2 t
    ISTP = (unsigned int)vectors;$ G' l# M+ L9 D/ G! T
    ICR = 0xFFF0;    ]8 E% M3 z; f
    IER |= 0x12;  5 j) S* e6 }$ E1 K3 c7 s+ M
    CSR |= 0x01;  ' R% f& o6 E: f4 ?6 M+ W
- O) f$ H- N3 j, H' ?# H

: L4 f( d  T* z2 |2 X- ]5 O* `- y4 v0 t: a
还有就是两个输入输出函数:( m' e/ e) t$ B! x6 |& ~
void output_sample(Int32 out_data)! @, Q) n/ W6 j, d; Y, c1 q
{
7 j  M/ L8 W& n- ]( r+ m4 O  AIC31_data.uint = out_data;  8 p; G" E9 i' w4 A# ^+ N
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ K( J) I' _, E4 B}( |! h( v2 W9 u! T8 ?

$ }2 m( p9 l% r4 fInt32 input_sample(void)
" w7 b0 f* C. _% w{  
1 z6 I1 v) X" N  d  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% n$ n# w( }( L  return (AIC31_data.uint);
0 i0 b% a4 P  J& \" |}( J" T5 i- y  _  g5 j

* _0 @# ^9 K% J/ k$ ^: ]2 [
分享到:  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-4-7 15:50 , Processed in 0.042641 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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