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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 c( I3 P  N  t9 x
main文件:
1 S5 j& a$ Y# K# f' e' Dinterrupt void interrupt4(void)  
7 d8 \$ L  u5 ]3 ^$ m{
' |( _# L, T1 b  Uint32 sample;
0 y2 i% t/ }. y1 r8 Z& Z* K- y7 B+ }! B  g, A
  sample = input_sample(); // read L + R samples from ADC2 \* P. S& x/ F# z5 d6 f. c; `
  output_sample(sample);   // write L + R samples to DAC 7 g0 L* X: ?7 c' e$ F4 Z
  return;3 z2 C$ _% H- a* i: n% w5 C' n- t
}
/ c( _4 B) j  v9 _
: ~3 I; |! f3 j# L* S5 Sint main( void )+ P! N- G4 p" l9 E* u, G- o# F- r, Z+ i
{9 q- v+ k, d2 M% o' e" Q5 ~
# z% ~& s; i3 H
    /* Initialize BSL */
: ^2 {; ]) q& t  Z7 r    EVMC6747_init( );! G' Q1 j) b8 f$ R! r
        /* Call evmc6747_intr function */
/ W  Y) I* W5 c/ J1 A    aic3106_init( );
" J; ?1 v# o! r  i( t0 l2 z        while(1);
3 t0 T8 r4 ?+ J! [- ]}8 P& w- k0 O3 V/ f" q( u+ v" q
7 j, u' B4 }0 x1 n0 y; U

% ~, H/ p- b2 {2 u" ]) h7 O( l% _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( l. a2 N! q) a, ~
/* Initialize MCASP1 */
  A; ?& ~$ Z& X5 d! K) ^" o0 b: H    mcasp = &MCASP_MODULE_1;
! G; {' A1 b+ z3 U% F" `    mcasp->regs->GBLCTL  = 0;       // Reset* o$ O/ ?2 W, F6 Y: g2 ?
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- d" l1 `6 J8 M0 B4 Q% n- ]& f1 x- C    mcasp->regs->XGBLCTL = 0;       // Reset TX& a  F1 r; `( n. x$ q. ]! l' @0 P" q% @
    mcasp->regs->PWRDEMU = 1;       // Free-running% ^$ S7 S& B8 A$ o0 c5 X
   // configure McASP0 receive registers
) t- Y1 x/ y6 ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 ~1 k: @; E' q& y% O4 r) w
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# V7 L) F+ A( z! _9 ^. q! \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) }* D" x; u; j# N& X    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 C3 ^& L$ Q. c4 z" i' o4 H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 F& a* @& B  _; l9 u2 W
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 Z$ Y+ K/ S- r8 \5 Z    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 ?* L6 ^" h7 D/ q5 a, R
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* e- X+ J8 T8 m! q( Z8 a
, K' z; N3 o& n8 F4 x! S6 {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 F: Y/ y; N" R2 V# v* K6 O2 B' k' b' j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 ]4 G  z5 i1 e: _3 `! d" v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& c1 v- I1 ?: x: Z# z/ o% v; H
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! @" P/ s1 x* k3 b6 q+ |. `1 c% c% N
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, l, ]: u& F1 I5 U1 n3 q7 u
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ z4 m  K. P$ @! s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ r) K; [" u( n( C9 \3 l
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& Q5 H( n, ]5 }# s# m
. {& O; F7 I1 G- W* @
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" I1 Y9 B8 H# J: L3 O8 ]
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( D6 a9 s/ R* k1 y4 J. j1 q# z9 U/ B
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 B8 R. w6 j/ l* K! N8 v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 E2 g' Y( }9 S

$ L5 R0 J1 J0 A) q& m    mcasp->regs->DITCTL     = 0x00000000; // Not used" X' s- r+ j6 E9 K/ f0 }5 n! C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! |4 D- E' j5 j    mcasp->regs->AMUTE      = 0x00000000; // Not used
! s$ `* r# B3 S9 l
2 T8 M" ]5 d& H/* Starting sections of the McASP*/
) i+ |# {- f1 t$ P" o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 {& G& o( D( }8 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 K" v$ P' P2 e* _0 E( Y5 o. G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  R! v: n* O  i2 j3 A4 y9 p5 |/ D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- g6 t% N9 q0 L9 s5 P, E8 I3 N. y( h9 O  @6 E- {* U
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # O3 @0 ~3 c' O- E, p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ `& [: B& o! v8 |/ ^/ O: g: J1 ?, r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; \2 b; x/ i: @! L: Y5 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ ^% e( p! f) {- Z( U2 B# b$ G. y2 d) b2 X& v
    mcasp->regs->XSTAT = 0x0000ffff;
$ ]( O3 _2 A, {: P    mcasp->regs->RSTAT = 0x0000ffff; ) [4 h- R5 V/ Y
4 [5 G& j3 G' K0 j7 a- f7 y1 V) |; a% r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* O) d  c3 j  B4 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 Y" i( c: _7 C  E3 W" P. k3 I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : b/ f9 q& E& R: G6 V( o3 S* P, e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 r6 t" e; `& r
# a# Q! q2 z' ?. h9 R# c
    /* Write a 0, so that no underrun occurs after releasing the state machine */& o' V' q: @9 ?6 I: m
    mcasp->regs->XBUF5 = 0;
1 m& {6 k8 z5 ?0 W, ~6 ~: i    mcasp->regs->RBUF0 = 0;
* t7 |% O4 I$ o- Q8 C% p! b( _# {, m4 l' E* N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * f% A' d% g1 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% X, e$ A- [% |( p/ p+ A    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 T" h  P! {- X0 f( s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 f& V, H3 b# S% y8 }

7 _6 s8 H1 K( z, o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( |, o' ]6 e0 ]' V# M! {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* [- r3 y0 `$ Q) d: a
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " S% B) `# W% S! G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( O3 {# n  ?% W  e3 v7 t+ h6 T* Z' K, D4 m, r$ ?# J
    CSR = 0x0000;
  l/ @& B! x5 t    INTC_INTMUX1 = 0x3d;
- L) Y% J, f7 c2 w$ A: N( ?; ~/ E    ISTP = (unsigned int)vectors;$ h, x' U& w! D0 z
    ICR = 0xFFF0;  
* i6 i( Q9 h; n3 M4 p. v    IER |= 0x12;  % W# q+ t5 I* ?2 i  C4 A
    CSR |= 0x01;  9 H3 ~9 e& F. e5 R. y+ Z4 V1 p# E

( D9 \& k' O$ o: ^$ C/ X5 r0 R2 g3 `( r- g% Y& A
5 K4 W( E  W2 W2 I
还有就是两个输入输出函数:6 t2 D4 k9 o! x
void output_sample(Int32 out_data)
  B- n, V# m  @7 l; V{
6 C" i4 W( v! ]- v, r& a' s; Z: z6 |  AIC31_data.uint = out_data;  9 q2 p  F' E1 E# @: h7 g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 T1 R% E( s/ R; a
}3 y$ |3 K8 j, a) K
: d% G8 y% V* c/ t$ e4 l( K
Int32 input_sample(void)
2 p6 w9 s" _. a! }% @{  " L' q4 e5 o: b; d+ f
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 Q7 k9 j7 A! M6 u- ?  return (AIC31_data.uint);! U- @; B  ?* J# s
}5 m( i1 F2 a& U! p; r5 j1 m. Y' V

* s- k+ k. b3 x6 ?
分享到:  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-24 23:21 , Processed in 0.038036 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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