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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 y6 W8 f+ a. O" z8 `5 y$ q
main文件:; W9 O; h; L) C1 A* {4 p7 v
interrupt void interrupt4(void)  0 l# r+ u. L' L
{& q5 G, v) g$ c
  Uint32 sample;
) L  @! n3 X( ?! Q/ D+ a" n
$ x3 I3 `4 @$ h6 f9 `: U- P( V, D  sample = input_sample(); // read L + R samples from ADC: k, }0 \! z, w7 h1 s, [
  output_sample(sample);   // write L + R samples to DAC
" _* w# k3 B( x7 ^  return;+ T$ T% @" l- E+ B4 ~
}- i8 v. S7 e: X: F- E" g, V7 L. |/ O

$ ^# b8 ?* I4 O9 @$ H4 c; T1 Vint main( void )4 q  R$ X$ s. y7 S7 ?6 s9 I% R
{
/ ^/ w, }, D0 X! u" N9 @( E; Y6 c9 r. r. b: d7 k3 o& e
    /* Initialize BSL */: X5 q% ~5 Y; E' X" W6 s, ]& h* B0 k5 Y1 w
    EVMC6747_init( );7 }8 M% j' m/ r; ~& T9 i7 V0 C- w
        /* Call evmc6747_intr function */1 Z; _* l" ~1 T( j; [! g! T
    aic3106_init( );" M! f) B* s; H4 g5 h. t9 p! o# {5 f: g
        while(1);" e8 m7 E' Z  R) L$ s
}
+ b, L! _. O, Y7 }* z2 t4 W3 P
  e5 e* S& c+ U2 U4 E; j' ^+ Y2 D- K: @( S0 X1 {: c* `) p4 A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 n4 V, R# p' H  r0 ^/* Initialize MCASP1 */
' m2 ~% X4 ^7 `3 b    mcasp = &MCASP_MODULE_1;
, q; K1 l% g1 Y. @; T; F    mcasp->regs->GBLCTL  = 0;       // Reset; z/ C0 a# _: N# E: U
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 y+ P0 G: `' E% f' D
    mcasp->regs->XGBLCTL = 0;       // Reset TX) J) |* v8 e1 u; v6 D0 G
    mcasp->regs->PWRDEMU = 1;       // Free-running
# S$ O  w0 I! M: T' F5 g0 {- ^4 X   // configure McASP0 receive registers
* l. }6 I' o$ m3 @6 E- I/ }    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 v( P: i" F' }9 _$ E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 o, n: X: l: d; G" Z1 f1 a" p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! T/ a; a' L( P+ D: j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; v/ d. N* _6 N0 n0 m0 k    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 \. d( [, I4 W( n) k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 z4 p; o  Y6 S! m# U5 L/ h* ^
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& S" y4 q0 z0 e. N) G' `; @
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, _3 w; }9 V% r' ?: n! B  b0 {* u) B2 ^3 S. G) _3 Y# @; X5 o1 i
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& L) c; }* I6 I! ?$ R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- \+ f% c% `" z& i3 Q5 O+ p7 h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ E, ^+ ^5 B  i! [( D9 X
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, S: r! i1 m  j& e$ ~* E
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ ?9 Z7 [/ [7 _3 ?4 i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: J: C* F. w: f; Z4 b! }' e    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 k, ?: d% q( o: q. D3 s$ p    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 p& }+ @5 g2 f! |. n
4 k0 u* a* @% s& a2 v' V9 }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 i) R  m( T; u: @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 [9 ]5 t& i& {    mcasp->regs->PFUNC      = 0;          // All MCASPs5 O4 a  N% _2 [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# H" j; x; \! l7 H) s" e7 f2 v+ Q9 y8 D
7 o7 b3 `: n, R
    mcasp->regs->DITCTL     = 0x00000000; // Not used
- I! G2 S# u7 g2 ]4 {5 t. M" N    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* b  e0 I4 ]7 c    mcasp->regs->AMUTE      = 0x00000000; // Not used7 L* X/ D' r0 b5 o
) g4 L' l& A- r" _0 r: j1 V
/* Starting sections of the McASP*/
% [' S$ i6 z4 _' Q4 b7 c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* ^% @( C+ g* {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. Z6 U8 F! f1 X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! ]" d  P  c& z7 s  {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, ~* z1 u, ^) e8 {  {$ u) Y' n$ y/ ?! O) t; `1 N: _0 A" w+ r
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& n3 M' X+ N5 M! L! O& D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. y7 }9 F5 \3 w0 V4 I+ l    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  q$ B/ V1 U3 P, z9 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; N9 t' l' f1 s0 k
( F  O5 o8 {, U' m+ W    mcasp->regs->XSTAT = 0x0000ffff;
, }3 X' i/ t" L/ j0 M1 i5 E    mcasp->regs->RSTAT = 0x0000ffff; 1 ?- W/ ~1 K3 q: m9 F$ Z' D+ Q

( s1 B: m6 K7 j$ k* j1 ]2 o) Y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 y/ P" z- t# d: i# Z* n* b, W- U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 ?! L2 @1 ~. v6 S" Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% V* \/ Q7 l7 {* O- _# W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! U$ M2 X* S6 I$ n% k  v# h
+ t/ h; t# W* {2 c" C! r& z8 S+ x! ^
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 `& K3 a5 |; E8 M! V0 Q    mcasp->regs->XBUF5 = 0;- x# J& j+ ~" y, x. i: h
    mcasp->regs->RBUF0 = 0;
9 y8 z2 S  F9 M# @& H  k9 i, _; v
8 g0 G) F4 {) n+ J4 Z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 }9 B* B$ h. D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( e( O5 m( O7 Q( D* x/ X4 g$ u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: G3 O( \' \$ [1 R, f; G: v  a8 i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, P8 d% e1 @& V

2 x/ u" \$ W" P4 @* w( l* l2 k1 q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % z0 @' f" W8 r, g2 y3 @% z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# w5 L: S: a2 i) {7 z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ n" h3 `. X4 t5 A0 n! c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 C: t* v8 k  u' I

* U" t7 M! }  Y; J6 u) l2 ?3 R* |+ z    CSR = 0x0000;
( c, V; {% L, [) p! `    INTC_INTMUX1 = 0x3d;- x2 E4 P+ L8 h! Y: p9 f
    ISTP = (unsigned int)vectors;/ R* u7 o- v$ {2 E2 g1 d6 m3 G( V
    ICR = 0xFFF0;  3 x" o( N" H3 A- |( v! ^* u1 ?7 g& R
    IER |= 0x12;  
' x# d/ L! L$ p    CSR |= 0x01;  - U" s0 I% M% R7 C
! B2 I) e/ w$ T* k6 z7 \* i, H
- q5 i4 H$ v, m) O5 }

+ h0 `) s7 E. d* s  _$ S* ]1 f还有就是两个输入输出函数:% P+ P4 r( _/ U+ z4 q. T! w
void output_sample(Int32 out_data)
" o' T. B% K9 S6 S3 Z{
" i/ B& b1 p" K  AIC31_data.uint = out_data;  ' a; q  U& [& N: q9 @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 Y) m9 [% a2 w( X. R}
3 Z; z) H( m2 q& |7 `
1 j+ b: Q: X' w! ]Int32 input_sample(void)
- g2 q* W( o7 F- j{  
# z2 E$ `0 ]& }; c8 [* V' Q  AIC31_data.uint = MCASP1_RBUF0_32BIT;" m2 K) L, _& T8 i  Z! D
  return (AIC31_data.uint);! v$ E" X' X% q3 Z6 j6 F# F1 c
}
  m7 i( L* n+ c+ e; N& w( \
' q3 g3 l0 b. [
分享到:  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-12-24 19:42 , Processed in 0.037101 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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