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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 n4 P4 C" u9 `
main文件:0 z1 _6 M5 D3 V* }5 X+ Y
interrupt void interrupt4(void)  . V" o& x' z2 n5 V
{
0 I0 k% h, v& s* b8 I2 Q  \( c  Uint32 sample;( t1 i9 e/ U! s" w  \

9 x6 ^; E8 @" J" b! c# G# X, V  sample = input_sample(); // read L + R samples from ADC9 U( x% ?6 {! X. |
  output_sample(sample);   // write L + R samples to DAC
; U6 Z9 g# u$ _9 x  return;; @  D: L* [% e5 h  M: {
}: ~) g- E- c/ d& S$ \

. Y$ K) m7 p4 O) M% |( U: I% J: qint main( void )
. t  a% E4 \1 _1 Z5 I" T$ q+ s{: f$ r4 d+ ]0 I: V
/ p' A; Z) {! b5 ]/ M
    /* Initialize BSL */
. p' ?) P: ?% x4 ~! C# S+ c    EVMC6747_init( );
) X, w: o6 ?9 K' m        /* Call evmc6747_intr function */5 q1 r5 W1 m$ K! E  D5 `
    aic3106_init( );! y7 \( A) O: V  S* E. C
        while(1);
& @- F: S8 m* f0 b3 B}( a! n( I, `. Q% @2 ]
) s& `( X: t' @6 I; q% j

  e$ w0 N  G" {- h: _, @8 Y. faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 Q! z+ H+ a* o: c, H' [2 X8 G
/* Initialize MCASP1 */; N2 b& u; j, O% g) f
    mcasp = &MCASP_MODULE_1;
0 P0 P3 t: a  W7 {! y    mcasp->regs->GBLCTL  = 0;       // Reset
: @* y9 Q* \! [! k& Z7 T- S    mcasp->regs->RGBLCTL = 0;       // Reset RX
, |3 L0 @' k+ q* p    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ J" d: w6 o7 ~! ~& F/ N/ j: K    mcasp->regs->PWRDEMU = 1;       // Free-running
: z- m7 j; T+ e   // configure McASP0 receive registers
1 H- J$ j+ B' [1 u8 }; {& T    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ @: n. Q4 v, D& s% `/ r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 M' `' r; d, z& g0 A/ o& Y3 |    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 i3 g- N1 X( Y) \( A+ x" o7 E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): _, i8 o( o% A+ V% k6 H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ q) c& E7 O/ U2 S: h+ V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 q9 T; ?. r, n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( U( B5 d4 Z5 q+ j6 j    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' J8 b( ~) |/ g
1 x5 K& j6 K$ G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; C3 M+ \- \: e, C    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' M' {% X" p1 I. S    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! F' Z4 n. a. ~& t7 x' Q% C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 I4 X+ N9 ~4 H, G
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 @7 Q2 P7 N! _' P' ^& o
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ ?& p- ?- H4 @/ }- Q+ I    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; E7 L2 w8 [  s" F; e3 s$ E/ C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( H: x" o( G: g

: w% {1 B5 V8 g7 F    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" G( [; N& N# c: S. O    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ S6 m" K+ z" E; f  ?. ?. \    mcasp->regs->PFUNC      = 0;          // All MCASPs0 X/ O" m9 v4 [  \& u* Q6 z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 F$ l0 o! e7 Y, a; \
5 }! i  }- ~2 U8 Z! l    mcasp->regs->DITCTL     = 0x00000000; // Not used7 D+ D* w* T! c  k. ~: x- Q8 b
    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ A( z2 b! Q! X8 q) }( ]
    mcasp->regs->AMUTE      = 0x00000000; // Not used( `6 p' L. g; O! o5 R
: ?$ C, p( ?5 \7 |! R& f
/* Starting sections of the McASP*/( T; ], _( Y6 o$ k: V% S" J
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 U9 P! g1 Y% y( p: r- @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : K$ g5 b+ ]9 N1 G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; x' K9 m8 h& @6 m# K. X: ]0 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 H$ e. o: @' }, p
; Q0 k" V& r) c4 e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 b" X7 d) ^( y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ `' v9 {* W. C+ b" p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 l1 \! S( ?3 y* y0 x$ d" y0 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' k/ }! y' n7 \0 `
1 }, H  J; |4 _+ w
    mcasp->regs->XSTAT = 0x0000ffff;
8 x* |$ f& s1 d, |    mcasp->regs->RSTAT = 0x0000ffff; ' I3 m" r( c2 a- U' v
1 i9 I, I2 T# C5 m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; ^/ \$ V8 M7 p  T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' H% O( N' }) t- @# T& ]8 W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; `: X( j2 L4 R' n' J5 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 l' T$ a6 x. U# L7 Z& R

2 j# B6 U% z  U. ?    /* Write a 0, so that no underrun occurs after releasing the state machine *// Y5 K( o5 f- f: T. K, g' t- d
    mcasp->regs->XBUF5 = 0;1 g  }- d9 z" U% _9 \
    mcasp->regs->RBUF0 = 0;
. m- i: b8 b+ N! s8 S8 A9 @) Q1 c+ ?, _! j! P8 u9 t' B" H/ d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 L! x4 h# m% B5 F. t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ W1 P8 r" F: m) h& u    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 i. O$ w. L/ @1 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 ]  w) [  b6 r7 Z  y& {

( N3 r6 F& v7 r% Z. D# u  V, ^+ ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' l7 r/ T  h% d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: M! z2 X* S. F- x( M: j- z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. @" j# D& ?& @' g3 q5 k; L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* ^3 r4 N( Y) }# G
; C1 H0 R  I  i, p$ D
    CSR = 0x0000;  {6 o+ f+ ?* ^9 j  g1 D
    INTC_INTMUX1 = 0x3d;
: g. P1 y8 K9 k& f) P5 t    ISTP = (unsigned int)vectors;
, e/ C! a/ s/ O! p- j. F5 X    ICR = 0xFFF0;  ' B4 H9 h1 I) R/ q4 R2 w; I& E
    IER |= 0x12;  
* t- \, \( z% O6 s1 H. L7 p    CSR |= 0x01;  
  L9 A( V, X5 p% p- u9 Z& v9 z
- d  d4 j0 h- @* q0 F3 B+ G- W* {5 P0 k' \1 w' X, G

  W3 |- d' {1 O# k! Z3 N9 B还有就是两个输入输出函数:
& `) f$ a+ h  ]  G4 A1 Lvoid output_sample(Int32 out_data)
& w+ p8 P) n9 A  e{0 S1 J' Y8 ~0 ?2 T# |' _$ z& _0 Y
  AIC31_data.uint = out_data;  5 S5 Z) j, v+ S% J9 S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( O+ [' u; k8 m( O% A. E: w
}6 e% I. c' h) m- Y6 _. t# k$ z! x

7 W: [' T7 A0 ^& v* K8 dInt32 input_sample(void)
4 F! v' @8 b/ M5 l3 Z0 r' D{  
, r& |* H& Q* {" I: [  AIC31_data.uint = MCASP1_RBUF0_32BIT;  B$ o# r* ^; V; N# }
  return (AIC31_data.uint);1 v+ Y  T. `/ r4 Z9 x
}
- ?9 E* u5 X0 i/ ]; Y$ M6 Y+ ~8 H
  @! U" g5 b  d) B4 C
分享到:  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-16 06:13 , Processed in 0.041026 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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