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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 C- U% M0 r! z! S; U! M% C
main文件:5 H; h# q# I# s5 Y
interrupt void interrupt4(void)  
5 g' ]' v3 G# j  m" p/ E. {{4 Q1 g  y) D9 Z1 _
  Uint32 sample;
1 J4 T2 a+ T0 V, S/ n: L3 A) j" [7 b
  sample = input_sample(); // read L + R samples from ADC
+ [+ P1 k! l7 y, g  output_sample(sample);   // write L + R samples to DAC 9 g- Q: b" b/ U* C$ f0 i! T" _
  return;
9 `0 ~' i% F7 u$ R}
. _9 x  I& ~! p) W& y! V* ~9 I* g2 O. j
int main( void )4 H( w( f8 \7 v- F/ f$ y  Q! D
{8 v% J3 q' }/ m+ \" E8 T
( ?1 o9 x1 p; s3 D/ V  a4 A6 g% Z
    /* Initialize BSL */
% h- ?  @  i: Q" l    EVMC6747_init( );
+ I9 ~/ v* C" V. H3 J% U        /* Call evmc6747_intr function */
' Y+ S: U) x( }2 a% f  D: H2 A2 J& ^    aic3106_init( );
( k5 r- Z) i. \        while(1);
% T: B2 I1 Q" i/ b( ^6 Z. p( W}: o  C6 o! ~0 X. p! R
3 R: ]* j2 p) o( L9 @8 }0 E

( V: |) z  F, G8 D. }# Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# A9 I8 ^5 s8 {; ^7 J- v; K
/* Initialize MCASP1 */) J2 i: Z* |. U9 d
    mcasp = &MCASP_MODULE_1;
* ~9 O* o; K6 n  V9 O5 y# ~) [4 ^    mcasp->regs->GBLCTL  = 0;       // Reset4 b' C5 K1 B4 w& o: M* X9 {' j# Q. `
    mcasp->regs->RGBLCTL = 0;       // Reset RX
& J- }9 y8 q! Y, }    mcasp->regs->XGBLCTL = 0;       // Reset TX
; j0 J2 g" Z& ?- s    mcasp->regs->PWRDEMU = 1;       // Free-running
( u5 M; Z8 F9 t8 \+ X( {0 Y   // configure McASP0 receive registers& w, R$ }: l5 n& R8 B. S
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 `9 N' H6 t' c0 ?- e# u$ Y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; I- h) K7 F$ o7 m- x    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 J: ^8 E$ J3 H- o3 A
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 }; v" c/ m! q8 N# G    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 h& y; B) l. Z8 N: [. h2 J    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 }  u  f- u/ m# J7 M( _; T5 C" Y; r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 e& V/ `; Q7 D, `, _7 y; J1 l, g4 l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 S# y  l. W2 g) p: @2 B
. ^8 K1 j' i3 P' q7 \    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ ^, j1 n4 G2 X1 a5 d" \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' a+ |" a6 y- P* [" {! ~6 a8 d- l
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% \9 P* j+ e' Q5 \* R2 G    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# _: O8 l$ M  U2 {" D" h    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 A/ R3 y. [! u$ P3 o
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" K! b- n* S# Z* {9 R8 o    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, {& O" q- p3 t) M8 f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 b: T: d* r) j1 R) j  t0 r) O: h( v& i' g5 d6 o) P
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* T3 h7 c0 G1 |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) a% }- d' ~1 ~, i: M
    mcasp->regs->PFUNC      = 0;          // All MCASPs' e# o! q- J# F$ N( S+ p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; N; l7 F$ u2 g; e! m

/ v4 N) K* j# d2 c    mcasp->regs->DITCTL     = 0x00000000; // Not used% H' F. S8 y. y# h7 X7 z- I3 E
    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 ?: c  f" ]1 S8 ~/ }6 Y+ z6 A
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 {$ @4 l6 x9 [* ^: x2 N- a

" s' B) Y: l- p& d4 G% S" k( C/* Starting sections of the McASP*/
; Z. Q* c) f8 E- k9 A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- P# H0 f" l2 l( w9 ?( q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# x7 G' X0 s* P; Q: Q) d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 Q3 B, b2 Z0 j* H" z* u& ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  Q7 o$ O( g2 A. f/ m
. p, `# T# q" ?0 @+ L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 ~, ^9 |7 R2 s' |' |, s( k9 O& ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& }( h" u- F8 h; L% I: Y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % c! Z3 \; M+ k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 t$ O1 o, b. }1 W3 e. J* q

; r! w* o$ k/ ^5 s3 t' i    mcasp->regs->XSTAT = 0x0000ffff; 8 G$ b" ~# x4 w( b( U3 ]
    mcasp->regs->RSTAT = 0x0000ffff; & `) M7 ^2 \+ P7 o
& }# ^1 b  _+ s8 |1 d
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ m, }0 r% S& v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 C+ A: _; ]9 I: N6 e- s7 r$ a
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; o: p% K# N, o9 d5 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 _" h# E* K- E+ u1 h4 R, Q3 Q3 X4 b* m
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* G5 `5 x4 o0 R5 l! o) z! S6 ^    mcasp->regs->XBUF5 = 0;; C- W& k4 z8 x- n$ Q! F3 U
    mcasp->regs->RBUF0 = 0;
& o1 b" D5 L$ t3 f; B% d
5 A* d9 O7 j  r$ e% F+ k# K    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" o% }4 E5 v9 |3 q/ z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 l  O/ s) H& |/ `9 V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  P% \  R. N3 B* v1 ~, d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' I  @* N# K3 d6 e$ N6 n6 q2 _" r" M$ }& Q( d& f- E
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   U6 G8 u, d2 @' ?6 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! ~+ }* f. U: c* z9 S& C    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 E  H5 x4 l5 p8 W. ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" h& F% e) Q0 X/ G4 W5 a) Y9 N0 p% L5 f0 b; Y
    CSR = 0x0000;
- K. s9 Y: b4 A! C7 c" e    INTC_INTMUX1 = 0x3d;
3 L' r2 A- B4 |7 D# V( U    ISTP = (unsigned int)vectors;( j6 y4 w, t$ p% ?% R- e( O. ^
    ICR = 0xFFF0;  
! s7 Q& w3 o2 I8 p1 i( H5 t$ J' ]& I    IER |= 0x12;  
# F/ a1 C. X% a* O( H    CSR |= 0x01;  
# }& R& A$ i0 A8 L+ ]6 |- M. ]. |5 h% W
" B5 g: {4 z  ^& d9 \) Y# H5 A6 `8 `
3 }- [+ i. D& G% S  c7 \( p( S
5 Q; ]6 a% S  c% w还有就是两个输入输出函数:
) ]; h* G- @& b5 n7 }6 zvoid output_sample(Int32 out_data)
, u+ k3 t3 |5 _  ~$ O, C; L5 F{
; M- t! c* l+ p+ m2 |  AIC31_data.uint = out_data;  % L0 H4 j8 A% V7 x' z
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' x3 R9 G% m; x" \0 K
}
+ [- t) ~( p( ^+ q0 U' k; J7 N# Y5 f, f! k! n- F/ M$ ]
Int32 input_sample(void)
9 K- V% t: K1 X{  
) |  H3 Q4 d  C0 T2 K$ A  AIC31_data.uint = MCASP1_RBUF0_32BIT;  E; j+ G- ^3 I& d1 e; I
  return (AIC31_data.uint);5 {/ u7 }' ]. t/ L& a' U
}/ ^" ^5 q9 C# C1 E5 j% c

; P5 L( _, p9 R4 p
分享到:  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-12-31 18:50 , Processed in 0.037673 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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