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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" k! i7 z: J* l/ @1 P5 \- t1 Nmain文件:* }4 `' k6 R7 t& B; C* f/ d
interrupt void interrupt4(void)  
  B$ w! }8 f# C{6 C( I6 w/ ?+ ]" x2 Q# D
  Uint32 sample;
. H+ C1 L9 e0 W
# v/ e9 [  V5 T6 }  C  sample = input_sample(); // read L + R samples from ADC! o: |6 ]; O# Q# @" m, f
  output_sample(sample);   // write L + R samples to DAC
9 r' m8 b& ?3 H  return;
* q( M* }$ x" ]: C& V}* G1 c. \; ]: G8 [! Y

3 R* l1 s  f! o+ F3 {) Z& ]7 rint main( void )8 _4 A+ F( e( r. c/ w; H. u4 `
{
& R5 W- p8 {, }( }: z4 o, W5 X2 g+ f- m$ K' k" a) ]
    /* Initialize BSL */; @. J3 Z7 B7 c4 Q
    EVMC6747_init( );
2 S# P8 X) _7 F9 d8 F3 _6 S& B        /* Call evmc6747_intr function */
6 p6 W: J4 Z0 d3 ^9 t' i- p; v+ [    aic3106_init( );
& ?& R, Z4 J1 V3 `: g        while(1);% f# w- L; g* y/ }0 c/ M
}- D4 {, Q2 Y& f8 U: R

9 s7 m4 }9 ?: ]  X( g4 {
7 N; D/ ]0 U  X2 Yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 Y7 {1 B' x8 Q4 R, f: M' l* g3 ^6 s/* Initialize MCASP1 */
* l; l& Q3 ?+ n4 u! h6 a% c% |    mcasp = &MCASP_MODULE_1;( Z) k5 U* F2 n9 r! `1 z
    mcasp->regs->GBLCTL  = 0;       // Reset
7 l3 d) e  [# u6 c9 d% X3 _  l0 b    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ W3 u# e2 a* D7 n2 ~; i4 [6 ?# e3 @    mcasp->regs->XGBLCTL = 0;       // Reset TX) M$ t1 Q: M8 ~! A
    mcasp->regs->PWRDEMU = 1;       // Free-running
' R  `8 A* a( t   // configure McASP0 receive registers
2 E8 ?. R6 w8 M8 w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: N8 c' S0 I6 h- W! C' E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' S3 _& d; g/ I# n( N    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& F/ \. j. i7 W; v; K    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% G! k: ^9 l2 k
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; Z# ?! E& s! d    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! q. b9 m3 I9 f" N& K7 {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ q$ V$ C2 Y: A2 b    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 E/ `( Y7 F. ^' N: f) p
' P. r5 |: O# p    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 i& D0 {6 n# k% n
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 T9 s6 x* i! U/ c
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Q' g1 |+ {, D' M5 I7 g
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" R: g- i  e; ]/ n1 M) ]8 X  E* ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 i8 |& U# e2 j' P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& u6 o  |1 Z( `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ F6 |7 y; M" B; A& R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ u$ ]- I4 y; j) t. \
% U  A  [+ V. N, l0 S% T* H3 ~    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# o2 H" |( j4 k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 k6 P, P8 l; u) ]0 f    mcasp->regs->PFUNC      = 0;          // All MCASPs  i" f: K- |, O/ _4 K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% Z& I8 Y7 S3 v3 |7 W' D
: l9 D' M" y0 |) {- [. p4 X# q: [9 K    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 J" [1 r, I5 h, `3 h/ R  |+ u    mcasp->regs->DLBCTL     = 0x00000000; // Not used" [4 \$ y4 V! ]* I! D1 S5 ]4 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% ?2 E& o( N: }! |3 v
( H% B  F; R4 h0 O) e6 V/* Starting sections of the McASP*/
$ Q; N' t; @1 @. |6 M. @7 [( B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) M7 U3 [- ]4 }8 h6 O. e. ~/ P( i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 ?8 `2 _" C/ U6 O7 t  p
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" X8 ~5 K' P$ l4 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  c# C6 i5 n0 J# J6 H& n' P& u" N8 L% g5 D% S
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* i' O$ M# y1 N2 w* ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 d; O, l' v, D; Y9 B3 v1 q- W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 g7 K6 D, i1 I; I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 k3 ~( F5 E; d' j" i! p& I5 Z4 t
" Q' m: g2 [& i
    mcasp->regs->XSTAT = 0x0000ffff; 8 Z9 Y& G" U; u
    mcasp->regs->RSTAT = 0x0000ffff; + ~9 \" V% W0 N4 J( r& ?
2 r  M* ^6 f+ V$ b2 q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 i% l2 }% g" y! K0 i1 _5 n" x0 P( |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 G$ p6 W! l/ \, \1 ~3 g
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 i0 b% O% Q7 Z* _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! i9 x' \0 R3 h* d1 l( s2 l4 v3 H" s) E% e* q# s: B  m( t$ a
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  @/ S$ B0 l! v) I9 O* G( v* G+ x9 w    mcasp->regs->XBUF5 = 0;+ a: o, X# v$ k4 A0 Y% l1 s
    mcasp->regs->RBUF0 = 0;: v/ Q0 W8 u: R- m. F
% N& G$ q6 t' X$ B, Z7 _
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ @" _2 u0 A. m7 b+ a' T5 r- N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 R) u* i6 x; s& v# w* Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 r8 B5 O# }/ E- Z$ c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& `6 x- @, q/ u9 x' ^5 I
1 e5 {& N4 |1 x4 Z) I+ N; y9 L
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ M% |4 L5 c2 }( V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* h9 ?3 f9 L& z6 L- k% m3 R3 p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) ~) U( Y9 p3 k6 K1 s; B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! m: O$ j/ u. b, ]" @1 j
8 Y0 {2 |/ m: M* q  Q    CSR = 0x0000;3 X+ Y/ y0 j/ X2 `& b
    INTC_INTMUX1 = 0x3d;& `! h; u/ k/ f: l+ z
    ISTP = (unsigned int)vectors;
5 H; o* {; U" j! M" e2 B" L    ICR = 0xFFF0;  1 N0 z, F& ^* R# k! k( t% s
    IER |= 0x12;  
; D5 d4 m0 t3 T6 [5 ^& x5 g    CSR |= 0x01;  
* k% o5 N3 S4 O% E# V1 l$ ?
# W5 L7 E& S* e- |( U
5 o4 K6 K  _) q  n( s
1 }0 q8 Y' o( \5 A还有就是两个输入输出函数:
3 }% w0 r9 c* O3 G3 [void output_sample(Int32 out_data)- U* f: n, @. s( M  x9 R
{' e  \1 _# y' F$ N9 O( [
  AIC31_data.uint = out_data;  
9 N2 N  Y' e  C$ u3 a3 S  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ ~! i% }% R0 r/ A
}" B" V$ k2 j5 @, f  J; _: B' i8 ~

6 S& Q3 Y( U) V8 b5 e* M. MInt32 input_sample(void)
: x& O) X; |% @2 L2 U7 x" z) Q{  # ?5 w8 a# e. e, Y- o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ I. ~" A7 o$ R& O) z: I2 {. d2 J; S  return (AIC31_data.uint);. D0 J8 @. Q: d; M1 H
}3 Q1 Z- ?, M% K4 w

. ]6 G# ?6 n4 ^3 x/ }' t
分享到:  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-13 09:14 , Processed in 0.044094 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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