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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 }3 f; ^" I5 l! K- m" A- Tmain文件:: d; f3 D" q2 l1 S2 |% V* I
interrupt void interrupt4(void)  
' e& j9 I5 m% ^) S2 H{+ L9 J* s7 V4 M" {8 w# V7 c
  Uint32 sample;
( N: V& K0 l* ]: s  J8 m
! [4 f* q: n& d& i  sample = input_sample(); // read L + R samples from ADC
# L* z  j& X: n* \& T% ?  output_sample(sample);   // write L + R samples to DAC " {) j8 B  r1 D
  return;# D7 \* e7 C: Y7 X5 }  K
}# n6 P: E7 R4 R5 e( `0 O' C

& a% d: ^$ r& [# X( c4 Xint main( void ); [, K% }, u9 ?3 Q( @' _" T0 Q
{6 z7 ?; A+ h9 s

  A9 |+ m) z9 ]! Z/ U* y2 D    /* Initialize BSL */: P& f- r) Q" ~+ P
    EVMC6747_init( );, `3 U! C# V3 E8 {# a9 G& _
        /* Call evmc6747_intr function */+ |  H" D! D- l. {" J! g
    aic3106_init( );
) ^# f3 x9 s  _* E8 r( L        while(1);
3 n' [# v3 d4 r7 r}
9 O6 L; O, _! G7 O+ ~* J9 q' l  d4 F; O# o4 {# x5 ]
, Y' g5 o% H) Y7 F+ G2 z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! y: q6 Y$ o5 r, \$ @/ R+ }; v& U
/* Initialize MCASP1 */  y8 v2 _5 N$ m1 P, D
    mcasp = &MCASP_MODULE_1;
$ g0 @& k) m# N2 L8 F: n, V/ k6 A    mcasp->regs->GBLCTL  = 0;       // Reset' ]8 e$ y' A3 m/ F
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 `' M  U! J7 Z/ Z# X" s2 D$ L9 k
    mcasp->regs->XGBLCTL = 0;       // Reset TX; _( T8 e/ u! t5 N2 g$ r
    mcasp->regs->PWRDEMU = 1;       // Free-running, J7 q  y0 Q0 c( T. i4 C: R% V; ]
   // configure McASP0 receive registers* G) Q9 s# r# E# b0 f  G5 P2 m
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' I: H: V0 w5 s- j* Z- X* L
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: ]- ^4 b# T. H$ X, t2 s7 m& P
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; W! A, j- _0 O5 J! C
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- F. g2 n& r; G% T9 |& @  K' G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, I- ^. S+ j3 h  j" M1 E+ P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' r/ G7 Q+ f0 n- n9 p
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 _# ~/ D* y4 b- N4 t
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 A  {0 O1 ~" B6 |- D9 _# H, @7 _' ^+ m7 D
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ N! W5 z* s' b& u/ s1 y7 j
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  a' x0 }$ m( w+ T# l+ w- `
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 f' V. T  o$ C1 r1 a0 I- l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 i: W, w( @+ C+ ^  J1 _
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ t1 W( {; |; L4 b6 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' G& b: O5 y3 t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 [+ X6 i9 \0 \/ M% d( @    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( X7 o/ e% `: l# t+ l) c

5 Z1 W. k: u0 _0 \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ z6 l4 [( ~7 U+ z; ^" l0 _2 B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 f7 M8 }5 e, x+ w
    mcasp->regs->PFUNC      = 0;          // All MCASPs! F1 n# A+ T! J1 _- J) X" v0 w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* w# V8 b0 P9 E: J6 H' u

9 K! W. j( e: k$ S7 T  f* @8 [    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 N7 ^. K% }; g( P) E    mcasp->regs->DLBCTL     = 0x00000000; // Not used# |3 a( {/ C) M2 N' e
    mcasp->regs->AMUTE      = 0x00000000; // Not used) K3 w7 a% c, _' L

- G' d2 m- g' z" h/* Starting sections of the McASP*/0 ]! J. p: D+ D: Z" f$ W4 D- G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 @9 J) K7 [& p0 g( |4 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; s: ~  n  r+ t0 D! q" e
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & j* U# f5 H% }  s) ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, f; D" M# I  |3 x# e1 ?0 O: R+ T) m4 E% v; t
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 C! m) w1 Q# u% j3 T7 d3 B! i7 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! C; m0 \4 V0 g! i9 `& c6 }* u6 j
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 a0 E! C/ u. Y  Z  E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 W5 y2 o  ^1 W2 z* z. w$ \3 x0 Y7 O) ?" ]3 N
    mcasp->regs->XSTAT = 0x0000ffff;
% F) B( K- J* @1 m    mcasp->regs->RSTAT = 0x0000ffff;
: @1 _! F2 y+ k0 Z) \( d6 [( ?6 Q. ]- F6 V# I0 ]3 q: h
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, I1 U% d, c6 {3 G) @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 v/ ?' }7 ^# @; D9 p( G& Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 U7 b( O6 m3 a+ j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. Z1 S* E% e, E; ^4 I3 @  _. ^) q& w
    /* Write a 0, so that no underrun occurs after releasing the state machine */! l! y% U/ d+ e3 y  C" L: f$ Y
    mcasp->regs->XBUF5 = 0;+ j6 `! x$ u% e) X! ?. X
    mcasp->regs->RBUF0 = 0;  ?1 z+ k2 f0 d3 u- P

3 C! c. y/ ?3 n) t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& g) R) ?8 h1 n3 c! k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* m  b4 h% B" l' s$ j; L* K# O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) p- F" k# c6 r8 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- i# H- `8 J3 ^

( Y% i% X7 T. C0 r; W% L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, R0 N( D" K. S1 {9 x+ n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 U5 x" T0 \, h8 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 z9 g" y; @4 c1 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 a* o7 C6 \: o* q5 J0 O) v  _% o- r& o+ Y3 ~; j2 _8 \, ~
    CSR = 0x0000;
) F% h% ?1 b7 }- ^3 r# L    INTC_INTMUX1 = 0x3d;- D  O7 z1 Z3 y( ^* O
    ISTP = (unsigned int)vectors;4 I3 R% {  L1 N) b# K
    ICR = 0xFFF0;  
* E3 A" L' q: C$ N5 }# g- S    IER |= 0x12;  
: |5 N! c, \. R$ d( p! h2 S    CSR |= 0x01;  
0 X6 [! t# s5 c  s/ z' ?' L5 `$ i2 _/ X5 z4 \# X; l, N! V8 R* T
# `: v/ k- p2 U2 @) V+ {" g

" y9 g1 F' P& n% {2 J3 a/ V还有就是两个输入输出函数:
6 U6 E4 @; t) R: ?' R+ @( fvoid output_sample(Int32 out_data); N; F0 _# j1 i" ^6 @
{
+ x& @, r! x/ U. S  AIC31_data.uint = out_data;  
8 A! u5 h1 N& x. K4 `  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 Y" L$ n. j" C" u# S}# E( g$ h8 L! S, c" V
8 r9 u0 y, T0 X% R# o
Int32 input_sample(void)9 V0 N- B) y4 t' M0 f
{  
: R$ _9 \+ \& k, P  AIC31_data.uint = MCASP1_RBUF0_32BIT;! G: G- c+ ]+ ?
  return (AIC31_data.uint);' b1 A" y8 L: F; r
}+ C" T+ L" P- Q& a

8 i$ e/ Y. m4 z0 C/ d
分享到:  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-1-21 10:04 , Processed in 0.046861 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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