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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" B' s+ B& x/ B- R0 v
main文件:
5 h0 M2 ]% N" ?& G1 Tinterrupt void interrupt4(void)  2 s+ E0 h5 _/ W
{$ G5 A& v+ ]5 R6 P* c
  Uint32 sample;
! N2 E4 o9 t1 Q6 H3 q
/ w. L& ~) }# V- s6 ^6 V  sample = input_sample(); // read L + R samples from ADC. E% l3 w" l4 o  |
  output_sample(sample);   // write L + R samples to DAC   u' P( r( q% k" W5 t' g
  return;+ i* y+ ^( C0 w# q& k& s7 O5 A  x
}8 Y+ F* b  S0 [" q9 |7 b
0 T# f0 |. z3 j) y+ j% P1 c
int main( void ): d, K2 U# ]2 h$ w# o
{
5 n1 Q5 n: j; s4 \! s
& b5 [* I$ a# i. s: A    /* Initialize BSL */3 }: g/ @+ G; p+ Z& s8 Q1 }8 w
    EVMC6747_init( );% J% z% F. U! n+ G
        /* Call evmc6747_intr function */+ {6 b( j2 m+ C
    aic3106_init( );
0 j7 o% R* K- P- K& \. |/ v# Z$ J        while(1);) j# N# c: h4 `" |3 f0 K4 r- c9 I
}
3 ]/ X( ?8 N( [- r; s
, l& O6 c/ k) h# ^7 @& m. i6 |, s( @- O% d
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 k( N& L3 _5 n  r: S
/* Initialize MCASP1 */
1 I: K! _! \6 Y    mcasp = &MCASP_MODULE_1;! f* x7 n- l5 Q& T# \
    mcasp->regs->GBLCTL  = 0;       // Reset- c0 c" p. B" z" F1 u& p4 t
    mcasp->regs->RGBLCTL = 0;       // Reset RX  ]* S$ u! u9 f- O
    mcasp->regs->XGBLCTL = 0;       // Reset TX
! c; \! E  ^0 m1 h    mcasp->regs->PWRDEMU = 1;       // Free-running4 @) B- i! I  h1 j; V! j( w
   // configure McASP0 receive registers
. ~9 S$ @+ i) J' _4 w8 R7 U3 p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 X$ V! C+ ]" w8 x4 a, O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, f* l- F/ x, U; j4 f; [
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 U/ V/ h' c* A- T$ p% c5 U2 a
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 i# d. Q# h7 c0 @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) [- m: S5 F4 L7 L# ?    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ }" [" L2 |5 P; U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' D1 g" J$ a1 w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ c2 D" J+ ^) V$ f# b0 A2 T
1 A; K2 O1 M) F, t' N4 @2 p: M' L
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  m7 \* ~( L$ x1 p9 I8 P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 b' I! H5 U  N6 i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% i' J, |' C. i3 A; Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- Z/ \4 ~- [/ c/ y$ M$ ~: W    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 y+ q# w, Z( C) u    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 U5 z" @8 s, y5 f3 h6 y$ `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 d: B# U: C" c  e) y/ w/ W9 l* X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' c+ n! J: H% k- y* ~) O% Q& k+ q( f! Z" P% y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) x: X: p6 `" y& {' ~0 c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 D) T; m9 v6 _
    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 E6 i$ O& ~+ c0 }3 ]3 y% O. i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# h$ @. N9 Q: B# r$ }) p
7 @! d+ m( u7 s# F: l4 H, I% k$ K! V
    mcasp->regs->DITCTL     = 0x00000000; // Not used' k' A0 a4 }* L: F: |
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 o- |* I2 V1 G7 a! x7 L, O    mcasp->regs->AMUTE      = 0x00000000; // Not used+ H) p% K4 M( h- p6 Q( Q* [, T

' ?: e" d/ n  P  {0 V/* Starting sections of the McASP*/! p- u) }* _& y2 _3 M
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 U7 h7 }- S$ J8 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  * h, Z3 z  ^1 o( v2 {# o2 t; P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* s2 j% b- T  y0 K5 D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# w# ~& @: J) a! s3 e/ k% B
: }+ [8 p1 V& N& o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 n% Z5 h- S  x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  T0 l2 [" r; P# C7 Q* v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : j4 q# p2 [: B7 j6 s" ?1 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ p6 s; c" a1 J4 o2 c: c9 q

8 @* d8 Z. d7 J  @1 `: G    mcasp->regs->XSTAT = 0x0000ffff;
& |9 j& k0 Q3 k& z3 Q! L6 f+ w6 f    mcasp->regs->RSTAT = 0x0000ffff;
' C+ S# ?8 E# L& h
! K3 P* I$ B" z7 d/ N1 v) [/ p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 \; J/ ]6 I) c! ^/ e) d& C2 l7 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 ?$ ?; j) u& a- |& p
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 n  y- l( d, h: c5 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 c7 V' @8 P" [! k2 N: J% Z5 ?8 X4 a+ F* E
    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ K" t& {/ N- t: g7 v# \    mcasp->regs->XBUF5 = 0;
0 T9 n- u# e' \3 m    mcasp->regs->RBUF0 = 0;
& e1 j! s$ P4 N5 f  @! u  K
4 h. @& B2 k+ v1 L    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * K2 g) s$ e5 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# _  C. y2 \, O: ]0 \7 Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 j+ _3 q1 p8 O7 y9 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 ]& w2 I) p2 \7 ?$ |

+ C% @/ B4 O9 f- U: K. ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ O) C1 ^; Q* }$ I. E3 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! O6 f  X; R" d6 z; |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / Y+ j; j6 }  ?+ W# k1 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 {+ O5 \; g( ^! B6 l

" R' E' c) ^: I' e    CSR = 0x0000;
2 u0 ^1 a; _! c' ^: _: v+ ~& e    INTC_INTMUX1 = 0x3d;3 C4 N! f0 D% Q( _' M
    ISTP = (unsigned int)vectors;- i/ Q1 O1 M0 R" C) o
    ICR = 0xFFF0;  
% E' j- g+ t* O$ s, n    IER |= 0x12;  
2 g: k- t7 A+ l* T8 a    CSR |= 0x01;  
. X  r3 p; S- f0 \+ W" X
" p- q. W. e4 E4 f3 ?
8 q3 d+ }, K9 C
- z7 z/ D* x5 L6 n) d7 g还有就是两个输入输出函数:4 D! L  H) [. [7 P) |. A
void output_sample(Int32 out_data)0 N2 B# N- V8 u; G3 O* O- X" R
{2 W/ B9 d2 l. |6 z4 w- i0 B9 s
  AIC31_data.uint = out_data;  $ o8 |- Z! o: r- E
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 i6 R( ]5 O* W' h. }
}
/ ^4 m6 i2 p' i6 e- q6 ^$ x) a2 Z& G0 R+ l- V5 l5 Q. P
Int32 input_sample(void)
' E: |( m; ^: r. k{  
8 k4 L' z4 k- [7 m, W+ A  AIC31_data.uint = MCASP1_RBUF0_32BIT;% O7 @$ C* f$ f6 K# a# V- A+ n
  return (AIC31_data.uint);: R$ l9 ]  Y2 I- A' G3 @6 {
}
8 W) i- n# u4 J/ [9 m! @+ \
1 F, [; Y% {' Z$ r
分享到:  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-16 03:49 , Processed in 0.039156 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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