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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 l- u* ^' o* }9 O+ x* q* _main文件:
: p# e5 u& Z$ S1 _% M3 B' _7 Winterrupt void interrupt4(void)  4 m- N7 Q2 G+ q. a! u) D
{
% l! C9 e; T6 R/ R- J, i. h, h  Uint32 sample;1 `7 t2 E& V  ?1 g2 S* E
& t* K  O5 \& K" v
  sample = input_sample(); // read L + R samples from ADC
2 ?# C) L8 ^* X9 ~! e$ W  output_sample(sample);   // write L + R samples to DAC ; w: p8 R5 ^  y2 [  W7 c
  return;
* e: Y  i6 l& C  V9 X, N}1 W+ I' j/ {5 |& y- O
* d5 _% N7 Q4 Q
int main( void )
: v" R- h6 ^5 s{
! T: T9 ?& }! }3 m- I2 b, R4 V4 i; W* g. q1 Z! }" f
    /* Initialize BSL */" L% S2 b' q8 ^: E% X( f# T/ m
    EVMC6747_init( );. v6 p( o, w& ^+ H7 ]6 X4 r
        /* Call evmc6747_intr function */
! d* z/ L" _+ w    aic3106_init( );
( C- q* G8 F" I7 w; Y7 u        while(1);& n* D; h; k+ R- I
}
; R, D  f: S) o3 H) r2 D# o
# ?/ k* W; B* Y% s2 ?8 ^! M3 p9 f* x8 s: z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ a( k0 b2 j' ?+ ~& W/* Initialize MCASP1 */0 Z; K6 W2 J1 Y, q* M8 B6 l9 k/ T
    mcasp = &MCASP_MODULE_1;
+ b4 Q9 X9 s; y    mcasp->regs->GBLCTL  = 0;       // Reset
7 [8 b; m- h1 ], g0 o. K8 ]% p    mcasp->regs->RGBLCTL = 0;       // Reset RX
) f9 M+ G$ D8 ]2 @4 [! J    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ u. X" j& b, t! \8 R% G* M    mcasp->regs->PWRDEMU = 1;       // Free-running
* l) i' M4 u, v/ o0 z1 s! `   // configure McASP0 receive registers, o8 c9 @$ h2 E( Y: R2 Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( N) J/ Z1 ?$ o9 G1 [/ H# y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 w3 g' f) |9 B( V8 P, N" K5 \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- G0 U# B, @, h& H- h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). y. K, F" ^: `6 l) U9 c! v7 J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 e6 l4 q9 I. Q* n2 G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% H8 Q  R1 H1 l; ^- g' X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 F7 D" m! p: X1 v+ ]% D- R    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ t1 D6 C3 X+ x2 N" M+ C5 e4 z6 r5 d4 b* D
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' Q4 P8 B5 i/ A    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. j) ^' D, l% p, z; m, g" g    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 }0 w) _0 |8 T, c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* A" h1 u$ o: a. \+ P: Q+ r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# f1 m6 g$ ^. G" g6 X4 J$ K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
0 H/ H7 _& N. S0 E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 {6 `, x+ U% R, z4 {
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 Q5 S" u3 ~. l
+ K0 _! o0 V- L- F
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) x3 I2 x* I" X, z3 P; P+ G    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) {* g6 B5 Q: Q- @" l* `    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ `3 C' C( S. M& ~3 f  o- d    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 K" p& r8 Z' B& w& h: g" A
/ |; S+ K- f  G* B. v& }6 j    mcasp->regs->DITCTL     = 0x00000000; // Not used& o( u5 M  W5 Z" E2 Z  }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& l0 X# G$ g6 b/ I) v1 y    mcasp->regs->AMUTE      = 0x00000000; // Not used7 {# }% Q; Y1 V' t
% i% L# S+ a( {
/* Starting sections of the McASP*/6 A' z! K) v7 j2 r% Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 f1 R: S# g+ c2 z# b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 g* a& i5 v4 a1 }, K: {
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; n% _! m- _6 y( J) I" G1 j9 W& j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( U- e* A+ t: d- l. r7 _
, _% O  g; J: T+ h
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 r6 c% S  M7 S  M7 J! q. v8 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& j- N0 W- z; ^8 X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# T1 F5 B; ~% C: b$ U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 `5 m+ J8 m  w: J' f2 V6 J; F$ j: A" B  ]3 G6 j; C
    mcasp->regs->XSTAT = 0x0000ffff;
4 Q6 M4 p. T  P2 W2 c( |    mcasp->regs->RSTAT = 0x0000ffff;
1 M+ K9 |  i+ x5 v, i+ ?: j0 {9 ^
9 |7 r7 o2 k2 p3 z* T% V! a% i4 j    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- u" G. n1 O8 O" ]; z+ [3 N$ I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- ]# Z% X$ X: o) b2 ~5 J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 E( `" E, S# ]4 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  ^' \1 O+ a+ l0 `/ g; c) B+ f

2 ^' P1 n$ z' d7 Q6 I    /* Write a 0, so that no underrun occurs after releasing the state machine *// d: f+ r! q% A  e
    mcasp->regs->XBUF5 = 0;
; m3 D" b! r3 m% s; {9 r    mcasp->regs->RBUF0 = 0;
$ I: O; J" B' [. b0 u6 O4 h+ n  @6 N/ F9 q* p" r/ t) y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! S: ~+ V5 G1 M* }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. @2 x4 B% I. P1 q6 R3 R$ u    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& p: g/ l0 U, [/ I# Z: j; h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 ^3 ]: I* U9 X
  o( G; b4 L, e% i8 r# I* m    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ D- p+ z. n4 C2 S6 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ l3 s6 w! ?$ G7 S% `: @& f4 i/ k
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; y4 \  ~% E$ E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 n3 b9 X2 I6 o! c2 r: j# C

' N' t) ]6 a+ A2 q- c3 @; J# v# h" D    CSR = 0x0000;
) S0 ]# C+ ^8 ]0 |/ }) B: S5 s    INTC_INTMUX1 = 0x3d;
1 c/ Z/ n. z5 W( r9 ?) n    ISTP = (unsigned int)vectors;) Q0 ^$ k/ y; m  r) K7 W
    ICR = 0xFFF0;  + k. |5 ?0 v: V. }* W2 H
    IER |= 0x12;  
# i; S8 _, @! h' K3 c    CSR |= 0x01;  5 \! C2 O+ A: l  z9 G1 f0 v; i" `% y
7 ]* [+ Y' d% D" g3 m5 m, K* M
/ x2 O7 B. n4 R0 L% w' o2 C
; u; I6 J' ?. m7 q# Y1 r* p; t0 u" m
还有就是两个输入输出函数:
+ r) s  B* E6 b5 q3 vvoid output_sample(Int32 out_data)
0 q  c# Z2 x. d" t$ \. n{) W9 q8 c# l7 Y1 I4 C: a
  AIC31_data.uint = out_data;  
  `% k# G3 ~6 N- o; y* p  MCASP1_XBUF5_32BIT = AIC31_data.uint;: h. S7 ]9 i5 o+ ?+ X3 V
}- p. P0 \9 m/ p* Q) k/ V
* z* P, \2 @' i& @! U4 z
Int32 input_sample(void)
+ F1 e" u8 D2 i( ?/ _4 Q" |% ?2 Q{  
6 {3 X4 j% n4 N- a- N+ w! m$ f" c  AIC31_data.uint = MCASP1_RBUF0_32BIT;' \+ n; o1 i, S3 p4 ~
  return (AIC31_data.uint);
' `5 P0 a3 p( I1 Z) Y}
, G( N8 o1 _  e" v6 p% w7 m
) _/ ~& ^: N4 X0 u, J; O, D% L2 ^
分享到:  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-5 21:43 , Processed in 0.043615 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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