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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" k+ ^( Y! }. v* c
main文件:
9 A2 l9 _" {" A1 B8 zinterrupt void interrupt4(void)  
# C8 a- {: ?+ y1 m: C0 w4 f3 B{; l# b2 \" [! V8 M7 _
  Uint32 sample;
- X4 I' w8 s) t' `9 i: Q5 ~( F7 g, |0 f7 ~& f( T4 s
  sample = input_sample(); // read L + R samples from ADC/ z2 s7 M( Y; L9 G! m8 F
  output_sample(sample);   // write L + R samples to DAC 2 D( M: q" _) t4 D. _9 V
  return;
% G. A% ?% M% e6 s}
) ?. H8 f# a9 H, Q# ^2 G
$ w% L+ y" o* B8 @  mint main( void )1 E# D: o# ^. y+ a) ?: ]( a" k( Q
{) z& B$ n3 N: a( o6 f) N0 G; q. t! L

. Z% m) l* ^0 G& K' c- M7 s    /* Initialize BSL */
! ~6 x# z9 r# j! {. N4 T    EVMC6747_init( );. x' y' }& ~! n& N( ?
        /* Call evmc6747_intr function *// L; S. w6 E( `0 ]5 {
    aic3106_init( );' {, Y3 f% K* I+ u+ b) r
        while(1);
* M& T9 z$ C  e, p* i" p$ X}. g0 w$ R( ~8 A! ^# ~. Q" J

2 M& p) O" p4 J. C( v+ L- c0 x6 i6 [0 o6 r, e4 ]/ l2 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 O) c1 n! |; @: k* ]1 g& j
/* Initialize MCASP1 */  {/ C# N) _9 b" d6 s
    mcasp = &MCASP_MODULE_1;
2 s" B' X5 E, w; m- Q' H    mcasp->regs->GBLCTL  = 0;       // Reset
' A* H$ r) V/ T  q' I! P" f, i/ |    mcasp->regs->RGBLCTL = 0;       // Reset RX
& T9 `+ M* _% J    mcasp->regs->XGBLCTL = 0;       // Reset TX" l8 W; B/ ^2 c: h) M& M( a
    mcasp->regs->PWRDEMU = 1;       // Free-running
& t7 O" W7 i- ]' u   // configure McASP0 receive registers5 n$ u: g1 P* S4 G/ l1 L, i, h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& i2 F7 h& b( @& O5 I
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% e; M8 _6 e. R- W, d$ d: A    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word" `: U0 U. A- s( }4 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& p% G) }7 U' ^1 y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 w. j9 k; S7 d! N% ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) @7 T9 Y; z5 A; r0 o$ m" s5 S    mcasp->regs->RINTCTL    = 0x00000000; // Not used% o6 J) ?, z, w/ O' U- Y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: t/ q, \/ K, e. \* T" q

0 L$ ?9 u( u; }8 q0 W* o1 ]  ]8 |6 i    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 e' R( G* B: r" R6 E, `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 [, B( T$ M! {( G) [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% c" M) K. b, c* K) @6 Z( j
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# x" f- N; h% Q# h" W0 p: Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% i" N( W9 |' z, F/ Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 U  t7 @+ [, t7 A
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" D* f6 B, Z$ v( r/ \% N1 n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ T# F. e! Y, g9 Q0 |

  |# j: o: o+ v1 f( ?    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ _7 W# y8 c. j# c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. S( s/ M* C$ Z4 J' B2 P( X
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, |- E7 E$ W+ ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 V# A. Z; [1 E7 Y2 G7 b1 ]) P" o& O/ L8 g
    mcasp->regs->DITCTL     = 0x00000000; // Not used; `/ h  {# O+ M0 M" x* N- Q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, G* M- a1 M6 V/ I' d  `" X    mcasp->regs->AMUTE      = 0x00000000; // Not used! _( ~- `% G2 }1 q1 J- y( v5 c: R8 B
- X7 r! P+ h2 Y. G! M- C
/* Starting sections of the McASP*/3 Q% M3 O+ R9 u5 V$ s+ |9 p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + T7 ?( M# J! U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    E' X& I4 _' R" w6 h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( I6 J' s! R. c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 i, v: v7 E, q% M

. c2 J8 u  |* ?6 D7 E9 r) ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( P" s' @; p/ M* b# S9 x/ U; G  l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ c' ^/ r! U( v8 S% V- X: [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ h$ }, l' l, h* F4 B4 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' `6 T! K2 k/ e8 Y& ]

$ |6 q2 [( q. U. ]    mcasp->regs->XSTAT = 0x0000ffff; * I* j0 Z! r/ g  O+ ^7 V/ j( |
    mcasp->regs->RSTAT = 0x0000ffff; ' ^2 ?) c, S  |- Y* y
$ A+ \9 }% Y+ ^0 o; H/ x
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; U( `, G/ y# ?; G7 Q$ F  H) M0 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! ~: M) v: v) ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 I6 L) Z  p- g! h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: Z9 C2 @7 G( P% [; Z9 w3 x8 F# A3 ?3 b* Q% P" M( E- o7 S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) u- G/ |! @9 d2 m2 u; l    mcasp->regs->XBUF5 = 0;
+ d1 ]3 t' C+ v# l' q- t    mcasp->regs->RBUF0 = 0;
2 q! @7 z7 v0 d  e! I; r
7 n2 }: \8 A2 G  m5 o    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& Q& v9 X* l+ J3 R% m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! h6 P9 V# M4 x2 e8 a8 S
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 F: B5 X" ~5 _# E" L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ a- B! H9 o7 {) c) f. C, t

: t& y" @/ _7 t& D; u    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % V) t  C7 {/ @4 c- F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 v) ]+ u  c& j9 [0 x* I- h& w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 v, p* _4 V3 c1 E: h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 E, r! G3 w6 U+ ~0 @* V. a+ [

  N6 ^- c! d: Z% D9 l, {    CSR = 0x0000;; T- c; z; {- j" v; M3 g9 Q
    INTC_INTMUX1 = 0x3d;, w3 @6 ~% ?, V- H: f; [& @
    ISTP = (unsigned int)vectors;6 P" M3 m1 r; k  `& X- u$ T8 G! E& b
    ICR = 0xFFF0;  
# \7 p# p6 E5 G8 X" I+ B    IER |= 0x12;  
* i& L+ o1 q- h    CSR |= 0x01;  
8 M, w/ V% W7 D8 j8 t9 N& m: B+ n2 F. a+ F

0 b5 L. L# w4 Q& F' c- Q( A5 D
6 T+ r+ K: Y8 r% B5 {4 H: G还有就是两个输入输出函数:
) [+ ]% m" m) |. s; pvoid output_sample(Int32 out_data)
/ b, z6 Z+ ?: _" ?) {! o! l+ L{
' b) T0 F$ ~0 E2 c: }& v& S  AIC31_data.uint = out_data;  
6 P! D1 x1 O' C( N3 X- Y  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ J- t4 E( _3 ^  _+ P$ J
}) J- o" g& A0 g1 N# ]

5 I5 O+ \: q  }% [3 w  E: jInt32 input_sample(void)
: ?. T# F8 n6 V6 b7 D{  
# h0 J# u# ^! T2 _3 D  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; f$ Z" S1 W3 [( e6 t' Z9 R  return (AIC31_data.uint);; r9 H& _3 `1 L
}1 ?+ X$ x# J5 ^7 d
; X" [5 @( v! I! M, 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, 2026-2-1 00:36 , Processed in 0.040052 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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