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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 }6 B" ]; y4 Q  ^( {) W6 ]/ d% Imain文件:- B( k, G8 n) `7 `  C3 x0 Q
interrupt void interrupt4(void)  
0 c& y5 q' ], h3 t- m, b{
% \! r" x0 D% M0 h' a. M* r" |  Uint32 sample;/ T- @" i( X' p' ~4 Y1 T1 q; M

% z; f, ^4 _$ c) U  sample = input_sample(); // read L + R samples from ADC/ z: h9 a# b( |6 \
  output_sample(sample);   // write L + R samples to DAC
7 j$ i; y! k. s3 e5 h3 [  return;* X( H# K- ]( p/ y
}
$ ?$ J& B: b" T2 s  D7 ^7 \  U2 _) {- D2 H, W4 [
int main( void )
* @" |. }5 F3 }8 Z: E  E/ [{0 h' c2 ~7 e3 K& l1 E

. u  D; o- g8 I    /* Initialize BSL */
/ m4 l  t; {6 U2 T( U    EVMC6747_init( );6 }2 F' h: s! C/ P$ ?9 g
        /* Call evmc6747_intr function */
& d! o7 h7 c4 V    aic3106_init( );
- m4 X& |, v- a7 V        while(1);0 B. N3 m" z6 s! l1 V/ S
}
0 N7 }3 X+ v# {" A. ]; n7 c# H% c3 y6 G+ X3 `; y- a& `
% ?8 U# i* z" i4 x! [0 k" _; ^7 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 K3 U8 u2 A; J1 z) h/* Initialize MCASP1 */2 x! @; C) z, c2 c1 B7 f* D
    mcasp = &MCASP_MODULE_1;: A# B' G* }; m9 {1 ~
    mcasp->regs->GBLCTL  = 0;       // Reset
# q/ i; D# V9 c/ Y6 ?  |    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 y' {% W5 T" V( g    mcasp->regs->XGBLCTL = 0;       // Reset TX0 E# b/ \# h! {3 D- J2 E. y
    mcasp->regs->PWRDEMU = 1;       // Free-running, X. N" I. C1 W" Z) N  D5 j
   // configure McASP0 receive registers% w: }6 q6 P. p2 y+ z5 G. U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 t  ?2 y! G* Z; x    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# _3 @, e* K( E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ R& h5 j/ ?8 o  d! {    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 d( ]+ d5 N0 D# p: U! A
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 v6 j. x- E9 p  ^4 ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; T* l$ V4 Y5 h# I6 A
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" |2 ]# [: @) a8 E' U% S
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ S/ b  X* [1 d* f
5 N' A% Z( @4 N9 Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( z* Q0 V8 u- T0 p. m0 R) C6 x
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. W) `3 D0 K9 {3 w# U  n# u    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ ?5 q" Z5 g! P2 b: m    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 I" [  x6 I% A6 b* y* b9 n$ E" O    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! b- C) D) `2 T0 V! y$ p4 D" U  Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) d0 E( T1 P5 I- k' y; Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) R( K2 m: a2 n" C! w) d- _
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) }; ?$ J/ ?5 i! `5 _5 M# j* p, C7 j4 m
# s& z: N0 H2 d, c- z. R( r! @    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 ^7 s* [# @; z9 d# R# Z1 z    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' Y+ ?. h  F, X- l% n    mcasp->regs->PFUNC      = 0;          // All MCASPs( \; \; d! o1 o% x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 a3 K$ j5 E. Y/ {! A3 l
/ @5 G# c$ U% Y0 W7 X    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 V3 t& o5 {' W' I    mcasp->regs->DLBCTL     = 0x00000000; // Not used( X: g4 h( `2 V, K7 h
    mcasp->regs->AMUTE      = 0x00000000; // Not used; ?, u( Z4 A( P9 e- Q
, c& `' k  X& j; \8 k$ }
/* Starting sections of the McASP*/6 T6 I) z6 g7 q0 T* }! o% i' l" K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , E9 [9 {, \6 O% y) \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* a& w3 O9 F" V9 a" n, W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 y1 p% B) t$ h$ `) I" U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* X, c! z) y; N. j; n/ V3 M' `4 u: m1 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: R8 p( M2 y" m2 `) z5 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 s9 ^" d. S# n2 F+ d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 w1 X) ^7 k! q2 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" W. N$ ^) {$ c& O+ c

) [6 X  i( d4 |7 Z4 F8 M3 l# F    mcasp->regs->XSTAT = 0x0000ffff;
' p$ E/ K. b1 ~5 ?) Q5 k. K    mcasp->regs->RSTAT = 0x0000ffff; * s1 ^# `0 M" L) m8 P
9 `: G3 b* b2 F+ N5 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) D5 ~/ D! R( ~  ~3 {" k. u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- h/ a: E. Z' Q; W4 }( q- d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 |% W  G- ^9 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 p* I) [( y% t3 A' q+ O, z( b
    /* Write a 0, so that no underrun occurs after releasing the state machine */! ?9 X' Z% i9 n1 |
    mcasp->regs->XBUF5 = 0;# k- Z( g) L: I$ o+ O8 |) k. S
    mcasp->regs->RBUF0 = 0;
& i. J! G9 c1 @  a) O7 s% r0 |. Q$ W6 z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " r" l, g6 ]6 t( w7 |3 Y& ?& t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% ]  A. q  ~: [* w    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! {. y! k! q8 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 `2 d8 q2 b1 r7 `& T5 d' A
+ ~- T+ {- h6 F9 \2 [: s" \" e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. `" t( n, p; f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ M$ V" r. k5 @; O( R- U6 ^6 N; y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% e: R1 F8 l6 p! N- `1 {" ?  }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 v+ e2 V$ ]$ I6 }
( Z2 w7 i, V3 d' V4 ]: w
    CSR = 0x0000;
  l2 \( [3 h7 h3 {( y  a    INTC_INTMUX1 = 0x3d;
" K3 L( @& }6 x4 j, v- Z8 \+ B    ISTP = (unsigned int)vectors;( s! M% X! T3 `: k0 p$ H6 W: ~0 e
    ICR = 0xFFF0;  7 P6 I$ a/ B# T9 K& P
    IER |= 0x12;  " g2 B9 m1 N$ P; T8 u
    CSR |= 0x01;  
" C# U. N; Z: R7 |/ E, [6 s6 Z3 Y) V* H+ T) p( |/ y
# O2 R: p6 g! K" q, C0 Z& W

  G. Z+ N: i; v! X还有就是两个输入输出函数:
  j% |6 t5 s# ~5 svoid output_sample(Int32 out_data)2 Z1 N: L2 f2 y: G0 c" y" b
{& D: l5 R* {9 g1 R: Z6 k/ F
  AIC31_data.uint = out_data;  % M, @' O% x7 b3 l" U% v* a" r+ n
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 j0 o7 H; D3 \9 O' F
}1 K1 L# Y; z4 C, d' y9 q
4 {' Y) t# |/ A: W% Y2 |; i
Int32 input_sample(void)
" v% ?0 ]/ E6 @+ g, l( g% ?{  7 C- o8 C) h' L! k- }" k
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- o& h; g: T1 s: l: F  return (AIC31_data.uint);
3 z$ t3 S1 ?1 R$ b' @}- J' X2 C1 y4 i! L) o$ z$ f# X# N
* X+ T# {1 s# c
分享到:  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-2 11:50 , Processed in 0.041384 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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