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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' q$ r6 p6 L. V# h6 E
main文件:
  v, J' u3 b% p& t% |4 ainterrupt void interrupt4(void)  # h, W+ [1 z4 }9 G
{( c% \" N9 l" w$ I' ^$ b
  Uint32 sample;
/ n& X$ q( Z* f- }
4 h6 w: Z5 b" Q- X+ l1 ?$ y  sample = input_sample(); // read L + R samples from ADC8 g, t9 K% e# K5 C, j
  output_sample(sample);   // write L + R samples to DAC * ?9 k2 J+ H" m: u
  return;% o, d* l0 u5 B3 {  {
}7 D* {: E0 W" B  K

2 R7 [6 E- Q2 U3 tint main( void )2 P* h7 c0 `6 C
{. z! f" V% [% z; k" @

" n3 \/ V# G! \8 g# E6 W    /* Initialize BSL */
2 |3 R$ T5 B4 U, E    EVMC6747_init( );
; y/ K, U* ^& ~        /* Call evmc6747_intr function */
; k" V7 d, H; L    aic3106_init( );6 G# G5 ?0 {! E. Q& m! S
        while(1);( m- x# U& ?6 n: v" B
}
6 z2 x! y; A7 P9 d2 _# d4 b& t( I5 b. t

7 G0 T3 i! {8 O( B. n! Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) V# \: f$ e+ x$ @9 L8 T, Q
/* Initialize MCASP1 */+ m3 t& U5 C( z1 h) H( ~) G
    mcasp = &MCASP_MODULE_1;
) l( Q# i& g* @$ C8 W5 _; J/ I* g2 g    mcasp->regs->GBLCTL  = 0;       // Reset
# B8 ~: A( R* w    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ |# B- J9 C' I. R& Q( M% x    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 i; V! L8 U* b* }) c6 t/ C    mcasp->regs->PWRDEMU = 1;       // Free-running+ y8 U. K8 {7 J$ g. h- e
   // configure McASP0 receive registers
5 h* G4 O- N( c1 S& u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  x/ p, t% W/ g; u6 A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& _0 L. d* z3 ]3 t' ~* o
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 H/ Y) y2 i4 l* q8 x
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); g4 V- e7 v: `- ]5 i, R  G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ [- y0 ?  s: o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 e8 T, {6 S& t+ M8 a, J3 S" M    mcasp->regs->RINTCTL    = 0x00000000; // Not used; `) q4 a5 F* J! o* |; _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* [# s+ M/ x+ K# C. h; i
1 r: x$ s" v- q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 D  n3 y8 a8 H+ E/ J4 q$ q; `) e    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" M1 ]% |0 }) A. z2 |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- Q9 V6 K6 D0 }* j5 e( V& C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% }9 d0 y# {+ h2 S6 c8 M! z) ~3 X# p* H    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% o% \3 P  ]& I$ l    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ U) B1 M8 h5 b
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 o8 |& ?, N: m  w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# z. f6 s; L5 _4 K; j- ^( t" J2 ~! E: a/ e; J8 G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" c) R: y$ a" e; U1 S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ a! m  a7 X! r$ B  h/ y    mcasp->regs->PFUNC      = 0;          // All MCASPs+ {- p  X5 S9 C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' z# l! J- y( F6 x' D! ?
/ G% o7 ?6 e5 G/ E; [# K+ s; V: Z    mcasp->regs->DITCTL     = 0x00000000; // Not used
! q" Q) w, }# Y9 Y: i    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 T4 A+ B& ?( C  l4 \
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ q4 Z' \& A' F2 Z; A9 T- f* M' v. O" D* e/ V% Y
/* Starting sections of the McASP*/8 H) L0 q8 \( ^' k- ]7 i
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , {: @4 v+ q' y/ X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 K5 c4 p$ S+ N& p* c/ u$ ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# F2 H8 }( q' N3 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ l: ~) b# f1 j$ F9 i/ [, l

; h" ^1 r  P' y; L9 e+ A" G) q    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 P# O; V/ J" Q: ~8 `. ?3 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: e1 n" m2 H- D1 M% v% h. F    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ N2 l# C+ F3 J1 v6 j$ p- L8 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 t" V7 T( I" V+ S8 Z- I3 y# U! J0 `; |# c
    mcasp->regs->XSTAT = 0x0000ffff; ; r; l+ {5 C. t% t
    mcasp->regs->RSTAT = 0x0000ffff;
, {# c5 C( W. B7 r6 P$ ]1 C, _# v6 _, {" s, k6 q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: X* M* o" G2 p5 w& F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. N7 g5 J# N6 l# T5 d- y! a9 A    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% b7 r9 E& V% A4 O5 `4 p1 A$ H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: R' ~6 z3 x2 F; X1 p5 v# B- A- |

8 S* |/ P$ t) ]4 u    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 ^: j+ u4 c5 j    mcasp->regs->XBUF5 = 0;
, i# A9 r$ N1 t, `: N    mcasp->regs->RBUF0 = 0;
* y4 D& J5 I  c# p3 |3 d9 E: V* B! c) X6 ]5 X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 T4 a  Z& T* \3 D- d# y) S3 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  E7 Z5 ^& e* [' \! c/ z* T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 b/ f0 |: E, b# x2 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 K" _1 b" c( h$ K0 q' U9 R$ Y, b0 b. u+ B8 c8 D1 T* m) Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / _' ?! l% f/ V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) N2 b" q- v% d- I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 P; K' G: a  I+ k% R$ R4 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 o! S% Z& @$ z/ r, a8 Q  s5 e5 q- H! U7 X! z" C: C, @2 D' x
    CSR = 0x0000;: g  J" B! H  t
    INTC_INTMUX1 = 0x3d;
' O1 X" g1 u7 J' V/ z' T7 s) _. L8 L    ISTP = (unsigned int)vectors;
( m* k  L) t2 h5 e3 D; T- J( ^9 h    ICR = 0xFFF0;  * m, y: L( O' u& \
    IER |= 0x12;  - P# q6 y+ [5 ?( s- _8 d" V1 G9 }/ Z
    CSR |= 0x01;  $ e. M* ]6 U2 m
% j: O' z2 p, @$ [% Q# O

4 ]9 O! L  V+ g% B  h
7 \) V. C" ?9 g: X: s还有就是两个输入输出函数:
# a" P3 E8 E2 B' a/ r1 u7 r  Yvoid output_sample(Int32 out_data)
/ `6 n# z4 O+ D{8 V$ b1 R. K% H2 t0 j+ j
  AIC31_data.uint = out_data;  - F0 H1 Q0 D0 K4 D
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! F, k/ q; l4 u}
" x) Z2 H1 \6 S/ i
7 C8 T0 w' V( QInt32 input_sample(void)
' Z/ [/ A$ m8 |% @, U/ u{  , S( |" Z6 `1 ^# b( B8 Z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;% F0 e& T5 a% I7 S$ L
  return (AIC31_data.uint);/ J! [# e6 W: i4 \& [8 C
}( n; g8 o3 z& j" @

5 l" k9 y$ F+ Z0 v5 E. ?- m
分享到:  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-25 20:48 , Processed in 0.047429 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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