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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& `3 Q2 P# @+ j+ P) K* ]* r
main文件:
$ ?9 T. A- N2 d0 Winterrupt void interrupt4(void)  & O  U5 T( P4 s/ {* {
{* H' @' k9 F0 o: ]" @/ H
  Uint32 sample;. j( }0 w* [& f$ V3 K  {
- |4 d7 w2 B: D* _1 B7 [. ^* C
  sample = input_sample(); // read L + R samples from ADC
' _' N' M; p5 d0 O  output_sample(sample);   // write L + R samples to DAC 6 m: k, d- O" V1 ]) b0 H3 c. ~
  return;1 n" A5 Q+ C3 Z, I1 d
}
5 b& D9 Y) N0 D( p- q
7 U" i  X$ w6 G, r; X7 Y, u- Oint main( void ): ^* W; G; l+ i4 }* r4 f- I! b  Q
{
4 c/ L: u4 x  b) b  |1 n4 i7 B5 \4 F: Y$ w
    /* Initialize BSL */
- v/ R1 s: [* h    EVMC6747_init( );
& u5 t" A0 y4 Z6 P$ l        /* Call evmc6747_intr function */
5 \' j4 f  [  g6 E5 V8 R    aic3106_init( );0 k# d# w* E# F. r$ Z( D8 D0 }
        while(1);2 e* k" H- Z+ o( D" b, t
}
7 H0 \" S  [+ ?6 h/ z% Q% N9 Y0 ~/ \& r( r2 Q( G+ u% L. C
8 l5 _) g  l% {, ~2 O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% E. M4 r$ j  t* ~+ N$ Z+ _9 g1 i
/* Initialize MCASP1 */8 w7 G9 g9 @  L1 `+ B; y) \
    mcasp = &MCASP_MODULE_1;
  J2 K. R1 w4 l# `, L* r0 u    mcasp->regs->GBLCTL  = 0;       // Reset9 K2 k, u5 ~, F) H+ [
    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 ]1 D) |; j& `* ?    mcasp->regs->XGBLCTL = 0;       // Reset TX
, S; S8 M( T1 n8 |- E/ d/ j    mcasp->regs->PWRDEMU = 1;       // Free-running$ k% [# B: e5 A1 z/ r
   // configure McASP0 receive registers: X' g- G7 r* F7 }
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% e8 ]( ~7 U( y) L: ^0 ~7 w    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ R, r, K; ^* @6 ?9 U) r3 m+ N
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 \( O& ~6 Z6 z, c
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- ?; ]. h( t! t: z7 W
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- K2 R3 v9 [. d% _5 X3 M+ _. g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 j* l- S  ?" X4 i" C5 W+ P, F# S; [    mcasp->regs->RINTCTL    = 0x00000000; // Not used% }8 k# ]* K, _) [3 F  F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" U0 q2 t/ p0 k- a  B( ^, U) N. D' j6 Q  ^/ @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 R7 L1 R: W1 c1 J( _    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, p6 N' E/ M% A. ], m" Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ S! C0 b0 ~; u
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 i2 @6 J( \8 l# I# F7 V8 p
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 x; q2 N$ p% e0 A* P# C    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( I2 B7 K( x+ v$ ]  c$ P  S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 c) S  c4 I! P7 j5 ]* H9 A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- o& A* t* f! o/ z
. j* O% u. C& i; H% f! C4 a
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 b3 v+ T) o' @, L% g# w6 k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 P+ R, n( j+ L; H  a3 j    mcasp->regs->PFUNC      = 0;          // All MCASPs
! H0 B( Z0 w, ?) i0 w    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 x9 u3 d% b' J: T
) J+ q% r7 q7 M# I/ J0 L/ g& J    mcasp->regs->DITCTL     = 0x00000000; // Not used4 t( z4 d$ M4 g- N* s$ n- `, @6 g7 d' {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 b& }# Z/ H" I! a+ U8 l: B, \    mcasp->regs->AMUTE      = 0x00000000; // Not used! O" b5 {; B$ _3 a: [; [- a( K

+ \% |# q6 `8 t3 k/* Starting sections of the McASP*/
" w! Z" B7 r" _, u0 X' r8 ^    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ _4 o  D- N* d* i7 L! u& j7 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 p% y& E4 d6 n6 J" l$ R2 ~6 j) e( q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" P* @) F& |) w' o3 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, T7 s$ D) i+ g0 `- I. W% Q. l) X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; I9 M$ e- N8 k$ b9 B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 k, E: y$ r. _' J    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 w9 L* M6 K# \/ y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* D# _: b4 f. b, w. O% ~1 J" t# b/ A! j% B, `1 l0 I
    mcasp->regs->XSTAT = 0x0000ffff; . i( `  D3 {1 d* P5 l6 a
    mcasp->regs->RSTAT = 0x0000ffff; 8 ?" y0 Y7 b9 K6 W1 W8 E

% p4 G& T: C* f  N# b2 i1 A1 z2 b    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) \$ D5 j5 K) c. }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- S4 r- T# L3 U. Y1 m8 R1 G    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 i1 U9 h. [8 b& V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: j7 N9 C4 R- O3 O& l
# a4 F; |% C/ S/ n# g& A    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ g/ L6 c/ `: n& T! S* {    mcasp->regs->XBUF5 = 0;
$ L* G/ R) m, X( Q7 ~# ]& v" p    mcasp->regs->RBUF0 = 0;
3 U8 W* A5 r, P% Y" h# C' L. P: V/ S) e- q# Y# B& W  G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# D/ j8 ?6 |% M/ T' k& |# n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! A. \# X( }8 E& Z( a$ U
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & W5 D# w9 a- t* a# c8 L' K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! ^  u# b1 S' E) P
8 g! O& e! f2 P7 O
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # O6 j! A$ A( S6 e# A3 a. h( t% ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- G+ n3 Z1 c# }: \$ N2 `
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ Q7 A- {% Y; o( b  F9 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! X$ {/ Z& _/ q% z: r0 \3 {" z; r/ W' x6 V4 c
    CSR = 0x0000;( s7 ?% u5 f8 h6 z0 O+ G$ N
    INTC_INTMUX1 = 0x3d;& c# y- C) S7 g
    ISTP = (unsigned int)vectors;
4 W& j% S& c5 j% P3 ^9 b    ICR = 0xFFF0;  4 |8 F/ u4 X' ^8 s. T& K
    IER |= 0x12;  
& _- z) P, P6 {. S    CSR |= 0x01;  
  N6 F4 C' |. W( W' E+ n/ D/ |
, u+ _7 ^4 ~6 H9 a  M

! Y  r4 m% Y/ m; r. Y还有就是两个输入输出函数:
% z5 [# d7 Z; E0 E+ Tvoid output_sample(Int32 out_data)) E; T- M3 O6 L; i) I6 g4 a- a
{
5 I9 E* I! D* }1 ]  z  AIC31_data.uint = out_data;  
6 S/ I* Z3 D/ h9 x5 i7 G8 z9 m$ j  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 f- t& E' w- V% g0 i1 V}
% ?& f" d: `) {! d4 z2 Y
/ z* F, D! s7 T3 b" q0 cInt32 input_sample(void)
9 c& a& t( |" g# T  W7 w" b{  
+ v5 w9 `0 X7 d$ J" z, X  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& H" r6 v& g2 D$ j' h  return (AIC31_data.uint);
$ I; g+ e# i8 p}$ j8 ]+ [* {0 C$ I
3 S1 v# `" P* p8 t
分享到:  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-7-3 00:37 , Processed in 0.042584 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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