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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% n8 T; r- c, k. b6 |) q
main文件:- T" \0 j7 e/ ^3 f- |3 e, D
interrupt void interrupt4(void)  7 J: n) G* ^) {; S8 B
{
7 z: z; n2 J  Z( v# _$ m( q  Uint32 sample;: \6 \" M  X+ X+ ?! G. ?
" A. s$ t4 F+ p
  sample = input_sample(); // read L + R samples from ADC
* Q. n6 \" s0 V  f2 F& |. y- c  output_sample(sample);   // write L + R samples to DAC
# t/ @/ y+ T1 q" p! ]0 W" i+ e  return;! f' q$ ~! `4 {
}: |, o9 e" k/ E" B* C! A

$ l) ?8 E' p; C! U) [2 Aint main( void )
) y1 `+ N4 Y0 U& J{. X/ a( ]1 d' o' K  B3 Q/ J. X
: Y# J/ R( _) N$ X1 n
    /* Initialize BSL */
# u5 N2 f! i6 A2 L    EVMC6747_init( );! L: F8 W( |, p* X; r
        /* Call evmc6747_intr function *// p2 S8 h) T6 H
    aic3106_init( );
9 A0 g. s6 K- b        while(1);
% B4 y% {4 x' q. ~9 U! ^8 F3 F4 T}8 m3 U& h7 h# K! x

5 |4 E# \7 g" E
& r1 q+ A+ k/ R/ r  `# Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' @: H$ g& P+ O; ?- s4 q. E
/* Initialize MCASP1 */
- j' [9 Q, z  U9 d/ v0 o& {: s  `; U# O    mcasp = &MCASP_MODULE_1;5 a; V% b+ q/ G
    mcasp->regs->GBLCTL  = 0;       // Reset. K0 {" Q" a1 U( ^+ ~% y/ C
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! N# r/ N, y9 O, O$ {2 y5 u2 L) M    mcasp->regs->XGBLCTL = 0;       // Reset TX% }9 Q6 v- ~# e3 z: h4 V% u
    mcasp->regs->PWRDEMU = 1;       // Free-running+ m1 e7 ]9 w* s
   // configure McASP0 receive registers
" r/ z5 t+ |$ z8 l6 {- B" p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, K/ [2 u; B" n$ H; Q5 i7 `) w    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 j# Q* @& y4 S, Y! w, Y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 T; _  M* O2 p2 I
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ g! r) R# @/ h9 |
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: e- L2 ]( p6 E    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: x2 z% c. R; P! |, n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! f' E2 d& x5 a0 N0 c& l2 ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& V: \/ s* B6 s1 n' k$ M% h( h6 D, B5 n6 _
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# b0 X  c; P3 x* w
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ e# z6 [0 g% U; ]$ K/ V    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 f0 B! j8 b6 `% X3 t1 p7 W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- Y4 d- c# u% X8 a7 k  S: X4 L    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 R( E" P0 T9 s
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' F7 }& n) |& B0 V% U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! {% p/ ?8 x$ T" D3 g0 _% I
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& {: G: i- b* R  V- k; U
' |( i9 m: o! t& G/ V    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 ^: ?, E+ W2 \& V1 m5 ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* \0 |6 X6 e" K  g9 k
    mcasp->regs->PFUNC      = 0;          // All MCASPs
" f! F9 N* X6 v    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, {& J4 g- @- A1 o, t2 Z
* q. |7 H' E3 `5 O7 |9 P    mcasp->regs->DITCTL     = 0x00000000; // Not used3 |* E0 p0 ^  \  q0 q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* [  i/ T. A; u, W    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ }" W4 E# y8 c7 f) Q. T9 e7 g: N  j! o, w
/* Starting sections of the McASP*/  p( {: p) e5 `" s
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 |+ Q( e" {; F0 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 q; v9 u4 N- j! O' w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % ^! @) e! a& W/ P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( R) }+ k. w# I
1 w, e' T$ B# a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : X1 h; N5 s" n- \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- v( k$ F* l7 _& T% z! G2 h
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( b& ~- E, H0 Q' x' e+ `6 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 R( y+ w% N9 h. B# Q* x- O

$ e2 u) ?- ]+ S: k    mcasp->regs->XSTAT = 0x0000ffff;
% j0 ~' `1 d+ E8 P/ e7 x* d    mcasp->regs->RSTAT = 0x0000ffff;
  w4 G8 c5 U7 E4 a1 R$ b$ A8 [4 \% _+ {% S% G$ ]& K  I& _1 {& m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 T9 b6 s6 V% L$ V. i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; K% B" s" X+ Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) Q: y2 W* Z1 F) \: v, ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) o( P1 l% h4 C) D

6 g$ \! Y# |" O" d    /* Write a 0, so that no underrun occurs after releasing the state machine */' v# Q# y1 @) z: x2 N7 p
    mcasp->regs->XBUF5 = 0;6 Y6 E- `" S7 m$ V
    mcasp->regs->RBUF0 = 0;
& L0 _: d7 ^, n+ k4 M: W. Y
$ u( K: i& ^( B1 `  `6 ^6 ?. h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ N$ q2 d, p# t* z# D( \. s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! [) g; t5 \2 ]0 Z- n1 M) H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 I" H0 u: ^' {$ U4 K$ _( b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# q. A8 O* O( B% E- ?% }8 N
) a3 d- ^9 p4 X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * q. i6 f4 ^2 e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. H+ u* c/ ^$ `: _% [8 c' [  w    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, a% E! Y3 f# S1 {1 x2 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ H! }! j5 _3 H( @9 Q: ?1 V1 q+ p3 G; q9 O$ G% i: Q
    CSR = 0x0000;0 Q, k9 D' n  l# D' [# o6 J
    INTC_INTMUX1 = 0x3d;1 s8 ?1 K" G" b; e2 w+ o
    ISTP = (unsigned int)vectors;# {' B1 Y5 j% B$ |  T( e+ u7 |: G
    ICR = 0xFFF0;  
' t& B7 I/ N& n* |, z& a    IER |= 0x12;  
2 ^( P( ?% E' R1 g    CSR |= 0x01;  
% P1 \7 _7 Z5 }
3 a' v, a/ n, ?! ?  r7 s3 [
  E) e  h0 v- P9 |' E% O$ l5 _' x% w& I4 P
还有就是两个输入输出函数:' N) m8 |- p/ U
void output_sample(Int32 out_data)
6 Y8 V9 _2 ^5 M  ]' @1 E{" n( `) L6 ^; G2 U4 B
  AIC31_data.uint = out_data;  - K* j1 t( w& R' b( ~1 _
  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 m! A0 e& n3 @/ H
}
" @6 U# J. P5 R+ N' g+ G6 U  ~( o4 x3 h4 g! P0 W
Int32 input_sample(void)1 e  {* I# |3 R& @" i) q
{  * i# M- W3 j4 y" B' k; N4 Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 {% C( U. Q" U
  return (AIC31_data.uint);2 p. ~. w4 ]$ G3 i( g
}! p) b1 z* @6 f8 t5 M5 R2 m

" o2 Q7 U7 n( f/ X# V1 A
分享到:  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-2-26 09:46 , Processed in 0.041343 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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