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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 J2 ]8 I) q2 A! p, bmain文件:
- I" \8 G! Z- V- g7 \6 v# [interrupt void interrupt4(void)  
+ c% B$ K( r5 ~{; e' W. P( l. \3 [
  Uint32 sample;
( m3 D( S. {7 p4 M8 @; x
9 i$ D3 D3 Q! i6 n/ z" O3 y8 }  sample = input_sample(); // read L + R samples from ADC
3 b9 k& f. O9 ~, M  output_sample(sample);   // write L + R samples to DAC
* r4 B+ \7 S4 A3 u/ T3 {' b# U2 M  return;
& w. j* C  i  d" T}
6 Z% `7 C1 e& f& b/ u6 `/ F& D3 ~
* ~4 h7 h5 P1 \3 x3 c3 C9 Tint main( void )
- T! j* ?( f( b! w{4 \! ?5 l3 |6 p

/ B+ K$ e( B8 N: N( ^    /* Initialize BSL */. x$ m& a3 [( L: F0 ~
    EVMC6747_init( );* n. n, s8 s  b: H! x: T8 X
        /* Call evmc6747_intr function */
+ J3 \* f; Y' C( N    aic3106_init( );
7 _8 g" R* {. R; B, @# n        while(1);2 l0 e% x  `% V( y/ ~
}
( u0 |, ^* G# x0 f4 L6 [
, g$ _8 \3 X4 b- N6 z8 w
# u# W+ N; v! B7 K7 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 I) y. Y. ~" d5 i/* Initialize MCASP1 */# X6 O% G, u; H& }* c: s9 {* H! `
    mcasp = &MCASP_MODULE_1;
% W: Z  G0 ]" F2 Q: S8 O* L    mcasp->regs->GBLCTL  = 0;       // Reset, i) j( q' v8 c" K7 s# ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX
& J& {0 x, @- V    mcasp->regs->XGBLCTL = 0;       // Reset TX' S5 k; V, y% N" \
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 ~( i8 u( f6 i/ \; F' d0 {" t   // configure McASP0 receive registers$ J3 ]4 W" n1 t4 m3 `' [& Z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ Q# n/ e8 z  N& d- j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, a7 ?7 x9 ?: }4 \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 Z! S. h" ]6 s6 B6 J, d, d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 u, f! o" e" k1 l4 n$ c% ^) q8 c    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) @% P  M" ^. b! Q% ~! `2 g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ ?8 s1 h1 h) ~4 I) r: N1 I, @! E    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 R6 K7 z/ B* G5 R2 g    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: U5 n: f# {) x! S4 K; }1 S

) q, q& y6 [( s    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ F8 L  _- v; \* ^0 y% l
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 {* o1 I3 P! ]1 ^4 A7 d; N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 i& @  J9 Y3 m" W+ V. e$ R# A    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 T9 K6 i8 G4 o+ F& L# m
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ v# h' p* y) ]7 f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& h/ ?( F0 E) V+ p4 p1 |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: v3 ]/ _; o: V. @" u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: l3 C& e: _9 D2 u6 _3 P2 |2 ?
; O6 K5 ]; a+ ?+ y1 n8 s2 W
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. a" Y3 b1 n: }5 d% z1 E: G! M
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 e) x& F) A3 c8 f+ |3 r& E$ p% R; c
    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 ~. c; E  L) x0 m6 {2 {& z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# y# u" b' P7 b( L; e+ x/ M1 R
  v& S8 w+ ^3 w$ Z% u. k" G5 B  i
    mcasp->regs->DITCTL     = 0x00000000; // Not used
- V! i  k9 k& d, m, a    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 H- {/ j0 D; K) |9 r
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 m( _: b6 w* O
1 V2 i: V- R4 T& x9 R
/* Starting sections of the McASP*/  q$ |1 k& J" t+ c# T
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + l, o8 @" |) {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 ?' t! M- ^& W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 [2 G: w) o2 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 R" q4 s4 y2 ~6 ^4 o6 S: |% s' g$ ?0 c  V
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 [+ ~9 r8 X" d# s; a- [2 O3 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 C; y  P' x& p/ S    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) N5 U* j( p* c' \. X  z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: u( H  W, c  i; j1 O  j* B. a; Z8 E
+ g" A, d6 l- d    mcasp->regs->XSTAT = 0x0000ffff; 1 G2 B9 I" |' R" b  \
    mcasp->regs->RSTAT = 0x0000ffff;
( h* r. B& R! N: e& d8 P# {/ ~* E) U0 g* k8 r6 r' F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 p4 x* u% A* m4 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 F$ N6 e& g0 {) `6 X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 l  e" l0 v7 y- r% O! u. l; r, G& i7 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 S- x: w- y# w! J9 e' V9 M
5 O- m" Y: M" [    /* Write a 0, so that no underrun occurs after releasing the state machine */
- [: v. s, f5 q, b    mcasp->regs->XBUF5 = 0;
- [% s! B3 Q* ^0 N" r5 R    mcasp->regs->RBUF0 = 0;
3 T# \) R7 }+ u9 L" W% \' Y& L- X2 J" u8 p6 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + @2 [- N  G, }  J  R* u$ |( z1 [9 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 b" Z1 O2 w; C! ^6 R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& r7 f$ t  s5 j; u# u( f2 C! Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% Z+ }6 K% P) U: z: N* A: r- Q! A; p, _9 Q& h- l! |
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: t# k+ Q$ w5 ~( H5 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 c3 e( N& T5 u4 V) n4 T
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  u$ K9 f9 J) s4 c0 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 T  f; x/ e  O% l9 r/ \4 y& ]
. ]' M# [8 u, D6 a' |  s    CSR = 0x0000;
* Y1 `9 E/ u$ c7 L    INTC_INTMUX1 = 0x3d;5 x( k, R( w" u$ Q1 s' u  i
    ISTP = (unsigned int)vectors;# X! _' L) {7 O3 W$ ?
    ICR = 0xFFF0;  
! j0 N5 }5 Y& s! P    IER |= 0x12;  4 Y7 [  n" t# L& X& T+ o
    CSR |= 0x01;  
. M' t/ R7 f. y" ?, o2 E, Z2 O/ X# O* G$ I1 a# g8 x) M

3 u" f: h) i7 `) i5 ?& L( }1 @0 j4 j# p
还有就是两个输入输出函数:
5 G7 C9 L8 F  R7 c/ t8 Ivoid output_sample(Int32 out_data)
. s0 {# V; _, K$ J5 u5 ^{4 R* k# e! x' ~
  AIC31_data.uint = out_data;  
" |. T5 B/ S1 M5 F" @  @! r  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 u5 ]" u+ R  C( b}6 A( ^! n, H9 u. n

2 P& ~8 @) R# ]+ ]6 }, i9 r& A: sInt32 input_sample(void)2 q4 D( x6 E) Y. |, n4 j, ~! n
{  ' c8 F5 E7 L) }$ G; X  @# o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 i: E9 Z# ?4 D. @0 \) F0 J
  return (AIC31_data.uint);) E9 |- ~5 q1 S% i1 V
}
; @- b) R( l3 {% Q
; z3 m( a$ R, E& \& e; p: 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, 2026-3-22 11:43 , Processed in 0.047109 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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