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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ [0 T' D2 G/ `0 @; ~main文件:
) e2 [7 u# O* w) U: [interrupt void interrupt4(void)  1 {* t* F7 m7 A$ y8 E
{
( y/ J/ |6 M0 C  Uint32 sample;
& O% c% E$ H# x! Z. r' M5 K$ P: A, b( D& \9 W
  sample = input_sample(); // read L + R samples from ADC, D/ Q8 h4 v4 n& _: \: q
  output_sample(sample);   // write L + R samples to DAC
6 \& m- t! K) _/ y5 T: j" T3 y  return;9 v# w& g/ B8 K( a9 P$ c
}
# w$ D" n. p! l% f
; C% ]& q9 P$ R# sint main( void ), y* l" |) s  }( D
{
$ G; C- M6 ^. Q
: c0 H0 j! l: Q' W. x% t. Y1 W    /* Initialize BSL */
" G0 Y9 o  Q, M9 r2 d    EVMC6747_init( );: X/ W; d; G: _! J
        /* Call evmc6747_intr function */
1 D/ O+ L" @) @: J$ n7 H  Q    aic3106_init( );7 K6 c" h& {: v& [+ u6 [
        while(1);' {6 a- o! t* e
}
2 o8 r$ ]6 ~* o. C: K3 y7 R  {8 F( K. [! K0 q

* i2 q# K8 y; _$ raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- @$ w. S7 g5 l0 G3 g
/* Initialize MCASP1 */) M0 Y- J9 @  [* {
    mcasp = &MCASP_MODULE_1;  G0 }- V) a# w) [+ Q
    mcasp->regs->GBLCTL  = 0;       // Reset# R; e0 A5 r6 W+ z! `& l* K* S
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- h1 }; b7 y+ M/ Z/ l    mcasp->regs->XGBLCTL = 0;       // Reset TX
, b$ C% n/ k8 o$ J% s    mcasp->regs->PWRDEMU = 1;       // Free-running
2 H) N( e0 ^  C8 m' C   // configure McASP0 receive registers
4 H" |& H: q+ ~! y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 v6 q! ]9 e. J; Q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: [. Y) b2 ~" W( `    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word" I: T( G* ]( L' m5 C9 E
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% y/ U5 D* @, e; V1 ~+ @2 J    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 p2 x6 u' ?5 ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  i8 w1 D% N% M0 ?# O) V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: k- d1 u  R$ N2 l  N1 q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 x2 F) D  W. Z  A5 {
# `; y$ I: P( f$ ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( \( S. V$ \+ j" k5 Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  \+ D$ n1 q! |; {0 f5 @
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! g2 g7 o# m$ G* C# P
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 N2 r/ Z) Z+ @0 k8 G    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 P6 x, a" ^( I- l' i: _$ ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 g2 l; {8 P  o1 x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 U( c% n4 ^6 K' S
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& E! U$ t$ \& f# c) P) A5 X

1 D2 Q  {( A2 \% S- L% n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. y7 p7 x9 e, K+ m8 n    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* F' k2 F$ i: e7 x; [9 n# w    mcasp->regs->PFUNC      = 0;          // All MCASPs9 Y0 }( D! D% o! K% L, G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, B/ e4 e( t& Y2 ^' |) l7 m; u$ M$ e% V' m: g: [- T6 K: W* A# ?
    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 }( L& K, |/ Y# p    mcasp->regs->DLBCTL     = 0x00000000; // Not used- c0 _& M2 L; d- A
    mcasp->regs->AMUTE      = 0x00000000; // Not used: t, ]2 @1 w" S) N- p; M
7 E4 K9 g! ^* p
/* Starting sections of the McASP*/, G( O+ M- Q3 I8 p# J8 r- I# e
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) r; q& x) R! J4 e9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " @- W2 A% m( q; Y! i( a- D8 w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 H6 f/ S7 C/ e0 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, `- i% |- r, j, e' ]
$ k2 R/ b" K  _' Y' a& D8 J5 @3 a    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 \' d7 s  d8 e' y; i% h: \, @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 p% O8 v( r8 `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 A' z( X* K  I1 _4 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 \9 _8 g) ~4 }1 I. h
- z8 @' E- V  q  d, @- h$ T    mcasp->regs->XSTAT = 0x0000ffff;
2 Y* Z* G& y  W4 I8 ^& r1 r: d; \    mcasp->regs->RSTAT = 0x0000ffff; , t5 }" N% U5 E1 v# O  N# m2 H
- i8 `6 x" n3 O5 D; a$ J3 N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- O2 {' q& R" X: @6 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 u1 F: Z$ s4 a) ^; s
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . d# W) @2 O8 p% K/ R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 R" l) m5 h2 o* x
  a% c$ H/ `* r- ^8 b
    /* Write a 0, so that no underrun occurs after releasing the state machine */7 u/ `- E/ p# g, ~5 L. p' F  c
    mcasp->regs->XBUF5 = 0;
- Q0 z4 e, b. L& k( Q8 T; C  f& y; C$ ]    mcasp->regs->RBUF0 = 0;6 d3 _! e0 _! L
' H" Q  x) |- X5 t$ s2 E
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) e$ n$ g8 c5 y9 j$ y" I; Q& c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ ?4 [' a, |1 `+ x7 Z6 _3 Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # P$ `, E. T5 ^& c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 ?/ t) [$ M5 l# ?
6 G4 v3 Y- E, C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* ?) P# c8 N, g4 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 n: V( T3 d5 T9 L- I9 m+ o3 z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) n5 l$ N) w. Y% K( @0 S7 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 s) N$ S& j1 f# r2 g( y0 |" V! \
    CSR = 0x0000;
4 ~0 s  j* P+ x    INTC_INTMUX1 = 0x3d;
1 `: C; a  u- R- a* p$ E5 V    ISTP = (unsigned int)vectors;
; m9 M  k3 i/ U! {& i# g2 I    ICR = 0xFFF0;  
( o" ~4 F0 _$ F) C4 B8 w    IER |= 0x12;  4 B% |4 N: C$ m& T
    CSR |= 0x01;  
9 ~& a, B/ Q4 g7 d5 `1 m3 e
* \; v& A0 [% ?6 K
9 C; c4 S4 E5 r8 h
; ^2 j0 N) p1 M1 l- `/ s2 ?& e! x还有就是两个输入输出函数:
- y' r" _2 y$ i* s# Q" ], r8 Ivoid output_sample(Int32 out_data)0 Y7 J) G% _. M. A
{
0 q* O/ A+ b. p' ~1 x& E  AIC31_data.uint = out_data;  # U$ I# Z: @2 D8 I
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. b3 d. ]7 R6 _* V  i8 n: ]}
! o2 w7 [) e5 j+ V, ?1 L# x7 V$ M2 [! n( j5 U* m& d
Int32 input_sample(void)
- Q' o: \! z, l! R0 K1 E{  ( ~( _! i+ e; M* e
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 M7 a- e5 ?" j2 [; W' v' h5 v  return (AIC31_data.uint);
* ?9 M# c- o1 K2 T9 b}
9 [9 }( B# T0 U& @" Z) v! v
7 p* v! f. K' R% h: s  E2 m; A- 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, 2026-1-20 06:10 , Processed in 0.040362 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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