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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- o7 S. ]  d# I1 D' Lmain文件:$ ^6 y" C# e* l5 i: m
interrupt void interrupt4(void)  # h1 A2 Z+ U. s2 V& p
{
, ~. r3 A+ G9 Z0 u# l  Uint32 sample;
" C8 J, T# h! r$ R) ], D! U, w. y+ [- E: U8 G$ E- o' w" r
  sample = input_sample(); // read L + R samples from ADC2 K/ N/ x, ^: v0 @2 Z
  output_sample(sample);   // write L + R samples to DAC
& c& }/ N# v' k! G* B  return;) I$ v) f7 e6 t  y  d
}
8 ]% _0 Z  A. {% C9 Q  V- A
6 P5 _+ X1 T8 E5 bint main( void )
4 O. P6 {; ^: J, I* i4 A, g{1 y; [7 |: G& J, ]4 b. X

3 f% s$ i: [- d# ^( p4 L; m* B    /* Initialize BSL */; e7 R8 P- o2 \( j! {
    EVMC6747_init( );! P4 l4 Y! L4 \; h- U- I
        /* Call evmc6747_intr function */
; [, ^1 e8 B* u    aic3106_init( );
8 {6 u  X7 s/ F3 a- V- P        while(1);
- T3 j" J( L: _}
0 h* i: q9 y+ p4 i
: o' W# a7 X1 n4 X1 }
4 f% A( T2 |( r8 T9 ]5 _& Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. W0 F. L  k* G2 T/ n0 V
/* Initialize MCASP1 */
. J( P) ?8 C- B; I' j$ e8 A' j    mcasp = &MCASP_MODULE_1;, d/ R6 K9 V5 f; ~3 t
    mcasp->regs->GBLCTL  = 0;       // Reset1 P3 P6 J$ H6 _2 W) k
    mcasp->regs->RGBLCTL = 0;       // Reset RX! S. O0 W" d( H
    mcasp->regs->XGBLCTL = 0;       // Reset TX6 `$ v5 N7 b$ I8 r
    mcasp->regs->PWRDEMU = 1;       // Free-running8 E+ Z  G& D. x( t3 w* j
   // configure McASP0 receive registers. p+ g, s2 g/ e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ D5 A' z6 E0 F  Q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" X6 w0 [. i- K6 f% m7 g9 ^
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. f1 U2 v7 G6 T- Z1 Y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  A3 e" T! I$ P' v& X* p% _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% Z5 s$ z. n1 ?0 [. V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- U! O3 B! v+ [3 L# u    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ P! i& R3 Z0 g3 K9 k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  t# s$ R- H4 m# ~& u( I
1 Q; f4 W7 }; u$ v. l1 B# Y* S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ l. Y# m1 n/ f8 H0 y. \6 M$ h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 P  J+ W9 A/ ?5 i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) j) k$ m7 }- [3 ~& Y7 Z5 ]4 w7 A    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 L1 m& g# ?1 S- T: r1 l6 Q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ C( r  V) a: j; B. _" m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 J6 F: ?7 e* `/ ]; I; H. M
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 q) e$ V. a: i9 c  c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 {4 I% ?4 ~! ~# w  {& Q$ D" L; y: [
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 e& m4 b/ q, \# v9 }8 h5 V' f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; s$ `9 l0 }, J! K6 l+ d. k& @8 R1 J- V
    mcasp->regs->PFUNC      = 0;          // All MCASPs8 e7 a1 o) ^! v; B8 Q+ }$ d  d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" m9 {" _5 V5 J" b* e; @) y

& D; B* f* U5 \7 N) [    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 B9 _8 |" V; f% p. B% F: `- f! V! J    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- W( {7 ^* ?. y4 x! p2 M    mcasp->regs->AMUTE      = 0x00000000; // Not used/ V7 f3 y5 \/ B1 r- O' I

% F, d% x/ O7 v8 Y% I" v3 i/* Starting sections of the McASP*/5 D9 K4 |( g4 E& ^6 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 P8 \6 E% ~4 T( g) f$ b' Z; ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! W: q% [* ?. r, c2 b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 E7 q# F& o' S/ D# ^# _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 H8 \& e" z4 F, `! K* F7 e! E: p& x9 a- g4 H0 i: [; x7 }
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# `# b4 I* G3 E" d5 V1 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 V* [! F* X/ }8 _    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% q  {; S; f: k% |4 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: Q* x* b: w, ]% \6 w5 F/ P6 |; w) ?. \$ `
    mcasp->regs->XSTAT = 0x0000ffff; * a+ L/ V) {3 ~1 y' q' I
    mcasp->regs->RSTAT = 0x0000ffff;
3 W2 |3 ]6 O( _! v) N/ w, @3 t( D* @8 F5 O; B
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( |$ h0 f5 Y, U; m6 ^& o/ \9 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ G+ y% k4 ~# ~9 ], t2 K    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ ]' p5 g1 h9 e# Y# z8 _, f3 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 b2 d( [( j+ {; N

( p) X+ [6 {* @9 z' D/ h    /* Write a 0, so that no underrun occurs after releasing the state machine */: _: _! a$ w4 H; o2 k' M- p
    mcasp->regs->XBUF5 = 0;# Z7 o7 K/ }" Z5 u6 |2 I" S' |
    mcasp->regs->RBUF0 = 0;
$ ~& t7 Z, @- `  L
& W. X& M8 Y6 y( H3 [5 R0 c    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 m4 O' w+ r# p0 Z1 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( O$ k0 e- p2 `0 r
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 g4 u& B8 @/ B$ B3 x. A& J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- C( r+ e' I# g# N8 A/ u& C8 D. Z
* T* @" t9 L- n1 x; W2 j& |    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 ^# b/ A6 Z- r- H; ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! V$ h* K' I" v  B, B, o+ [& V/ V
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 P" j5 }7 A3 L; i# k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 ~8 c' r! H. N3 L/ x
6 s; ]% [9 u& b% k" z' \5 ~
    CSR = 0x0000;. P3 M# b: N- ]$ ^  `0 R3 V
    INTC_INTMUX1 = 0x3d;
' |; z# ?8 R. L% \" {+ N0 h, ?- b5 J8 b    ISTP = (unsigned int)vectors;
4 o9 o9 o; Y7 q1 J: C- f    ICR = 0xFFF0;  * B, ?4 F6 h9 j& Q
    IER |= 0x12;  $ l- l) I% Z+ Z$ E; ?, t
    CSR |= 0x01;  0 r1 E6 l' F& @' [: c2 T1 q9 _
1 @: B/ t: f% D) Y6 h. K2 b3 ?& E: T
7 r) W) I5 U9 x% v7 u( R3 _. q2 Q

5 o2 V; L  g6 a/ `' N- |7 S还有就是两个输入输出函数:7 T0 A' q$ A; \! K- a" T
void output_sample(Int32 out_data)# J7 w% l7 L& q  W$ p$ O2 w
{' w; _; A5 \( I# C8 m, d
  AIC31_data.uint = out_data;  
8 f0 D' P, E+ K6 }  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& {( n2 F3 Y) E+ h8 a$ {& f}
+ S3 o& {' @2 W2 S! _7 @3 D0 n" M/ g1 {
Int32 input_sample(void)
+ B% ?( m4 B; T; f5 Q{  # P3 Q% X9 Q7 c: e% h2 A% B. n
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; y- p1 w& B5 \* d  return (AIC31_data.uint);
- O2 ^# t6 d& I}% C- h9 j3 ^5 `3 n, E& i

4 l0 m. r8 @& O: w* n7 {& C
分享到:  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-10 08:15 , Processed in 0.041170 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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