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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 b! G/ S- k9 Y: |! t! v. A4 K+ jmain文件:
2 d$ B( D5 o5 z- [interrupt void interrupt4(void)  2 a1 i! ]1 W. k8 @+ V
{+ N- n3 q! d9 D: L9 C3 o+ n
  Uint32 sample;
. n" C1 y& b  y+ e8 b2 n6 F- i- _# k! v& X' `& F
  sample = input_sample(); // read L + R samples from ADC9 Z6 e) ^! t7 l& c
  output_sample(sample);   // write L + R samples to DAC
: ~, J& L, H6 I! j  return;7 ]0 a( O, e- d1 y! F
}
, S0 m3 B5 O9 q! c& h
1 F6 P# s* I* x' xint main( void )
$ _8 d/ U% \3 l: X{5 u6 S/ \' q9 y# Z
5 J( U' [9 d4 S" |1 O
    /* Initialize BSL */
% m" p. B6 ]# t$ T/ [    EVMC6747_init( );, [  I4 T4 c+ s2 X5 L) q
        /* Call evmc6747_intr function */
; E( b& k9 i; Y/ }    aic3106_init( );
5 \/ \7 g6 r+ ?: ?6 {) R        while(1);2 r. |% [  C. W! L) L3 x5 B  j  f2 e: i
}
, X6 |# ?; v9 b$ ^( f5 f- m5 L; U1 `+ e+ G0 W" s, r, t
* \( }3 [. c3 A  W3 ~$ c8 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, a; X9 y2 _/ P$ h( Q; F* i/* Initialize MCASP1 */
0 l2 m5 _! y# v$ C1 t9 ]    mcasp = &MCASP_MODULE_1;
. Z% K" B5 C/ }9 ?. I8 E9 e+ A    mcasp->regs->GBLCTL  = 0;       // Reset
* R$ e" w8 ]* P. x    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ o1 k9 p. ?# ~( x    mcasp->regs->XGBLCTL = 0;       // Reset TX( {% b4 O. Q$ B# `# u0 t
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 [2 r& o2 T% w   // configure McASP0 receive registers3 A7 f7 `! {& u# q8 l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! `1 g/ h2 Y! l# ?+ V    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 o4 s" e7 {8 ?. F9 O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 M8 }' ?( J' C. `4 q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ K' c0 o# L; ?0 i0 `- o7 E* A) v* I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ o+ \0 H- ^: G2 ?; Z2 T! ~; v    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, X- ~2 Z2 B$ K, Z3 u5 I    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 ^, m+ B9 z) [! {
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 S/ v" b2 H& K, @
) V7 c- F! C" ?% H5 y' ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: ?9 U4 b, w+ H5 u- g    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! Z" _! W4 X2 k  J( J. a1 B: X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) u$ y$ |+ x$ s/ z" R: g$ R9 B0 i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 w+ ?, {0 _' C2 \7 r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, f3 U8 n4 \# ~# a* {$ M, ]! X( C/ b
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 ?7 P  B, ^% ~. L$ |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: r" Z3 d1 a8 O' O; Z/ q  W% z8 d4 ^, B
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# \: K) u2 p$ e, [- L

" u; p/ M5 A) P    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 O( t4 h: a9 ]9 ]: F* g5 L/ @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  `+ _7 J3 A' X7 y- d& c    mcasp->regs->PFUNC      = 0;          // All MCASPs- |* v7 u8 k4 h  [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% K0 s5 U0 [& Q  ]# ~
. ]1 f( }$ U/ S: O4 t/ k
    mcasp->regs->DITCTL     = 0x00000000; // Not used% c: T! F0 p/ ^' b" `
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, W+ v/ N9 c3 v; A
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ \% c3 T2 j3 `
6 _! ^9 Q3 f; [* `/* Starting sections of the McASP*/
) U; E& d' o7 }' _  X0 T    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 x$ B# S# ^8 L: {6 K8 `) ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ X$ B2 H. Y* M& k6 d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; Y7 L5 c' }. R* ^8 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ y" P. k$ ?9 N" l' ]9 O
' l* [: V! y# \8 q    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& Q) Y+ n( h/ l5 E0 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# _0 l1 Q$ y! H, ~2 u% g    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 e3 a% [, M% n6 a, N1 k9 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# c7 ?+ b) @% g
3 r9 s6 K+ c( B$ K0 |4 I9 N" \    mcasp->regs->XSTAT = 0x0000ffff;
" q$ @& o: y% y    mcasp->regs->RSTAT = 0x0000ffff;
1 e* c9 H( Z4 j  u5 y9 r" f
( w& ?8 p" B9 s0 k- q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) w3 t, g. G4 ]' b2 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. x/ w9 P8 t! b% p9 @. {- }7 \( g
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   l& b" ?3 {, H3 U6 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* I6 S7 s2 I" `4 f: P. I, m9 v7 l$ @& M' c
    /* Write a 0, so that no underrun occurs after releasing the state machine */) r$ S$ n2 `) _2 E$ R$ y( m
    mcasp->regs->XBUF5 = 0;
- R  a4 V: }8 V. x: h7 d% N    mcasp->regs->RBUF0 = 0;
( Q: `, c- S# K/ u1 [
$ W. u4 ~: u7 e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; U8 i# r' y# l4 @) o( K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ |; K* G& b! H
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 k" H3 X* g8 w1 }, |5 T* A/ T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 l2 n; K0 _' F3 v4 y5 z
) o6 ~: F1 Q7 D' `' o9 y, @3 M
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # K1 v6 j" z; [7 w, w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- u  i$ _! W3 V/ c1 o. E
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; S% K: t5 T  v$ ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ Y# E4 q8 R+ k& a# I. e
1 @8 H7 u7 u( C7 @
    CSR = 0x0000;( D& J9 U% T, _7 e& {; n
    INTC_INTMUX1 = 0x3d;
5 B  N2 K- I0 k! b! q    ISTP = (unsigned int)vectors;
* T, ]+ I- p- J1 \- ~- L) H9 v    ICR = 0xFFF0;  . S3 z: H% e4 n9 j  r$ x# _
    IER |= 0x12;  5 h0 p& D4 c0 P& v+ X& H& Z& r
    CSR |= 0x01;  
9 R% x( i' p0 T/ {) |; x- e5 Y0 O0 O3 N" B& h

) X  u- H- u  Q: }0 k
/ r7 y6 u+ |* u8 P( ?还有就是两个输入输出函数:
  N8 S/ w; y* c& E% G2 K, j3 A0 Cvoid output_sample(Int32 out_data)% M5 k0 _' E& o4 _9 T+ s0 B
{( U( V1 G( e  D: @3 w
  AIC31_data.uint = out_data;  ) v- a2 @2 Y. j' y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 e. G, ?3 X. h4 A}6 r7 h+ J) c# j5 t( C8 K
4 S4 x% t2 Q* @0 A# R2 O
Int32 input_sample(void)! e/ L  ^& B7 v7 \& W
{  
3 x: p* f( w/ ~0 r  AIC31_data.uint = MCASP1_RBUF0_32BIT;& S9 m$ u* g+ s& {' k; d8 v
  return (AIC31_data.uint);! \' `- f4 v. m( Z( g+ z$ I9 o
}
6 A7 t: f$ Z! o
& M  A$ O2 }$ U: S' [5 [5 q# a
分享到:  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-3 14:26 , Processed in 0.036648 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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