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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ A4 z+ i. b( f+ p, h/ D1 {8 n  Wmain文件:/ R+ {- y4 {; j+ g
interrupt void interrupt4(void)  
. N) ]% h( p1 ?6 k' b% }9 d{( ?: h# m4 o) ^; f$ Z4 y
  Uint32 sample;' e5 K8 q3 y9 ~! B# r" v
0 V7 k9 Q2 U7 c6 |% k1 u# ], E3 w
  sample = input_sample(); // read L + R samples from ADC
$ ^7 C, m  f+ p, ?0 g' J) t( v  output_sample(sample);   // write L + R samples to DAC
1 v& a4 l# D1 H$ |% f$ G% V- t  return;
: [% f( T- W! ]0 e, |}5 x- H! P, v) b* e9 x+ o
) `5 Q/ n# N+ y; ~0 C3 A' n$ M
int main( void )# T- V! w! q( W# r! ]
{
3 p) T" ?) H$ G2 |# s# ~0 P- w( c; c/ T
    /* Initialize BSL */
5 h( b. L; {, q# ?) f# [7 J) |8 B    EVMC6747_init( );$ Q0 |7 T& U, h  F
        /* Call evmc6747_intr function */; m' G& _( ?2 S8 p+ G+ q2 M
    aic3106_init( );( O! G( N8 p0 K; I5 H
        while(1);1 z5 j+ j& ]9 V, W
}
( n/ m; r$ l: Q# u7 p% _
  k& {% p7 w( T' ~% u3 m& H# D6 i; S. ]' Q7 |* M  f' L* [/ T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) x- J* `9 p% v& r4 m! r1 t
/* Initialize MCASP1 */
% x$ l4 m1 x4 ^3 @    mcasp = &MCASP_MODULE_1;6 {+ G- K' p- Q- {! N
    mcasp->regs->GBLCTL  = 0;       // Reset
: e3 G1 ~" A/ d: {  {3 p4 y9 h    mcasp->regs->RGBLCTL = 0;       // Reset RX( O0 |/ Y! _5 E: O' b2 {
    mcasp->regs->XGBLCTL = 0;       // Reset TX6 V% \5 J, s" x! t+ Y, F
    mcasp->regs->PWRDEMU = 1;       // Free-running* x( y: O' h1 v% _2 H' A! [
   // configure McASP0 receive registers
$ P2 |6 n1 G8 C, f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 n2 h) ^4 W4 r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& Q) R6 j3 r+ u: d4 J
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ _, `% v9 H2 s8 C" O$ Q* z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 S/ q5 f/ b( _2 p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 c+ d3 _5 _0 F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 i8 p. f# {' Q% Z
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 N! N8 `2 a. [& l9 i2 B" E
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: w/ A# p6 }4 U% {% }9 t

9 t" O4 P+ |3 K/ o2 B% V4 z. D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ z# T; y1 O  w) r% ]2 S( R    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ k8 \, I6 E/ w% G" C    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: A# [! @  l( \3 b% c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 \: Y) ]" P; g: R+ @8 g1 n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- M4 ~' I' }$ Q2 M& M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; p! B6 Y- a* T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 v7 E) A1 h# n! F# h+ G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 g" L5 U4 x( q
; w* V2 Q! ]# C; J: {2 t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ ?0 G; h3 {9 D6 G
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 H2 b; I9 a  Z8 e& k6 Q- S& T
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 I: C) q9 s1 v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. Z/ x- m8 @3 [9 H3 p( N
/ A' F! c# ?& V+ R6 n" P2 t0 W8 }
    mcasp->regs->DITCTL     = 0x00000000; // Not used
. j# U# @' Z, K6 N    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; `5 n- Z8 D! k& K    mcasp->regs->AMUTE      = 0x00000000; // Not used
) a( H6 ~" Z9 I0 Q0 j( [. T% F
0 c, C) |5 X* l* [' t* ]  g/* Starting sections of the McASP*/5 V, H4 s3 P& f; F
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  @, U  i: k( k& z% @! J: b4 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' F" s. n/ C4 ]. M
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 }8 f6 w5 J4 f* ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 S6 l# X9 b8 ^) i
* Q; E8 ^1 x' q( ]9 E! F  L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# q: [' u. y2 v6 f" X8 b5 ]% D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 S9 Z. c6 B. Z2 y( e    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & F0 w: S2 E( S- Y" B3 ]6 ^" L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- C- b' ~% I$ b, X3 u4 m+ O6 u' ]& k: d( }
    mcasp->regs->XSTAT = 0x0000ffff; 3 A; F4 a1 N3 `* G
    mcasp->regs->RSTAT = 0x0000ffff;
; ?4 a7 c- z2 h5 f
$ ^& V9 y# ?. a9 ?( A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 H+ W- z6 \" i3 a, o/ _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. t- l5 y$ ?' h% l/ n. Z" b    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & o/ Z9 b1 }* [4 Y6 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% M& [4 Y# p2 f+ w0 J8 \" [  M8 e9 @# c: x( W, l. |  o
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 ]3 Q$ n8 s; t; }$ Y5 D# Y
    mcasp->regs->XBUF5 = 0;
1 S# o/ I5 v6 l& r! ?    mcasp->regs->RBUF0 = 0;( ~8 I: ?6 `* f+ ]7 }" D4 {+ _

& z' R. {8 q! R3 k8 O/ M  x( F) V    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 S. g- ~; U4 F7 X; Y. j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: D, L- X( [9 V; H1 u* B    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 d4 H6 Q. n4 m+ q1 w9 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 m. B3 l& W5 P" H1 v

/ o: \: ?) o8 {8 S3 b5 l. c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 M( W+ B! c# N7 i  g" r/ Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- V1 U8 ]' B( H0 X  F& ~' o, V  ~    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " u. D$ Q" g$ d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& u# g) K2 O8 j6 U
8 u7 }1 j- g4 _& H/ L5 z
    CSR = 0x0000;( C" c% k5 c. B8 ~9 C
    INTC_INTMUX1 = 0x3d;4 `. C* Q8 p7 l0 _! X
    ISTP = (unsigned int)vectors;# Y  }! X1 s/ P& f* N: c5 {
    ICR = 0xFFF0;  $ t* {2 o0 `0 V$ l- i# H
    IER |= 0x12;  , o- |0 Y( P! H/ j. j& b
    CSR |= 0x01;  / S7 ?4 V7 k7 G; X
5 p8 H- z1 x& s/ X9 U

& K0 Z7 A7 I" R- J( @8 E# E& i
还有就是两个输入输出函数:, V' g0 k" x% d) I6 g1 m
void output_sample(Int32 out_data)
3 s1 y; S) I. R/ m{
6 f+ E- s, O! m: D6 P  AIC31_data.uint = out_data;  
/ |& q5 ?2 b% |, A" ^  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 u* K6 u& v: `0 ~6 I$ g6 Y% N}9 `% p4 f7 K8 h2 \
, }$ Z$ g5 ?! w7 V
Int32 input_sample(void)
. c  w* J! Y* Q: A{  / N- D3 h  i$ d5 w) n
  AIC31_data.uint = MCASP1_RBUF0_32BIT;% e& R5 t% N3 k. H) H
  return (AIC31_data.uint);
! P9 G0 u8 U+ X6 s+ S: r}% P' }+ x" S" A5 I. r% a
( A7 }" F) I2 r
分享到:  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-14 14:04 , Processed in 0.040998 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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