C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. G( X7 t0 r* j3 L( s$ D# D; g/ dmain文件:
1 U- S0 Y1 E9 Sinterrupt void interrupt4(void)  
1 ]3 y6 I; n3 I{
) w" ?1 u+ C' |9 ~  Uint32 sample;  ^6 c- @; f3 l& B" k

3 N* H1 C9 P" K% C9 w  sample = input_sample(); // read L + R samples from ADC8 {, J, q% }2 m
  output_sample(sample);   // write L + R samples to DAC 1 p+ K1 W) f3 Z6 O: y. B) [
  return;
: ~, x0 B2 {& X0 J0 R4 p, j}
3 U% w( B0 f8 S2 x: F) E& O+ o  {- m2 \, g0 f' V3 B. q1 l" z
int main( void )
- s1 i0 |1 D% R. x- w2 Z{& \2 o0 k: ?4 v! p' ~9 G

2 b5 S3 Q8 V( R5 W* z+ H: e    /* Initialize BSL */4 V( `) f6 m" e' `7 \$ p5 ~8 ]
    EVMC6747_init( );
$ m; @( N1 i! [/ R        /* Call evmc6747_intr function */: k7 e5 |/ I" J% G
    aic3106_init( );6 B9 s* M5 O$ l0 ?9 p* y/ h* P2 Q' k
        while(1);
# \4 r$ @! A/ q' _- F}, A; ]) u# U) P( N. e

1 {: b1 p6 |' W3 a
, R+ c" K- s; @9 Y" f! j7 J) Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. J- q: b0 [, q% r- ]5 `& j/* Initialize MCASP1 */
) Y7 f5 S' a! ~( Q! M    mcasp = &MCASP_MODULE_1;  P, s7 d  v5 B2 [$ o
    mcasp->regs->GBLCTL  = 0;       // Reset
6 N: s% ]3 s  O8 ~  }    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 k" G$ y; B7 F- q    mcasp->regs->XGBLCTL = 0;       // Reset TX9 A2 k' w7 y; s( m( R% d5 O: s
    mcasp->regs->PWRDEMU = 1;       // Free-running$ T, B7 }+ I) {# I$ C0 i' Z$ C, \
   // configure McASP0 receive registers
$ [5 b* B7 Q' z+ Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' F/ M+ w" r( ^9 n5 E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! J$ W* k" j1 @    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, W8 w5 p- Q  ^$ Y% p4 d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 f9 L# m7 y9 d
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ N  t  t+ g( d# e& l    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; ?( |& P- a8 G1 Z' Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 Z6 G6 w9 U8 I3 C
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( Y0 P0 p9 s, B6 w, L8 ]- P. t6 R, _

3 ]3 d( v6 _- ?: ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 M  @1 `2 y; F4 d$ x. D, J, [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ q3 m/ O4 p. u: b, f* P! f, E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ \! e' B% s% L- L9 }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% p$ u+ B! w3 P9 C( M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; D- Q, k& _- n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- y3 |  _/ Y- G/ N8 h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& ^; g% i" w; |
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 J+ z0 c0 C* u
: ~. H+ F% i+ z8 S# C+ x    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 p' p0 M1 L7 }    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. X: \2 @6 f3 x2 ^/ I
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) h% r7 ^& M$ l* V: c  I: z6 ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# V& n' ^& n9 @, u. n2 p. ?4 z; y- v& i( z; U: S
    mcasp->regs->DITCTL     = 0x00000000; // Not used( F9 L5 S6 E8 W' A/ V, C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- G6 e; A+ s: ?$ ]% _    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 r( J+ v4 m- B" K. r) g2 q( z* p5 n  v
/* Starting sections of the McASP*/
3 H5 S, F8 d! p: s: E. W3 X$ l    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 Y. {2 ~, s  w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 ~, W, w: G1 K; c- U, c
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   X% e7 N4 z# y* y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ ^5 A2 C- z+ ]- p8 |' e. }. v1 c: j; Q9 n6 j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 s6 }+ b9 `' u( U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ _' g6 u8 f4 U+ a2 @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 ?/ H" l8 O+ J1 ]5 F: M  O/ G7 Y0 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 w% n1 |5 n; W& I8 \& v
5 u& [8 a5 v# O    mcasp->regs->XSTAT = 0x0000ffff; 6 |; X: U/ ?9 x1 [0 _4 n/ S
    mcasp->regs->RSTAT = 0x0000ffff;   Q( t1 g9 J1 q$ v. y
$ k9 j$ G4 O9 X7 I$ R) @$ T+ [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ K8 l2 m, m8 i* i1 F8 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% E5 s! }8 ]& Q! N5 j5 L' I3 x+ |    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& f1 y! e2 n1 u3 E* _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 ]4 n. N5 i# G2 J

5 o. _/ N* O3 d, c5 U    /* Write a 0, so that no underrun occurs after releasing the state machine */
! E: c/ L  v0 I) h, F* W2 c; P6 v7 ?8 n: l  U    mcasp->regs->XBUF5 = 0;' F8 H2 c. K1 s( a/ }/ v* R
    mcasp->regs->RBUF0 = 0;4 y. N; [" {7 o( R  |

/ r4 H3 k$ [* I6 }% t3 h3 Y6 @) J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; m4 S: _* _6 L) a: m" M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: G- ]  W( X9 H% l# J! K
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - n) J9 m1 a0 q  h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 Z- A" v0 e: j7 e  F8 l/ |

7 U" I" _) x1 _6 n, f7 k    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' n& p9 I( U+ k% M! `( G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' N! }% [# k9 j+ x' t9 _: A
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ k( T1 M8 ~) j: [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( [. I4 J! F& w$ X, u% W% R7 K" x0 ]5 h& A, f1 g
    CSR = 0x0000;
1 a: q" P# }! O3 \    INTC_INTMUX1 = 0x3d;
+ g3 Q2 Q8 n# x  b' J" D4 W+ k' Q    ISTP = (unsigned int)vectors;2 X- d, g3 @2 r/ T
    ICR = 0xFFF0;  8 N7 l4 B2 ]( s
    IER |= 0x12;  
& q3 L* t5 |* _    CSR |= 0x01;  
/ i( h% N# i) o% |9 D
- ^! K% Q' x: ~8 e# K; l
# ~4 F3 ?, a5 S) x+ ~. \* G$ |3 p8 H7 d) q- `4 P+ @- q
还有就是两个输入输出函数:
4 D% `" F2 c( f. o+ I6 pvoid output_sample(Int32 out_data); k' A2 |5 Q9 C2 n
{
7 i/ f9 Q: D4 M  Q- N+ F9 Q! `  AIC31_data.uint = out_data;  
2 U& y; P) u, v- i" C. c8 l  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# T; w7 Z4 ?9 n! {% h3 I( Z}1 a. K. W$ P, I( S- V) [8 C

* y, d* {2 \# i1 `* E: q) T' QInt32 input_sample(void)
2 N0 {* i; H. N- D/ w{  
( ]% ~; F$ ~2 z2 ~- `  AIC31_data.uint = MCASP1_RBUF0_32BIT;: R3 H2 N% x! i  P2 M7 h: n4 ^" \
  return (AIC31_data.uint);- t. [1 R! b' Q1 r/ }; s
}
% J! p2 W! D2 M0 t/ U3 T
  `# {/ N5 B$ J
分享到:  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, 2025-10-14 01:47 , Processed in 0.039098 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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