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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! ^& ^8 l, L; x* b2 E* J# H4 X5 i& \9 N
main文件:
0 I( q  a0 `) C: Jinterrupt void interrupt4(void)  
" E  S6 A1 o8 U" f. q. ?. {{2 |) g2 R* C7 Q, j
  Uint32 sample;
2 j7 C4 C" ]9 e% e
; ^6 I; K  H) K8 E4 s0 m/ c  sample = input_sample(); // read L + R samples from ADC
! M5 z# E/ L) X8 S& V  output_sample(sample);   // write L + R samples to DAC   x" ?- a, R+ C: d. v/ A
  return;
% E  V2 f+ i$ U}2 {) t% ^$ u& l3 |. e

5 R; d2 o; w" {+ m6 Kint main( void )
/ Q3 X# I( {- A  J{
5 d, V0 n9 A) P7 {
, n; }+ |' T7 S  z" I    /* Initialize BSL */( Q7 t$ o& b5 X5 y1 J
    EVMC6747_init( );
" X! p) `, f: u  [( B) N        /* Call evmc6747_intr function */
7 d4 g1 w$ C/ H7 \) x+ _    aic3106_init( );
& w( c2 u+ ]9 _        while(1);; \# L; G: k, _2 U
}
: y6 _: s- v. B) i5 l0 q% M; i/ J
* ~. ^5 e+ J% A: r2 }  Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" i6 d4 L4 W5 y, {1 U
/* Initialize MCASP1 */
$ r% b$ a# L: z. q    mcasp = &MCASP_MODULE_1;# c- k; \+ K- }  N8 O# p4 W
    mcasp->regs->GBLCTL  = 0;       // Reset
" Y0 P- A& \  g! u9 K1 c    mcasp->regs->RGBLCTL = 0;       // Reset RX/ @+ w  o* o: X8 i; K
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  u, o- E& v* Q    mcasp->regs->PWRDEMU = 1;       // Free-running
: H9 X" r5 P7 a+ [8 B. d   // configure McASP0 receive registers
! r; P8 i! Q0 i6 y8 m: b5 n    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( r" c2 `' b/ R% Z& q0 b$ x% l    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 {; Q0 _' g+ G2 {1 O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, N7 N9 m2 i; z' h$ }- U
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- V7 \; d0 L' w! ?7 [6 X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 A" P" }' a* A- j4 S8 V3 k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  N0 M. Z" p0 h8 o: D( M
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& E8 p; ?5 o; m( f) S6 s0 ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, `3 q' G" @; h9 c4 i

  |  I! {; z6 {3 d9 r/ H    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 n5 M5 Y, ?* X2 E9 `& {  G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) F- g( O. {+ ]- h3 c2 g    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' g" ~2 A0 u* p/ O5 k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 Z( B& G+ A- `
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 w% A) i& T* L+ Z+ w
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* ?& |! Q3 w- W( v, N9 Y# b" D    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ E4 V# r3 r: [* E6 _. S- N' R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& t8 w9 N% C5 A- j9 i# s% }7 J
6 x0 a. O2 J2 z8 G) u) O+ z) H( B
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
' C! \7 X2 `$ ^1 {- _' u$ N" p    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! c% P0 S3 N6 l+ Q. `. N- Z    mcasp->regs->PFUNC      = 0;          // All MCASPs
# I' Y7 |( U% r: r- b1 ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* G/ A, c& n% H! m* [
: Z6 Z8 a" ?4 Q; d! w    mcasp->regs->DITCTL     = 0x00000000; // Not used1 g% ?3 G+ m2 H& \8 F* {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 g, }- h; [, m( x# U+ a( G    mcasp->regs->AMUTE      = 0x00000000; // Not used6 g. d0 \  y, L0 \8 G

- |3 ?8 u( D" t5 g2 x* M/* Starting sections of the McASP*/
2 m( p- O. `$ t. u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 A) }2 p: {  d" T$ ~( s. k% P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) r2 `8 h8 ~9 K1 n9 s  X6 s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , A6 ]2 v' y8 X3 O. L' X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" B) P/ C6 O; M, T% i

2 U4 \' \7 e( I2 G8 ]+ {  `    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 K3 R# {' b; g/ }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" \0 ~. ?* o: N! t9 d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 E5 w* _; H3 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ I9 l. M+ Q; S( [
$ p0 j5 [% W, n! k8 q) z
    mcasp->regs->XSTAT = 0x0000ffff;
, g) T, \9 I. u    mcasp->regs->RSTAT = 0x0000ffff;
1 d$ j) K: B. Z( x2 ^# N6 t  c5 d! P1 x% s, Y$ X0 Y( l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 Y9 ]2 F+ l* \& x5 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. v1 [! q  p0 J: F% X9 @0 u5 w    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' s6 w% z: X. k. m5 B+ ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" Y4 ]3 n9 `1 h/ @7 h+ c

6 I$ {: D3 T5 X3 \; {" Y) Q    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 S& c* k1 w. T: M. b- N% _    mcasp->regs->XBUF5 = 0;' P# u. i. K& W+ ?) @
    mcasp->regs->RBUF0 = 0;! U# E4 E, x% A: m
! X$ @1 I' G, C- P" ^6 l  i% ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 |: }3 C' }" ?9 D, U: _1 H  B6 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 \. q( ^8 y$ A5 @) K9 ~  y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' @% S* \4 S9 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& @/ g: c5 h' C8 Q6 c
  l7 U  M; d- T, \; t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 |9 P4 d2 A! k$ c; c# t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" d6 S8 x/ R3 g/ {$ {
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . e1 N8 N9 j; A! [) t( K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 y  T# K7 ?6 P6 W1 J( ?: l6 m4 L- t: F4 X2 v+ ?1 _. t
    CSR = 0x0000;
1 U  `: X& w; e! e" N" y    INTC_INTMUX1 = 0x3d;
* P& H- ^9 u" C* P. T0 D, @1 [    ISTP = (unsigned int)vectors;8 V0 n4 _/ T/ D' h1 q# E1 A
    ICR = 0xFFF0;  
$ V+ }3 H) B4 `3 v2 L5 A    IER |= 0x12;  
0 w' a% p! E% _/ O! O& ]    CSR |= 0x01;  * U! k2 U8 y6 x' d3 s1 @# }

/ L* s% P% Q& N3 i; ]9 S. L
3 Y5 b3 p/ i. Z- W0 d2 `' N; x2 @. v7 Q
还有就是两个输入输出函数:4 C: e+ O! N8 f
void output_sample(Int32 out_data)
7 U: B9 i) l, w" b7 B{
% v" h3 @6 ^/ ?! _  AIC31_data.uint = out_data;  
; F. Y/ h7 K4 V: h7 V  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 k! h/ L4 w& c
}
$ R& n3 C- f7 \8 D! W4 h3 ^
& M0 i- U! N" i; j1 Q0 mInt32 input_sample(void)5 O, \0 U- ~) A7 K! K3 N
{  
  {3 C, Y) T0 U5 H4 t  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 F( Z! F5 Y+ D5 [4 F+ u2 @  return (AIC31_data.uint);  L8 o/ k' _/ c7 R( S* u' R  N( I
}) }9 P$ j+ w0 ^4 \

# i& i4 G; ]5 Y- @  Q" A5 ?4 \" I
分享到:  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-11 04:04 , Processed in 0.037981 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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