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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ L0 y8 q# k3 N& s* `/ p; Amain文件:
/ x; `3 O2 T" s, Q  Uinterrupt void interrupt4(void)  # S0 E( C  @) k& i" b
{: a7 G3 L0 v8 f% E
  Uint32 sample;5 U3 B) y5 v  ^: |- E1 t0 M  K, _: D; R0 y
- j' \( s, Y+ z/ r( W" }
  sample = input_sample(); // read L + R samples from ADC
$ e7 d- a0 k; q: p7 ]/ d  output_sample(sample);   // write L + R samples to DAC
5 l1 p) T. H0 b, l- U: h  return;
6 G8 `0 \3 e3 k) H  f}
5 w- Z% G, T( W+ i: z, g6 k
( v, n  B% D# F5 q; a% K" n$ M) _2 mint main( void )+ Z6 u( Y/ ?. Z: J0 A# m9 P2 g
{( H/ [1 ~; l' K- Q6 m

! K2 b" _/ \) ]: d1 b* h4 J    /* Initialize BSL */! T" A. J2 B% |' V
    EVMC6747_init( );- Q! c: P& }( h) G6 y
        /* Call evmc6747_intr function */" ]& Z2 w5 {7 M+ D6 u$ J3 [9 ]% \
    aic3106_init( );
* h: b1 p" S8 D& G# X* J        while(1);& U" q; \. f; p. w
}; t2 k6 X$ Z3 V. i

; }/ G& m. P- L4 t7 v% E: Y( d, `& E, s$ b9 F/ E% d
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( P( |# m' `' ~. j. y( i  C8 l
/* Initialize MCASP1 */
; y% H4 H( r% r2 j    mcasp = &MCASP_MODULE_1;
" {4 U+ b: j+ S+ Z: U$ l    mcasp->regs->GBLCTL  = 0;       // Reset
" A/ M# p8 F! E/ Y5 W; ]6 u, M2 f: @    mcasp->regs->RGBLCTL = 0;       // Reset RX6 t) ]" T0 c: c# [
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  v8 E- X; {. c. f' V9 r# W" I    mcasp->regs->PWRDEMU = 1;       // Free-running) j7 z5 l, _: X& ^# I9 n
   // configure McASP0 receive registers( b  Z; h8 w1 |- n- o$ `" `+ v/ p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% j# y4 |+ N  n* g% w% `  J7 t    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, S& B* r, F/ |& ^) z- p0 m
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% s: ]/ `( N: W- U; |$ s  j$ d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). T& U1 o: `6 i' F6 e( D% \& S, Q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) |3 C. h) M9 I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  j9 A, R1 E: v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 t) v5 J  y- L9 X
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* D+ ?$ [# z! D% ~0 D( J6 z( T6 i+ e& z7 c" a, b
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 _4 ^# p$ q6 _: s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; w4 x9 y& n6 ]2 w
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' y$ D+ c# ^% c& O1 h
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: Y4 ~0 W/ d: S! G# o    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, i( H7 E' q& F6 \: q6 `    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! ~- p0 H; u% A' R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& [: i2 x+ B% _& {: A2 _4 k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 w. w  s2 d% u% x, w8 ~
( h# y+ X) m. ?6 o8 n0 @/ t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 c! @. B, W( A: T+ K* C' q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  M: \- h8 h; @* V    mcasp->regs->PFUNC      = 0;          // All MCASPs* @/ e7 h4 n( a" {7 U7 ]+ V
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: }% d1 b' v- \, V$ |& N" w1 t
1 z5 F1 ~$ t, |8 r4 v/ N0 S0 S
    mcasp->regs->DITCTL     = 0x00000000; // Not used  o' s6 b/ v+ m
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& W- e) \" ]5 G; K$ o* T' e
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 v6 U& V$ u  I8 v2 h% ?$ L
4 }$ g8 R; e+ Z4 V
/* Starting sections of the McASP*/# }% e/ i+ C* \8 s9 t; L+ k7 h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + C7 r* N& c; Q% L6 T4 K4 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 E# _! \0 }8 ?, L7 H$ g
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ @+ p/ S+ F( D8 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& h- s+ q8 F  v7 d1 {
" v' P! H9 \; V! |3 r( |( V2 V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ j, C# ?4 o( z  U' @3 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) e* T7 M* R) s! F3 r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - I# H5 D* b) t& b" G+ X! i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. J  o! }$ V2 P% H7 t* N5 A6 S" m4 \( M- p4 R/ h) v1 e8 [6 S
    mcasp->regs->XSTAT = 0x0000ffff;
" R7 S  h- A: H# q* D9 b4 P    mcasp->regs->RSTAT = 0x0000ffff; - I4 q3 j3 |7 d) `. }0 i3 W

6 h# F6 A- j9 [% w6 z% Q$ T    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* M5 N1 J# O9 g! t2 x) R( r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. `& |$ L0 R3 e2 w8 _2 A# J# [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , F1 X/ b9 q2 B( ^0 I% L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# k( o6 G* d; \2 d1 n6 C4 v5 C8 T% N% q; @" L& ]" a5 M
    /* Write a 0, so that no underrun occurs after releasing the state machine */* l2 q" n& d. \; K" m7 \9 v# H
    mcasp->regs->XBUF5 = 0;
4 Z8 ~; i+ R8 }( S6 _    mcasp->regs->RBUF0 = 0;6 }# r/ I7 [$ l) e, h
* k: ~! l* s' ^" P. F
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 e: q. }. f+ \+ a8 r5 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& u1 E2 u8 c2 Q4 L/ d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 s2 F9 ~* l/ j- ^/ N8 f5 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 A! V4 N% ~, |) x) K
: ~- `: _& R/ y! t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 H8 ]0 `+ l! d* ?! R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 t5 g6 X, w2 v6 i+ N& O
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; [2 @7 |% j/ t1 l! y% U1 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ B# ?4 S3 }" Y# Q) H* h+ O: |& V

) w( u, y3 _' W6 J+ v0 p% M    CSR = 0x0000;2 B4 g/ L6 z5 W8 T# g8 E  Y: ~$ ^+ A
    INTC_INTMUX1 = 0x3d;
  e" Q* }1 ~5 i    ISTP = (unsigned int)vectors;
$ b8 f. F. O0 l* ?    ICR = 0xFFF0;  9 K& w8 h7 E8 |6 e8 u
    IER |= 0x12;  9 X7 i+ t' ?8 t6 s* ^2 x0 J
    CSR |= 0x01;  
2 P  X$ s4 M9 v  F8 Y( g2 v/ l% Z( L) A  t
0 R: a- |. O/ F9 Y
6 u1 z7 V+ N! Z2 ]
还有就是两个输入输出函数:
2 ^5 t3 o9 h' y1 uvoid output_sample(Int32 out_data)* |' Y( L* h; z( I9 K
{
+ z) E9 Y4 r3 d# _9 z5 }  W$ A0 p  AIC31_data.uint = out_data;  6 u3 H+ e  v9 o8 d7 D. E
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" F: N/ I  _/ v& ~1 \; m; ]}9 ]$ p* E" I6 g1 t

% O# ~, {! K* o6 [: I3 b$ H9 G7 nInt32 input_sample(void)
% Z' e% d5 E- p, U: Q6 J{  7 ]. h& R5 L7 M% r6 u8 _- U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# c$ T8 c$ \0 p* z  return (AIC31_data.uint);: d2 k3 z9 O  K& L
}2 t/ q% E) g4 {# A5 F1 l8 O5 l

( i/ Q" W" ]# d+ u7 J9 R
分享到:  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-26 07:16 , Processed in 0.048892 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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