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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; r8 P" B. K7 U0 S2 Lmain文件:
6 s' w$ h3 u- x' Q5 ~interrupt void interrupt4(void)  
, h; F; b. f" n$ `- `{
' A5 c0 T( N5 Y6 j8 a8 ]. ^& k  Uint32 sample;, [6 r( [# k, x  q# }$ K

) `% {4 o) y1 u! s% c" B* ?8 |* k  sample = input_sample(); // read L + R samples from ADC
+ g, k# [9 \3 x% v& X  L  m  output_sample(sample);   // write L + R samples to DAC ) H; M7 s! e. o' D. ^% X3 P. g
  return;6 o6 R$ w3 y5 c
}
9 X) n. M; H  X2 x- x- `
; R7 R# ]  o+ l! L- kint main( void )
# c2 @* B' R% U/ |3 P3 d1 L! R% L{
; _& \7 ~) J9 D+ ^+ j! [" G/ ?
* K( y, S4 |$ l9 r, c    /* Initialize BSL */
7 P5 W+ O8 x; v* t; P    EVMC6747_init( );
0 o" i4 }5 o3 Q" y) ~5 |' v- |; {        /* Call evmc6747_intr function */# \# M$ w$ M2 {4 X: e4 X. h" d
    aic3106_init( );
! o% j( X6 |! S        while(1);; w( }6 C- w' C. K% Q! |- i& A+ h+ ]
}
  M! i3 ^7 K( v  G: Z# G8 ?1 W1 `6 A3 l! {: ]3 f4 G+ o
* U" z. O8 |: L' Z, ^, E2 A+ v
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( Y, I: `9 x- v, E3 c. y
/* Initialize MCASP1 */
* a' x, V7 d1 c: J    mcasp = &MCASP_MODULE_1;
; |( J& X& p2 v% T/ a1 G+ e    mcasp->regs->GBLCTL  = 0;       // Reset, r9 |6 N3 I& v( g+ {. @2 T
    mcasp->regs->RGBLCTL = 0;       // Reset RX' Q8 G# d1 n9 T+ w( G, U3 D
    mcasp->regs->XGBLCTL = 0;       // Reset TX% p5 l! u# f7 ?7 ?/ y- x
    mcasp->regs->PWRDEMU = 1;       // Free-running! ?  ~# _/ x; |  _
   // configure McASP0 receive registers0 T+ B: U; G& u
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( N3 V* C0 j2 v7 Q$ W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 Z& o9 W* h4 R1 ]8 w    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ t) |7 s3 Z2 ^# I: s    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 U" H# i1 |7 U/ B+ a
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): P- J# w. H2 @  z4 y! j% m
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ a) @" q) l, C; g
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 Y# D, w0 R# ?( W8 I3 }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  O5 j* ^* |% ?) g( N. X7 o* f+ _
( J3 X9 e. C) b& ~+ Y! G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ C: C' Q7 W2 e; j4 n$ W    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( t) i. \, s: c1 V( o  ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, s5 u& t4 o, e& u7 B9 A6 x    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) R$ J2 g( f7 C5 Q; y5 ]9 E
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  B; w; Z" B& R- K8 w) h
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* \; ~: b) q4 P! d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  y& B6 j+ N4 |$ c
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 x$ F6 d% |) Q$ c$ m9 _1 N! g) L* \0 C

- q0 r7 y  t: ?    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 X: L3 x9 ^( B6 L- T1 b  q! s. X    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 q9 u7 _8 X& I/ Q2 ~    mcasp->regs->PFUNC      = 0;          // All MCASPs, N2 [7 E" ~' S6 Y- M
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% u& o" t3 v8 O3 X" \6 s* M8 E

: E. w+ }# N( W$ M' R) h% h    mcasp->regs->DITCTL     = 0x00000000; // Not used2 M% P( @; ?) J2 p- k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used4 E5 b5 V- O8 f4 F
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 k5 T0 r+ P# n, V4 ^( @
" s+ |9 p) K5 ~$ A
/* Starting sections of the McASP*// W. ?8 p1 h2 W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 c5 y% k7 r+ l1 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 @4 f% D9 r4 t$ }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " X7 l3 u1 w9 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 |& X0 L  ^0 h& m+ |" U
" c4 z) E! c/ M0 O1 X" U" r% h* p
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; }3 r/ L! h2 X2 T, o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ z) m8 h6 T7 j6 h; R. p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 d2 _9 E( r: t. _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' z! c" [9 W+ t5 O- T8 ^+ u9 o8 ~. f3 q" U( ^& h
    mcasp->regs->XSTAT = 0x0000ffff; % x. _7 L  n7 ^2 s7 `  Z3 g# U
    mcasp->regs->RSTAT = 0x0000ffff; 1 v4 e) i+ Y7 w1 }; d$ @# o7 N
% y& C. ~* |0 R: P1 M, o  _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! F$ b* D' m0 {4 K% X' b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ^+ A% w" r  {. O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , y5 |. F! Y& [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: @3 q% C* e) W5 x$ @6 g7 S1 ~

5 x  }4 H0 X, _    /* Write a 0, so that no underrun occurs after releasing the state machine */8 Y- e% n. ^9 o2 {: V) E
    mcasp->regs->XBUF5 = 0;
8 D' ~& K" z3 q+ e# E0 X9 I% g    mcasp->regs->RBUF0 = 0;
% a' Q$ W: e4 P. k7 ]; }( W. p0 r; [4 ^8 b5 W, O3 c9 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 u# t" @3 ^  W+ o3 B3 b' q/ z8 H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 d1 _% F6 U" n) D7 K2 e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 _; z! Q$ F/ s) a# I5 ]1 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- y& d6 K/ E) G% [- I/ t

4 a2 N7 s7 Q& v0 r3 J    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  ^% E" j; q: L% l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 ~- X8 ~9 B" `1 `2 K# [    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! r! \$ p4 X' d# G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 a0 _! }. `4 t) V0 }5 y- Z$ f1 b. |  ^$ ?+ S+ \! j/ X9 k0 U& k' ^' ]
    CSR = 0x0000;
$ v6 z6 V) R( i9 J    INTC_INTMUX1 = 0x3d;
: E7 ]# {% \6 c3 H, |* ?- D# c( W    ISTP = (unsigned int)vectors;$ ~/ c) u9 {7 W  j/ a" T' B
    ICR = 0xFFF0;  
! [" X+ I: z, z; i    IER |= 0x12;  & H8 y5 s! P, X% k6 a0 v
    CSR |= 0x01;  % M2 w9 O9 Z$ N5 l

+ @4 Z1 \; B. |: N4 z& R, l: b0 |, c( C
7 e8 a, T/ W& v8 I5 Q9 _- e
还有就是两个输入输出函数:9 R. N+ g! B8 [) k  B
void output_sample(Int32 out_data)
0 q, D& ]4 Z+ _* [0 u' [{
% y/ B+ o, ?8 \& m  AIC31_data.uint = out_data;  
( A) K9 L. f& i" O  MCASP1_XBUF5_32BIT = AIC31_data.uint;- i5 v+ ]4 K+ c$ ?% O7 K4 C
}4 S8 ^$ W  ~) n/ U2 n, Y# ?! `

6 g' x0 F1 N2 N1 x( X4 J5 V: LInt32 input_sample(void)" Q# L* t. u0 m
{  
, T9 m6 ]% }1 j; S  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 }# E2 C. h. `3 B: _  return (AIC31_data.uint);' Q9 i: q& {! C* C4 S5 ?1 O
}
9 B$ n+ p3 f6 d! e0 j  b1 z
5 q, c+ c1 B( ?3 B% g+ X
分享到:  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-11-7 20:02 , Processed in 0.037498 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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