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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! n, Z) c9 U0 omain文件:& r9 _5 T/ h6 l- [$ M' }7 }- _
interrupt void interrupt4(void)  ) C/ u0 y* V8 I4 t7 n2 D8 s
{) x3 R- ]3 B( ~$ j
  Uint32 sample;6 A. C7 o! a' G9 z8 P! B

9 O" C" t. D& f* [- Z7 f; k  sample = input_sample(); // read L + R samples from ADC
+ V, K9 H) `* @2 m9 j; C% J: `  output_sample(sample);   // write L + R samples to DAC . W+ z  m" z, q2 x; L$ d+ a' M$ b
  return;) P% R8 o9 z  ^$ g
}
0 X4 s- `6 R; q9 b7 l) O1 u1 x
4 _/ g0 o; U1 W2 K  A1 bint main( void )
# k, Z( M( p7 S2 |+ H. q{* W% W( _3 Q- c4 Y3 u

9 B' ~3 l$ Z4 A4 M    /* Initialize BSL */+ Y- l5 y2 N' {% X
    EVMC6747_init( );3 n& O' r* H3 R' ~; _
        /* Call evmc6747_intr function */& Q4 A1 q: ^: G, }: r) t
    aic3106_init( );( y$ y# }$ Z. N6 W6 r
        while(1);  P; B9 {. V* I% W# D& X
}1 Q) o" |* q, x+ k, J: l

4 F+ N* U. ^8 T& O2 H& u' N5 I
% D$ d/ j7 W4 T* laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 ~& ~0 ^0 y1 p/* Initialize MCASP1 */
+ V  \* L: R# L/ ?    mcasp = &MCASP_MODULE_1;
/ {' X  f: V; c; J# s    mcasp->regs->GBLCTL  = 0;       // Reset
2 B  q$ H% x9 t* H    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 N' v! e3 z6 T7 R" s4 g9 Q+ E    mcasp->regs->XGBLCTL = 0;       // Reset TX( o2 q. {$ c  M, ~  M6 n1 u& n7 \
    mcasp->regs->PWRDEMU = 1;       // Free-running
9 M# R# t4 [1 X9 Y+ l# h. C" d   // configure McASP0 receive registers
( T+ G  {, F; L: e- d: r    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 x/ [* _/ k5 d  ?8 P! u& X5 @7 {
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' r& J3 Y% G8 G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
  }" E# `* ?9 l0 y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! s# H- `: r7 T2 x5 v8 n8 l. G4 G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, j5 G2 J) ?/ z8 |! p+ h$ q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, k, c# |$ ?) @: H( T! g0 T    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 d. T$ p* U6 q7 x" `4 {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ E0 s2 h# Q, \% V3 j

+ [$ J$ I. O* X0 P4 X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- q9 E0 C9 g0 a2 N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- u% I+ [3 [) X# \$ t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 R1 I2 C4 T* O9 T    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% d' i/ E& X8 q1 I" v9 W+ p# f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) {+ b) i$ ]$ M. D& Z1 x9 b    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 P3 N2 X, a9 a6 b7 m8 |    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; g2 o4 j% Y  `6 K! U* e6 @
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* O1 C9 ~4 j# O9 J
# e3 b0 G+ I( l0 @# ~' F    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 j8 B6 [* N# C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 L% s+ l; F/ U  S5 c6 N6 x0 u    mcasp->regs->PFUNC      = 0;          // All MCASPs  ?" _! F) `( `" i1 X( \9 J
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- ]& o2 a. q+ [; U. L; n8 e

2 |0 W3 E$ d: b6 P+ q; {& l) S    mcasp->regs->DITCTL     = 0x00000000; // Not used
" [( S! ~5 b9 \: A1 M6 A    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 Z7 C! |+ c! b9 h' u  d
    mcasp->regs->AMUTE      = 0x00000000; // Not used
" T- L6 q0 z1 `4 k1 Z
; g8 k7 L  x# A/ r( @+ {! p/* Starting sections of the McASP*/
  P- b9 Y, Y! V, Z5 ~$ D7 j    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 n( c9 l% A4 M6 r# K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: O! t/ ?% r( O  b. {" J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 U1 ]* f8 z7 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 @3 Z& v. r- ]% E# Y$ F

: }- n5 c0 F9 X4 u1 v4 G5 ]( }    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 Q$ J9 P& k" L. y+ r2 b9 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; L; n* `# _6 o' }* a5 L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  f  z% m$ @+ {1 x& l. u# o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: \2 M; a3 Z; j4 t- E, }/ r
+ @, Q6 O8 q4 v! j7 K    mcasp->regs->XSTAT = 0x0000ffff;
1 n5 w  n% S9 B5 I! F, V$ N+ ]    mcasp->regs->RSTAT = 0x0000ffff;
( a% B9 R. i6 v4 P6 v4 w" s- K- _6 S$ z6 h( M# b2 q3 _8 L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, M! P* J6 e+ U% ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 V3 d# Y# p( F! t3 j1 N    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 J/ J5 e0 G( S: K+ J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( M, Z4 l0 K6 g; O# d0 p8 X* b" K! T' k
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 c. D" [" w' \$ ]& v
    mcasp->regs->XBUF5 = 0;; f+ F) {; V; |- K/ }, i
    mcasp->regs->RBUF0 = 0;
& `7 _4 \2 b1 b3 R2 _6 W& H# K, _3 L# g4 ?! |5 Q0 I" {. H
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# _% J7 \5 m- y7 I: G7 x4 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  h8 g" t, |0 y" J% a    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 L2 O+ y" s1 a! {. j& a0 Q1 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 t6 A) g2 q% G+ M4 H) O2 D' [1 j0 H
' `# R8 |1 V1 ]6 c- f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 {- t# V$ |8 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' `: j! m/ s2 P6 I/ a2 R& T
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% y4 a9 o* I6 {% \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 h( H$ X3 t- e) b
3 }. J' @* n/ J$ r2 s6 h( p7 K
    CSR = 0x0000;
! s" t& h7 G) t  Q8 l    INTC_INTMUX1 = 0x3d;
+ ]; m' y" O2 ?8 f, f7 L    ISTP = (unsigned int)vectors;) c; x' o6 k8 {( j4 @
    ICR = 0xFFF0;  
/ i: Y: w' @3 U# P6 I6 X+ C3 j! _3 p    IER |= 0x12;  
" J# C$ }( [  U" R3 W    CSR |= 0x01;  ! A1 i( t' R* {: c8 j( J! ~7 a
5 A1 V) U5 }# H5 [. d3 i- {

/ x8 t+ ^) ?4 T' U
; {" F, D* J* A9 Z0 P( h1 d还有就是两个输入输出函数:
: a( ^* ?* |' Y% u4 d- Yvoid output_sample(Int32 out_data)
( L7 j2 |. W8 f8 {! p{
0 ]- e* C4 i2 `: h+ T6 ]  AIC31_data.uint = out_data;  
$ B- h9 e6 d& N9 S$ ?  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 F+ J6 J7 K! Y% O}
$ H9 O$ y5 [- e4 ?7 w8 e3 K" A+ L0 j: U* t: m; {
Int32 input_sample(void)2 O2 }8 L3 a& b0 L7 o
{  
' T  t5 ?) ?' b% e9 C  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 @8 X% I! j% h5 D! \: i+ V& v
  return (AIC31_data.uint);
+ r8 y5 ]. c; X4 g  p9 a}
7 h. S& i% ]9 |! S; g1 h3 i3 A0 U0 J9 `6 e
分享到:  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-11-25 05:32 , Processed in 0.037063 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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