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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& \' _$ @( A) g/ k
main文件:1 k$ g/ O9 H6 u$ W
interrupt void interrupt4(void)  * p, C3 d$ m+ U7 U( `
{( Z1 @+ Y4 D' l& {) T& [9 a
  Uint32 sample;( U# x5 q: D& s

; }# F' l9 k+ H- X  sample = input_sample(); // read L + R samples from ADC7 Z$ X0 q( e) {$ O  N/ ~
  output_sample(sample);   // write L + R samples to DAC   G1 B' ]3 F( v( ?
  return;* ^* b" Y; k7 k) M
}5 {0 e# b# K0 ?* A  k/ l

6 a" d! y/ E0 Y8 a# L: \int main( void )
' j9 g! y& F+ L4 x4 h) ~, d{1 g$ C- W' h7 d3 ^/ {+ w5 P

8 R' b* F0 |. s9 y  u; _    /* Initialize BSL */
1 A% U/ q- \3 x, Q0 R    EVMC6747_init( );
2 J% y9 h$ W( z        /* Call evmc6747_intr function */
8 g, c( c7 c% o  `8 S9 O0 O- l    aic3106_init( );
5 k8 w0 V, `) P# [' C6 H/ p        while(1);, T! w' Y$ `, ?+ W/ Q/ a4 e- ]/ \
}
( D9 Y) U, U; h; g2 J9 P
# g- \- u  X% ~- D, f+ J+ c: ~! F/ J( z( `* R/ m
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ @8 `' {! N( F; P8 g# f) n( T2 J" J% |% n
/* Initialize MCASP1 */
! ]( w2 u: \7 o/ _6 C8 ?! b    mcasp = &MCASP_MODULE_1;& J; k) ]' B9 ?. N& g$ R
    mcasp->regs->GBLCTL  = 0;       // Reset
# u+ l) J% L6 U% {% U8 f) P% t  {    mcasp->regs->RGBLCTL = 0;       // Reset RX/ o- k& \+ s/ p" u6 E& q2 q
    mcasp->regs->XGBLCTL = 0;       // Reset TX1 t) e' E: s& U5 R: X& N5 v
    mcasp->regs->PWRDEMU = 1;       // Free-running  T/ i% q- ]: z* }0 q4 k
   // configure McASP0 receive registers
! [3 w; U8 l9 L# f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- Y8 o' S9 {% q' X  s! {
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) [  i0 G$ F; F! B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; k1 |$ r% K; E, @* n5 i2 n0 e! c  n. u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& F0 [' I- e6 T! U! s5 Y% r9 t, H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% r7 H9 i; H( F8 F$ w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! F2 D$ F. b; r' z( q0 f    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ ?2 K; V) ~/ o$ M: @4 \- a
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! v- ^  a( `/ J% i1 }

' c/ \$ @: [8 K& s" Z% G    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( R7 z4 s  b! D* I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& L4 c; B, a- h' [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ N+ t: ^2 g/ F- c. V* y1 S    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  p# f. ^2 f# F/ ]" s: f; u  H    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 U* z. M3 Y1 o+ ]* E% z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 Y" A+ O/ f( y" G$ _
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 @& h# s) |, T6 s* [
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: n9 |7 S$ A" {& F
$ @* E8 b, ^7 X3 ~5 b  z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 Q* F; l; n* p% O1 i! W    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& l9 R) O3 \# X8 O    mcasp->regs->PFUNC      = 0;          // All MCASPs# u2 f- m* Q! z' `  q0 Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( C8 \" v- P/ b1 U4 p& j  S

/ O4 r1 J- V7 P% e# l) g2 I    mcasp->regs->DITCTL     = 0x00000000; // Not used
' |2 ~$ J6 u* s' y8 ]9 Q* e    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  p9 u5 v' b: O    mcasp->regs->AMUTE      = 0x00000000; // Not used
- W  k+ V' N' J& i" e5 u9 Z% n0 s# i7 m7 H
/* Starting sections of the McASP*/$ K5 l! ^, `( [' G; ~
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- ]1 W* m( D+ U8 a9 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 `4 b- Z5 G9 @1 h; s9 M- p    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + ~3 w. Q+ Z, b- ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 K8 a5 E; U1 z3 W$ u. u$ G7 i0 K* ^: x# `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 f3 g/ I, ]3 y% p( q/ A, X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! N# c! l" r! \# X/ @+ h- Y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 G% ]2 i" }4 C" c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% s* E' e2 D' M* r/ p. e8 V) A0 c
    mcasp->regs->XSTAT = 0x0000ffff;
& z6 C; I2 k$ F; z8 l    mcasp->regs->RSTAT = 0x0000ffff; 9 n7 i& r. m$ l* i% x
7 I4 v  u6 s, T: {# X3 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 |! A( E) e+ R8 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: n" Q4 |1 o" w
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) n& _0 D" M+ N  w# H0 z% G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- `/ i0 R0 ?0 ?0 X0 k

8 i' G9 R; ^$ Q/ G3 \) T4 b% r2 m    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 H2 [( C  z) ]. ~9 G1 f    mcasp->regs->XBUF5 = 0;! i8 W! V; Z+ q. _0 n: ?' k
    mcasp->regs->RBUF0 = 0;: M! H, y* d" L
( @9 B4 S' a, e9 i6 c( r5 n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- u- Z- q9 Q) Y; V$ m5 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ `8 y' G  o$ N  W! J
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # L: a2 q3 B, j4 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* J- X6 ^; M# C- y

, C! u7 b- ^" }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% e. \, K# W" k0 I7 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; ^0 j4 X* I7 o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 T2 R& D4 h* ?, }  J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- ^6 L/ c2 w( u6 U2 Z. b0 ^5 U
* G: Y* m0 L, C, K
    CSR = 0x0000;
+ z6 y6 D5 b- t* V8 [    INTC_INTMUX1 = 0x3d;6 R5 W# i* A: e+ d: s  p! H
    ISTP = (unsigned int)vectors;$ e, [8 b! h2 z' n7 {
    ICR = 0xFFF0;  
; `) G0 {5 a2 O- X3 t  R    IER |= 0x12;  3 d$ W& @1 A- R$ g3 l& a! m4 y5 l
    CSR |= 0x01;  
6 V# g, G8 d: f! i: K5 M9 }. j% V9 d& T+ M$ h
! R; r/ j1 P4 x4 o6 i* |0 L) `# g
( c3 v+ x# B2 \! N/ t
还有就是两个输入输出函数:& k; @; O# l. f" A1 @1 w; f' u
void output_sample(Int32 out_data)$ g' m; P% Q8 |5 v
{$ Z. O+ P6 F& H/ d4 J. s
  AIC31_data.uint = out_data;  
$ [  C* M- C$ N0 h5 d: i* G6 F  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 n6 d' A1 v; W" k' a1 O1 E* i, ]}2 P: [3 `" q- N. v( L
  N3 a' ~7 L4 y, ^: F; x' q+ l
Int32 input_sample(void)* s8 J6 |- S- K2 ]; q6 z4 j2 Z
{  
( C- T8 B: [; a; R8 o  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ A. G7 \, g2 N/ O3 j  return (AIC31_data.uint);8 ~0 D: b, p0 G: m
}
9 v7 g# X8 F; l$ |- Y# B' Z
& u5 B; ~" S$ N/ z; K+ p' s% f- Z1 D& S
分享到:  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-11-9 19:39 , Processed in 0.036638 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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