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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; h5 ]$ x. o: _( h
main文件:* y  O) Z6 N7 e6 W0 }
interrupt void interrupt4(void)  
$ u- i# t; {3 a, y8 q{
6 _4 d% W$ N# V- \1 n# I  Uint32 sample;; A3 @0 X, y' _8 t( M  J

& h2 `4 Q- M6 l. w' v% e  sample = input_sample(); // read L + R samples from ADC. |: R' `4 P. f
  output_sample(sample);   // write L + R samples to DAC # l- o- W; G3 j7 _9 \. p. [
  return;- |3 b+ N/ ?& w* J& T. e
}
& a. b3 X( K+ n1 Y' ^* l  C) G3 g
int main( void )
4 W, s# ?: l0 X4 y% n{
- S7 w" `% F9 q# ?
$ H, A$ H- U6 g/ `# R% m/ L" O    /* Initialize BSL */! l2 \$ I% T, A, `; \
    EVMC6747_init( );" D1 J( ~( b. T+ Q, `; v
        /* Call evmc6747_intr function */
; D7 j& N1 @6 C6 V/ Y5 h! w; j9 @    aic3106_init( );  D* @; ~+ O1 s! Y. Q
        while(1);. |  ]# p" v! Z) D" I
}
. Z) F6 ]% D: v6 L/ w, |# H! k: _) B8 @/ @/ |* ^) L. g: z

% A& h' y6 g( p- V3 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, e# W6 F( g% S+ Z5 |3 {
/* Initialize MCASP1 */  d8 }8 T3 \; p5 {9 d7 J* L( L
    mcasp = &MCASP_MODULE_1;
  R* M% g3 N# T% w& a    mcasp->regs->GBLCTL  = 0;       // Reset
0 b% G/ i$ s4 Y6 p) [    mcasp->regs->RGBLCTL = 0;       // Reset RX/ f0 O; T' s+ g6 P4 S% O# u8 h8 h
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 f. ?! _" M7 g1 J7 u$ i6 l* O    mcasp->regs->PWRDEMU = 1;       // Free-running! b5 G7 s2 @$ D, y' ?8 y
   // configure McASP0 receive registers
* v& G" u5 l) p4 w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, A6 U- b/ b( n) L
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ B5 X- g* d2 J# n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ i$ \/ G- l; w' L  X5 J: X  A    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( e6 U' w' g) U- l! \    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 B7 s# o7 g: t5 f# A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, p2 K6 W: ~+ ~/ }3 m& `/ I
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' d! |' {3 C9 Z8 ~  o
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 y! h+ z0 t+ H* A
: H/ I+ F2 B' t" x" t; z8 F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- R! _. N* v1 w3 z1 `5 M  y+ l
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; R7 @! ?& C6 @
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ }6 K+ f5 m  o    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% e7 y+ e2 a& E  t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 `! r+ n! T3 n% i2 Y: k9 Q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 I( ?% c+ T; ]7 R( X3 D# i
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) p, \! l2 ^( u5 B* S) @* K
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" e( t9 K$ c; _" n: h: H) I1 W1 c$ y" c. X& _
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 n. h$ i% u( s# J! r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 s- @! \* V# ~    mcasp->regs->PFUNC      = 0;          // All MCASPs
, F3 o3 y3 Q% A1 z3 l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 g' i0 J4 O, s

* u& T* U! H: l2 d$ Q    mcasp->regs->DITCTL     = 0x00000000; // Not used
& X3 y5 \6 n" ?) l+ Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ x5 g9 N4 w, D: J
    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 I$ P! e8 C" \! w3 K
) g/ o0 s1 o5 X1 ~$ F6 x/* Starting sections of the McASP*/- W+ b" T8 G. D( [8 T* [. F$ _* e4 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 t& t% R9 d% z( z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 A# \! z) Q5 v: f4 }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& h* n; o) ?2 e7 {. w& `4 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 e2 J) _) w2 q- s+ M- J! Z% \3 c3 w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 L; ~' w; H7 V% Z* n* X' L6 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, q1 g& J4 H; e. l# d+ v, _  c    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 C% W) ~6 o# G7 o8 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 _3 Y. z3 W, j, ~& n
$ T  N- h0 k$ ~. d  J! p2 L    mcasp->regs->XSTAT = 0x0000ffff;
: k$ {2 P$ b/ F2 Q  }4 o  B    mcasp->regs->RSTAT = 0x0000ffff; ; Z! G8 N2 a  u

/ Z) K0 @( |$ P- ?    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  D% e; V' H: b% H: F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& D8 }+ s4 V1 T$ L9 U$ W+ ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 R! R+ O: Y1 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. F/ s" v6 S& L. U

9 T+ D9 T. H; H7 E9 Z! C2 F    /* Write a 0, so that no underrun occurs after releasing the state machine */6 R( X5 x- {, \4 d4 T6 K1 E
    mcasp->regs->XBUF5 = 0;) x" G. C+ B# A% r/ j
    mcasp->regs->RBUF0 = 0;6 x5 K' w5 H3 L: T3 L' k5 b

/ S1 T& R, J/ y& F  O+ G$ P3 Z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . o1 F$ V  F% h( ^1 m& R- O+ [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 _8 Y; ]4 A% E% F- x0 j4 L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( I7 \2 \3 m% _2 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- f& _  u5 a5 H+ G3 T+ Q3 S; f% [
5 z5 q+ r3 b* @1 ]' s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 X8 |4 w+ o" {2 G2 a0 P8 y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; ?+ N% l+ [+ f, U; S- b# B    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( @( W, s; i9 _, C. b! F) A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& n: P+ B6 I4 l

: b7 q; j/ w# `5 m6 y/ L. R    CSR = 0x0000;0 j! h( S, x4 N) p, \
    INTC_INTMUX1 = 0x3d;
2 K! m; I0 o0 i6 x  ^    ISTP = (unsigned int)vectors;3 N8 B# v1 f; d3 D! R
    ICR = 0xFFF0;  $ {/ V/ v7 D% Y1 T
    IER |= 0x12;  
$ I4 p; g6 @) f; Z# m- ~& M    CSR |= 0x01;  ( t" |! l8 k) F
/ H6 c( N  y2 U* j: o+ z. T

; g8 o# A5 U5 p& G
' V: I$ X9 _# y) P) k# |还有就是两个输入输出函数:
! S; [: |% C8 k4 j4 tvoid output_sample(Int32 out_data)4 b/ j2 o( H, g' C6 Y) @9 O/ U6 R
{
: Y, t5 t) K1 w3 L  AIC31_data.uint = out_data;  
$ P. S$ I) `: _1 O; L  MCASP1_XBUF5_32BIT = AIC31_data.uint;" R2 g" e1 k, z0 o/ A
}
: O) o3 n+ q; I+ C* C! M& F! r: R7 ]8 ?; F8 J, j
Int32 input_sample(void)/ t. U" h4 f0 ]1 z8 G
{  
9 h; M8 o' A, U1 I2 Z  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. J! T/ _9 V4 u# j  return (AIC31_data.uint);: j) S, I+ H( T, c! K" b
}
: u) s* g8 Z& B. h
5 m6 q+ W8 R: O$ v
分享到:  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-4-4 06:16 , Processed in 0.046588 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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