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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 k6 X9 g9 S3 S# Emain文件:
  X0 H& k$ y' l% z, i( Winterrupt void interrupt4(void)  
* i! v% F) }6 k- @/ O  q: z{
& x4 W4 `; C+ p3 x  Uint32 sample;
6 P/ F9 I+ l( t% P: K0 E1 o9 I' R+ M* R8 y6 w
  sample = input_sample(); // read L + R samples from ADC0 @; ^, M% }) t& d' _
  output_sample(sample);   // write L + R samples to DAC ; @& I& @' s3 {& B; w! B
  return;* g9 @& i! s9 @5 N3 e
}
; t$ Q) d3 s9 G
' B& A& q" I' X, O4 X+ iint main( void )
) F/ s, l4 }8 s6 D  u' i) _{# Q5 Q, V9 e! R) \) E/ Z# U

/ ]# t' A% S3 @5 B    /* Initialize BSL */* ?0 Q  k% y9 [, K2 x
    EVMC6747_init( );
. ^9 M$ _( J. Y        /* Call evmc6747_intr function */
& h$ d& r! ~2 ]8 V8 f. Y. G! _    aic3106_init( );! \4 I, \" m& A
        while(1);
4 h. {+ r9 X6 K}* ^+ Z' I/ S; o) M8 {. P
. E6 J0 d  u* V) O
3 z: [+ ?# C) R- k& I( Q+ A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& m$ @+ E  H% J( o8 d' ^/* Initialize MCASP1 */
' p/ [2 O: L. _2 v/ m& t    mcasp = &MCASP_MODULE_1;
% K8 B8 Y" B  {, j) {& P    mcasp->regs->GBLCTL  = 0;       // Reset
, E& P$ y5 r, V! N5 F& V    mcasp->regs->RGBLCTL = 0;       // Reset RX
- e8 B& n$ i& y! b, m    mcasp->regs->XGBLCTL = 0;       // Reset TX2 d9 \: A# u' U: [3 g% z. [
    mcasp->regs->PWRDEMU = 1;       // Free-running7 r4 w, E$ j: O' o2 m
   // configure McASP0 receive registers; o3 A. g$ s7 g! v  X- D
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used# M, U; O+ u" T# D' q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 `3 ]. b2 S* ~1 U9 p# ^# r  f* Y' i    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' r4 c( U9 @4 m( s" _1 S# L    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 c) ~- y7 f, A% r! G! f    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 P( a. C$ e% s( P- w
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 T& J4 m: g0 P; @; ?9 R    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 I* H; ?( Z# z: z: O
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% B+ A% u1 b8 j" n) X

! j- A3 a1 K1 v    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; O  e4 N4 \# \2 V7 _! D1 u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% p' o- u, C( z* E  v8 P. R# n! w' L3 l, \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' m5 j& ~* y3 C& M$ p4 o    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 ?3 h4 a! l0 y% j1 Q; c* s& S
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 n9 k" F; d% z. q. u8 D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  f8 y; e/ F0 X5 a, L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  O& _* \4 W8 f+ r  }/ m! J
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% c$ z3 y1 ]. ~6 L  P, r# B. z8 s
8 W( q; j! l8 }) h, j8 I5 I; I- `' K- P    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 V$ i' C. `3 V3 m    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- R" P9 g6 K$ g5 O9 V
    mcasp->regs->PFUNC      = 0;          // All MCASPs; `1 h  i2 W1 g2 y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 }" _& p- D9 `) j7 S

6 G( ?1 v: z* J$ e( F% L, C, J# L    mcasp->regs->DITCTL     = 0x00000000; // Not used8 d0 C) S6 i! {% J
    mcasp->regs->DLBCTL     = 0x00000000; // Not used! z  }9 \7 V- Y  {3 J
    mcasp->regs->AMUTE      = 0x00000000; // Not used# C+ s1 v9 K$ X' Q) d( a, q
' z: B1 V7 Q) q: w" }7 ?( j2 }
/* Starting sections of the McASP*/
; Y5 n$ S4 o# F. a$ e! `    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 F& F% E9 d0 o$ b- f. b: y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 j0 n& E5 u: J( V4 w6 r
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  b: W& m6 C4 g; S5 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" \! ^% n  }8 a' n
! z% \9 k2 x" c! v
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* s5 z" _9 A- X. F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 x- r; Z' d( N; o* V# S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* C8 W4 S; ?5 O' A+ O8 O0 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ l; P9 b/ E! E2 Q9 l; f2 Z
, C6 _, _4 g1 L; }
    mcasp->regs->XSTAT = 0x0000ffff;
2 \( u6 _4 g, N$ ?$ I2 y/ X, R" E    mcasp->regs->RSTAT = 0x0000ffff;
4 C# Q0 t3 T1 E2 Z' `2 a% N, L1 S5 y' i' q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ L# x4 ]' {6 u' M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( H. d, y: P+ {) E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 P0 x$ M2 q- l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 C6 ]" S0 m1 ]- q7 o5 E

' g- u9 r9 ^! x    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ k: n- E* x1 L; D    mcasp->regs->XBUF5 = 0;
3 c1 w; @  Y& d' X    mcasp->regs->RBUF0 = 0;: a5 D' n( A# v2 i! c/ T

' }& r+ d- n% f1 l. u, s: k) f# M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 s. t% y4 A6 t  c4 j2 w$ U2 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 W' b1 H+ |7 y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! ?6 ]( T8 A) \6 s6 c, _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) j( v# ~+ @8 X
9 L' m8 A+ G% ?
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 c# b8 V& c! q( q7 i' a; V3 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 u0 w+ n# R/ x/ s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ K/ \# `  A. b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- [9 @( n& p1 ?, [* E& f3 v$ n# R2 d" x2 a7 A
    CSR = 0x0000;/ p& ^. |8 c% F2 d
    INTC_INTMUX1 = 0x3d;
$ i- }8 ]& u* K( Y# u/ w    ISTP = (unsigned int)vectors;. s0 i  O& z( G! \) o2 N7 y
    ICR = 0xFFF0;  
8 ~7 u4 R. K$ u" P0 R7 g! {    IER |= 0x12;  
: e$ {% W, R! }# y    CSR |= 0x01;  8 w0 g6 i* _& B6 I. f9 ^
: i0 ^- l* f3 y  w) f
. u8 M" F' n6 ^, ]! Q- K

# z! \) I; w1 t还有就是两个输入输出函数:
, q% t4 D+ x+ e0 J3 K5 t$ Rvoid output_sample(Int32 out_data)
. z$ k+ C/ R9 ]{& d0 X* j- e$ C! [" w6 r# R" I2 |
  AIC31_data.uint = out_data;    D! N. f/ }4 i6 w
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& F1 ]* Q/ r- I/ j8 D" P) v2 a
}2 U8 v' c! [9 `
: j3 |5 E) h$ b. {! @+ O/ ]- y/ p
Int32 input_sample(void)
) g5 [( i. C, G% \{  
% k) c4 z1 O: x; }1 X  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& ?& u! u# N& ?8 [  Q* w5 d$ w  return (AIC31_data.uint);3 d! ^6 _' {$ \- j! v/ [
}
( E$ C' ^6 L$ U1 {. ^9 ~; u# Y- A( H6 P7 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, 2025-11-12 20:41 , Processed in 0.038771 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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