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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. H0 Q  J' t9 O0 }& E
main文件:
; I7 c; `, y5 G) Hinterrupt void interrupt4(void)  9 {4 l  `; ^. K* I- D
{
4 U* B- \# M9 _* n3 c  Uint32 sample;0 D; M2 M/ S# L' t
2 }/ I$ i- V7 g& C8 ^+ ?! y
  sample = input_sample(); // read L + R samples from ADC
# H* ^& V7 E$ S" Z& z' `  output_sample(sample);   // write L + R samples to DAC $ ^' L5 ]* [. x2 u% y! p2 v9 x$ L
  return;3 \$ K5 r7 i# F& j
}
" x# K% p' P) T1 o, T/ d
4 d9 m/ A, D4 [int main( void )
4 y# U1 t+ E$ u  w% F# Z{
! h; {% \7 q' i
% C$ |& `8 A6 [2 t    /* Initialize BSL */
; m0 _1 h5 f2 R3 k8 C    EVMC6747_init( );
" j1 ?. L: ]% `+ p- Q/ y1 M) I        /* Call evmc6747_intr function */
! a' y  o8 G) X4 w: P    aic3106_init( );4 r4 f1 G7 U4 [2 h! E1 [) U
        while(1);
+ Y$ I1 _2 m4 j8 {3 T3 U% Z1 C}
7 v% p3 _/ I# }" m" Z$ P4 n" r0 \, W1 U5 Y9 f. W/ @* J

3 n8 T6 m- K* [aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( V4 s: j8 o5 ^7 ^% A/* Initialize MCASP1 */
5 ]; l7 ^% v; Y& U" Y. Y1 v1 v- u, w    mcasp = &MCASP_MODULE_1;
: v5 R4 ~; E2 I; t1 d3 [    mcasp->regs->GBLCTL  = 0;       // Reset
$ F7 H- l6 q  E7 W' S/ m' k$ \. B    mcasp->regs->RGBLCTL = 0;       // Reset RX* A# W: W# X4 J) B) Y: |# t1 W
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 \; P6 C+ h" C
    mcasp->regs->PWRDEMU = 1;       // Free-running
7 N8 r5 D$ X( \( `8 d- f9 }9 V7 U   // configure McASP0 receive registers& P0 U) _& V* u
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: ^! }3 @0 g7 B' N7 Z# W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, {; T$ o$ J. ?5 l. l$ i3 f( ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- a$ r9 D, k: q. G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  `; c3 ^, w0 m6 o- @/ t. r3 l    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 D' m% q5 D0 d: a" [
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) l3 @5 ]7 {* b# f, \/ k9 i* B  y    mcasp->regs->RINTCTL    = 0x00000000; // Not used; e. K: u% B" H3 ~
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, n7 n; Y  \6 P2 I. \- H, G" ~

+ \7 a& C2 K6 r" s" h: T. s! R8 z7 W    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" ~( _7 v8 I; @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 C( j9 I& x& M  k+ {1 j
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 s, m! w/ [9 [
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 N$ [, W& d# I8 j+ `7 Z: t+ O
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- O5 a6 J, \  v& w    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& |: u. ^8 l; _4 ]
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& r7 c+ g4 Z2 U$ Y/ J    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: K+ m0 ?8 q( n5 `7 x8 K" b' p+ I* p5 N. g( w; d! V
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- b2 e# e, }+ k* z" B. S% a4 ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; Q% r: H, p; Z+ v8 M0 ?1 k: ?    mcasp->regs->PFUNC      = 0;          // All MCASPs) d2 H6 `! d  d6 |$ u# K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- [) f4 |) G7 H$ W# l7 m$ u# ?9 L6 W5 s3 m% F1 ]" j( s* Z, V8 q  K
    mcasp->regs->DITCTL     = 0x00000000; // Not used& G  A5 v% ^+ s; }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# K5 N; [7 P( h$ x# @  V, M    mcasp->regs->AMUTE      = 0x00000000; // Not used  A7 d. n% {$ T) V9 f; P, c

# n: f7 @- \$ |4 }/* Starting sections of the McASP*/
0 Y& i& o/ r8 d! b; y. r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, I7 z( v0 F6 s6 e- Q; h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 M/ N* J0 b, O    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 g0 @6 ^: q4 H- W. x- B7 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# |9 a% Q4 K2 z; f! Y
9 J9 \3 l, g" m4 i2 T, [8 s$ u
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: r3 i9 T! b8 K) v: p9 a! t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( j$ ^; ?# Q6 d% F# Z" q# [# |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 t  H# P: t: w, M+ ~- d& u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" T9 M6 F! E7 G0 u& l) S/ v0 u3 t, [1 B1 s2 ?
    mcasp->regs->XSTAT = 0x0000ffff; ! u! {& a+ z, K; A1 g  |# O
    mcasp->regs->RSTAT = 0x0000ffff; - g3 s% {9 U% Y2 ~9 p

: Y. [- l6 f4 }0 h: |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 w( d8 `4 |1 a. d4 A( X" z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 R! W9 `( V! m& K! m/ _
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' I7 ?2 q* \1 H& X7 _+ o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 K! s& V; D) F4 U

& {! u6 d& c1 I5 Q    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ J* z$ I$ k; i2 W& _    mcasp->regs->XBUF5 = 0;( f9 ~$ ^' `# u. a9 E  Z# X4 Y
    mcasp->regs->RBUF0 = 0;3 l3 h; |; y2 p2 D! C* I  Y

+ X0 M, }7 U7 _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + u5 G$ r( X5 {# j+ ~1 Q' E- q1 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 M% j9 Z) J/ \  y6 W- X* V4 A6 y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' m& m2 X( ?! c+ G4 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; E, S# S* c6 ~+ u, @3 p5 {" G5 U8 Q9 R: I9 x- h
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) G, k2 B* E, J4 a' Q% {7 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) L9 `6 A2 x: O3 C) m4 Y3 G; B    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* U1 i2 {9 u7 s9 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 j- Q3 B% o; s% n( Y7 U' T* ?* {% p: k" a  A. V7 U* Q, N
    CSR = 0x0000;  l/ ~+ [1 L( y+ N/ j" N* f7 e  q
    INTC_INTMUX1 = 0x3d;/ ^% D, V4 d6 c; }) o" r6 b
    ISTP = (unsigned int)vectors;
7 ?5 @& O# p/ }( ?2 z5 _    ICR = 0xFFF0;  ( t0 l& Q3 I5 y# Z; _+ m
    IER |= 0x12;  
( o$ V  Y0 w" k6 O6 @9 ~    CSR |= 0x01;  
% I0 o4 B8 N& r  H1 i6 X# D  A' O4 P- `1 }$ z, L% h) `' e

+ @4 c! Z9 c  ^& k1 H7 J8 @
  \0 }; O2 t1 C9 ?& n0 d还有就是两个输入输出函数:+ H/ ~# T+ ~( v% L7 O/ p
void output_sample(Int32 out_data)( _* S1 }) B' O- q9 f( ]
{: I0 @8 ~. L) m. n% g
  AIC31_data.uint = out_data;  
& x- _! c5 o* t/ s  MCASP1_XBUF5_32BIT = AIC31_data.uint;. _( s2 ?  O5 @' O7 x8 l
}
. o6 H3 ~6 T- W/ m% e' J9 ?2 B; K9 e
Int32 input_sample(void)
/ l7 C4 E, G1 z5 D% @9 y$ m% P# ]{  " |1 n, s& t6 a
  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 ^8 v& \( N: j/ N  o
  return (AIC31_data.uint);
' P4 U/ Q+ w. q}
3 @6 n8 B. S+ l* S: I: @& C4 B5 E
# G5 j! T5 h" `  j# I) }. x. I5 {
分享到:  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-3-22 15:46 , Processed in 0.042468 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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