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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' u! g! n) i8 w8 @6 m5 kmain文件:+ B6 s3 k9 X0 ^2 d4 v2 e4 ~8 C7 S3 l
interrupt void interrupt4(void)  
, i7 O" a, Y. t2 j: m{0 v% O4 {! ^- n1 H6 N9 v
  Uint32 sample;
" W/ Y& e( m9 A/ l* }1 g. F% h1 F/ c2 l1 K5 v+ A
  sample = input_sample(); // read L + R samples from ADC
: }7 H  L* d" P" ^( _  output_sample(sample);   // write L + R samples to DAC . D& x( ?6 q) N3 [' [+ ^* _3 }7 R
  return;8 s6 [$ j; R, p/ z: ]$ `
}
' G1 H+ X6 ~* B" r  b: E% R
$ q- j5 H3 n6 |1 ?int main( void )$ F$ ^, m1 Q, d
{
) T1 J. o0 q  Z  _/ [( I& z1 a6 d" y4 j7 `
    /* Initialize BSL */
: B, @' n8 M  M$ G    EVMC6747_init( );
" _3 c7 h9 I) }/ b4 o7 e1 W& L1 e- Q        /* Call evmc6747_intr function */
/ f% F. U- X1 s4 G. O9 j# Y    aic3106_init( );& `& h# x! m* k" ]& V
        while(1);, i) X) D) b$ n2 c! E
}
% c# g& Z4 n) G, h4 U7 ~3 {+ C& E2 e$ _" |" J' m0 h7 K; X0 Z5 X7 D+ @* h$ O
' X8 Y$ u6 l( m% C+ L2 ~# [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" _( k6 O& s1 Q/* Initialize MCASP1 */
4 o0 o" k8 }; J6 |. {    mcasp = &MCASP_MODULE_1;
2 j+ D1 w3 y" {: M0 d1 \4 G    mcasp->regs->GBLCTL  = 0;       // Reset
! q2 h$ y" v# h* c1 X! A1 i    mcasp->regs->RGBLCTL = 0;       // Reset RX4 Z! h$ B: A* O* k- j
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 a7 a( ]0 Z; f/ @    mcasp->regs->PWRDEMU = 1;       // Free-running8 l0 D3 X. c9 V, q( k5 V8 s  h
   // configure McASP0 receive registers
& o! K- t' B: w, r0 _; Z9 ]    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; I/ X& |/ c1 p1 E, B& K+ ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( X: b4 B3 ]" u3 C    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( e3 a9 _: V7 G% g: x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  U6 t7 L9 ]1 K  a4 P6 E8 l! [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 Z4 f( Y( g" c  X* a- W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 T6 {7 r% e2 {/ |5 D
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 ~8 b& P9 T) f7 X3 d/ r# a; i    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ~9 R1 B' V& h% U2 r0 X2 X6 f# }7 q1 \% ?2 z0 }
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ b' j4 m7 i2 a3 {& _1 }( a1 U. Z1 m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 s8 C9 P1 a1 C
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 @1 g$ C/ R" S* I! ^
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ [) g) V$ U4 y( |4 u9 e' M/ z5 q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; T) _0 q9 c6 ]! b+ ~3 H! F: b, g' A    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 s4 {% L$ e' P  X* m
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% Q" b* ^0 S" L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 v- F) c( c. a0 G  V

9 ^+ G, C- S1 }- H/ i$ _    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 h7 L9 |3 G% o) l
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& u& s% j4 c6 F9 e
    mcasp->regs->PFUNC      = 0;          // All MCASPs6 s# V* x  t9 w+ s5 G- X. l3 T  x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 |/ U* |5 V4 g0 l; B  g) V
" F6 o( L) O% x7 V9 s9 u
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% D6 q% z  Z  M0 ^! i* e: C( @    mcasp->regs->DLBCTL     = 0x00000000; // Not used% [8 D2 @/ H) T
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 {- r/ m; z) ~! `: \# h4 `) T
6 T+ d% j4 W2 F7 W& T
/* Starting sections of the McASP*/& ?3 U) U- F8 Y0 ]. r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 Y3 ^- j9 ]/ F4 O( n3 Q- {6 f9 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 c8 q5 g8 A* \5 D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; m3 A: Y/ G8 T, _6 }7 d! v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! E$ [+ m; v% z% @" L& o8 z
) [' I( r+ C8 H1 V: `9 K    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% J$ b7 q  ^; z* Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* d& E4 @6 `6 Z1 {& z: @
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; }  t: ]# A" }) w$ J' E7 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ S  R4 p# A3 k& S* ~4 T' n% {, t* n& {- C
    mcasp->regs->XSTAT = 0x0000ffff;
; w; q+ ]8 ~0 t$ E0 E1 Y  c( Y  v    mcasp->regs->RSTAT = 0x0000ffff; % d( Q' F' S7 r) I0 K! h" D
/ D0 c0 Q9 t+ `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- C+ {4 f: a) r. B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 p7 \7 r0 d0 l
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# G; m, V7 R) E" y+ P7 S6 s) W9 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. L8 C! I1 z; ~; `9 B- g2 b

0 D# p5 ]0 ?  Y7 ^/ [" F2 n/ Y    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 L8 M& j/ t2 W2 N    mcasp->regs->XBUF5 = 0;/ d) X4 R( K. w' ?' l
    mcasp->regs->RBUF0 = 0;7 @) u0 ~# Q# @- _* t0 D
0 `& T5 p# J* S7 {5 [
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! ^1 C8 I- |" ^" C$ U1 i  I3 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" w; W' z7 c5 o9 h! w2 J* }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 N- B% ]& O" c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ A/ a$ C3 J- G- X7 G. x6 B, @  X0 ?; F& j/ r6 m
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 d2 F( [/ D& X* z9 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 V' _: ?9 \- h7 \; {    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 J! q6 }, Z6 A/ ]9 W$ R' |7 _/ o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. r! z5 B3 j% }
! P; R% m( ]0 r, b4 j2 x    CSR = 0x0000;
& R. |; e0 y0 m  h    INTC_INTMUX1 = 0x3d;
, Q  X2 d0 T& P/ ]- u! x, F9 y    ISTP = (unsigned int)vectors;
$ z* |0 ^& R6 k2 N    ICR = 0xFFF0;  3 f/ B0 a( v$ C& G! B5 V. C  l
    IER |= 0x12;  
1 h3 w5 w+ O1 O! m, o9 J    CSR |= 0x01;  3 e* |- B: g* s7 w
8 a# R) f6 ~% k; J
; o  W- g( D$ Z9 r& Z7 O3 A* m
: g* b- T1 y) ?5 c. C; ]* B
还有就是两个输入输出函数:
$ _9 C2 p# e% J# Q5 R; i9 Ovoid output_sample(Int32 out_data)
9 g9 I  u# g1 d2 m( w* F{
- H- U& [: D; Y' E6 v) B  AIC31_data.uint = out_data;  ! n* O3 a# N3 e2 a2 n9 Q  }
  MCASP1_XBUF5_32BIT = AIC31_data.uint;! ]* t- s2 C/ q( y
}; t/ g) F5 G! v4 h" C
: L: t$ ?3 t0 A. k6 h
Int32 input_sample(void)  N+ e1 H/ S; C$ P
{  * R3 k, @! }) N& w$ A) k: a
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! U1 M( H( ~' v0 h, u% y# [& i: s  return (AIC31_data.uint);$ D1 x! X4 I2 x$ Q
}
& `1 k8 R" ~1 _, e4 ]9 k+ j# 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-12-2 03:08 , Processed in 0.038918 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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