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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 J0 ^& q7 B7 e9 X6 ]; v5 }0 Wmain文件:, P" ^' w. _9 S2 `4 Q. s+ e0 {
interrupt void interrupt4(void)  # [1 f2 A& \4 j5 u7 L7 s  W+ t
{, N0 t) H" v8 G2 A7 h
  Uint32 sample;1 c( Z/ A* D4 }* P5 [  l5 \
' `( @! L, g9 ]
  sample = input_sample(); // read L + R samples from ADC' g5 ^* a$ s0 s; ]
  output_sample(sample);   // write L + R samples to DAC 5 J( g1 C  D# ~0 s* v
  return;- [7 w& x6 a* _; N6 h/ o+ s
}) ^) x2 p+ @. Z1 F& W, Q2 }% ?

7 l# a# x$ g$ Aint main( void )
" q" Q+ z- A% ]5 [1 T& ~3 F. @# ]' Y{% s4 P. I( ]# I0 f+ A

- X- ?5 v- T; @1 R* u    /* Initialize BSL */8 q8 y* w7 g/ D* q6 u5 T  B
    EVMC6747_init( );$ x& ?/ j) {. T4 F; Z
        /* Call evmc6747_intr function */
/ |4 g- [2 E& h9 D9 @    aic3106_init( );) J  X$ ]; C" N4 x4 P
        while(1);3 w/ K$ \- r/ ?
}
5 u2 c; K9 s& C. w+ R' p2 c
- _/ p. }9 m$ R; K6 q1 k9 A0 K  `/ n
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. W0 d( X' k1 {/ n, w$ J/ R
/* Initialize MCASP1 */6 t# w& {2 z+ @
    mcasp = &MCASP_MODULE_1;
, U. ~; T7 [% X+ x    mcasp->regs->GBLCTL  = 0;       // Reset- _% l* ]9 S* U; Q5 Y$ L
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% c7 s/ B2 B; @. r# O* [/ J    mcasp->regs->XGBLCTL = 0;       // Reset TX
) |1 u$ v: K) I3 f' C, n    mcasp->regs->PWRDEMU = 1;       // Free-running8 h8 N9 C$ z2 r8 |/ D. d
   // configure McASP0 receive registers6 L) c* T6 Q( @! w7 @# @  P9 [! V* {/ R
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! X2 c, I- p4 a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  N% M. Z  `' a3 ]+ ?  r
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 ], {: Z9 M. B    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- ~6 e$ s; c- q9 v- I/ H( T9 W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ i. |" a$ L$ d: t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 J: j1 A5 \0 }  M2 F/ K7 @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 \& ]7 }/ N# y2 `% M/ t- W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! u7 o1 w! W8 ?! }; @( G* {; I5 @; Y4 B( X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 O& K! S4 M+ I) ]; |
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: q& X, j# s+ H2 z* Q+ M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ R3 q- ?9 F# S0 \0 w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 ~1 Y, d& ]6 z1 J: i6 f8 W" y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. y/ q5 C/ F1 c4 X' \( n% k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% K4 X, ]& k+ _6 m- ^    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 q1 j6 s( I$ D- H  C! b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 d% v" D- I1 B
( d% s, i) B- m% O1 b    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& u8 `3 ?% M; y; k# \. l  B5 E4 Y- i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; M  K, F, l3 ]- h/ O5 A
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 l3 s, l+ z8 o* p6 g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 q7 \; _, {' c4 Y( E1 S& u
* G6 E  p6 V# h0 b    mcasp->regs->DITCTL     = 0x00000000; // Not used2 E$ ~: ?& p& p; e' O2 ?0 V5 h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used4 d; a7 B) d: E* M/ d& x
    mcasp->regs->AMUTE      = 0x00000000; // Not used2 g5 e" W- u2 C- F( X
" B# L( w4 C9 O% Q2 h! J
/* Starting sections of the McASP*/
) t5 y" k6 o. \  q& G( w6 O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 k2 X* x0 q7 g2 s% ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 c$ W/ S# }4 A# K$ k* L$ w: ^; Y- y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * K: I! D0 U: ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* H7 C3 p$ N  b/ f. J0 x, n, [
  ^, y2 s0 j1 r; v- ~( F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' }- x! d( I8 R; |$ F, _) |9 {  R1 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- {! ?  B! {4 @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 m$ I. f& V8 f, F1 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 w7 e1 J7 ~4 d
0 W3 [# Y! p4 _8 _$ C    mcasp->regs->XSTAT = 0x0000ffff;
6 p" {- B4 t; i! I  E; _  @; I    mcasp->regs->RSTAT = 0x0000ffff;
- s2 j; z- W0 q( g+ C: l% Y% d; b8 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ \& q+ E  T" o- N- m6 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% f+ C. m9 N- D& a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ X- |+ w9 }! L  T. C7 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 O. S2 l5 R' {' C2 X, ~. ]

4 e$ Y2 P; F2 N: a    /* Write a 0, so that no underrun occurs after releasing the state machine */0 c  C$ [/ j- k( y
    mcasp->regs->XBUF5 = 0;% R: N4 P& U# H- T. P0 x9 [
    mcasp->regs->RBUF0 = 0;* j+ J: Z" l% D: M& |4 u
5 Y& x1 [- L8 t
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 t& K4 M7 R0 S. u$ _' ]# X2 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" j. f- K# Q) M! Y  A  _: u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* {6 `$ N! [  j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 v1 C( [; R4 ~) Q2 U. G3 H' j5 w

, i$ S! N2 B3 |2 j- C( M+ o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ v, |$ I4 \6 M, N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& \0 {5 e+ x4 a2 x) ^
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ R4 v- K4 y' H. ]! o' K1 p( P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. ~2 y7 E' [, v" V7 |
; w% P2 X/ r0 \! e3 G
    CSR = 0x0000;6 x7 S+ Y9 [9 N3 M, a
    INTC_INTMUX1 = 0x3d;
2 B+ i1 u5 ]4 E    ISTP = (unsigned int)vectors;# a; i# n  u. d: w
    ICR = 0xFFF0;  ; n6 X% H- W0 A' B
    IER |= 0x12;  
: Q. a8 b6 ?" ~" L# \% ^    CSR |= 0x01;  ; h+ m1 ~5 I9 m5 ~
% B4 [6 K0 N- z8 q' S1 \! B7 y) l
3 g( ~- v8 V4 Q8 p2 b
5 l% E  o$ t" a8 m
还有就是两个输入输出函数:
6 f; `+ l4 |: e0 }& K/ K8 bvoid output_sample(Int32 out_data)& w1 S* N2 z( r' j  M
{+ k4 K  F- P4 g( {6 l4 d" D4 }" b
  AIC31_data.uint = out_data;  
: x4 h6 u- d) p  m! U% f6 d  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ r  a1 K/ ^! O2 L2 b) y/ e9 y
}
% i& ~0 O! S- i; ~
$ ]/ M2 ]& n" KInt32 input_sample(void)
4 i8 W0 C2 l& Z: q3 H% M{  & ~- j- C0 I8 U3 l. j( \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 L# l' f( j; a% k/ B  return (AIC31_data.uint);8 ?$ J: c4 ?3 x
}
: o" U9 q- \5 X/ @: V# v) {5 e; [  k8 m$ |  a8 ?
分享到:  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-11 19:01 , Processed in 0.046627 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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