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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 |3 s* {6 a& B1 l% i) u
main文件:' ^7 D$ V' i& e: b; B
interrupt void interrupt4(void)  4 ?1 C( z# w3 e$ k/ X6 P
{
! ^& ~6 K# A8 `4 Q' O# U# g  Uint32 sample;
2 G1 A% _6 \* R# O
9 k% `" Z9 [8 J: t: ^" m5 b  sample = input_sample(); // read L + R samples from ADC5 C1 v! y7 P0 \' G1 S5 U
  output_sample(sample);   // write L + R samples to DAC
: N5 ]+ S8 A8 f* R1 Y% j: a# ~  return;6 e0 Y! K2 N  \2 _
}
0 j- o. g. H; P4 A: w9 P/ \* S3 `9 y& f* q% u
int main( void )+ q  s# m4 l4 T- m
{
/ }, O$ X1 }9 J3 a" ], A; m7 h
; I& e) U# z( k$ o7 j2 p    /* Initialize BSL */- P: D5 p+ K% X2 Q/ n/ ~
    EVMC6747_init( );
! W0 U2 c* {% |+ {8 M        /* Call evmc6747_intr function */
- ?. {) Z5 E' h3 }  K! O    aic3106_init( );# j7 v7 Z- q. `, h8 Y0 B& C
        while(1);+ `" D8 l" T. g/ I3 N
}
3 l* j8 J2 }( S5 C9 t2 h9 b  T/ t" J) K$ K3 r
6 W+ [. U0 {8 l1 i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 N3 d* A) L& ]/* Initialize MCASP1 */  P9 G7 X  z/ A' X
    mcasp = &MCASP_MODULE_1;/ K, s# v2 T3 h+ s$ J) B
    mcasp->regs->GBLCTL  = 0;       // Reset- Q- ~( l& A3 F& c( [3 q) [
    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 i, n; @& N9 `3 |5 Q    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 T$ t2 F) G4 X6 r% Q    mcasp->regs->PWRDEMU = 1;       // Free-running3 a7 y3 z" N! [! V( h
   // configure McASP0 receive registers' L3 x2 T, m( u: p( J1 u/ ]# J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, W1 c  a; Q7 I7 H/ o    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# a0 A7 V& R0 ?$ `2 I' P8 D5 E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% v$ a- o# d  P" K* q% L* W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" w) Y, M' S. B5 b6 h& }8 X+ a- U. w$ y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 I; M" m# V: h# }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 M( b% _  ]& Y; v% @& l6 j3 t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& B1 s! S1 s. _- N. ^$ i
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; q* V% `/ `" C3 b

) O! V0 Y+ d1 O/ T. i5 m5 H* s    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: H* o6 S! E, X! J* x6 G' g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# ~0 _  }8 p7 X2 P# g    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 v8 ~% X4 n1 d% s! m  H    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 {; c! z. L5 d2 a4 u    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; A8 M* s% Q+ V, f- x; B& I: E, r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 {; V. ?% A8 J1 X9 f3 r: d7 Z, E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ I- O, S- w2 x' f
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 C6 }: p+ B+ r; W5 ^8 \

: w& ?; b1 _- v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ M+ D% ^  X" B, }! z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 M: j% L- [( s' @% l    mcasp->regs->PFUNC      = 0;          // All MCASPs
% f3 ]2 O, k# l, x8 P1 ?    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" i' [- @& o( I; w

5 e! F2 z9 ^1 K" {# M    mcasp->regs->DITCTL     = 0x00000000; // Not used
% R8 n% H3 P7 W& x    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 A7 _9 {/ Z! m; [9 z1 Z. f    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 P1 l5 R, [, H% H' W, B$ V# P( G: K- w" K9 d
/* Starting sections of the McASP*/" t3 j9 U  J2 b* i6 [1 h1 r: G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : ^, ~  U: J2 B4 U3 r5 U& h8 B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ ~9 ?& C7 V, [! M4 T0 ]. s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 X% I9 B2 ?1 |9 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 _, ^. C( \( w' H
: p2 Z2 e( I. z( S% K9 m5 v+ x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; [( d! V- k" p9 h1 Z% M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 ?! A( M# R$ N5 I0 w% w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 D8 \5 i9 Q# Q6 e5 Y3 x1 a; J. A8 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* G8 }0 A; v4 F! @1 r
6 m# u& P. k- L& m! ?% D( P
    mcasp->regs->XSTAT = 0x0000ffff;
: Q1 h" g( S% p' y    mcasp->regs->RSTAT = 0x0000ffff; 1 v3 B) L' }, s( Q4 K
0 ~1 f, _) A7 u6 P4 W
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- U2 x- u; @7 M- U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' q$ V8 s' m6 l5 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & n3 q) b" @# A- i' r* K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! r& u, \3 W  ]2 C. w2 @- @: @# z( j* J( `/ t4 }# t
    /* Write a 0, so that no underrun occurs after releasing the state machine */' A6 `8 g! }: F6 A" z5 |, R
    mcasp->regs->XBUF5 = 0;: O9 I$ x2 L; [% \4 h1 Q
    mcasp->regs->RBUF0 = 0;
) i" K3 `- m5 c' M) @* q4 v) d' d% B1 l& A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! q2 r1 S" G9 p+ ]8 W. b- Q- U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 L, [1 E+ n+ \. H) w2 N7 M    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , p( a3 }7 Q8 H( t, m) N( Y0 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) o5 K7 N7 w, j3 b* _% l, P3 \/ w9 @
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 n' J7 ?- s; D, z2 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# _: k3 \  ^, F8 Y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( k5 T+ {) I" G- P( `( ?& e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 c- [# I1 S5 [/ _* `
" v. K/ t5 ^; d7 K" z    CSR = 0x0000;+ Z2 r' R! ]) r. g( G0 J- a, v; i
    INTC_INTMUX1 = 0x3d;
, [* ~4 y0 H# O3 |2 F2 z    ISTP = (unsigned int)vectors;
9 ?/ n  V' d' {3 n! |    ICR = 0xFFF0;  ; v/ ~$ t/ n# b; Z5 C& r
    IER |= 0x12;  
" J# x6 k% d5 g- h0 k    CSR |= 0x01;  
/ h: U/ t* @: T" B/ P9 g+ F0 G# T$ }) j3 n5 p5 {/ j# T6 {
$ }( V9 ], d1 q1 G1 i0 i
, r) q$ Q" a& N0 C) |( s* [
还有就是两个输入输出函数:3 _5 ]3 h: p4 j6 q' I! }9 N
void output_sample(Int32 out_data)
8 N8 w0 ^6 I3 e7 n{
  r4 P! N4 _* i- V  AIC31_data.uint = out_data;  + Q& h) a1 i! e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 i, i; j5 ?9 o4 u( s0 g}) E) p0 i; v8 N6 W

6 S, q. l. Y* d4 u, f- ZInt32 input_sample(void)2 V+ E& E6 J. s1 Y/ y( }7 t
{  ' G5 U; Y8 l+ l9 J' |2 h  o9 E3 q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' |4 ~" h$ b# g5 h0 o5 o( }9 h  return (AIC31_data.uint);
9 p1 t4 Z$ X4 C. T; R8 T}
' ~% O& f& L; \: v
8 n( }; f/ W' g2 G6 v1 i
分享到:  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-2 16:00 , Processed in 0.039722 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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