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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: _9 n! |! U+ r, ?  j# n2 i0 K
main文件:! h- Z9 x" a8 o: d2 D
interrupt void interrupt4(void)  " S# {8 G$ P" N* w
{
: N, ?% @& Y0 j. ~, c6 z* w5 L  Uint32 sample;. G# H9 ^: i, F$ M3 H6 t4 e  ^

8 _- u8 P; T, K5 a  sample = input_sample(); // read L + R samples from ADC& Q. I, r. P& E, l( i
  output_sample(sample);   // write L + R samples to DAC
1 b6 s; Z$ K7 f2 k% w  return;$ j) G( w" I* L2 u
}- d& h: b5 a; T! j. _- B5 `, ?' t
6 h6 ^+ P0 j+ h' h
int main( void )
6 p, }0 y1 Y/ x& g{/ Z3 S, v- l3 @4 I. E% J
% n" i3 O7 F% Z, E4 e1 K. [
    /* Initialize BSL */5 ]3 [+ Y+ p6 r, t3 w7 j0 F5 u
    EVMC6747_init( );8 F- B- f+ g6 K  e
        /* Call evmc6747_intr function */( `+ Z7 I. S0 ~+ x) v
    aic3106_init( );
2 t. l$ B* v) A7 W        while(1);  {, b, m4 Q/ J+ t5 I# D3 P9 j
}
4 J2 t1 `- q- }% [6 i  x/ X
! G9 I! K+ [, y. ?8 U# v: a
, H& R# j& n# haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 U  u. m% B9 }% g, }% g/* Initialize MCASP1 */
% S0 ~1 z/ z* \$ c; m. t    mcasp = &MCASP_MODULE_1;
1 _& {) H- I3 h+ [+ [    mcasp->regs->GBLCTL  = 0;       // Reset
+ T) H: M8 t$ S3 n, y; q    mcasp->regs->RGBLCTL = 0;       // Reset RX$ r* i1 t6 y; f/ ?& K" `
    mcasp->regs->XGBLCTL = 0;       // Reset TX' W. y. D: G# v
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ d) a  w. Y. ^( A! ~( f8 h   // configure McASP0 receive registers* f4 d, W8 H6 U) m- y- ^7 V% g" L, X
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 [2 X, |# T2 e2 V' e6 ]7 o$ i2 ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ]8 T3 Y  a- H6 C# E6 C3 y' s2 z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 r6 R1 ?7 T: N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" d- i# e4 R4 x. V( D& Z& @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# l& f* O7 Z" C) @4 k6 c: N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; m9 L  \: j; D& {- ?
    mcasp->regs->RINTCTL    = 0x00000000; // Not used: n' E: t( K. ]: r( a) J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: F3 s4 g+ w; \& r, y6 \- W" H3 l9 ~- r" j/ t
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. I# b: U# _4 U0 V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, s/ K9 `, L/ [' d: L2 F! v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' X' I3 M* x# J  ~5 i2 \* ]3 o" Z: {
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 O/ l% l1 u  m$ r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ w  \) D9 n9 j$ _    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* a; X& U/ |. l: s5 o% S$ T
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ Y7 _9 m9 k6 Z$ i& Y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 L& }; e& J9 }+ }2 o  b
+ l5 F2 l4 O6 s  c
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  ], m1 @" q. X' h- c1 v7 J    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* f$ ^* b% v" [  T+ o    mcasp->regs->PFUNC      = 0;          // All MCASPs* G8 i9 W7 L& b% E  \" r! O
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 z/ P/ X' c! Q+ q( B% S

& G0 t% ^% u) g    mcasp->regs->DITCTL     = 0x00000000; // Not used
% ^! H. o# l7 a4 Z( q& v* G    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 i4 e2 e9 R7 E) \6 M) R
    mcasp->regs->AMUTE      = 0x00000000; // Not used: C6 a+ V! B* M* d, d) y# G$ _" n" y

) E- q# w% J& o- [- j/* Starting sections of the McASP*/! D# i6 M2 e. w& N1 A7 h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 j" F0 o) c7 I% `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, g' y! A  I& u9 z    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 E: V. `& D& q' O8 e( `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; _7 |  s& X9 D, V! Q2 S
, K% v0 r3 K  i! q! e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; q% P( `! k) G$ d$ a" z2 F- s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- E+ R; d6 Y% f5 s/ v, }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# K6 v3 a; P, I* W2 z( N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* `' j$ m# K! T( s4 I8 ?/ _+ U
6 Y7 _" n' t8 r3 D1 b2 t+ _
    mcasp->regs->XSTAT = 0x0000ffff; , o; P" Z& W+ v$ P1 d
    mcasp->regs->RSTAT = 0x0000ffff;
3 ?6 ], Z9 I' w
4 d  W4 v0 N* G3 O    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* X! V; z- Z0 j1 _" m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 B7 G' e& f+ N! `# Y8 y" K9 c    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' z9 A. Q2 P% N/ R0 H% S; R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ p9 j8 T* X; ?* u! F! |( R2 @
! k) }! F- Y6 {! S* W  D! t% o( U+ a    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 \! V2 O+ ^2 e5 E  {& q0 C0 C1 u! J1 ~    mcasp->regs->XBUF5 = 0;8 q4 K8 c' e5 d9 h
    mcasp->regs->RBUF0 = 0;
  `- W5 t! }3 N
( B& X4 S8 Y! z# [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - O9 [3 O  n; d" H2 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" L2 `) X0 e: `* y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 L& ~* i. ^) U6 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ i# j+ e. N" w4 {9 c1 D
. Q0 a1 e# c8 p7 M! F    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % m7 t  w( ^" [% u6 B' T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' |2 m3 U8 y- O; ]
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 m9 f+ d; ^- t# Z7 x; n  K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ t* L6 X0 w% ]# n  T
, g! k9 p, a9 l9 R3 y( ^6 Q
    CSR = 0x0000;
$ c, @% _& v) x# V. W    INTC_INTMUX1 = 0x3d;- w+ D( q: P( j8 |9 l1 l8 Q3 L
    ISTP = (unsigned int)vectors;6 \/ @) p0 f& `" \
    ICR = 0xFFF0;  
( ~5 U; P3 X+ _8 A) H" D    IER |= 0x12;    `( e# m- A* K  r
    CSR |= 0x01;  6 e7 g! [* Y0 I) i9 [6 \- Q' R, o
7 E4 z# M9 I( u+ }# O

# [* l' C8 N) S" K- X- T0 w# p* e$ g" T" C
还有就是两个输入输出函数:/ Y5 u. L. n6 h8 ^! E
void output_sample(Int32 out_data)
. }  V& M2 W* p( o  A0 C/ E{: o& k0 i9 K; B0 y2 R
  AIC31_data.uint = out_data;  
( k* s, U0 J: I) U: J0 C  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 t" M8 @( r1 ]4 j& _0 ~}
% F( |; c5 [0 @% g& I2 G. b$ M1 E/ e' {1 m; @5 y* P
Int32 input_sample(void)
, M# a6 [. b4 ^9 R/ Y6 U{  
7 r! s. A$ ^. `3 k* z. ^3 O  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" i7 j8 i# P4 h  return (AIC31_data.uint);
" v" T+ z( U% f) W' P}6 U" r* H7 A% V

" _1 Y' K5 H4 y* H& u- ?
分享到:  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-12-14 05:04 , Processed in 0.038565 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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