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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 b/ H1 O: Z, J, V' P# s$ D; omain文件:
7 o* ]/ K( q6 o( e0 r( S" linterrupt void interrupt4(void)  ( b; N; d+ B$ @) I4 _9 `
{
/ Q- r6 S: |" I9 f6 @( c/ I  Uint32 sample;0 m+ p9 i% ~2 O0 n
9 f2 k0 e3 [5 h& C
  sample = input_sample(); // read L + R samples from ADC
0 |0 J& ]0 \& C8 z2 C, T  output_sample(sample);   // write L + R samples to DAC $ [6 ], [/ o$ K. T9 a3 ?5 `
  return;4 A7 ~+ |7 @6 D" w5 B4 `, c
}' ?2 R7 Q* A, z) P$ `- Z# \  Z
) @8 R4 Y: l5 a; o! Z! n
int main( void )
- z, Q: t+ h% e% `" M{5 W/ o# F. ?) o' x0 f4 R" U
6 N+ O8 J2 Z9 ]+ x# Z3 A
    /* Initialize BSL */
4 h  g/ o7 n. T* m. o    EVMC6747_init( );
  _. [# Y; C( N+ k3 R        /* Call evmc6747_intr function */
$ b- W$ U6 ?4 H, i. N% O    aic3106_init( );
  U. }9 t1 D0 [+ ?- H        while(1);
5 l! y) A% }, \, ^, F  V}
9 X4 N1 o6 k5 c; `& G6 }
3 h* y7 A0 n/ \: h3 o9 L. y. r. \) S+ ?% E* r% n$ p( N, s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' t* H# Q9 d, T0 F" w/ o
/* Initialize MCASP1 */$ W* ^0 p6 C5 F0 P& C
    mcasp = &MCASP_MODULE_1;; k$ k! E$ x9 e7 \
    mcasp->regs->GBLCTL  = 0;       // Reset
0 @9 m+ L6 x) k# G/ d    mcasp->regs->RGBLCTL = 0;       // Reset RX2 Q% S$ h6 M8 b' F0 N+ m- u: y& _
    mcasp->regs->XGBLCTL = 0;       // Reset TX9 l$ K" a! p: k7 H
    mcasp->regs->PWRDEMU = 1;       // Free-running
% G- l- ~9 l2 m   // configure McASP0 receive registers$ G3 C+ p' {3 y8 E; M* r8 F) P
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; o' ?- x$ \4 N/ T/ r
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; R9 q2 ?2 p0 r% R; h% Y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* f* o: N1 h3 K( O( \' w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- x$ b9 g' c/ }7 i3 f    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); n9 _% m7 m! G9 X2 c1 W: Z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 {# |/ t* L$ X3 o    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 k6 k& U  @& B6 C+ V0 {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* T4 C  `  z, {( W& J
7 ]; H0 |0 C# V' o$ I  T    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! B0 Q0 W# m8 K1 j/ K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' A+ i# Q- b/ n/ h9 u
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 a/ B2 z4 v# J( y. r# c% j& H
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 F1 ?4 L: r8 F" o& J  \4 S& L    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  s6 b& a, S- j6 c% m) Q& ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ U% K; v8 S& b- @; Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 K& P2 _( x1 z0 w2 e- ?; a0 U0 m: I. W
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* A; ^3 I5 V) \$ U% T
" d% ^2 {9 p3 ~6 B- I9 t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  B6 u8 V* B; ^4 g2 b$ ~    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 ]7 R1 w# }' p    mcasp->regs->PFUNC      = 0;          // All MCASPs  g$ e4 a6 @. t* F) u* y/ g& R3 S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 t2 {9 U8 _9 y
8 x( u# e# K7 n7 N- y
    mcasp->regs->DITCTL     = 0x00000000; // Not used' r4 H8 F/ z7 s, x+ y" Y4 X
    mcasp->regs->DLBCTL     = 0x00000000; // Not used; V2 J. v7 p  K% L8 S, H
    mcasp->regs->AMUTE      = 0x00000000; // Not used) d% y' j' G3 K* I$ [, ]
, U; W  q- T! Y! H
/* Starting sections of the McASP*/
! }( ]" q' W7 H) w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. L/ u+ o" p# E8 J4 p- B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + S# y: M! Q$ M/ v' L
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 g7 W* V7 L$ N* k# a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 N" d# N9 E( z2 V1 J" L# ~- p
% r" M2 v# T6 m9 Q4 d2 g0 S  s7 j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ A' U3 |2 |& B+ F: Z& t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, }. b' f) _2 w4 g0 L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 I: s) h3 q% C. F: X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ s0 U, q2 T' V2 p+ C. ~% F6 J& x0 n$ {1 E7 J9 X$ p9 y8 W6 [; ~
    mcasp->regs->XSTAT = 0x0000ffff; ; L7 o: M. N' I. G. r" v
    mcasp->regs->RSTAT = 0x0000ffff; ) z0 Q2 J0 O3 W6 n; C2 i
- r( ]" M, Y2 \1 N" m" u4 q+ V) m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& ~4 [, a; M8 r* q& b* h  Q9 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 |/ ?/ p+ f# W7 m/ X4 X5 B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; ]! B) F  N9 `. ~( w1 ?/ L! b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. [4 r; w! x+ f( |0 ]6 h4 f9 U( P( `$ `7 ]; u! P
    /* Write a 0, so that no underrun occurs after releasing the state machine */1 C4 N! p& [/ }" J: B1 `) B
    mcasp->regs->XBUF5 = 0;4 e+ S5 t7 \% N! I) L. }  d$ q
    mcasp->regs->RBUF0 = 0;
0 ?( c2 b! A$ l8 x
* x! ^6 x, N! A% g    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- y7 ]1 r' p  \7 q* U' w/ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' O/ V& D6 z* j# h6 F  M, Q! I. s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' o+ B. a& X! ^+ r( c' R1 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( X) s+ ]5 E( V* W1 \8 G

  a- }, h$ H! s7 Y7 q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 Z3 V0 z5 W" P+ Q' \, B# S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ r# `1 j8 }, J! w* @4 \) U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + ^2 l5 i+ |! M4 ]3 F! O5 }; [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* V  I: \" u4 V* b
# K+ l" ]' b1 ~3 W
    CSR = 0x0000;
( k+ I- L( @8 c. x$ ]/ a    INTC_INTMUX1 = 0x3d;
% \6 O( V3 Q9 ?4 D7 q8 f    ISTP = (unsigned int)vectors;" w; a/ j9 h/ v+ o, P7 f/ O
    ICR = 0xFFF0;  ' t  _7 S3 h" a  W
    IER |= 0x12;  3 l3 w* Q% U' N% Z
    CSR |= 0x01;  
! x5 }, Q; I* z
1 w6 v! J( |, t' P8 L. T: E+ ^
! L8 M  M/ b% M. ^. ~* ^4 K5 u+ k$ W. D5 x
还有就是两个输入输出函数:0 B& y! K+ M4 [( o7 }& v
void output_sample(Int32 out_data)
( @8 q' u; M: L$ |) a# i* R/ c{' J0 P, T& R2 _; p  {, Q6 w
  AIC31_data.uint = out_data;  
  i1 f: s7 E/ x" e! R7 S  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 K0 a2 r. B: ]& P. w$ o}
, G2 J9 }1 D& S; W$ K7 T8 |( U% H
Int32 input_sample(void)
, A; ?6 k4 q; Z  x5 f# m{  
! C8 w6 `" v6 F  i: p  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 a9 h# a- H, ~' b' ~& f  return (AIC31_data.uint);
% r3 E7 G7 g2 Y1 R" _0 j}
- n+ I0 L9 J/ S2 S! T1 S9 j0 T. U& C0 P! m, u. M9 J4 P
分享到:  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-18 07:23 , Processed in 0.038487 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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