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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 |2 p2 I8 D& j# l! L: j' U& d
main文件:
, h" X1 ^4 ^8 S7 y) Yinterrupt void interrupt4(void)  
# G- ~" ~" ~8 Q. @+ k{
# R- V$ Z+ E3 k9 }) p; y! @  Uint32 sample;9 Y, h! X" e9 Z" w, P( q+ K; E* w

$ s; J) ~. p# [  sample = input_sample(); // read L + R samples from ADC& `5 s+ R# S$ d! B5 V5 ~1 S
  output_sample(sample);   // write L + R samples to DAC 6 g4 i& o8 a, J- {3 \* R
  return;
6 K* n- y4 @4 N/ t  ]5 |}
( Y2 w+ Y  ]2 ], c' I$ l; K' @* f9 O) B
int main( void )
. K  k' d8 W! r+ q{5 j. j- R! k/ R" z  g

) E8 E& t2 b: W+ A# K    /* Initialize BSL */, A' H4 X& \9 T5 M. d+ M, z' C
    EVMC6747_init( );
. O# e# H# I! I# Z- c# `        /* Call evmc6747_intr function */. @; e" h  G1 y0 d7 \" [3 q/ ~( a
    aic3106_init( );2 W) w. M! E1 A0 |( [; r
        while(1);# L( H' V: A8 I# e; I" x
}
0 {5 i, [, }' V- p
, E/ D2 P+ }$ o+ F" o4 G! L: u  P( I! }& A8 |: {! M3 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 a4 J, B/ }$ t. a0 t+ ~4 G4 P. I
/* Initialize MCASP1 */
0 d) N3 _5 m6 e  h6 `+ R( A6 o    mcasp = &MCASP_MODULE_1;
4 G3 k& c+ r0 `! u    mcasp->regs->GBLCTL  = 0;       // Reset
2 @4 g3 ~0 @; ?7 D+ w4 n4 t' Z4 k' U    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ p" U7 D' C6 }" @7 G6 ]" }    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 u3 h, P# k- ~. o; J& G8 g    mcasp->regs->PWRDEMU = 1;       // Free-running
  e- A. u& V1 U. l2 y' H6 y$ g   // configure McASP0 receive registers
& I# c: p$ ]) B; Q& k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' d1 i' }' r9 N! e    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! _: t# x6 u4 Y; E# k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' {2 u  c5 b" ^, T, t/ |( L3 g
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( q, C1 `5 v8 L" z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) q; |6 D9 m) E: s, t/ A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! i" c: h7 k' ?' a, U    mcasp->regs->RINTCTL    = 0x00000000; // Not used" p$ y9 ?, Y: s8 ^% e* ?: q! W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' Z" ~3 X, I$ b# r0 X- _5 H

; D/ {+ O' J% h; W6 s# w    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ H3 s- \/ N. B, |+ O, k2 x1 s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' h7 H3 H, v& i$ f0 \0 m1 O" O2 L! H* [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 V2 V0 y: c0 ?* g; Q% ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: f; I  z5 ]8 x0 R
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 S3 k) N4 Z# v+ V
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 s7 W: [( N! m, B% r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ ]( ^2 D) n  L+ a  R& H* L5 G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 v8 l( o6 P* z3 A* n
" a# @6 Y2 q3 d! ^: n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 i0 W7 N$ x* W0 ], l, T" M
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# v# w" n8 @, u" f( k) O% o; k    mcasp->regs->PFUNC      = 0;          // All MCASPs/ p2 A8 _* r; j9 p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; B* W* }  u. `% ]4 L5 l8 C' N! ~8 q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 Y! G5 Q9 a7 c* n1 N    mcasp->regs->DLBCTL     = 0x00000000; // Not used& f% Y& G' C$ {# d$ k
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 N. {% k" c, ?: Q( I: m% s' _. j

6 J  {' x7 W: `2 [3 J8 x/* Starting sections of the McASP*/* r7 M4 [; |5 H- ]/ a# T: N
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* B; Z" L' Q% v/ F2 T: `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 H1 T+ d, H% |; m
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 g6 k$ r2 ^9 x/ l5 X! ~9 I7 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' o& r) |- G) g# C' j* k
2 ^# h/ n3 \# {" H. T1 b' M! R    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 Y/ _, K( v3 p- C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 t+ S: [, s+ `/ \  G2 E9 v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* U- l7 D9 C- t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 r' z7 k$ ?$ i0 {9 A
2 t! U( S$ h% u' j7 d    mcasp->regs->XSTAT = 0x0000ffff;
3 d) D8 S* a$ V1 ]    mcasp->regs->RSTAT = 0x0000ffff; # T1 h/ f( s, ]- W

! D' N$ a6 k5 T/ e9 ^    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 o. F& h- u7 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* a% `& q/ L3 s1 h' F0 \; O$ V
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" H3 q2 d  m. i/ u9 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ S( ]0 U( A6 W: @1 E

  i# Q( k) E$ e/ ?    /* Write a 0, so that no underrun occurs after releasing the state machine */1 v. `3 e: h% N! Q" ?0 E
    mcasp->regs->XBUF5 = 0;; n) O" `( U8 }. q5 e/ L
    mcasp->regs->RBUF0 = 0;
. S; K' U- n( G& h" g# S
1 h' @/ \; B- J9 Q3 i7 e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# S1 _; _, l, j) s  I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( B! U* G0 H" K/ \+ n8 {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 s; F+ e0 z) d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ F+ x' i/ ^: b! H" N; Z- z: z$ B5 ?5 q- b* m2 }
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 b- Y9 M# @- {& ]4 [0 r. A' o7 W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ `- v% v: P: Q& q# ]
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 C( V, a9 I: {$ P1 T) U5 |1 Q8 H0 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 }0 o) x5 c; O5 }" Z: |

# y0 I& S0 X" P( f    CSR = 0x0000;
8 u- ]# L2 U& i; a( ]0 q0 t# w    INTC_INTMUX1 = 0x3d;$ r/ E' s$ e1 D4 o
    ISTP = (unsigned int)vectors;* O  ?, [6 b% a: S2 ]/ G
    ICR = 0xFFF0;  - V3 T( {) `( n% B, l' Q# w
    IER |= 0x12;  , K. o7 r8 x, l* C% O/ R
    CSR |= 0x01;  
7 m$ S. p5 F7 Y4 n$ l, o* Q7 n# T1 g" x# e0 W3 z0 b- m3 O

: L/ N/ R  \* T  y
. c( J' b) p* D1 {) W还有就是两个输入输出函数:
( c$ |; }0 e9 Hvoid output_sample(Int32 out_data)! {* t" k! B9 T' M8 \1 Q
{
+ _$ F' Y$ T/ ^" T  AIC31_data.uint = out_data;  0 a+ A+ _5 \* C2 U; @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; }7 H% k- t6 N) F* d}* l0 u; `/ a. r8 n( }
# @6 o9 |( R7 a1 h# t6 Y5 [3 D
Int32 input_sample(void)
" L, M7 ?$ I$ f{  
( D# S* s; Z3 Q7 ?  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 P: q* k& d% p& J, ^  return (AIC31_data.uint);
. y% W7 z  {4 v}
9 N, [0 ^8 d- V* a
; E1 t9 V9 [2 \& ~  o5 A2 h
分享到:  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-1-2 04:35 , Processed in 0.045212 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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