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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# S! H; z  B! P/ R+ X; tmain文件:% U$ @  u( L2 \: _7 ^' W8 `
interrupt void interrupt4(void)  
/ h/ ?; q$ e& E& ^+ ~7 e{
- k6 T& K$ ^: y: s0 o  Uint32 sample;( e+ k+ o: I! V. r$ k& v

* S/ j# r; L4 H* S# @, z! ?# O2 J  sample = input_sample(); // read L + R samples from ADC
5 b. x; B3 v: G. T  output_sample(sample);   // write L + R samples to DAC " O( V+ s. G& A  g6 ]& Z
  return;
, B9 F( H& ~! ~}
% B2 A: _( L9 I' z  N4 u4 n
: v) \6 Y7 C, i' v) ?/ Tint main( void )
! l2 g. A$ Z* t7 ]{3 Z; Z( R) v9 E( L

) c  {8 ~' F4 u/ |& u* K$ g    /* Initialize BSL *// ]$ w  P* H9 b$ C8 G8 V% g' U
    EVMC6747_init( );( b$ ], @$ d) ]8 r: Y) p
        /* Call evmc6747_intr function */
8 _' B: z( x- W9 m! x$ W    aic3106_init( );
1 m. {- u6 Z+ \) I3 L        while(1);; c8 G0 Y8 C4 u5 I5 r; a* B
}+ E( }# c; D  F! q; |  {2 B

" Y1 f$ ]" F2 b, `+ D1 S, A: D3 {% y+ L" V* J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 D2 x! {( v0 K; O8 D/* Initialize MCASP1 */  W5 r/ D# U* i) z
    mcasp = &MCASP_MODULE_1;
# ^- p. v- m% @  F    mcasp->regs->GBLCTL  = 0;       // Reset1 N, W' Q1 \" g7 a
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 e* E0 K5 G: z5 F( w, [
    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ T0 n$ z1 s4 [    mcasp->regs->PWRDEMU = 1;       // Free-running$ {; [  |# \% W/ q
   // configure McASP0 receive registers6 E8 C+ Z2 Z# ?- x0 p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( h* l+ P& O$ X" [, q, p, q$ N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% r  k2 Y+ ]) h1 E3 ]) O# u8 p4 D: `1 E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; ?& R+ g6 _" u2 b+ a% e- ^, j. ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  H. W. {' ?: A1 ]3 v$ K
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
# o; X8 l, b2 V& f    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. l$ U4 W! V8 }& H    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. f0 M" ]$ @& k: \6 \    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 y( s6 |$ P2 {. \8 Y6 P3 E+ K

- T- r- a2 e: t( A) T! s: I    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ Q2 A* R6 V" ?( Q# A* `! G9 M
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 t* k1 }. |3 @6 t8 h- N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 Q# o2 \/ ^; c) s. }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& I& I7 v+ h8 O& u' l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( Q) }# j* E. L' z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ `* W9 _4 I5 W. `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) Y! G, d& B2 q  ~
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ y, h& W6 X7 g' l0 L, [
7 i) v2 ?( C4 u    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( d; A, H' M- Z: P9 {; `5 M% }% t. D0 s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ `) h, n) e1 d5 ^$ L, B6 W    mcasp->regs->PFUNC      = 0;          // All MCASPs8 j6 q2 ~5 `5 ?! m" M% c
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 m# C2 k' j( Y) @: {( p) b
. K/ S& F! J2 N7 k( f7 q5 ?    mcasp->regs->DITCTL     = 0x00000000; // Not used
" c5 e/ }1 H6 J8 _% [$ ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  f! ~7 B+ I8 h4 l  H, Z    mcasp->regs->AMUTE      = 0x00000000; // Not used7 k7 Y( V. f+ L. j1 |% Q( S* K

5 d& y2 ?( d' d1 T/* Starting sections of the McASP*/
* B& L& v  l5 ?7 r( q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 ~: G# E  x( p3 `% o; h0 R6 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 ~! c1 j( ?/ S6 q& p" C0 R$ m/ k- J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 r  U; T/ i  E4 _: K: v3 P; O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- f6 s, `& g( n* a
6 _8 L3 f' A( z" H5 J  B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 O. R. n0 L+ l6 V+ f2 Z9 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 P" g% i$ H2 }/ S% @& P    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 n7 ]4 {) x2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 G7 X1 ~: Q4 m7 [, {
" l$ E# H6 O' H- k, D    mcasp->regs->XSTAT = 0x0000ffff; ' L* O. k7 c8 R' E7 U9 \  L
    mcasp->regs->RSTAT = 0x0000ffff; / J( B8 x4 R# j- r

# H; s$ ~$ f& q& |0 x* i* _/ C    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, a8 I# F" \3 X5 _; B- l- P5 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 S( E' k8 ~! Q9 G% A8 D) J    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" o9 i6 y, U+ R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ O2 q) O( {% w! n

4 m* k1 \$ ^/ R    /* Write a 0, so that no underrun occurs after releasing the state machine */$ \4 x: h8 F  p. C6 m; ^: \
    mcasp->regs->XBUF5 = 0;( {& V6 w6 m! `" n" D
    mcasp->regs->RBUF0 = 0;. G. s- j8 X3 o% e8 i$ U2 w
1 N( k2 g: \' c$ g
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 M5 B" u* s- D% }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# e( C8 z) U( U# y7 N. z7 f5 X4 \    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . d8 }+ H; R: o; }- V9 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* r/ q& G0 W; E9 x3 j. A

7 n# _: u* P# `" ^- L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' x( d6 G# E# [$ c+ l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 [. U" W+ s, I% j    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . h+ k) z+ G7 C: Q8 @/ X9 [0 z  s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. K) w' k+ h) a% I( u

7 Z4 `4 @0 k1 Q9 {    CSR = 0x0000;
& y+ E" S- |' u7 T    INTC_INTMUX1 = 0x3d;
& v+ w  Y( {1 y! t  J- Q2 Z) X/ A    ISTP = (unsigned int)vectors;5 y7 j+ I& h( p" [: A( B. Y* e" F
    ICR = 0xFFF0;  ! F- o+ B/ x0 k9 H  w; R
    IER |= 0x12;  % t' B5 R/ [1 n2 N! V& `9 T& m
    CSR |= 0x01;  
  D4 h5 j( f' z8 e5 O9 U( B$ j2 R8 h' K1 B" [

) P7 O. T  H( [1 `2 }# z: o8 ~7 y  S' Y* M) E
还有就是两个输入输出函数:7 J5 _0 g5 m  ]9 Q
void output_sample(Int32 out_data)
" X& H# Z4 \* h; y3 Q0 x{/ T3 Q. {5 e4 C) Y
  AIC31_data.uint = out_data;  5 r# y! n+ q. @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# X3 f+ C: v* l! h! g& J2 o
}
$ G; k9 E- J+ p7 \+ J) U0 D, W( L: _% ?3 k# \% _7 g2 O1 U9 c7 }
Int32 input_sample(void)
( R3 p6 p5 c6 J# [{  " H3 m4 t9 a& D5 E$ }4 D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ O( K3 x+ c1 w. D4 |8 h1 e  return (AIC31_data.uint);4 e# ?. c* i% B  r9 o5 z
}
) v& C# R9 H/ X% X6 U8 k* G
% W) F. }, z9 }+ ?* _& A$ x- c( F
分享到:  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-16 00:54 , Processed in 0.036657 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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