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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& Q6 Y2 i+ [, j& k) J) Amain文件:
1 D/ T+ l2 k7 b5 F" D8 F; @0 |interrupt void interrupt4(void)  
1 s3 G/ M( i0 x- W4 Q' s# p{
( O# B* T, |' D" I; E+ s  Uint32 sample;
+ m: [) w9 f" `" n$ v( y
6 v7 L! x. i$ Q. }% |& Y* q  sample = input_sample(); // read L + R samples from ADC$ Y" `& h  U! p6 Y
  output_sample(sample);   // write L + R samples to DAC
8 |% {% V9 A  G$ m& D  return;$ m3 F/ d7 a8 n5 X7 e+ [
}4 _0 m; |* ^3 G6 m

* t. D6 g$ Y/ m% |: Lint main( void )8 H( Q. A. w9 ?+ V3 B" C
{1 A; k7 x. a1 h) D$ y) {
7 R/ }$ N: G' m
    /* Initialize BSL */
( {  T8 G8 S$ c( o% v( J    EVMC6747_init( );
) J+ u* Z. ]" E# W0 S: w% F3 r        /* Call evmc6747_intr function */
" N5 L  X4 m$ ^9 p    aic3106_init( );1 U9 r3 A1 l* p
        while(1);
" t/ i; f: ?% D" A1 H}
4 H* l9 Z' ^+ _- r3 A( }( r# u
$ C! a, Y% `( J( B7 o8 T9 q8 u, u1 k: N# u& J9 O4 G' P5 S, V( Y6 H9 S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ r9 f) D  B3 T
/* Initialize MCASP1 */( Y! Q( ^* h* ]2 Z3 t! c3 Y
    mcasp = &MCASP_MODULE_1;
1 u4 r4 K2 H- ]' y    mcasp->regs->GBLCTL  = 0;       // Reset7 w$ T5 r+ e5 U0 k
    mcasp->regs->RGBLCTL = 0;       // Reset RX
  w( S) H7 Z6 l/ z$ f9 }2 k    mcasp->regs->XGBLCTL = 0;       // Reset TX4 h8 s# l! O( v8 w4 T0 m  U+ K4 k
    mcasp->regs->PWRDEMU = 1;       // Free-running
/ B7 p" E  W, d. V5 X: f: R2 }   // configure McASP0 receive registers
/ H5 L  x$ \! m1 z9 T( G+ |4 G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" @& y9 l- {0 D3 d9 r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# J# ]* v7 z' L7 \0 O, h( o( S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 l! c1 a9 q% ^    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& i% O+ ?0 A1 Z4 \% ]    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): D" C6 Z& J7 }2 b3 B- m3 s
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( v* H& r  F$ x) l) S1 X0 N: ?
    mcasp->regs->RINTCTL    = 0x00000000; // Not used$ Q1 K" q2 [7 K0 U' i
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 I2 {1 ^& r* l  t
/ ]( F" @- m- I2 k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ y0 d' |# x5 E8 x9 m2 O& F# B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ m. `" e5 X0 V# j4 P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 H, V) l" j+ K& L* i( |$ d+ J
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 j3 q& M( ^* ], ?
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; T: S9 a: u% L/ d
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& b% P2 ?2 H! Z# W
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, A- g+ @7 o" t- X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; ^1 {% U# N. X8 B- }

6 m6 g* {+ ~$ i. m! ?    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 f$ R) }& \: |* O# R4 h6 _5 a
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 h: U8 h+ s6 I4 C; V7 K
    mcasp->regs->PFUNC      = 0;          // All MCASPs
. R  B2 ?' J3 {5 u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ w; y) H2 ^7 k+ @

$ I$ x% T3 |& d& _9 K( F0 ~    mcasp->regs->DITCTL     = 0x00000000; // Not used
) S- ^0 c/ s3 W5 m( U- I$ r    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 `; f7 s0 r+ I5 x5 K9 A2 ?
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 m' D3 s( b; D
# v& z# u- m5 O0 b& K6 ~" V0 m/* Starting sections of the McASP*/1 u) ?5 [$ C" F8 J2 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 n7 k/ O& t% F3 v) x5 D0 N2 j/ x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " n, _+ O0 w3 B+ D
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 n# {7 U* i3 P- ]  Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 U( V+ @" O0 f5 M+ A; t+ a1 q$ f. G7 }8 A5 d2 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 l# M* B  f4 e. D4 a4 Y% I* x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 K0 _9 P0 g+ ~# m. c  ]6 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, b2 B- u; N3 f" k) h( q; k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ T& N4 j! P: i, }5 ^
* `8 }: J. X7 i! J. E3 ^; v
    mcasp->regs->XSTAT = 0x0000ffff; ! G' E2 X2 z! ?; r$ T6 y" t
    mcasp->regs->RSTAT = 0x0000ffff; ' j9 r. b% N5 N. g& C2 Z. N

7 t8 ^4 [7 o' d/ z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" t6 w, I3 G( N9 R# i0 ^+ `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& _7 ?4 Y$ s6 y5 R
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 N$ o3 h- f" G$ h: k/ {" n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% B+ d9 g6 P7 H7 z/ s6 l5 G" b; b- P: q
    /* Write a 0, so that no underrun occurs after releasing the state machine */. U- ]* f5 s: M
    mcasp->regs->XBUF5 = 0;( _/ C. B, W* x' O
    mcasp->regs->RBUF0 = 0;
# d( N$ U0 [- g5 A$ F5 Z6 J
2 v6 ^- m/ v$ {# h7 U3 e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 t5 b% Y: I7 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; w, m. K* a) X! _; R! l5 {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& k! E) i: f6 D, e& N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ?' c2 K, s9 c9 d0 z7 w5 Q! Y4 }$ h

9 ^  [% j1 X2 L& q# }. f8 c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 \- J/ Z$ s2 G+ W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ v3 i$ T3 _- Q! l    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ m2 h9 `( s) v2 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ {2 g# G5 z( a# J

) A! H$ o# Y4 L) }    CSR = 0x0000;  t( |1 W0 ]; S5 f& f/ L
    INTC_INTMUX1 = 0x3d;3 N6 m5 _+ M. a: b/ u  T- I
    ISTP = (unsigned int)vectors;
' y) D- G  x4 O1 g. d    ICR = 0xFFF0;  $ L" I9 G7 U0 F# {9 K
    IER |= 0x12;  ; A- G- {$ ^) c5 v  w0 g# j
    CSR |= 0x01;  ; K& p/ c& @: K* \0 e" q, i/ G- }" I

0 U0 @9 w1 L0 x- o" X7 P1 S) Y" M6 c
7 \6 n6 C2 W' C4 ~
! K0 x" @. Y# O8 w( u还有就是两个输入输出函数:
+ z4 S; w. P: O, f# A. ovoid output_sample(Int32 out_data)
4 f4 s" l) U6 ]8 Y2 _# Z{
: _7 T- |% \; v5 G  AIC31_data.uint = out_data;  , K; O& q7 y# a5 z& u0 Q$ B
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# b( T, I; ^" l7 B0 W, v
}
' o+ t# G" ?' H' k
8 W, T- a. x7 W8 s$ A0 @! J# ?Int32 input_sample(void)
" |) C( D7 l% C5 B# Z$ `/ P/ l5 m{  9 L6 K3 b* q: L9 O& e+ o1 C
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 z7 ?' G+ u7 E( q! ~  return (AIC31_data.uint);+ ~) w4 L3 k# e. _6 y
}* K! p) L4 K8 f) U7 c0 n
4 w) F. I- w) m' y# W/ ^: @( B( w
分享到:  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-1-15 21:44 , Processed in 0.042265 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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