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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 \: p) l6 z4 j0 X
main文件:! ~! }" G3 s( O! @7 H3 p
interrupt void interrupt4(void)  ' [; s1 ^7 w. g. o
{; U7 x( K5 a2 O: k3 H$ Y) ]
  Uint32 sample;
) _7 ^7 U! |  \2 K6 I) n  h
( ^, v- B5 ]8 l, V+ ^# U2 r  sample = input_sample(); // read L + R samples from ADC
! @8 k; O; V, j) b  output_sample(sample);   // write L + R samples to DAC   d' U2 ^& ?4 w' U
  return;$ G5 W( q& G  @
}
: Y" a1 e# H6 Q( m" Z8 _3 @) g( d  L5 G' \, C. t7 ]% e
int main( void )
4 o% H+ T4 g- P  B5 C& N2 e0 u{3 N4 f! Y( K& W: y. i

! H6 \8 k. {1 Z    /* Initialize BSL */# k8 |  P! |+ C) T5 E
    EVMC6747_init( );  h! `. y! X- d4 c* j
        /* Call evmc6747_intr function */
; Q9 H, x! p/ s5 J7 @' c    aic3106_init( );
8 G# U  u7 I( y/ ]+ h        while(1);, T8 s( C+ e, C
}& |! {, H1 c+ J7 W4 }( Y

! h8 W# \  W4 ^5 ^/ z$ T1 N7 i' d
& u# i1 P, M+ u% |) ]2 d% Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( G# m& O7 b. o) A/* Initialize MCASP1 */6 {, {  e# k% Q7 {
    mcasp = &MCASP_MODULE_1;
- _* G. p9 R# v' ~    mcasp->regs->GBLCTL  = 0;       // Reset0 ]# X7 @% x7 J* ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX- v, l, p3 M1 a( @0 B8 u% n
    mcasp->regs->XGBLCTL = 0;       // Reset TX& O! p$ f, u" |5 F4 B5 v+ _
    mcasp->regs->PWRDEMU = 1;       // Free-running
( L) C' x" \4 {; |% W- ~   // configure McASP0 receive registers! x" @$ x5 h$ B) c5 e; t  ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' \. _0 I. o3 k; u3 A% r; d* }" \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# h7 B2 Y4 @9 z& d
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
  `! }- \1 ]9 i' z! G" K( @* F    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! T/ G; x$ [' `3 S
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* x9 l+ m5 d0 P8 v0 l8 S    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 z( e( P& Q9 }2 ^1 k0 Y* u" O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 d* j9 u! [0 F# _: r- j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; }0 [. u3 E2 b1 O* \
: Q# A) D! i) N7 f8 N3 q6 q* l
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# {8 A/ x- b% {: z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- R5 B# g, L. t! {$ M# d* I3 E1 J2 r    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ t7 ?! _: y6 g1 d6 [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* D# ]6 _% K/ S$ ^$ o# J! R2 C
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 y. w! s/ \0 i7 ]  j
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 i3 @/ o* {. J, Y$ _) b0 n
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# e5 O8 N3 {/ r6 f$ l8 z- \
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 C0 I, H0 J1 y0 V
3 [' a$ I! p- A% V: R9 B" u    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- D! }) R3 F. U* q( H1 A+ ]- o
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- }6 g+ i8 x$ _" p, H, G
    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 Q5 z" q( G8 c8 `5 N# b    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! n) h! E! _# a/ g

; i, O2 e+ J" X    mcasp->regs->DITCTL     = 0x00000000; // Not used
; t6 Z7 |& a' H& j    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% e  K$ n; b5 ~# p( d    mcasp->regs->AMUTE      = 0x00000000; // Not used. G  q9 {' A* F% b! U9 N
0 F9 m* P; D  _" |2 n
/* Starting sections of the McASP*/
* m3 A1 M2 L. U6 b* d) x* N, R    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. a7 i( m5 n+ K0 s& ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 @; D' a/ P) }9 A: l& I1 W8 h% x# l
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + [$ T$ |( z3 k0 Q! D, a4 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 m6 U+ Q3 d0 {# K3 l( h: O9 I1 d& |0 B3 N* B" ~- t
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 H6 [% t7 N8 F$ t. f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( A8 o# E. Z9 {# {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" z3 l  x0 V# g) u1 u) C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) H  Z0 w+ N. k2 D( N
5 l, e/ F8 |- |& ]- ~
    mcasp->regs->XSTAT = 0x0000ffff;
% [  N: ]  o" e& r' f, [# C$ p    mcasp->regs->RSTAT = 0x0000ffff; % }! Y/ x& @% ?# u) M( V
+ x7 C" J2 o" X/ [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: R) L! n, n; f$ H' ~7 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  R+ y; \5 T  [9 @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * b2 L# R; x+ t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ P4 x: g* h4 r" S+ F
6 D8 r; U. b% d8 U- s3 i0 s
    /* Write a 0, so that no underrun occurs after releasing the state machine */. |+ g  c5 G$ O& G0 S  G
    mcasp->regs->XBUF5 = 0;
' P( o2 v3 w: N6 O( M0 P0 u0 Z* j    mcasp->regs->RBUF0 = 0;
' k& W6 t: c! x! a% L+ u
2 D+ M; B7 X9 I# _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 f: t4 z9 |5 p. a% _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 V6 M/ D' v2 X0 \; A3 r8 z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ {3 I! O$ k& Y0 z! v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ~& u( T: Z8 c
% R5 ?/ \  ~, e& @; K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # X& P! z7 t4 v; D" H% p+ T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 \" o1 O$ D1 q9 |% r0 s
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ b9 a3 \4 R. Z! h6 ]* C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 @; `) j' \1 ?( R4 Y

; v9 J* o3 h& T+ ~7 q& A  J    CSR = 0x0000;
" i& D* q1 J$ f" J( K# e' Q* D    INTC_INTMUX1 = 0x3d;, @' C2 J( m/ [8 u
    ISTP = (unsigned int)vectors;7 r% P  F. ?( Z
    ICR = 0xFFF0;  % c$ c' D9 J1 ~8 e
    IER |= 0x12;  % p) Q: Z6 d4 }+ @9 c$ U9 W
    CSR |= 0x01;  % W( d" |' c, j% {
$ M0 _- T" u7 f% F% x

' ?5 r. e5 }2 G
- R9 l2 q" T. [! O# D( R, ?6 N6 z( g还有就是两个输入输出函数:9 X! N3 J1 W8 H( d& z% a
void output_sample(Int32 out_data)
8 H. Z& t5 |8 y# G6 s' v% C9 j{
* r" g3 X6 R) r  AIC31_data.uint = out_data;  
+ E" B7 I4 Z/ t5 s& B/ X  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' I, ~, n2 M+ T: L* y5 @}) d  y5 `- M- J$ T; c* K

/ b6 T: y4 ^, S& d9 {  r! YInt32 input_sample(void)# o$ \/ D. `0 o2 a8 H
{  
7 n1 F: ]; y6 L1 Y) c  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 W" H. r( O  f) Z9 g
  return (AIC31_data.uint);
6 @; ~/ K# Z( h, z}9 A0 M; e& b$ `& y, |( a( j
# c: l7 A' G8 {: D
分享到:  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-12 15:58 , Processed in 0.041696 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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