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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, L) }# Z0 G: R( g7 I: s1 M1 Z# qmain文件:
% a' K6 w5 n7 ^interrupt void interrupt4(void)  : d5 H: B+ L$ ~7 X# n
{! {* d6 I8 H, B7 M" j
  Uint32 sample;* \/ [8 d4 t4 Z' Q9 w7 a
* |  q6 F1 i4 Y2 a
  sample = input_sample(); // read L + R samples from ADC1 T' r- S& G4 ?/ }
  output_sample(sample);   // write L + R samples to DAC   T, e, ~  ^! d( y' m
  return;# \: }' u6 x  x* n
}1 Y) P3 b2 X- f' D- q

! A7 m6 @, U6 ^: m3 w: _( kint main( void )
; M5 K5 b0 z3 {/ ^{0 v8 ?$ \5 S0 Y" j5 x4 R2 {
7 |9 k* y2 ~1 u! s, |) ]
    /* Initialize BSL */
1 u3 g6 S: @( N# J1 B    EVMC6747_init( );
: L( P. s6 K; k        /* Call evmc6747_intr function */5 |5 m$ ^) y% H2 D  d$ ]; f
    aic3106_init( );
0 a& N. L6 p( P0 X        while(1);& N" g+ m7 l0 s1 F" M& h0 m
}
, L( |% Z2 G# v) s2 m% Z
. N1 `$ g! ?( M* o: T$ H' n) ^6 W) U* S" @3 t. x) k9 J* U: q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) L( N# {) h! _% H6 X0 v/* Initialize MCASP1 */
/ y/ j( j5 g  c2 x2 ?9 Z. d    mcasp = &MCASP_MODULE_1;3 \* e9 W" ~2 R/ z- Y! S
    mcasp->regs->GBLCTL  = 0;       // Reset* C2 H: X/ |% B" K( j3 b
    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 s6 Z; e6 H% Y) L+ l2 {    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 w, b$ j8 m, [  }9 |! Y( X    mcasp->regs->PWRDEMU = 1;       // Free-running
' ?; R; I/ f$ j, Y' v   // configure McASP0 receive registers
0 ~/ e6 _/ k; G/ o2 Z: L9 v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% }7 P* }" f# o2 ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* T2 [4 ^- X. L
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# l( i, w, |% ?& D3 ^
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# I) a& K! I- \/ X
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. B, m6 ~# _! m& ~' c; C    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& F+ G* m. J8 ~6 E3 o1 M1 ^
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! q( v$ u" a: W# g1 Z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; C) r+ Z; u( ?2 L- F) [3 ~9 I
7 R# f2 f, z" y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 t% |3 f9 j1 c" M4 S- Q6 C+ O$ h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ x* x1 R- H6 E! k* N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 r- f3 H2 x8 \+ [1 O! o8 y& E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 F8 f2 [- [+ }. j
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% L* e) I9 T- F. _) m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; N: E6 B  I! B7 l1 r    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 D" ]: r! \1 _( ?! {! q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. p, H: a& D% b  p2 Z  R: W' _. U: S/ n# G! Q$ Y$ y# j  X
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: d. S; P- Z& K# F    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% N( h# L  u- @0 \- j    mcasp->regs->PFUNC      = 0;          // All MCASPs# q  Y) j$ t! |" \
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- |( B: {+ m/ v! V+ ~5 F3 j' d, ]1 m% {+ O
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 H; U% ?6 E  E1 _: e  p    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 i% Z% [( T! |8 E' @    mcasp->regs->AMUTE      = 0x00000000; // Not used
) x2 a7 e2 }0 t
4 k6 ^: Y/ Q6 ?  _/* Starting sections of the McASP*/2 E; ^. s9 n- a$ x. n# @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' D! D& _; Z, i% f, u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " D& g% u  g( M3 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / v, Z8 c* f0 O5 u/ Y! O& u, \/ g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 v* U" F4 X0 f; v. b
( _7 A0 X& ?- h% }) w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 R% @: S2 B* p7 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# c# n; c; C* c* x% u* I$ L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 ^8 p) t! N0 M6 O: V& W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 o& x; ~! t0 D9 A% B" k
2 _) W% G: ]; M: j
    mcasp->regs->XSTAT = 0x0000ffff;
5 D& L# W$ I0 m4 C    mcasp->regs->RSTAT = 0x0000ffff; $ V1 R" L' E! H2 w
) w( t) X9 k: S4 _; {! S' T4 j4 M  T
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& T9 \+ G% L4 t7 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! l+ z+ P0 L( J& F" T4 u7 s. S    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% T) F7 r3 @+ Y" [) f0 w/ n. K/ N; J# R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) F2 G7 u- c7 @! T5 \
5 T  E7 m+ [  k
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; W9 ^0 d4 f# \/ \! X# e    mcasp->regs->XBUF5 = 0;
0 F; k$ |, ^% ^* |4 _% R    mcasp->regs->RBUF0 = 0;
7 R" z) p/ D7 ]9 g
. P3 A0 u. w, P: y0 z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : x( z  Z' ]0 P: p$ }9 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 z& T: D$ e* h5 |5 I- H" o    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & G7 m* u% D2 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 M! i* q: o+ {' S6 N' F$ K; i% z! Z

3 B; K2 Z! G$ X* J. \0 ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; [: p# _' z! |# _: z* Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; A1 k- w( K$ t, K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' y6 B: d# A- t9 u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. u; k: T5 d5 }4 A$ M- j6 O
& P9 c( b! H% l5 T) m
    CSR = 0x0000;9 W/ {, z7 W% ]. Q6 W
    INTC_INTMUX1 = 0x3d;
. n# v% o- u# N7 e/ Z9 A    ISTP = (unsigned int)vectors;& m( j% O* k8 `( d2 t3 l+ ]8 L
    ICR = 0xFFF0;  
3 s  u* e( A- f, C) |3 U/ j2 e3 I) q    IER |= 0x12;  . H3 z" n; [, `# \
    CSR |= 0x01;  3 C# P0 ~. N0 \4 J9 d

9 t; L5 E2 b5 T$ |$ X7 P
% l* h- O1 |: V& E# Q
4 l7 k- \" @1 \1 N还有就是两个输入输出函数:
) a: I" M4 h8 A4 ]# a; g1 E# Yvoid output_sample(Int32 out_data)
7 U' n% M9 m, L! g, e4 `{6 {  ]9 c+ f1 |
  AIC31_data.uint = out_data;  5 {# g; f( I, S* O1 p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;% R3 S: L% C$ K' M
}1 c' s  `+ u! B9 M
8 Y! l+ v# _6 v* \6 l
Int32 input_sample(void)
4 R8 [& O7 M' ]! q{  " [8 C; W; P& `8 ^% h4 ^
  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 g- m5 k. x; z" |  R( @7 j
  return (AIC31_data.uint);1 G3 l+ y" q/ X& _2 |/ t) g
}: ~4 o1 G9 n/ }( B& g1 M; y

+ M7 G! ]8 l' U% `! p# E
分享到:  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-2-20 14:58 , Processed in 0.046356 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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