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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( Z2 w, O( l* G3 h. v* [main文件:
0 X9 M1 B( X: j& F" y: `  iinterrupt void interrupt4(void)  
* M4 |# e3 X  W* L{& M  B) _" \+ }% I, w
  Uint32 sample;9 q( B9 o. x! C" O0 }2 u( ?
* Q+ Q8 {  k$ @4 m  }
  sample = input_sample(); // read L + R samples from ADC& e+ Q0 P4 ~9 a3 I5 C- R  V
  output_sample(sample);   // write L + R samples to DAC
8 Z0 @9 T' E/ x# ]9 k5 d$ a: F. G  return;
' B8 X, ?" {2 k: B& V  q* D4 R% u}3 ?! s0 E* @4 U0 s! }

# h8 a2 p9 v: V( k, o. cint main( void )
" @5 v4 u9 ~3 k1 W# C6 b{
) P* c1 \) }0 A/ F) A% F5 S( z: L- `8 \
    /* Initialize BSL */1 K' u6 |$ W, J. I3 {
    EVMC6747_init( );- w  i2 b0 s: {6 y% S# p
        /* Call evmc6747_intr function */
9 T$ Y1 H) W. x. E9 m    aic3106_init( );
) B4 k" `2 h) k$ `1 ]4 i        while(1);/ H* O) I( V' b9 p' V$ e5 V, E
}
7 a( p! L) _. p: S, m2 p
$ h/ j6 {5 R" `$ F4 O& x+ j7 u
5 Z1 o+ Q+ H; Y0 N: gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" ?4 [( }" n) u8 m: @6 Y/* Initialize MCASP1 */9 F) n3 E5 h$ ^9 }
    mcasp = &MCASP_MODULE_1;, ~( V' p* `0 I6 V1 ]3 s# `+ h5 v7 v
    mcasp->regs->GBLCTL  = 0;       // Reset
! N1 f4 O7 ?( U, D) j    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 A4 W* d' T2 ~  C& o4 d    mcasp->regs->XGBLCTL = 0;       // Reset TX7 S7 O. u# n" u& |  I- Z+ T
    mcasp->regs->PWRDEMU = 1;       // Free-running
) _1 f. Q% d# t0 N   // configure McASP0 receive registers( [; D6 ~0 y9 k; i: K# {
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' Z) d. u( o0 ?1 N    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. [' }6 K' y9 B+ H( J8 Q  v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# v2 t- d# T6 e5 ]    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( C8 e( i1 S) \% `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 y4 B/ u: j8 v2 s8 }2 s, ~1 ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; R: h1 V( A; N    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) y. v" {$ {2 I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 P( ]  X5 q1 R, t. S
9 ~4 w, \. h( i# E" F! H& [2 }& I' ^( T* ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& _( r; G% q3 u% m6 b0 J- B    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) w0 _2 `0 S2 @! L
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% L9 o  J* t, _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 Z7 `% ~2 C1 U4 n4 a8 g6 q2 B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" O9 {8 j' C# z* E+ O9 k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  w5 f4 X+ W" b$ }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( u- x7 p0 A6 i7 m' E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: y9 Z4 l! A, N% I& h; L5 E, a
7 @3 m3 Q/ ^' K6 |. ~: I- L    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- G0 d8 A! e+ ~5 X; F6 D: N
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' d* c  `: B7 H' |2 L
    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 s: d: O! [1 X: Q. l/ J    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 A+ [+ |4 a: \. ~$ c

3 U% j7 ^$ w+ V; q& x    mcasp->regs->DITCTL     = 0x00000000; // Not used
# a) b1 F: X4 ]8 g% i, @  i7 f    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 l& v4 G' h5 c( i. D
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 }) ]& ^4 I" E% w9 }

* [3 a9 w1 L+ @$ [6 y$ @/* Starting sections of the McASP*/; O$ J7 @! E$ O/ ]" u; H4 _' b
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , X9 |2 i" V. Z7 y" x; d  v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 ~+ D# g$ g2 l4 g( ]! N. P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 R7 y4 C5 ]( Z  q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) }3 i- H2 e& s+ P# D
/ d/ I, m% A/ c- f) Y$ ~3 b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( o5 W( Q2 C. _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& }5 ^/ l* Z  X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 `$ R7 [" x* N  G. Q( }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- A$ V$ b0 J6 K: J

8 g$ `' X3 v/ v* a/ f    mcasp->regs->XSTAT = 0x0000ffff;
5 p$ L7 _$ Z: m: i+ I1 c8 u7 u( }    mcasp->regs->RSTAT = 0x0000ffff; * P1 t& U! i' x" }

0 ?; g, ~+ u  U' z6 v! C    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) u, |# I1 z# c- m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 j4 E5 B0 F8 z7 D1 ~! L# ~6 x0 p
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 z  t) ~& F' z6 p' G9 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& h/ M4 z/ n) G1 y- P. s+ v: T4 v: R! \) ^
    /* Write a 0, so that no underrun occurs after releasing the state machine */$ X5 @+ \- B4 @! [5 f  ?  n
    mcasp->regs->XBUF5 = 0;/ y3 x. x, u& Q" {% j
    mcasp->regs->RBUF0 = 0;+ `( i8 p7 i* t5 W4 m
/ `7 n7 ?8 w! D, X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* u& @4 B+ u7 P/ A9 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 @  t6 t8 @: K0 C# D( b, s5 n2 h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! s* `: V) x: x; [9 \* _  j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) n/ b" E: n* o/ {! _
4 P, Q2 o7 y7 Z& G1 N, ^. d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" _# i: _4 B7 d# G1 D4 ~+ f$ {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. M" @# Q- M0 e, K9 }: I4 i9 D
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   L; N+ m; |1 |* Y1 A* Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 a) i" b: b) X9 _/ I4 n

7 y* K2 f7 O* {  `    CSR = 0x0000;& ]  f& \* S7 l/ ^3 T2 j
    INTC_INTMUX1 = 0x3d;: f  Y2 x6 ^% _7 Z
    ISTP = (unsigned int)vectors;
$ P: \( E  L6 p    ICR = 0xFFF0;  
* R$ L4 z" Y! W. N    IER |= 0x12;  
3 V* s! Y! k5 {3 b* B# ~    CSR |= 0x01;  6 P; f0 _: C% ~5 k% s7 u

  R5 h  x7 e2 g0 t5 X) B& U$ J& `% `1 ~. B8 n% I
  L1 j& j2 U- Y# Y3 X
还有就是两个输入输出函数:
9 K. L3 M4 A# a- @% svoid output_sample(Int32 out_data)5 G# a5 Z) {* y
{
1 u; _* l$ U1 P  c3 }  AIC31_data.uint = out_data;  7 I/ v$ d( e9 @/ |7 Z! ~
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& ?, j% t5 T* `" Q1 v! f
}
$ j1 c3 T6 h# G6 |+ |) ~1 X+ m9 D8 q2 l/ @  v$ e: q0 ~7 q
Int32 input_sample(void)
" ~- g4 W3 |  F9 R9 W{  
7 W1 f9 k: Y# R' u  AIC31_data.uint = MCASP1_RBUF0_32BIT;: m' D( r4 K6 F$ H! d9 Y  e! R
  return (AIC31_data.uint);6 j. J+ C' |; V& ]# N9 V+ B
}
2 r6 _0 r, f  [
, w6 F: l# e  N2 s+ ?) 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-1-17 01:04 , Processed in 0.039256 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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