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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% L! q! `* P; o* `% I# O) e
main文件:
0 e) N, _1 z5 B; W5 ?* H& jinterrupt void interrupt4(void)  3 q- ?1 l( G  L
{4 B& o5 l# Y3 F# Y# ?
  Uint32 sample;
" l' f) i2 d% k0 ?/ U, v2 S, k7 v! r6 j! h0 O
  sample = input_sample(); // read L + R samples from ADC' w) b  G2 M9 n; q* ~
  output_sample(sample);   // write L + R samples to DAC
, n) `6 c5 e$ H9 i  return;
1 z+ ^6 w/ I( R9 M+ e}
' y# [4 y9 u% ?+ w$ u! p3 _8 F. r$ P1 ~* o, l+ n
int main( void )6 d$ K& j) E$ W+ D. d! ~) E
{
" _: M+ j! `. l/ D# r' D0 L6 r5 r% ]- ?  H" P) E- z8 H' y% W8 g
    /* Initialize BSL */
+ T( b0 G- y0 I* \, Q    EVMC6747_init( );  }; _. R' X2 E- x- G$ l7 l" M5 i; f
        /* Call evmc6747_intr function */
: G  h# C& a1 R& C    aic3106_init( );& ]; F3 L4 s( b* M: b1 ^
        while(1);, F) X/ e4 G( L8 |
}
/ |: a& h% {1 W2 Z4 m1 |$ D. o  t6 _: y! y
. P+ n8 Z9 n) N. V8 ]. K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 J* a5 e8 J) {, P' s5 L* l
/* Initialize MCASP1 */
: z8 i8 d  C5 x) |3 q    mcasp = &MCASP_MODULE_1;# ^  I% x& H. |  S
    mcasp->regs->GBLCTL  = 0;       // Reset
  ~% p& G) i+ F0 e6 \    mcasp->regs->RGBLCTL = 0;       // Reset RX
; C+ j& t5 W4 i0 ^+ r    mcasp->regs->XGBLCTL = 0;       // Reset TX" a# U/ x0 [/ c( H9 j' m+ ?9 w* |! [
    mcasp->regs->PWRDEMU = 1;       // Free-running
: X1 \  V5 J# D( n4 _; H   // configure McASP0 receive registers
( E! }2 x! o- _' ?0 y& W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: o, `5 F# ^$ _, U# ~8 y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 Q4 [5 X  M& O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( W$ m, C; ~5 [3 c6 E% W  q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 P% q7 ^1 @8 u8 D5 U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 H6 l- n. e- T1 J6 t* s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' X- k! H& \# p- g0 H
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! r2 K2 p# }: [1 M& U" k; E
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 {: O2 a9 H5 u* o

/ `! q$ z9 E1 t& |( @; b1 k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; ?: {- L3 J' C! s7 d4 r7 Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ _* E! {0 F  M9 G' U6 N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% G! r6 K: Y% ~" |3 S# W6 f- ~7 K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% \1 E, v  o1 F6 O- d
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  Y* Y" m% {  M9 U& h, n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. m' C. M+ K; T( `2 z% d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& b- E. |: i  R/ H4 [) Z2 R* D! N! w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  r2 B: @  S- j' m) Y- [4 u& W+ H6 B  _3 t7 a
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( d; u8 P7 M! y: `3 b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: z3 r' L/ i5 a9 O9 t% A
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 B1 g% E, K. r0 L' e% P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 N( ~: G  y# b' w5 Y# k
7 T, q0 w; X. b' x* E' {9 y4 x* V    mcasp->regs->DITCTL     = 0x00000000; // Not used( k+ O, ~2 U/ \* L9 M' t1 o( I7 g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 F6 e) P9 @) `$ T* {/ j    mcasp->regs->AMUTE      = 0x00000000; // Not used
' z5 ~3 w# i" Y/ R2 {
2 O- {2 t% K: C5 G) w" Z' f/* Starting sections of the McASP*/2 y; S: b$ X& d
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 P! D- b3 j# w  G7 d3 h2 A1 a& A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& q! Q1 k0 e$ f6 m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( P4 [+ F* [5 Y. l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 F! Q; B6 x% f" \, v
) S( u1 @: `$ v$ U
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 w+ C* }5 e% L) l3 D, Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( O' j, R2 C( l7 i    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - D$ z. l9 A0 a8 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! m8 N- ^5 O  `- z

! ~9 p0 l% c% |    mcasp->regs->XSTAT = 0x0000ffff;
: M* W; P% A; S    mcasp->regs->RSTAT = 0x0000ffff; " p8 D, C) L5 d! \3 R

* ~+ a* r/ |2 W0 T6 m# ?3 E6 x4 J& A: Y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 |2 D  T2 r/ G# ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 I, b" u) A- ]5 S2 z# a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 F7 i8 Z+ v! \( `2 |" H; E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 g" _/ b8 C* p2 }! P) U2 m" V$ p& \! g
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 C( }* i7 }: D5 c" R$ j" J  Q- _6 J
    mcasp->regs->XBUF5 = 0;
' {4 _/ t% A1 ~8 ~" m1 B# G    mcasp->regs->RBUF0 = 0;/ \- Q* |& z/ P$ Z

9 e; o, e6 v% Q' R  w3 e/ d    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( T/ @) ]: x6 v, P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 w9 j3 _- o1 N
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 N, o# m# `0 s/ z7 K" I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 o5 x: r& x9 d  ~( ]
- s+ b7 j  {$ E( i1 `6 x
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( ^+ x( b/ Y1 }! k# I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' e$ D* L+ x9 K/ r
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 n) p! U1 `, y" S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 g) b7 E; [+ I, M. ~0 Q0 s

8 \: B- A( R# i% [# T6 p3 b+ |    CSR = 0x0000;, O( q6 H" ]8 }+ A8 V8 w; a/ G
    INTC_INTMUX1 = 0x3d;8 V0 F" e4 k$ w
    ISTP = (unsigned int)vectors;
5 {& p. D- z( g( I$ A    ICR = 0xFFF0;  " l7 s* V$ z, ?: v8 B
    IER |= 0x12;  # J4 W  Y/ n+ A8 X1 \( X
    CSR |= 0x01;  
: b8 {  U1 `5 \4 O0 c0 R8 Z: f+ V
' g$ s+ k8 A' t. k! ]8 H; t; h/ h& X4 e. `/ ]2 h

! P; {! i# p" q/ h还有就是两个输入输出函数:
' p- u9 v2 ?0 U& |; x8 Evoid output_sample(Int32 out_data)0 O' g$ e% A4 n* m( V4 @* g) {
{' w3 e4 [/ |# k! p. a* X
  AIC31_data.uint = out_data;  
9 w) V5 x; \; T  W  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ \1 C2 t, t7 h* p5 |  _}8 u' a6 |, J5 n

6 d, x5 W* j( z8 F' Z+ z8 P: UInt32 input_sample(void)
2 y. |1 Y. M8 Y) Y  [9 h{  ; u3 o1 P  V7 p
  AIC31_data.uint = MCASP1_RBUF0_32BIT;' v" ?6 C2 p9 {2 }2 \( t  D$ D- |
  return (AIC31_data.uint);, Q  {; c6 C3 S: s" b7 }. T1 t
}
4 o6 f$ J' R/ ^
: v" z7 m/ z" w3 L4 ], O  b
分享到:  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-3-6 04:41 , Processed in 0.042589 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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