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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" C/ C# Z7 ]5 g9 O0 O& Amain文件:. B; j% T6 O1 {) z/ @) j/ W: l# h; n3 r
interrupt void interrupt4(void)  $ H- v" r1 m, G+ a* m) F; S9 d
{
, l6 x2 V6 ]7 d. e9 J2 e7 @4 r  Uint32 sample;
, H: Z% Q- m% ~% I9 G% K
+ \5 Y5 p, @: g$ ?  h5 N( n0 B  sample = input_sample(); // read L + R samples from ADC% w; E: P/ X+ f2 d1 F- F% _
  output_sample(sample);   // write L + R samples to DAC 8 K- `2 `, T7 d
  return;
# _( J! ]7 x6 r7 z; C3 y}
/ O$ S; u0 o/ \9 a! L8 _* o9 A
+ k# c" Q  X8 |int main( void )
7 o1 x) D5 `- r6 [# u{
. A- c. U& x; i  k" A+ c5 w( T% ~0 G, P3 l7 k, O6 k
    /* Initialize BSL */( p9 ~9 r8 C8 [' x% |5 w! n; E
    EVMC6747_init( );4 |2 b6 R/ B1 S" Y
        /* Call evmc6747_intr function */1 U3 V$ n% J+ t$ ^
    aic3106_init( );
: y* y# D9 X5 x! U6 z- b5 W        while(1);
. J' B5 m5 X- B, @9 P}# L8 U% p7 O/ u: x; M
, s2 `* @; L6 w$ @, J

( v" a* n" y( c8 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 @" g+ w3 {6 m$ x/* Initialize MCASP1 */
/ T# D: T( e2 ]3 ~3 L/ Y    mcasp = &MCASP_MODULE_1;( R: s* k- G0 b3 \4 r5 B
    mcasp->regs->GBLCTL  = 0;       // Reset
% z' {6 H4 B" V* n: N; Z/ A    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 C( p8 |1 Z/ _3 K    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 _) I' _- V6 P: ~" g, T1 k4 m    mcasp->regs->PWRDEMU = 1;       // Free-running; `, f( T0 J: T
   // configure McASP0 receive registers
  g) F, E6 v* d" `    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 D7 r4 U( l4 [1 G9 E, ]) P    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 C. p8 ~3 E5 L. ^4 [    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! W; i, g7 G; E3 Q& U) Y3 X
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; P" S  [( _' }  m. b4 q$ K/ _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 G! @: H+ @5 @! w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 g/ ?. D. R7 Z) f. ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used; c2 u* l2 d& U" d- W; I  w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. L4 I5 B) n3 }+ n
( _2 V8 ?  I+ J2 i2 P
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: H9 ]9 W9 g+ |7 P# D$ H% c+ X( A4 ^- i0 N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 X, [  _7 [1 u% ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 f$ l% b, f. ?  u6 ]( {6 [6 N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 p7 b) \+ y- l7 X' F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  l' v( K0 J  k6 ^+ E, j0 p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 A1 [& t( c2 s' N" g0 P% ~    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 c( ~9 I- U! C. |    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# }6 U- Q( V6 m3 O9 M% M( I0 V% k/ F# u  L7 ~, F2 t% x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& h* r- S6 K' W* [: w1 L4 F4 e
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 O! ^+ ?) I5 f  o  Y    mcasp->regs->PFUNC      = 0;          // All MCASPs
; {: p$ K7 H0 m+ w1 x4 S    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 v: L+ S  K% ]+ I( ^7 e$ G, X5 x- `
    mcasp->regs->DITCTL     = 0x00000000; // Not used- L5 u* G) p) |7 m, r2 B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 n2 c* r5 E# c1 g, {
    mcasp->regs->AMUTE      = 0x00000000; // Not used2 B; T3 L9 s9 N- y# o! n/ ?

* w0 N2 \# P& J) F! a1 M1 [/* Starting sections of the McASP*/
+ v9 C4 r9 j( w& l    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 h! U' w) A2 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 A, B; N5 `; a( G1 O    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) `" S* y+ @/ D* }* d. N& c  u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! v' ^4 {$ Q' d! K. S- v
1 A0 H3 G; t; u+ d4 [' X- o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 E3 G/ Y, [" |; d' |' r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 R4 B9 v6 N& I    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ M% M3 t) z& T2 J# N' E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 f; @; l- R  ?" f& X. [$ a2 d& E- F5 Z( ?. f
    mcasp->regs->XSTAT = 0x0000ffff; : C/ y, i) A% L8 P
    mcasp->regs->RSTAT = 0x0000ffff; / s3 @4 C2 v8 c6 u, U- A! d

1 n8 @, a- Q  d1 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; [6 ~- k+ H" i7 U% i2 z6 J& N" l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- o; L0 L7 x/ k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 o6 w, r5 D9 d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ T3 N6 y  q% G6 M8 Y
: P* p! A/ B; B6 s. F" v
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) x1 I3 u- w3 e2 y    mcasp->regs->XBUF5 = 0;
# i% T$ C) N0 `* \7 u, S0 }7 V& E    mcasp->regs->RBUF0 = 0;" Q4 I! e: H3 M7 ^% H8 ]/ ^( h

5 @( [8 S% e  l( Z# A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 r1 k* G9 x/ S( W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! A5 H  @6 `6 a9 R0 ~5 k% o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( ~/ x* t3 P. F8 {. j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, p& ]  |: m9 z. |( g! D8 C  `- n) w
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* ?1 E9 v+ a3 F$ I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! M3 J) B7 t, ?0 J  l
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 G$ O# Y$ c& Y1 t% h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* U1 J$ @0 [9 z8 ]! N" {# X$ ^
+ o8 g$ b1 u4 i4 Q" R: e, Z7 T    CSR = 0x0000;
8 v# s0 E+ }$ h& K    INTC_INTMUX1 = 0x3d;
8 V! b1 c1 ]& C* D* s    ISTP = (unsigned int)vectors;
* n* }$ l* t5 i    ICR = 0xFFF0;  
+ Y2 t7 B1 Z0 y5 h( }    IER |= 0x12;  
$ l6 @0 f- E. a% a  O  s+ I5 Z    CSR |= 0x01;  ) Z7 x. R% q& j
$ y( B( K1 T# l
+ j: o( a+ x+ j/ Q

1 _7 O( E# N8 F& k& u还有就是两个输入输出函数:4 c7 ]0 V& D) E9 [- R6 G" a8 m
void output_sample(Int32 out_data)
* ~8 S- z5 r0 C0 b  K{
% c7 s# }5 H" u  AIC31_data.uint = out_data;  
( U$ }1 j7 Q6 Z+ _8 {& `3 d  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 s! J1 ]; F& |7 A0 k/ G
}% V8 C2 C1 N1 y$ t7 {) o
. N3 V9 }1 k2 H- ~
Int32 input_sample(void)
* O1 T7 Y) F0 Y{  
/ G3 f& y6 O4 [) W* y# T  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ z7 @6 ?# U7 y& d  return (AIC31_data.uint);
  J9 }+ w! s; L* J3 [; A}
8 w! I' y/ {; p" F' W
$ u& `" C& _+ R- F  Y5 o
分享到:  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-31 07:21 , Processed in 0.040136 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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