C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 g7 g' f9 Y* }2 a( ]# R
main文件:
* k3 ~) X# s2 M; E. ointerrupt void interrupt4(void)  & U+ b9 H& z2 G
{
, K. J9 ^9 B4 z% x3 o; d% n" b8 o8 a  Uint32 sample;9 V% `- a8 e; L: T  v6 N$ ?! R

+ f) ]- |" J  }& n  sample = input_sample(); // read L + R samples from ADC
4 e/ S  n* f; I% G  output_sample(sample);   // write L + R samples to DAC   f7 U! B3 t  [( l7 P
  return;
# Z" C2 G  Z3 m* K. h}
/ D3 G% e1 u9 R; I6 Z# T; d5 O) i- a8 s4 }! e( k0 D6 y* U+ G
int main( void ), D6 d! d$ Z% D! P: q% L
{
  b2 Q- f. q2 ~9 ~
* e0 o6 U$ h' _    /* Initialize BSL */
) J. \' ^, B3 @( }9 y* \    EVMC6747_init( );
/ M3 g- R/ y- y        /* Call evmc6747_intr function */- E. x' U( M: w
    aic3106_init( );8 ~* P5 P. u  G* \. J  ~
        while(1);; |8 f$ j2 g- n, j9 U5 o4 S; b
}
# q5 ^( p% @# i$ ?  F9 s
& V* P7 M5 F3 }7 e' G" \& k9 E& ]4 w. Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: C3 _% {2 b! i4 I/* Initialize MCASP1 */1 }6 o1 W3 E. F$ C+ z1 U6 e
    mcasp = &MCASP_MODULE_1;
0 V' F( q. i, O5 c  t1 J    mcasp->regs->GBLCTL  = 0;       // Reset
2 R2 k! D* p8 V0 B# s, e    mcasp->regs->RGBLCTL = 0;       // Reset RX
. R' Y. h/ _; u4 k$ I5 F, Y0 K$ c    mcasp->regs->XGBLCTL = 0;       // Reset TX# J3 d" y7 O. u) o3 }
    mcasp->regs->PWRDEMU = 1;       // Free-running
! m  Y9 B) K4 q4 s3 D# D; X" E- E   // configure McASP0 receive registers* g# M1 @  D( t' E, N
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 g7 G: T9 w" m% w
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- ~% A# }. E9 k* @" K$ V4 y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! h+ E9 w& L$ X  L9 C! l4 _: F
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; d; K$ X( J( ]5 w' e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! e$ V7 ?* T1 b" i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) G0 s- @5 T1 p
    mcasp->regs->RINTCTL    = 0x00000000; // Not used  Q$ _6 ?4 @, @3 N' v1 H
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: U' m$ g1 ~) p. X* ^% x/ H& T8 a) r' {
: p0 F  p" w( o4 \& i; @' I    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 J6 i) x+ `) P# V1 G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 c1 ?& W" s& \6 o/ F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 ^$ Z# O$ `) n( ?4 y5 b    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! {- ^' m- s0 U
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( r  {& Y/ G1 g" W( l4 D9 h4 R    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ W9 w: C! ~4 d7 p% K2 f
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) o% Y! |2 Y% E, }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( @+ k- I# x& ?5 c' k2 m3 _1 J% H* C$ f' o/ v
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 z4 n3 }6 v0 ^) x8 k" S+ I  }
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- ~+ }' G5 M" [4 L1 b2 r5 e4 B
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 W1 e, |* {! O% ?4 b$ k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' U( ~& _/ u  d2 H' E

4 i4 u, l  ]0 j$ ]7 t6 T    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 |4 O+ s: f1 J) _- G    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. ~1 R2 ^6 h: |# ]0 Y; e    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 ^! b; i5 C7 X3 R. o8 ]9 x* o* t! N& y9 a, F/ b
/* Starting sections of the McASP*/
* s4 ?- K1 s0 {9 q1 `    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 u) e0 H1 b4 ?( d0 B- r  q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! z4 z7 ^1 a# R6 G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ _. Y( q. X# _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- h) Y  P' _( ?; o" K

% \3 U# T$ g4 l$ f6 _1 ?    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # z8 X8 w9 n" X5 q; o! T/ |7 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 g$ V5 J$ X. p7 W/ g    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  @! y: t$ Y3 L4 D# R/ G1 n: Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ~) c; S& l/ u( z
4 T  m8 J& U& X- h    mcasp->regs->XSTAT = 0x0000ffff;
: r$ F+ M2 d" t% ^    mcasp->regs->RSTAT = 0x0000ffff;
% g( K: s$ F/ B& ?* `  h( a; B3 @& c& `& z( H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, Z4 ^4 \% }1 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: l( o0 b# K: {  i6 h2 Y2 G! }
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 y7 f6 Z( Z6 s" t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) p9 ~, P  u- Y# W$ Y/ g, v7 M$ q" h' T9 p0 C
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 r1 @# s* @6 T- c0 d9 Z& b7 d& q    mcasp->regs->XBUF5 = 0;; g4 F- v* e  U, H
    mcasp->regs->RBUF0 = 0;
& B9 L' f1 g; c
* S  N$ D. q% L4 ]2 a- f4 E% p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 q) ~! B! o; P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 B+ s+ C+ k. u. s' _) L: R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- D6 @" R# ]+ V- G- k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" o3 A3 W+ Y3 s3 V' Z

4 r& _4 e2 p3 _, ?7 j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 C0 R  {; |' Z, {8 f8 |5 _" i: b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- r5 @2 g9 Z! N- y( u$ j
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' C2 d" D9 U9 ~* Y* w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( }/ l8 o! I! Z

9 k& C/ u3 L( O4 n  F; A/ S) y    CSR = 0x0000;' O+ W- v% }$ ]
    INTC_INTMUX1 = 0x3d;
3 _! M& R6 {9 ]) _" M, E- e7 v    ISTP = (unsigned int)vectors;0 g! b( w7 S2 z
    ICR = 0xFFF0;    A. f( m+ h7 }/ f' M6 _* M3 I
    IER |= 0x12;  / q0 V8 x- P# c  ?$ v
    CSR |= 0x01;  
* B; B/ `# a( b; s* ~; |
2 W: H9 G7 O  y9 {9 d9 v# l
$ g) ]8 c. M5 I4 J: d* A% M, T
: z2 u4 J. }; _# N8 b还有就是两个输入输出函数:% u, f2 I# d! Z" j7 A( r8 }! _: r% H
void output_sample(Int32 out_data)6 a+ j. K/ F4 ^' R! F! Q
{+ D% j3 n. \$ b& j& S& |$ g
  AIC31_data.uint = out_data;  
; T& o* L$ S7 l0 _  MCASP1_XBUF5_32BIT = AIC31_data.uint;! Q- x/ R- Z% ?( }- t  m! }. _+ G
}
# f& c6 ~1 Y* Q; G5 B: F$ @
: S' R4 h& n( Y; jInt32 input_sample(void)/ I' ~; p6 v$ Z  f/ H% l7 |- i. o) B
{  
) [" o6 B( A; `- p) L  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, J4 V* U! o) w& Q  return (AIC31_data.uint);
4 a% h9 j- Y+ M0 a" r}
6 v) w! X/ C/ [2 g1 d; k* K4 H9 [/ |2 f- E7 d# Y" C
分享到:  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, 2026-3-14 08:54 , Processed in 0.041448 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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