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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; ^3 b: X9 `6 V7 Q: C7 b6 h
main文件:
  U0 N5 Q7 H( a# S4 E/ cinterrupt void interrupt4(void)  
  j1 @1 D# h+ X0 u9 v( U{: p+ @* P) p7 ~, ?1 U
  Uint32 sample;
8 ]' Q$ P. e: `/ k3 W# g
, b% E; {, d$ s/ J' t% A/ F  sample = input_sample(); // read L + R samples from ADC
: e* ~0 \5 [* D  output_sample(sample);   // write L + R samples to DAC
* y& r! f6 Y, V2 x5 b1 p  return;8 q2 c& ?+ }4 F; R% F
}
: f- U  L. K! K! e( m% t6 M) l% R5 T) c' f. G& ^7 b. J
int main( void )
0 n8 t8 @5 O5 ?# g+ U{
0 j+ H  X$ b( l; `7 C) z
! i4 N. H2 k, O! m    /* Initialize BSL */
- y  U: ?  C8 m    EVMC6747_init( );
( ^" B7 g2 R) j, w+ b        /* Call evmc6747_intr function */
' H8 C  z7 w( m& l, A1 z" y    aic3106_init( );
) v5 v7 P! f0 k5 F: X- ^        while(1);
$ _  Y; s8 C$ ]% T}( ?( ?; m# j" p& _7 P& B
" L) p& k2 A; R* I8 e; |

" P. E' Q: J% U& K5 }, kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 Y' X6 s" P+ E9 z
/* Initialize MCASP1 */9 y& ^7 j/ g' c
    mcasp = &MCASP_MODULE_1;( w1 B$ S7 M: h$ A  b
    mcasp->regs->GBLCTL  = 0;       // Reset
* D  r7 F  M& U- J" P    mcasp->regs->RGBLCTL = 0;       // Reset RX1 {6 t8 |) n- t5 O1 w& i3 i5 O+ |
    mcasp->regs->XGBLCTL = 0;       // Reset TX! D. l( O% B/ g8 B: d& J! M
    mcasp->regs->PWRDEMU = 1;       // Free-running
/ a  U+ D! `7 L4 F# p   // configure McASP0 receive registers; `/ x9 N; F' [+ k) \2 f# |* E- f) T) y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 e8 I# Z% z4 {# w" E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' o1 A- T8 R8 Y! n8 a4 ~6 B! v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word" u3 ^7 N5 x" K
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, F9 |# l* K! m0 R5 _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 L4 L! p; {& j2 J& x, U; a
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; T+ F. m8 `1 f9 J- T2 j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. L4 ^+ A* }! D7 d; R5 U1 J# l! K9 I" k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 Q6 e" o& w5 {( j, B6 ^- K) Y$ |( v/ J" O6 Y& I
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# x$ t+ x( q3 X% N; _: M
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" o7 c2 X& x5 g8 k" g
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; \0 l: |( e! [
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ F- t6 E- B) }7 i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# I8 }: |/ ~6 C& p$ c/ u* P1 r' q& K
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 K# m3 g3 u4 p7 \- t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 z2 R! S3 P  g; Z, a2 o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% u7 ~6 s. J" [6 A
$ b+ }! }: z2 I) S
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; J$ e9 T2 c, @0 w. x$ o    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- k' l+ M( ^# E( F    mcasp->regs->PFUNC      = 0;          // All MCASPs; T% Q3 q+ J! t; P# l! S* W
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* G, l5 M9 j3 V. U+ g0 U, a- C; v

( p4 O5 X$ ~% O8 Z2 a    mcasp->regs->DITCTL     = 0x00000000; // Not used6 x4 D' {+ o& F( F; ]8 N" W9 t$ Q/ V
    mcasp->regs->DLBCTL     = 0x00000000; // Not used" S* _/ n4 K# B0 m  N
    mcasp->regs->AMUTE      = 0x00000000; // Not used: D5 Q) N1 D; X$ w8 v  N. y

9 x2 R- j) F/ s% U# ]/ m/* Starting sections of the McASP*/
% P' K$ |. U5 h8 p    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 N0 ~6 g3 k, F" x' K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 J) q. ~" M' t/ Y+ b: x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   e5 f5 [/ ?7 s) n& n& M5 ~/ X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ R- R) U- x, J/ Q
" v! J2 ^4 Q1 h3 C, e& }: e- z) A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 i; A7 z0 d  @7 z/ G5 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; F! b! g' X3 R% y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 B& s3 |0 c$ E. q  O# \& P* N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ H+ `' _' L3 f7 w
+ b  i3 w+ H' F! y4 L
    mcasp->regs->XSTAT = 0x0000ffff;
3 ]# ~' a; Y) `, H+ A7 I    mcasp->regs->RSTAT = 0x0000ffff; $ U, I* @6 Z7 i/ o. O8 B* D

* ?! h8 [; e9 P! l6 d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* L, E) Z4 h/ x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, J2 W0 `3 E+ M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ @; D/ @0 e; t+ [; {( {3 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 K# W) Y/ B+ g! Y) V" R

& j) k/ s9 F* {0 S    /* Write a 0, so that no underrun occurs after releasing the state machine */+ _, ?; k4 r! ~- r0 I+ b, I1 d8 A
    mcasp->regs->XBUF5 = 0;  g: E2 [8 w' Q) B8 {' f0 T
    mcasp->regs->RBUF0 = 0;! b7 z3 @' c. K& U0 _
* G: j7 j. P  _' [+ ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 V/ e& a$ _# l4 x% {% R5 L* D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' G  q% ^+ v( P+ s& I$ ]" P4 x    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 \- f; o8 P- Y; e% M$ M2 T* [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 g. k. @$ J' }3 ^
2 ?1 ^, e! [9 c7 [) r: m    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 @+ n; y9 G  a$ \  e; o8 n! q1 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% [4 A1 Y- z3 q; d7 R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 Z. f7 d2 c0 t9 y2 e. W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  A1 k+ I' Q9 ~2 v6 c# A
& r: ^8 l2 M0 @% X( T$ `+ l; O! a
    CSR = 0x0000;
+ N9 A; S" t4 Z" ^$ `- p) |    INTC_INTMUX1 = 0x3d;7 `7 Y* C: `6 g8 c
    ISTP = (unsigned int)vectors;
" X- `( s" I* p) k! m% B7 v- m    ICR = 0xFFF0;  $ Z0 h/ j" @! ^9 b
    IER |= 0x12;  2 }: I4 |) {$ x* k* f0 B. x( j
    CSR |= 0x01;  
, z9 T5 v2 {! I& w: o& I( @+ A
) J. G7 ^4 g/ M* P! t2 N
3 d% F+ W/ v0 T5 n4 K# N0 [+ @7 c3 d& P  H: ~2 h5 a3 H# z5 w- I2 N+ f* j
还有就是两个输入输出函数:
% ?$ p# [- ^6 Y  H: y' ^! S: U1 \void output_sample(Int32 out_data). H9 e- j4 p6 y4 \8 ]
{. [5 l+ w5 F  d7 z9 i- b
  AIC31_data.uint = out_data;  # L9 Z6 J" Q7 {2 ~1 @; ~
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* }" Q* [4 S' c$ S' y; o
}7 @( J% m% n) Z  X. i6 ?: X

( N. A" ^) l) u+ cInt32 input_sample(void)' I  I% P2 d+ c) M8 [
{  ) H- _# C- p6 e' t9 [5 J: T( m# z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; O8 U3 Q0 J  `" a& A: b  return (AIC31_data.uint);( L5 p3 K4 G% y" ?4 L0 I
}8 w( ?6 M; i1 P7 G

2 ^9 \2 o% J9 G2 F+ ^
分享到:  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-28 09:18 , Processed in 0.043260 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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