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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# t/ h; I7 [  q# t! R5 cmain文件:6 h9 C' w4 K1 m0 U
interrupt void interrupt4(void)  3 c4 M* Z& B- q; L+ o1 Q: A7 s
{. q: B" O2 A& F# _
  Uint32 sample;
" \2 D4 n3 f  G! M, X
5 C3 e; D1 H9 d  sample = input_sample(); // read L + R samples from ADC
! o; Q. U; t' j( k8 j. G9 A  output_sample(sample);   // write L + R samples to DAC + X% D" T/ b% v# h/ d$ Q
  return;; d/ b% `, i1 s  p0 |4 @
}
  G  ?; \) O9 z, S1 D" S
' F2 J0 l. x+ L* \5 E: {int main( void )
& K8 x2 k5 W3 ?$ _{# X' }' S0 a) l4 u0 o
# `# a8 |4 W/ `+ V
    /* Initialize BSL */
  y3 I* W5 s# `5 a8 k1 ?& |    EVMC6747_init( );
. v0 I4 f- n  S+ R; z: i        /* Call evmc6747_intr function */" l! k$ c7 d+ d# g# K: W
    aic3106_init( );& ~3 r, y4 a( u; ?
        while(1);
& k! Y: t0 B' H* ~* ?  @- X0 i/ R}2 m) x2 u7 ]- r3 x$ R
# R6 Z6 n3 R: X" @9 Y
. }. h! ~# s1 D1 F5 E6 p, M+ O+ T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" r% M3 t1 X' w' O0 U/* Initialize MCASP1 */
# H! k- A. a, w* {$ I1 j. m7 K- t    mcasp = &MCASP_MODULE_1;7 H, b" ?( D, ^0 X
    mcasp->regs->GBLCTL  = 0;       // Reset3 {. B" O1 f: r  P& D( N2 T" E
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 f- B: K" |& q    mcasp->regs->XGBLCTL = 0;       // Reset TX! S& U) S7 U' a. F3 _! V
    mcasp->regs->PWRDEMU = 1;       // Free-running
0 ~& t2 T6 w- I; }   // configure McASP0 receive registers9 a# L1 s" P" O( g0 Y1 k
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: p% p# m$ J/ s# D2 I$ Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 \" D  E, R, L1 Z  F9 w! D    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 K7 Y1 g" X* t  K4 A. J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, `. j& M: w3 E: F5 J" u8 U& J& H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ G( ~9 g$ d3 @) g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,13 S% _! F6 y; l% J
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 T" y, e1 v+ F  d" u; v. Q! _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 s! B! _1 c* z! z% W5 u
+ V* ]4 n$ S% d7 t9 {" |; i% Q% c
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ T' A+ `) U; }$ [# m, x& h" G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, {( |2 {+ Q; H8 [% c7 k( e    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 ^, @, n2 z- ^    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: l' e. @; v8 M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, [. W% O: G- X6 f7 \6 D( ~% Y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 c3 m0 }3 K3 y  G2 D1 |/ v6 C/ G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 z/ m  z1 z$ ?: V4 Y8 [
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ z' m: o% D. Z

$ t8 A# }* t* l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" Q5 W& X% U1 V$ Q" u  ?4 |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ X2 d% o$ G- c4 q! @2 j    mcasp->regs->PFUNC      = 0;          // All MCASPs
( E" d# {* ]; `% S3 ?0 q! g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: ]) j2 h3 Z9 Z% X, Z

; U5 Q2 r$ t9 D+ g, |) K8 J- z% b    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ _3 l5 S) g( T1 h9 f5 l) r2 o7 c" f    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 R; c1 Q3 O# d    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 M. o( _) L; Z7 c
: ?$ ^0 R7 B$ M$ K, T6 U; c/* Starting sections of the McASP*/
/ O; e0 O! O0 g8 k- t4 h    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 [1 i, c7 j. C9 O, B7 X1 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 S0 q8 {6 _, T( o9 j+ \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: v4 T. E" T6 K' V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 f) y, V3 K, ~! D: _4 A& G: S& T# c) b$ E
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 M$ ~9 l1 @! U0 o8 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 S. y, y! J2 N) m, S4 i3 f- Q' n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / f/ l) [7 r7 ~" P! W) t7 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 A& u' P4 J* T9 Y1 q

- L2 C7 H) ^; G9 i  w2 y    mcasp->regs->XSTAT = 0x0000ffff;
; C/ I' u- U$ x) X4 }8 Y7 W/ T& `- B    mcasp->regs->RSTAT = 0x0000ffff;
7 _' k) F; q$ o, Y, Q6 D. n8 w6 j7 ]4 x# ~  G4 J+ E2 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* Y8 w# ~, r. `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! P1 L* J: [/ U. `2 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 ^- }* w  N$ z; j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 p# Q$ n" q' ]8 a8 J; z2 y5 ?7 c# {7 A& Z
    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 r1 O1 K& A7 W/ c  m7 [% Z, b    mcasp->regs->XBUF5 = 0;
6 z. b  }7 W! X    mcasp->regs->RBUF0 = 0;" D% O( P3 @0 M8 P# I' v1 T1 _

3 |/ ?/ D; M' }+ a    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  T2 }% @# a2 _  M0 v, A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 {1 l( p( v- z9 b: w    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; h/ {& p# s, ^3 ]0 r* v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 ~4 b: k+ T" W& |9 O
( j9 V5 R+ V  g; C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( m# O/ ^% n' ~5 j. I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: S# X6 J/ I6 X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; C1 W) o  X3 K+ O8 W5 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 a4 r3 D5 O% U# m" v$ j' ]

: d8 E, P6 N4 k% D0 O2 j3 l7 g" `* i    CSR = 0x0000;2 `5 n+ @% K4 H& ?# q) c
    INTC_INTMUX1 = 0x3d;
4 T! j  E4 v$ W7 j! A    ISTP = (unsigned int)vectors;
" g% g7 Y: x* _3 d    ICR = 0xFFF0;  " D0 z# N/ b9 B9 m" k
    IER |= 0x12;    J7 R! t4 {5 T5 E+ P
    CSR |= 0x01;  
/ K1 ?! F6 V- r" \+ D& z( b3 [/ m  H! ?: F
) U! _. ^+ q' e5 g

: @/ z4 U$ w  y还有就是两个输入输出函数:
; }; \4 y- S" u% ~void output_sample(Int32 out_data)
' d& g! ?8 u, y{% o! ~9 y( K6 Y, X# m* q" e" E
  AIC31_data.uint = out_data;  3 M$ |8 t- F0 j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; k  p. _4 u1 ?% c. B6 u# Z
}
; o7 S  \" V! [% a) d7 ~: {$ a7 I1 U) t
Int32 input_sample(void)6 ^7 Y' F- x# ?1 z! {% v
{  : q+ j/ f, X% Q# S
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 |' n& ]+ @+ S) g$ C! Z  return (AIC31_data.uint);
1 P" p0 G" R5 Q# V2 N6 n}
. Z2 m! l+ i  R) _+ Z: K/ z$ q
6 H) c$ ]3 G& m" o6 W& W
分享到:  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-4-6 23:55 , Processed in 0.041663 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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