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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 T6 x* \( M+ Y) j! {
main文件:  p% }2 n2 l9 m) Z5 M5 F) g
interrupt void interrupt4(void)  
/ v& r, R0 m; x: b4 t/ s9 q{
9 W* d7 b% K( T  Uint32 sample;
  `; O7 s* P4 A, _
9 d' O9 c# b( m8 S2 ~3 M  sample = input_sample(); // read L + R samples from ADC
3 }# @* M* P$ r7 h* g  output_sample(sample);   // write L + R samples to DAC 3 B" a2 t/ Z- ^# w( r* f
  return;
5 _5 S8 f3 u; X5 x. H5 ^+ {# D}
+ ^& x* R* O* j/ a; B( c( {3 i
5 a! X2 h  J( n0 P4 x4 hint main( void )- j* e; S5 L+ Q# w5 }3 a
{
, N. i0 t3 I  t, `# o/ @# \
$ L% k( V$ ?+ `  H    /* Initialize BSL */" X# I) A+ t  q; B6 z& m; u7 E
    EVMC6747_init( );
$ \" G4 p+ k9 n3 M! W        /* Call evmc6747_intr function */
% j* C5 h2 i* a. y8 e    aic3106_init( );+ \7 T9 `" v2 r6 Q0 D  W
        while(1);! _! x0 l, b# v) ^( _* c
}0 a. @: B. K  L6 _1 v+ D

( o" n9 B' F. N" V+ h1 z; s( r0 @0 W- T) V" I* o: p) [( X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 g$ V  F+ w! L6 s! B/ ?
/* Initialize MCASP1 */4 \1 i: d$ h$ ~* y) m" _6 W
    mcasp = &MCASP_MODULE_1;. m! l( V/ E" U0 @9 i" X* d5 u: Y
    mcasp->regs->GBLCTL  = 0;       // Reset# m" B3 q/ d/ i& i* L5 J' ?$ u
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 c& z* j4 M( o# m8 T9 Z- y
    mcasp->regs->XGBLCTL = 0;       // Reset TX  c  n6 v1 n% i. p9 o: _
    mcasp->regs->PWRDEMU = 1;       // Free-running
- a' s, H3 y9 q1 g  ]8 E2 {8 @   // configure McASP0 receive registers
6 s7 P) C6 b: @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* v0 @# r! N% z+ c$ M& @    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" K0 K1 m. r1 U& v4 f' k; m! w    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! I1 |. I9 {# m! n1 k! C4 O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 g8 r) P2 e8 Y/ _0 ~+ h1 _4 Z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% r) s: T1 C! D8 U% N; ]
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; o# ?# d5 O! b, j    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ V4 t; \2 e5 L5 V    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; r! Z/ D' b& S9 a# b3 F

% W4 G7 `/ E4 p/ \- \7 b7 [$ w$ j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 S% x% N6 J4 |3 W) V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! S2 H; Z! n( j    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( f- v- o) o/ M) _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' b0 u& t* h) h0 m7 a  A2 U2 l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 O* x2 x; j, N: e7 J- M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& W* i4 H6 Y; R/ t6 j' G6 p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) {- m, u" a' U8 x( s; z# a" B' e6 ~    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ d+ {! c. O% d

) P' J% y7 H  Y: Y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- `; m# ^( Z% {8 ]. N: W5 D# r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ ~' V: y8 ^( R
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ i5 }  e2 a  ?3 `    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  x4 O  [$ b' j' `2 H  `2 C5 h# q! _  P! V' C5 ^  v
    mcasp->regs->DITCTL     = 0x00000000; // Not used! b8 `6 G! Q) u7 A: U
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' B' P: U' S5 d% H& |  k9 D$ x
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 _: b* e0 J0 I& K6 G
7 `0 ~) P. S8 \/ R  x3 F
/* Starting sections of the McASP*/
7 Y: A" q) t7 f" `8 E; H    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 i, N6 B/ u8 g, }; B) I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ W" P$ r& s, Q' L2 I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % g, A, C6 A  ?9 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" _' x9 O) E$ C/ E' c+ h) S% s
7 x( e& \  t( V- z( F6 s
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 V' f4 Z6 I0 L. H; E. c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' W8 Y; q1 F" X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& ^* ~# f4 t; {4 z, X+ ]( Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ j* {$ W% E- |3 j( @1 H' V! u0 d
" K  R  Y8 ?1 _% V8 j9 J0 s3 n. }. b0 X
    mcasp->regs->XSTAT = 0x0000ffff;   u; Z4 e" c- L! t) U" F
    mcasp->regs->RSTAT = 0x0000ffff;
% f# ~2 o1 j' i$ d, s5 n0 E$ w* s. q" B$ G7 K
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- k! z2 s( F- e* y8 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 i0 y- ]* C9 X2 D& A! W. T6 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( H3 U1 e6 i: e3 N: ]4 ?2 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" {  v# v! K" |' d( {- T
1 }9 D, M  f$ T! l9 F
    /* Write a 0, so that no underrun occurs after releasing the state machine *// c5 I' e, x7 ^# r* c7 [, w
    mcasp->regs->XBUF5 = 0;
5 U( |9 K3 ]4 d, U) ?- Q5 ?    mcasp->regs->RBUF0 = 0;2 Z& d8 _9 v6 N. C) g+ @, Y/ n, G
4 w9 D; T1 O& @. C6 T( |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% e; n/ I. L/ {0 G0 ?* |0 V1 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 m# j, n1 j2 j3 G3 v4 X+ E2 v
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 ?) {( C+ s1 T3 s* F7 o  z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* [! @  [, q6 ]; Q, @1 @

' ?- z  A& \, f, Q+ t# q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 ]1 [3 f8 A( t+ x. o& C3 r6 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 E1 f. y' p- B% {# u8 M
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) O$ r; R9 @# s* Q& z9 d; _& j$ {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 n  A; O$ y0 h5 S, d- c! C
3 ?) B# w- I1 J! e
    CSR = 0x0000;# G/ ~/ F* e' Q
    INTC_INTMUX1 = 0x3d;
. f7 A4 q6 O6 Z% ?8 ^    ISTP = (unsigned int)vectors;1 y5 Y! f. k8 A" z) d
    ICR = 0xFFF0;  
/ E/ W% \# Z& |' p5 j. i    IER |= 0x12;  4 M, F7 L8 r6 `$ j( e- z6 B
    CSR |= 0x01;  
  a& L8 t+ W+ K3 C% P
4 V  I3 J6 [" [) e% T2 |0 [' A) a# n# x

7 r/ v3 m2 `  ~! A# X: \$ P还有就是两个输入输出函数:
) W7 D4 U6 S6 Y& I0 \6 \6 Xvoid output_sample(Int32 out_data)
1 T: o! ?" g& J9 a4 h{  r/ u9 h# J  G
  AIC31_data.uint = out_data;  
4 n. d5 }9 R1 L* @7 F/ a) }6 I  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ K. [& H5 b+ M
}
  }4 e& q; _1 ~& G" ~: k5 T
  b/ R! g* Q; FInt32 input_sample(void)# `, _8 {$ v) S! Z7 Q6 o4 @
{    U5 ?- y! C" T  C
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 e* j% j' w0 j' Z7 C3 t5 R  return (AIC31_data.uint);4 y, M! m9 x9 M4 ~
}  n& o( h( o0 l' v' J3 t
3 R5 i7 l8 D! u
分享到:  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-3-21 09:05 , Processed in 0.041030 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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