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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) J: U8 c- J( }
main文件:
% l0 g* a0 X9 n) zinterrupt void interrupt4(void)  - k( ?# T- h8 t
{
! M; C8 R$ [: ~  Uint32 sample;
% M- `+ S- R* A8 e
# H- x( U1 i3 t% [  t  sample = input_sample(); // read L + R samples from ADC
% N6 i, c/ C% g( V* v  output_sample(sample);   // write L + R samples to DAC : b0 I7 X8 y9 }$ a5 v, \, r5 D
  return;
8 N$ J/ P7 s3 p3 L}+ P6 g4 \4 u5 ]

" {, s" X& V, ]0 o& zint main( void ); P; W: L$ q+ G  c2 V" z. M6 V
{9 V: u: u0 \+ `" o; C
# ^* t& M& V/ A# A
    /* Initialize BSL */
; W6 d8 ]6 b, {+ J5 [" S    EVMC6747_init( );2 R& a  U0 C. ?+ u: a# `
        /* Call evmc6747_intr function */" \8 E& P" d3 D& L9 p9 ~) M5 r. x
    aic3106_init( );3 v  q. y4 w8 _. Z
        while(1);
* \$ C& F2 L$ V1 ]7 r}
; E2 s8 o7 l" N$ Y0 |+ p  `* ]4 j
5 X- C  Q, E/ n( U( _) t
, ?0 v$ Z6 k" w" Y0 y) J' `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, y) p# A1 s1 Y
/* Initialize MCASP1 */
' ?, r0 i" p# ]4 w1 E    mcasp = &MCASP_MODULE_1;
& Q) h$ n+ \1 b2 ?8 `! U* W    mcasp->regs->GBLCTL  = 0;       // Reset
0 O! _: t4 p  q, E9 w: U- g7 t    mcasp->regs->RGBLCTL = 0;       // Reset RX
: M: w. p9 v1 g) r    mcasp->regs->XGBLCTL = 0;       // Reset TX. z) {1 H1 c: A- w0 G
    mcasp->regs->PWRDEMU = 1;       // Free-running' Z$ E( v5 E! z* }$ e5 z0 M5 g
   // configure McASP0 receive registers
6 y/ V% h5 ^. M  U$ N) C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 J. Y+ m9 y( t2 F- E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; X/ G( w+ \6 i. B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 i, I! I/ U; R. z' l/ l* i
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! K- r6 r6 V  }- M$ u! s1 L  S2 [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 ]3 h  m4 E1 v. N    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 T6 G" s! D2 ~" A  ^8 e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ L3 b1 _3 ?; |0 i+ V' S9 T% |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 ?6 Q# ~, [7 `. O  [, Q* U  Y& G) I' ^6 Q' J5 G/ g! N( {  \' N
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- m) a4 k4 {2 p$ k# i6 X    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 G% g7 J% A! ?5 Z! E" A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ a8 Y+ S! ~1 k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 I: d  m  t3 r' G( a
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ u: q( b5 o/ R3 ^; Y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 {* e  r' S. G5 I4 z- x0 ]
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" I2 F, C3 D  W# }
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! M, O2 e, k0 h; _+ m
9 \6 J4 c  E% n& T; Q" t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. v# T: s! Y+ S# t6 @" u% C
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 Z  S; u9 o- I; Z; k; ^" C    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 _# r) t% J, s* |    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 q% T% |( W4 p' H& u$ U  y
) q8 H) p" K, R: K9 K' G+ }
    mcasp->regs->DITCTL     = 0x00000000; // Not used, h% |9 C  `, o3 s5 K& D- a
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% J6 d2 K6 P7 ?! v7 g    mcasp->regs->AMUTE      = 0x00000000; // Not used( v2 H9 U7 M: x; ~2 B/ R
& b+ Z7 }9 E  O" I, ]
/* Starting sections of the McASP*/; M3 h9 x4 x6 L6 d- q+ ~
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 e4 O$ Y3 ?  X2 U3 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . }/ E  I0 y, w7 p
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( \) n; C! _- {% t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ b: g3 @! j" I: y# A
* f$ u, y  |: b& f8 p3 Y; f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# j6 P1 D& L7 J' I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( z' q- n3 \! Y* O8 x+ r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 S! E; j, ?6 g% j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 e, \& f: F' f( ^7 v2 }

" I' X9 u: a% t0 F    mcasp->regs->XSTAT = 0x0000ffff;
4 ^. @) d, K9 o( d+ Y9 }    mcasp->regs->RSTAT = 0x0000ffff; 9 n6 o: D+ T  |5 n* W/ x+ }
7 I( g. `9 W+ ]! w9 H4 R2 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* ^0 M% m3 [# `- K+ J: ]' t+ G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 X" B2 e$ r2 K8 i& B/ Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* Z+ e( o+ I$ k$ o- {6 c2 e, `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. x. {# _+ C; m- v) I- F' u( Z
( S8 ~# `: O, E  N0 ~$ s0 h8 E* y
    /* Write a 0, so that no underrun occurs after releasing the state machine */' ?! c% c+ n3 u7 ~7 m9 d
    mcasp->regs->XBUF5 = 0;  ^& |- [3 r& G2 w0 Z
    mcasp->regs->RBUF0 = 0;
4 W8 M& ~  O6 R, q$ U' z6 j+ M' g
2 L* D, h9 x+ V    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " t0 h) M/ W4 ^4 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 ?0 k& T( ]4 p' J& L- s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 b# u; p% l( \) F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( h( M- n, t1 V+ D8 B) {% C
( A6 s( z2 o9 T
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ U& ?: E, ]" y' e) P! u: C0 r( G8 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( A3 _3 Y# D, {" ?
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # Q8 D5 c  N# |6 Y+ J" d) O/ o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 @7 ]! J' R/ v7 g. t5 B, |/ N9 ?; ]! J1 L& p
    CSR = 0x0000;
2 K: E8 f5 J; Q! l6 }: c    INTC_INTMUX1 = 0x3d;
4 n: X: T( N3 k7 l2 R  K2 R) ~    ISTP = (unsigned int)vectors;9 Y3 E8 Q4 J6 F2 i2 d3 f7 m4 a/ s
    ICR = 0xFFF0;  
9 ~, D8 @  ?! X1 H8 t1 C  ~    IER |= 0x12;  
" o2 |5 F! S2 K! d    CSR |= 0x01;  
* N' p7 l6 y3 H7 n4 L% u; c3 f2 @1 \2 v8 l- f2 J
- i/ s* d+ v. _
5 b2 G5 L! z' \$ `9 E: p
还有就是两个输入输出函数:. A4 Q& r, ^; L5 A  C% W1 f
void output_sample(Int32 out_data)
/ }* Q. c. `3 u3 y/ Q{
; N$ M' d: P. K, g  }& i  AIC31_data.uint = out_data;  0 u2 B5 d" j9 s% W+ p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: j$ a/ g  Q& _5 e$ X}
2 Z2 ?, s' h3 O1 m% O4 p- Q2 V
; s" \9 G+ u) \9 N9 t) W0 y, kInt32 input_sample(void)
* I* X, O# s. T* g# K" C# V  S& u{  $ r4 y7 K6 c, I) Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 f) h2 _" T+ x* v, d
  return (AIC31_data.uint);/ z+ v# ~; k4 y3 \3 b/ H8 R' c4 P
}/ t' K' U5 {& e) q6 G
" e4 U4 V! v, I8 O- o
分享到:  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-2-17 13:23 , Processed in 0.042044 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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