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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! e6 Y# `& Z1 |' H9 A
main文件:
7 J1 i, R7 Z+ I! J/ Uinterrupt void interrupt4(void)  , o! N7 {) Y; m) O0 _: X% a" V" Q' J
{
, Z) v6 S: m+ B% m  D) Q: k  Uint32 sample;  c. x. e1 R: r6 o
+ s" a8 k; K1 N' y* k; [& b3 o
  sample = input_sample(); // read L + R samples from ADC; \" ]/ Z7 z# d, w' q1 i5 s
  output_sample(sample);   // write L + R samples to DAC % {- f: S  x' v; O# L8 V
  return;5 E' p' b& Y, y
}
7 o, e8 V# e% I, |" M
, o9 I' p# p9 U2 e2 aint main( void )( L* H( o; w8 _" p
{
. y* [1 v& w. F% n2 H# v" A, U$ |6 ?) Y0 H& B3 c4 d* f2 X8 a
    /* Initialize BSL */
$ C  b1 Y9 J1 O; h$ I" y    EVMC6747_init( );) I  s, d. c1 w4 ?
        /* Call evmc6747_intr function */
7 M  Q; k( p6 {% p2 E    aic3106_init( );8 m' f( `! X# A9 F/ V
        while(1);$ v+ j+ v' @2 @! J8 o
}& J; ~8 I; O  F

, p# `7 n9 }9 O9 Z% {* H0 |2 T* b; H! S- |# v: e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 B! B! `5 b/ V' Z! m8 [: m
/* Initialize MCASP1 */- K3 d. k2 X7 l# w
    mcasp = &MCASP_MODULE_1;
! S' g/ o% c  J1 O$ t    mcasp->regs->GBLCTL  = 0;       // Reset
; `: r8 p4 ~2 L% o    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 o' ]/ M2 I0 Z/ m" b& R    mcasp->regs->XGBLCTL = 0;       // Reset TX# L5 o& H- f* H2 [$ n. ]; F
    mcasp->regs->PWRDEMU = 1;       // Free-running/ z- I+ p: v! N1 @
   // configure McASP0 receive registers: _8 E& _1 b" _6 B  g  C0 B' P
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 M# D0 }+ ?3 ^0 l# H    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: `' G& D9 V: J1 Y- \( r9 h% G
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% ?. \9 f# d9 {4 R6 B/ F4 y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: e0 ]0 H+ \& v8 d4 H( @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  Q  g( O' x# E5 x2 N- V# P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: e7 j8 ?3 D, ~1 R    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ ?" p" B; d- I# A1 `/ L2 Q. D
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( x& Y' t. v6 `
- h9 h' |, T( _2 b! h3 A    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 o# L$ l2 _% g9 B# k# Q" j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ e" E' y) q& X2 \+ \( ?& h    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 f6 ~' u% ~4 O/ D3 u8 }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. _0 q0 i/ R& v" G5 Q2 Y5 j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' ]* z) a: B( e  p3 X' E/ g$ I    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# _% O7 m( W& \( \+ p7 U6 H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" V. M9 v0 i$ `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* Q/ G* ~2 z4 L% n3 `& Q
3 D. a2 I  q) y1 G, s1 R+ G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# X( ]- x. ]) `- V# u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ h/ F4 n. m8 i/ Z% R$ s5 C    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 [" ]8 ?9 j9 I- P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 r# ]# _. `' c/ E/ s% E  f
* J% n) J" c6 X9 l% i; {    mcasp->regs->DITCTL     = 0x00000000; // Not used- H1 E1 Z) ~1 k6 J
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# ~7 s$ ]  P8 r2 r    mcasp->regs->AMUTE      = 0x00000000; // Not used$ m. Z5 s; o0 W

( X' V  P4 L4 S1 ~# S. c/ u3 F/* Starting sections of the McASP*/
+ [6 r( f% ]0 `# z: l    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * t$ u; ^8 x/ N1 u: Y2 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
; `: P& W; N5 m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 C8 y/ Q9 K+ G* Y% M: ~; S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ c: a. ~; D3 e( Y
4 o9 D* V$ c% M" J+ r7 D
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 a; f* e- Q: x) \" J8 ^" R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 P2 m5 [) _: R$ m/ X4 L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" [. L2 }/ F2 V5 h, z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ P  g3 `9 A4 I. x. k& T' I  D
/ Q  C) c. J$ v! H! I. T( y
    mcasp->regs->XSTAT = 0x0000ffff; " l2 m# ~" |; S9 v* B% @
    mcasp->regs->RSTAT = 0x0000ffff; 3 b7 z! s' ^7 p$ H9 Q5 X' h9 i8 C' [
, k) F. s$ \. |# i
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 Y% h. v: O: O! e& F& q4 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* {: U; l/ l3 A" @4 X8 p" F$ M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( K  a3 x4 v/ q7 N. b: z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 Y; c, A1 I/ U1 z% z: m8 u/ m0 i1 f
( m$ C, Z* H3 y6 K: L* v* c    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ [) D5 p( u2 i* R6 p8 m. }    mcasp->regs->XBUF5 = 0;
$ _5 H/ ~- ^: _5 l/ y4 p    mcasp->regs->RBUF0 = 0;; d9 c& E) ], X% l$ }

7 J7 [% _4 d" d8 {    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- }& `5 M/ t4 ?, e! P6 m; a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, Z4 e( F6 n4 J% e% Q& H% Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 w  S/ }+ W" B& }, z. N/ ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! s4 M' o; \. B) e" o' ~( [9 o0 G( ~5 H: ~
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# x# R9 m* q6 o. E% e* m( W. a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, B7 b+ _: O* I) e/ ^3 w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 D. i7 C9 k" m+ i1 w8 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: r6 G; i8 ~9 w! Y: T* t4 \: L
4 g$ n8 f7 q( r, T% K
    CSR = 0x0000;
) W* _" `* b* D$ |    INTC_INTMUX1 = 0x3d;" |, j! j. z. J3 g$ p' I3 {2 A+ K0 |
    ISTP = (unsigned int)vectors;$ C' C/ W! V9 X& o" W( y
    ICR = 0xFFF0;  
9 r3 t4 k0 C9 h: Z8 r9 U% T* u    IER |= 0x12;  ( {% [/ Z; t% ]3 D) S9 ?
    CSR |= 0x01;  
, w) A5 z# k! n/ z0 c' ^
7 j# F3 C9 Y; k$ B4 w
7 k8 Q' L0 D9 n% w4 l
) ^  ^6 S: a: `) m0 U还有就是两个输入输出函数:
4 G6 e. B( P! z7 e) C. K' jvoid output_sample(Int32 out_data)
( T0 {" T8 K1 Y3 W{& r" B. V/ r% X7 f7 d- \& g* I
  AIC31_data.uint = out_data;  * E" _( ]2 j3 T8 E5 k: S+ S: l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( b8 w  }9 O/ ?( R+ Z) l5 u2 _; z}8 l! g: v8 }) }; _5 O: O; y
: x+ ?/ D( E  f3 P5 V6 ^: D. R7 H6 o
Int32 input_sample(void)$ C; P) ~  K7 Z0 ~; l& z
{  , S$ D* J- E; u2 C
  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 \6 Z! l* i3 m, D7 ~9 l7 ~
  return (AIC31_data.uint);" u: t4 F; \5 i
}2 g3 \. P3 Q8 t" f* O
( u# I; e! {' y5 X; q* J$ ?- Z# y# i
分享到:  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-3 05:30 , Processed in 0.039498 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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