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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, J7 \5 \. m4 |& ]" H% G; y
main文件:) n( O2 o5 k! {
interrupt void interrupt4(void)    z( l8 t3 K( _; L! @: p5 g
{
+ y; w9 l+ ~. T. k+ a  }  Uint32 sample;: i8 H) f' J' T  c: h% c
/ l1 n+ r  C8 k9 x
  sample = input_sample(); // read L + R samples from ADC5 a9 D% e' s3 T
  output_sample(sample);   // write L + R samples to DAC
+ [5 K/ I% u) a- j% c* I  return;- m% f* ]7 ]& b& k' X' ~9 F
}
: d8 b! H' ^: S2 @  B5 r9 B% S% X8 [3 ~# O; v* R$ U% ~/ h
int main( void )
8 j/ I. G' c# h# E. V# N7 }2 j{, \! K( F, y. \. N' y

; E1 ]% g8 s! X; \0 W    /* Initialize BSL */
* e: l4 j, ^* [! z    EVMC6747_init( );
9 t4 p. t4 m4 l# S. x        /* Call evmc6747_intr function */7 t, u8 j- ^  [$ b! d
    aic3106_init( );
* c9 X9 p) l$ b        while(1);2 \2 H5 C( g* Q( o
}, \/ y8 `# ?" n

2 c# x) D" i+ a0 o- J8 m# X" v, }: _) P' R3 [& }9 I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: z& [& s8 \" H6 Y# D6 Q/* Initialize MCASP1 */* I' x: j  q; d% i5 ^
    mcasp = &MCASP_MODULE_1;, S/ G$ G5 G: l4 g
    mcasp->regs->GBLCTL  = 0;       // Reset) d* D1 }3 W! c* q  d6 z& J3 v
    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 c* H4 L3 T7 s# T& g    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 W2 E, p% L# r3 o    mcasp->regs->PWRDEMU = 1;       // Free-running
5 U' B6 q6 u( x   // configure McASP0 receive registers
) k: H6 p  {( ?/ C+ y5 x  S& y5 z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! r% ~- \  O4 J2 ^, W* q5 t
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 A+ S9 J3 t: e! a: ^; k4 @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" u5 u* S* T( e* P    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" G5 d0 \0 E4 X9 E    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  V! w9 t% }; k6 f; H
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 |  ^6 {1 B- j    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; \& y% @0 X' p6 G& m" d( K# f    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- T/ V$ @) |: c0 @. G  l" r' ^4 G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' d; [% a# S' J6 _$ O; c6 q6 ]    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ Q/ \7 Z, n) v* c0 c
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 P* L8 V) `/ N0 w4 g% J$ R; w7 s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 O3 T- m( G3 e) c, a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% @) \9 J6 m( x) K; i0 d$ _
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# z& }1 t; i( ^& ^) W
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 w, ?: j3 g( D) V: n0 m5 }5 j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 ]8 G4 ~  n$ s1 H1 P8 {7 b3 }8 l5 T8 Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 g* u* _' E) P$ c$ I    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% @+ j1 m1 J  W
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ P' ?% i5 M6 S, U0 M+ i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  \1 a5 _6 H* C( o9 P

* t6 z' ]8 Q, F( t    mcasp->regs->DITCTL     = 0x00000000; // Not used
. f! @) n6 v( e5 F. p8 Y4 l) y    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) S% T4 ]7 X4 G% T0 C    mcasp->regs->AMUTE      = 0x00000000; // Not used) Z2 w7 w6 j3 i) b

# s0 m: J/ A  ?& Q  E/* Starting sections of the McASP*/5 Z7 Z) `5 [- I: M
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 O; O. ]: f9 F6 J- Z! T3 n; l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' @! G9 z' D: q; S9 c- y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; q4 M5 e8 v, B0 r" C$ I3 b/ V" W; R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' V" e# d$ n& A% C3 c; |# d9 L. x
, }6 B) \* g3 V. c% S/ h
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' k' F$ g9 k& a) s' q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( W7 |; U. m! |4 x1 f    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 E* t$ J5 r" J) A6 |" I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 K( |& d0 F) n! v; a, o, B: D! {( R" Y/ I6 ?2 L
    mcasp->regs->XSTAT = 0x0000ffff; / I* ?% Z2 N* h6 T! ^
    mcasp->regs->RSTAT = 0x0000ffff;
; D1 q) |- X* r! c$ h; Q7 j; ]: D( P, c- b( a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" j1 ]0 n! K& Y+ @$ X$ ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& v# r8 ?4 }' R" x4 s8 D, K    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: e$ |7 ~7 t% P8 A+ \1 f& _8 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ E( D4 ^+ o+ P! o
2 \! ?2 K* K0 M: I    /* Write a 0, so that no underrun occurs after releasing the state machine */. Z& x% [' _" s7 Z0 _) N
    mcasp->regs->XBUF5 = 0;
6 O8 h( A: S, Q3 l  D" L    mcasp->regs->RBUF0 = 0;
9 v0 ~7 E* K7 t) \9 O  ~
- U' ~9 S9 ~7 k    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( s& P4 x& H& R! H! v7 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 z$ p/ A& ~1 v! |( `' \    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 [( G' b4 i# ]8 }& ]7 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' F% {+ H& }' d+ I8 T

# J0 @7 o  l" g4 b    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( O1 r$ o" Z) J& ]0 ]8 k" K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) q3 c- \5 u" W, e/ |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 O$ K: ]7 @$ @5 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' t  C% g1 f' o- l4 ~# E8 H3 w( N6 l1 E
% T2 C+ I7 c% ]& _2 N3 L$ u$ \$ j
    CSR = 0x0000;
% E+ u/ M; T. w+ Q4 L- O& a) h. s    INTC_INTMUX1 = 0x3d;
7 c% s0 m5 p4 q2 W( a1 Z# [/ X    ISTP = (unsigned int)vectors;
5 H! A' E1 _& H7 U0 V. z* ]    ICR = 0xFFF0;  
" M8 ?: N) P* S- B# M3 t    IER |= 0x12;  & I9 ?/ M7 O1 v0 l( o, h
    CSR |= 0x01;  
; K- i# V1 J( W% L" j6 `- H* T4 ?8 V5 F  s: X+ v' p
8 d  P  k8 R/ o9 J' Z
8 O9 Y8 L; T" i4 z. T. u
还有就是两个输入输出函数:( t5 S7 i) ], o& M
void output_sample(Int32 out_data)
. W' u, q4 B- ~& i" k) W% x# J5 P{4 |/ W. I) R, @8 _7 x" ?' _5 D* H
  AIC31_data.uint = out_data;  ) x8 ~& f1 j) {# ^: N) O
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ S) D; T) C4 S4 S) e; e* Q}
# \% O. Y' x. z4 C2 d9 E8 X- ~- h" i' u  P; M  Q
Int32 input_sample(void)
2 O% C2 S0 B. X  |{  / r! G( Y4 M% e3 f' B: i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 o+ X$ h0 t7 J  return (AIC31_data.uint);
* n$ h! e0 C/ l4 Q}5 D5 w7 c; s; F$ T7 F

2 |2 I% F# d& B9 V' [& D9 l+ H
分享到:  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-9 17:42 , Processed in 0.043122 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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