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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: K& F3 ^, H$ x: _main文件:4 ]2 Q, n* Y' y
interrupt void interrupt4(void)  
4 L: \8 u1 Q4 O" s, R0 b{
3 Z" f9 g4 Y7 K" ?+ V6 {, v  Uint32 sample;# K" _# t9 J( p4 ]5 W+ t8 s5 x

. C) ], L/ l; ~% N6 i, a8 `/ j  sample = input_sample(); // read L + R samples from ADC' }" }6 v' I1 Z+ C! ~# t0 C
  output_sample(sample);   // write L + R samples to DAC
7 \* t7 S4 `0 [+ z0 N, `4 J2 H' a  return;" Q+ Q( Q8 W5 ~; p- W
}
; u1 C. w( e+ U: Z. `8 r9 R4 B9 E" k( c9 W# \9 i- |. u, c
int main( void )
, U( m/ Y. e$ k8 ^{
: u4 A0 \3 R0 O$ ^# U# r7 R' f: N6 B7 G) Q" C8 q
    /* Initialize BSL */
( m$ Y* a5 F9 ]( u7 t/ ~7 h* A    EVMC6747_init( );
- E' L0 l7 w6 C/ ?+ J        /* Call evmc6747_intr function */
- m/ j' Z$ S) ]1 K. C1 L3 a' T% t' w7 ~    aic3106_init( );
0 o! L1 U% f$ {! _# ~* d/ G. @        while(1);
( L; d. j% |- y# i2 h}" O  \# k$ P) a& K9 @

! H5 t; J( _, Z' Z3 v% T; w1 ^! Q2 u2 g* O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( L9 ], B; q2 e9 A2 U: Y6 v& E& N, ?9 v/* Initialize MCASP1 */
; [# |! D( J& j: q+ b$ j    mcasp = &MCASP_MODULE_1;
  M& u* u: C( f1 L- I0 [    mcasp->regs->GBLCTL  = 0;       // Reset  j6 H) S8 ~6 n! `2 Z' X
    mcasp->regs->RGBLCTL = 0;       // Reset RX) s, ^* w9 y$ c0 G; A* u
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& h2 S5 l2 C; J' [9 k6 T    mcasp->regs->PWRDEMU = 1;       // Free-running! {6 e" ~8 s5 z  i
   // configure McASP0 receive registers
9 P5 ], ~7 r% n1 c) Y8 \3 c    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 s$ M9 T: q: }% C
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* {4 [5 c# Z' a) F3 S/ A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" n0 T# {1 B# @, E: P2 T7 u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# r. |, m# @  x" a  I1 u, e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ J% M& s7 k" ]- z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 E) J0 V+ D- q# [: V- N: d    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. J; f4 e/ a$ f1 K! X* }$ ], X% {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( _  k& Q( n! x
, ?- l, ]2 C) r* x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: h0 x8 H/ y5 b  c1 U( F- N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( D: N1 M( q* m/ G3 s7 `8 z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# c4 W6 O( E8 u" J  _' z1 I# Y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 A; s* ~" L8 G$ e9 l7 G
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 l( v2 m6 F3 f9 E0 t! {' ?4 [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
0 W6 l* Q$ u( T* _    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 a; F  a5 \1 B' O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 Q+ }  o" w; a' k4 E% B. C

1 n. D3 g3 j3 d: e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 g  p- `! b# K( t- }) r, x    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 i  q& N" a. ~. t, {
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 q4 m1 L' x1 N% e# I' {" I
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 T, l  K3 e7 n4 v# }9 s
  @5 }- {/ A4 s9 v7 l7 d    mcasp->regs->DITCTL     = 0x00000000; // Not used; K, C# X" n. R( B0 b+ f
    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ `( X3 T+ h/ }+ [) G
    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 |* p# B2 D" ^- D; W9 @. j8 w
' ]& b" _+ c8 O! c5 I9 `/* Starting sections of the McASP*/5 _& M- J6 X% j# I+ }& i
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; j2 ^2 Z3 a! O. a, g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 N' o8 K" j' K! A! e    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* k. n5 ~% u8 n: @! @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ t* L9 n' W( \% U0 }' O

3 ~* J8 ^, n# D* F  T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 Q, f5 W# S" r0 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( R8 n, f  g' T+ ^' K& y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + z  G) Q4 E7 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 s+ [% M2 E& ~8 ^$ Q9 p/ u" D; I* L( `( h0 g: W+ J; b& P
    mcasp->regs->XSTAT = 0x0000ffff;
% o6 @0 K0 J+ i4 j    mcasp->regs->RSTAT = 0x0000ffff;
9 L) l; \" d5 x
9 J5 s# \$ o0 h# E; I& ?& I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ I5 e7 J) l, n5 {9 g5 T3 j: P% F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. Y, _8 E6 U- ]8 k; Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 t( F/ I1 Z5 m' l- f' q- t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 z4 F$ ]7 t' Z3 ^
6 j- f% o0 B+ `& I' o$ \
    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 U/ t; K0 J: g  u; w    mcasp->regs->XBUF5 = 0;4 v/ j. g' C) W6 T5 [
    mcasp->regs->RBUF0 = 0;
" Z- g) ]! x+ n6 k+ |; I. U
0 T2 _' f' z, s* B7 d% \* R3 m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % J2 E8 s4 h% q5 m- N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ {8 O* _' h- F& B" ]- B9 V/ D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 q' }4 z$ ]% O4 ?* ~) S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 ^! f, o( Z# P8 E  z- Z
. \+ D2 y& j# M! @9 q( `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' K) ~9 X3 t* ]: I  P3 y; h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- B5 I( ?' @3 ~" n4 _
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; L! w, n+ u7 V6 m5 X- m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 u7 t! Z' }# Q& Q4 n3 X" v1 ?6 y) G
    CSR = 0x0000;5 B! C. A. \& @2 E& u/ n
    INTC_INTMUX1 = 0x3d;
9 G( O- a6 Z& |" [! M! e. E. }8 z    ISTP = (unsigned int)vectors;- Z( ^- ]) K) I+ X9 J7 m
    ICR = 0xFFF0;  # C* ~- q0 \+ @0 D9 d! c# [
    IER |= 0x12;  
/ Y$ z$ P; N+ W& g& I    CSR |= 0x01;  6 P: I7 a. t2 p9 m& z6 L

1 O, u. X: p/ I+ U% Q1 h& v- Z7 h/ @1 l0 j
' D. q% e: M' P5 u  Y- [  {. e' e
还有就是两个输入输出函数:
+ E9 b" @# [5 n" p4 j# |: Dvoid output_sample(Int32 out_data)7 l" n) E0 Y$ ]
{4 K3 H2 E3 R, h* P
  AIC31_data.uint = out_data;  
0 j- K0 K. w* w: K- A  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 Z4 |& [: A' X}
* B7 S( T- [/ i2 |( g
6 l# i2 n& T0 U3 `( G( T- g4 hInt32 input_sample(void)9 o6 d! t2 ]& _( Z( \) X* [2 Y" U
{  
  V& Q6 Y' ~6 o! W+ a5 t( G0 F4 @  AIC31_data.uint = MCASP1_RBUF0_32BIT;# \* V9 G) r8 J  i4 C) I
  return (AIC31_data.uint);
- K$ D, C0 E- z# R1 J& s3 s3 \}
1 a. D; S# k+ i: h
+ S' g* u2 ?) [- c5 G* @5 o
分享到:  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 16:28 , Processed in 0.040262 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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