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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: w' k# \( Q4 _& A
main文件:
& u* k2 w. c# Z+ x# b/ U6 k$ vinterrupt void interrupt4(void)  
) `9 ?; `' h$ j( V: `{
; p% k- c" F9 ]  z: @% V8 h  Uint32 sample;/ P. i  u9 l: @; l9 i
2 f  A$ V  I$ k3 ~* Z6 \5 j4 M: P
  sample = input_sample(); // read L + R samples from ADC
, Q( \$ U$ K* X7 z  z  output_sample(sample);   // write L + R samples to DAC ! C3 T2 I& J* c6 T
  return;% q  ]; F1 h- \& Y9 n' ?
}: j* j, A: T" L8 Z

- J. U9 Y! }* M; }9 `int main( void )
& @" x. e& y2 z: O{5 J1 ^3 G) E1 C2 |+ C) e. ^
$ k9 A0 C, [& c$ r* R" j0 `
    /* Initialize BSL */. C# v0 ~+ J2 W6 J' j
    EVMC6747_init( );( F+ c: Y% y; G; \
        /* Call evmc6747_intr function */
9 a( J& f8 p1 Z* U    aic3106_init( );
" H3 \  ^# V8 u+ h+ b. C/ L        while(1);( V2 p3 `; Q4 x. t
}
# ]: ], Z$ {. O7 G( b1 }$ M9 |$ x2 j, h; d8 d+ V! k
1 P0 j; ]" h; v7 @8 }; w) e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 _5 T9 \* X3 j2 t( v
/* Initialize MCASP1 */" r) Q0 W4 g! _( g# f: b
    mcasp = &MCASP_MODULE_1;1 a$ T# Z! o/ q3 K, n3 i7 M
    mcasp->regs->GBLCTL  = 0;       // Reset- ]6 s7 u2 b: ]& ~% R( |
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" R% f5 R$ f  ]  i4 F    mcasp->regs->XGBLCTL = 0;       // Reset TX
" x. Z3 i* k* |    mcasp->regs->PWRDEMU = 1;       // Free-running8 q6 w- E8 J6 U: g9 x. B4 \' |
   // configure McASP0 receive registers0 U, H" q; G+ ~: x/ h0 M- H4 F
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 d3 i* ]$ e$ x, x# u( b2 \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. M9 i8 v, x/ p( J8 R- q1 ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( X) v) k9 q$ t$ S* @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 ^' ^6 B- r0 g1 {: f& Z4 p, I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 N# H7 \4 S+ X) U0 w' [+ X! a# Q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 h) F' P9 o* H7 W: ~' A" e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 x9 b9 d/ p! s( @5 c- ?    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 i' ?; @" B3 B9 U$ B3 h: U8 y& [; o0 ]
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' a$ v6 `3 U8 y9 n) K    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 K1 K6 F0 v$ O' x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' v5 Z% A, P: D" L' o3 h    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 E5 U# Q1 e7 s# I' P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) u  ?# o$ G. k" G  {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  w: F: d( W- d( N    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' a' P* V3 g* u6 z* v    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 o' W9 f. k0 q% `) g" y5 s/ W5 @# s" N% y0 a( I" R
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: w9 Z' n, c' k( Y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 X+ n8 l" N  T6 D+ M
    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ m) g$ O: W  U" ^, [    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 K5 s: t" H6 `: R2 U% h( y6 V0 F3 h5 |* q. y) m, c+ z
    mcasp->regs->DITCTL     = 0x00000000; // Not used" m; i; i- x4 x2 i) k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' h2 e  F/ ]4 @) w, t% R    mcasp->regs->AMUTE      = 0x00000000; // Not used- {; p: D* W! K+ f+ C

8 i/ m& \  H4 G' b! a* Y8 A/* Starting sections of the McASP*/- `0 ~4 m" o0 T: o9 C
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 `' C! ^+ }! T. S: Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 _9 s  z% j+ u* u# z    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 |6 L% x  {8 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. T2 N. t) N6 s& g+ w
2 d: r3 p. F+ B  X: t# g9 ~. I) E    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 f# Q; X2 H. P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% E. D' O7 g( x; N3 }+ }# d4 T    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # h5 _6 D5 T# U! O1 h( b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 P7 R0 O  E7 k3 }' {
  T/ J2 U3 ^0 s6 J1 m3 I
    mcasp->regs->XSTAT = 0x0000ffff; 1 h2 q9 _+ r1 B1 g' ?% \+ F
    mcasp->regs->RSTAT = 0x0000ffff; * j" j5 @2 u) w& B' d

& K' T# Y8 o" K2 ?* e1 e    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 V3 {, u. f  L5 G8 F$ r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 b( P1 l6 L' E4 y: g2 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 C$ k* o5 i8 `: Z' G7 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- t% S: c* G$ t3 H3 v/ x7 I- [( E( u( R+ c" w5 ?+ G4 k! S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 o; E% @$ w* v# i" t    mcasp->regs->XBUF5 = 0;
0 a) d; G6 F9 f4 w: D, E    mcasp->regs->RBUF0 = 0;& o* D+ `& F  T- v4 P
8 ?8 Z8 U. {# g. M( `4 S" S9 o% F, Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # ]0 \8 |% [0 }; L2 {, H1 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 k/ K& ]; f& v% m7 z. ]% c
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 s( u4 L1 m  Z! y7 z" @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# u5 u5 D  O9 z( l0 W9 @' n# v' k7 P* U' y4 g
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 S: ]( s' l3 t0 A8 m1 b, C0 Q4 s: j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 {$ j* k' T% s. y2 \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + q% `8 `8 _8 l, N0 I0 n+ N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" r+ K- j  d6 r' m" s5 G

6 Y4 x7 u* g5 G5 a2 S    CSR = 0x0000;
  z* ^& x. C) U& C    INTC_INTMUX1 = 0x3d;
; f5 `  H: z) `6 p# A- G* d    ISTP = (unsigned int)vectors;% U/ w- d" }) U: [& v  ~) s/ c
    ICR = 0xFFF0;  * g5 C+ b/ T* r" Y# v  o( L: K
    IER |= 0x12;  3 Y$ l1 h- Z6 t. L9 n4 o
    CSR |= 0x01;  
) V8 ^* C, r' k" G/ Q9 W2 d4 R& C
. S. C1 u. W) H5 A/ r* }" Q
( y$ K5 F. d* Y! a; k' k2 L& n2 s( ^3 x6 \- C3 Q
还有就是两个输入输出函数:
% |+ |0 W" W( R0 Wvoid output_sample(Int32 out_data)- m  r" J; i9 P
{. j, }- r# W  D( ?! [3 x
  AIC31_data.uint = out_data;  7 I. d; x! b$ u- ], X" a! g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. q1 c3 `3 |2 E0 I/ d
}
* K" ^$ m+ W0 o  `: P% H1 H: M- ^) m5 z& S
Int32 input_sample(void)1 q) P  L) ^8 l& C$ q( h4 ~# k
{  6 w2 k# f& }" P5 b
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* g8 D, [9 ]5 G  D0 Y( O  return (AIC31_data.uint);6 H: a8 O- a/ S( Z! X
}
  w/ j$ [( q& ?6 l" q" Z: F+ ~/ n
分享到:  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-1-23 11:35 , Processed in 0.040780 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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