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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( y" ]: m+ t5 M( L6 emain文件:
" S. B. C" ]* s" iinterrupt void interrupt4(void)  . f( U2 h, B) q3 O4 ~3 p
{, }+ u- k7 z. I$ f% ?
  Uint32 sample;
# z, s; T  |  n. ]7 D  d
- f4 H- c1 f4 M" u  sample = input_sample(); // read L + R samples from ADC
8 f! j( @, k6 [! h7 Z8 C  output_sample(sample);   // write L + R samples to DAC
7 @9 y9 q) S9 |# O* v  return;
/ H; o8 ?9 D& A}2 C% T1 _  R2 T
( d# ~* q- E6 J; e3 c
int main( void )
$ }0 _9 E; ?; \3 q) d' {{" c% Y9 V5 P5 j7 A
, b! s) D8 l, D: X+ l% s
    /* Initialize BSL */1 p( t4 p! p/ z0 A) @8 u4 ?
    EVMC6747_init( );
+ x. P! a& V8 u& I7 i        /* Call evmc6747_intr function */
! O. v9 E9 u9 a6 }. [# O7 [) }    aic3106_init( );
! V$ N$ ^; j+ S4 j" J/ O4 L6 Y8 D        while(1);, O% @, z9 Q+ Y0 K& t
}
1 x, w' {8 I6 e7 w  `
/ x/ B  Q  q0 _% C6 G& W/ g1 R' E0 s3 J% U! o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ E! b9 C) V# |7 N) D$ u! b/* Initialize MCASP1 *// N2 B5 }2 ~- S% T) b$ c
    mcasp = &MCASP_MODULE_1;% T& a. g$ I2 S7 l, C6 v
    mcasp->regs->GBLCTL  = 0;       // Reset3 c( x5 i% ]1 k
    mcasp->regs->RGBLCTL = 0;       // Reset RX5 @7 Y( Q1 E3 O) E
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 W  U9 @( I) J    mcasp->regs->PWRDEMU = 1;       // Free-running) Q* H! ?, Y% y; x, a; w% @1 y
   // configure McASP0 receive registers& o7 L* \* L3 K' }/ Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 G) N! O6 w% X6 Q0 J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& s) o/ Q( J' s7 P5 F8 k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 f. g. v: k/ s- e& D% K. u2 k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! l9 s- e7 S8 O& l+ r6 o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* v8 A* U& b3 X
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 l( l- q; b+ P2 q" R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; R+ }# p4 P3 z) X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) @8 D. p# r0 _  y! }
5 i3 D% @6 m$ x/ D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# G/ T! A% |, _    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! U5 g8 L3 ^+ ~. [0 m! }3 m
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: L+ m/ R" [3 Z. ^7 f
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 E8 Q  X' A  i8 m( ~    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& S5 b) s6 B/ u& h/ k  y5 j: y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% v! \! J) g9 Q4 l& K. _    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% b+ g4 v; G0 I    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  p8 T, I) p' b8 k; n) O! W$ [1 K
3 @+ P* {! F7 N) v5 Q7 r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 s& q4 v2 T+ a9 O
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* f+ ~7 _( Q0 D* r9 O- X
    mcasp->regs->PFUNC      = 0;          // All MCASPs) y; n3 f% P) N. g% H) B; J
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# }8 B0 n6 g. T9 O! n) K$ v: T* T; u
    mcasp->regs->DITCTL     = 0x00000000; // Not used: V* W4 g' b/ O
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 ~0 }9 S2 R6 J8 J- a7 F+ ?# a# x    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 P' `0 P/ @8 w# _  ~; ]" s1 R) n# o. E4 i
/* Starting sections of the McASP*/
  p' f1 H6 B! E3 Q5 V    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ Q5 {. T( X& O, \( J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! J7 L9 E  o0 r9 j4 P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 V) h8 q4 |9 K6 j" q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! I+ Y6 [/ i/ ~* W9 Q0 W! r- v* u: }. `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 Q% A/ p+ G- h) P. F3 V2 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 q+ W3 V/ D; `( x. e( a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + {; s! @, O! `8 v! I% f8 g" v3 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 N  r& \+ f* o0 c- X0 Y/ z4 b& f
    mcasp->regs->XSTAT = 0x0000ffff; 4 C: Q- R8 A; R3 T0 \
    mcasp->regs->RSTAT = 0x0000ffff; 1 \4 ~  t" G) T& J1 `- h* t- A
5 y5 P/ B; f5 @0 c. o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 Z" ]& @3 U. o' r. {; K$ l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& |. m! ~/ I' k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ p  }" |  F/ o- Z4 W3 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 j3 \( D! c9 w( \7 s6 l" S& d! [. F' g7 s
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* T# {( u0 |6 u1 j    mcasp->regs->XBUF5 = 0;
' Q  `5 V) U' U* v    mcasp->regs->RBUF0 = 0;% N3 j; a' i5 V

& w4 t2 r' l2 L* o! U! D5 ~5 X- i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 W" z. V  F8 Y8 g; G' ?0 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  t+ i1 K2 G4 y- p; S2 s7 _( l
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 R5 z$ D& M& N  ?3 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 |7 T7 {& u) \9 _% Q* X% w( b

' P2 O6 _) p9 m* N: P; W    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - }. W! ]. B. ]4 f1 B7 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 u+ X8 V3 t5 ^1 X$ }. X
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 e( h8 v6 k8 L& K5 |- e+ b' _8 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 J" R! D6 `8 D# F0 y
" R  ~3 t$ W7 P2 V
    CSR = 0x0000;* l. ]/ k2 b/ x- B% [
    INTC_INTMUX1 = 0x3d;& V0 j! t$ @7 D7 l8 v# ?
    ISTP = (unsigned int)vectors;- v% {* J' f( w
    ICR = 0xFFF0;  
  l& i8 ]5 Z5 B1 v, D6 B    IER |= 0x12;    }# {6 T% X" w; m/ d) I
    CSR |= 0x01;  3 [$ i% T) [% }& P; j

$ B+ Z% H- r0 U& P% r' ^+ h
, T- b& X# X1 i
' i2 n& _- Z: e3 P+ w9 I- y6 ?* P还有就是两个输入输出函数:9 I8 w' D& L3 y2 M$ v& G8 g
void output_sample(Int32 out_data)$ f. _6 ~5 n$ V" b/ l
{2 G! h6 }) |. j. H
  AIC31_data.uint = out_data;  
* c4 ~8 R( v0 w3 i8 }* u) h0 O) o1 N/ H  MCASP1_XBUF5_32BIT = AIC31_data.uint;% d/ @( v1 q4 r  I0 {
}
+ z5 k+ n* X$ o; Z- r
9 C7 p; V/ C. WInt32 input_sample(void)
" m8 j4 ~7 d8 g: k- Y0 D: w{  + {$ u' ~# Q6 [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% Y! Z5 L3 `! }+ z, h  return (AIC31_data.uint);
6 _5 o0 E' r8 C2 n# I$ [}) @3 Q# }: u5 `/ b

8 F% C* _6 E$ E6 `
分享到:  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-6-17 06:36 , Processed in 0.041444 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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