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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, V4 J- h  Z- v7 q* \8 Imain文件:
( b% T$ x/ N4 D/ ]9 H' v7 kinterrupt void interrupt4(void)  % j* P6 b9 D% ?8 a5 i1 y; q
{9 W% I4 h1 l+ R1 Q$ N0 V
  Uint32 sample;( s: N5 r$ d- N7 C- i

! M6 \# v; Z6 ]  j7 i. \8 h  sample = input_sample(); // read L + R samples from ADC. l9 {& n2 d5 C+ A. h5 k
  output_sample(sample);   // write L + R samples to DAC + q* @" x. R/ ^
  return;! ^2 J0 n# y+ w$ l$ j, E
}
) N3 i% x" y/ Z, T1 Y) p
/ W9 Y/ Y1 y' }- p) ^9 o, aint main( void )4 ]6 `; c: _$ K
{
' q' h$ Y0 v, N8 @1 _" J+ n$ a% B2 H% ^: X! ]4 e
    /* Initialize BSL */1 F- {: e( J/ C1 _
    EVMC6747_init( );
% U+ l4 s9 A! ]# C        /* Call evmc6747_intr function */
/ P, {1 M9 R- p- Z( E5 t3 q% @    aic3106_init( );
  a7 d* v9 b4 n8 o; C1 _        while(1);
1 Y2 n5 N- k9 d9 p/ e( n3 T}
4 E5 b- K4 D- `0 Z% e5 X# [; s- p0 M) W% T) d

3 p; p$ r( U& z: N7 R0 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 b' e, r/ \" V% {( S
/* Initialize MCASP1 */- _5 T2 Q4 [$ h; Y! s& M
    mcasp = &MCASP_MODULE_1;4 p8 F  x$ S0 A; c# m. J
    mcasp->regs->GBLCTL  = 0;       // Reset
& |: ~! u* q; t: y4 ?) s+ m    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 v3 `% j% j5 C4 |3 [2 u6 ]0 j; F1 r* J    mcasp->regs->XGBLCTL = 0;       // Reset TX& J; @. V6 e, U2 @( k7 |( n7 t
    mcasp->regs->PWRDEMU = 1;       // Free-running
: D/ a: F0 y5 f! B9 R  O7 H   // configure McASP0 receive registers
. I  n8 q+ i% i, |+ z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 R; M; \- s8 Q+ q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* g$ M& m, `9 T9 k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 R. Z: U8 |4 s6 Y6 W+ L    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 Z  T2 A1 {3 V2 @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& {# N# T7 F. Y4 a, r* y7 \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 w& G5 C: n  |4 F+ Y" q; _- y9 C4 ?
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: h* b) Z+ ]5 Z) d7 [: ?    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. T* d7 z# V9 X6 a6 ~+ M
3 m& G' \2 G: x; |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 @  _6 {0 c1 b: x6 T    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 y. g9 O9 [7 m) ?
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 W. E! A; Z2 m* X- k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 H8 P0 M0 V; C
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: u8 @. ?! ^, J- Q$ f% J! i0 J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 }. F/ ^, k1 h. [! g/ X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, B8 c! @' N& C3 K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 q" m3 \, O5 q4 O1 ?
4 v- K, L) b; r+ j' I
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, G2 x' ?  w6 m; g: Y' ]* ^/ L& |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) R6 i' v, Y2 O# Z+ F
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 }% Q+ x0 u- D6 N) v0 X
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( h6 ^) c4 q9 V. {' j

8 x. t5 c1 `' t& q& a    mcasp->regs->DITCTL     = 0x00000000; // Not used2 ], u5 j2 p$ e6 b* v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  W/ W, e1 C! `; j: T+ ~    mcasp->regs->AMUTE      = 0x00000000; // Not used# ]  D2 l+ L0 }7 W

7 c% a- p! K0 U& E/ |/* Starting sections of the McASP*/
8 X7 J) _- h4 L, R! M7 f    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 d3 E, s! J1 d7 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! j3 H7 x4 j8 z9 I& {    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, d* u% `" t6 Y( U8 J0 t) V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 M8 I- n9 o/ i2 Q& [$ h% P
& j9 M% B2 x" I. j8 z, A) J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( v" y7 p  M4 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' ]: c* x' M; _% ^  ~( J' w$ S) o" ~9 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : i1 y. S- U% R: }/ C! K$ v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 Q: u/ g' t' j1 C  T1 {: u; ]
0 \  Q: p6 L/ ?' v; U7 ]    mcasp->regs->XSTAT = 0x0000ffff;
: |* f& y9 d  M2 p7 Z    mcasp->regs->RSTAT = 0x0000ffff; - T# O0 _) m5 m7 b5 E+ W
6 D% ^! c$ A8 ?" T2 N+ ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" u5 g6 D  ?8 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  t" L) C5 N0 k' _' t. `
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( }4 I5 s2 s& }- k8 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 k5 X1 |" }& M6 R) T" Q) n* w
" O4 R, u1 a! }; r( S    /* Write a 0, so that no underrun occurs after releasing the state machine */
) g6 S+ g) S" l) Z! k    mcasp->regs->XBUF5 = 0;
. X; D) P/ }) L9 X. [  A0 Q    mcasp->regs->RBUF0 = 0;) k! Z7 `1 e8 S2 u' c
) H, ]$ P3 k8 R: e* p6 S
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 N( Z! _9 {% U4 Q! @, E  I3 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 y2 f/ a3 t! }, r0 d$ d5 y& B9 K    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) R! N& k) G' k0 C3 K1 L! y6 u# W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. Q5 J# M; ^' l: n9 `
1 Y$ Z: T+ ?: Q& s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; ]4 `& S) L, x( x/ x/ i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) ], D) u' E2 C" a: l2 f
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# O  l4 T! f; a6 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' s/ M/ {& P% k. B/ n
# y3 J2 a5 P0 l. P$ r' y. ~5 \    CSR = 0x0000;9 z* q& `, b, |
    INTC_INTMUX1 = 0x3d;. w, ^0 C9 A* G& h) r2 U! l
    ISTP = (unsigned int)vectors;1 q. }$ p" F  V  Q! Q
    ICR = 0xFFF0;  : k* u: E4 x' ^  j1 [) g
    IER |= 0x12;  
" b$ Z  N, K! c  u2 V    CSR |= 0x01;  
0 n+ n& N( }* T- s9 I" z
9 a% c2 P+ T1 s; e& j; o1 ]- w+ a
9 C: g, Z& }+ a6 t+ j: U
- }3 W$ F: y; B& ~5 A还有就是两个输入输出函数:2 n* {6 Y0 Q, U
void output_sample(Int32 out_data)
9 M8 |* \' B( F) f6 e! S{! q. O2 s8 ~# A1 p# E$ u
  AIC31_data.uint = out_data;  
9 F5 l5 e2 k" w5 ]8 J# q  MCASP1_XBUF5_32BIT = AIC31_data.uint;& I  N, ?3 Q& @. l
}/ U8 B1 U, s; U

+ G8 j( @7 Q" k7 [4 g+ l8 \4 j2 lInt32 input_sample(void)
# n# ^0 p; ~$ I# E1 {% H{  9 Q0 o5 E; Q8 B1 k& {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& D# Z/ n% U4 U7 ^9 R( m  return (AIC31_data.uint);1 s0 D) x# m7 d( S8 t
}
0 p' W5 @' K" ]6 q8 `9 w0 h+ d6 g9 ?( U
分享到:  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-10-22 14:58 , Processed in 0.043489 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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