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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 o2 q3 N9 ~% ]
main文件:8 |( |+ M2 V( |( t0 l4 t
interrupt void interrupt4(void)  
5 ]) p7 G6 B2 D% v) L) X0 S. I{
1 M& \! V; {4 W+ W  Uint32 sample;
; g% U, E  @( N; R) w) O% t) l5 d/ b# D
  sample = input_sample(); // read L + R samples from ADC
+ W% H9 H' g* \3 K7 O  output_sample(sample);   // write L + R samples to DAC
: h1 K6 ^$ E3 V: t0 k# F  return;, y  ]; G% C" [, h( m# X
}+ Z, W# _: Q; Q* K) Q, P. [
, I' s9 w$ c: i5 o9 B: ]
int main( void )* Q) m0 Z* V5 i- }6 \7 H
{& K4 v/ P. q' ~6 ]& w
0 F% ]  n$ A; u/ D5 T8 a7 {" M9 q
    /* Initialize BSL */
5 H. x* d: M6 z8 u  v: e    EVMC6747_init( );4 u" I& I/ b4 [- d
        /* Call evmc6747_intr function */
. w0 _; }! J2 f" T, \. f    aic3106_init( );
" D: t" h4 Q) |; `3 s        while(1);0 k* `9 O- s" P8 U
}
. x) L; P* h. |; \. H( M  g& S
6 e0 H# k+ }0 B4 [( b0 k, T! h
# _' g3 D% C0 X5 [aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- b( \0 b, @4 x" o/* Initialize MCASP1 */
5 {3 S- P1 G5 p; ^4 ?8 M, W$ q" ?    mcasp = &MCASP_MODULE_1;
. l# G( A9 V2 I! K    mcasp->regs->GBLCTL  = 0;       // Reset
( j  M+ B; g- I& W5 G    mcasp->regs->RGBLCTL = 0;       // Reset RX  J; U+ i: }: M2 Z3 b1 B. x
    mcasp->regs->XGBLCTL = 0;       // Reset TX2 b: i2 J9 b$ K$ G( u& b& D
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 _9 ~: _0 P4 i! D4 O   // configure McASP0 receive registers$ N% {6 N% S! [' k! I3 B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ W+ i% M& D6 `/ }1 X
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 Q* W  g2 q8 T6 i" U- b& K; E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( F. S2 J- h1 h& F3 n
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ e6 W- Y5 ]) v) o  ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 Z$ X# D0 I% r9 g" _2 q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, A- G  U9 `* ^/ @1 {; P0 b4 y8 N% A
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. ~% v9 f: b. N2 p6 v( B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- `& C/ |( U- b: k& z% V7 P* X

5 X/ I# }- W% ]6 C0 O# Z& q- H    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, q2 z6 L+ J  M: g6 C$ R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 V9 d. k3 y3 a( o, |& k
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 `% r: F" ^3 [4 ^/ T    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 g* W6 l. C! T) \
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% E! U. P: D( F# v+ B3 \
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* q( w  r3 E- y7 G+ K    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# O/ @" f- T& l9 _- x
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 v8 P$ D, I: M* g2 g9 ?
: i% a9 v6 M! d" f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( h, ^$ b! \, q' r3 C/ e( J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( V/ n' N+ Z& ]  Q5 N+ D5 Q6 \    mcasp->regs->PFUNC      = 0;          // All MCASPs% L4 `- `; q  H" B+ @( S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 q$ o0 U0 Z2 \( o/ O+ P! d1 ]5 M
7 f; M- w; w. I7 _
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% R  s5 E! \, \7 O; T    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& S# ?! D# q; A: I0 f    mcasp->regs->AMUTE      = 0x00000000; // Not used- m1 i- L% `- e4 [

) y1 _" }, ~" K6 }; p+ E1 [( g/* Starting sections of the McASP*/
3 u  |4 h  w* a, T# o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 G7 m4 E: ]( W) f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 N4 f6 \0 J$ g. ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' u- L5 z7 ]' Z" ?; ?: b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 T& m) M/ e8 f9 D2 y
! }4 J5 {- @" E    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * l& q, j8 _+ v8 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 F9 p+ \8 [2 x! w: N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 Y& a( [5 O! l: a0 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* h9 j# X  o4 m, j
' `4 a) j) R1 z6 f* }& R8 P    mcasp->regs->XSTAT = 0x0000ffff; * ?6 M6 O( l1 a
    mcasp->regs->RSTAT = 0x0000ffff; * b( q7 O$ G/ i5 w
9 k9 e! G/ y6 V# n
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# Z8 E6 _' g$ R. |$ }; n# w  l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 j/ [. q% K- I2 O; G4 m* M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# M& p! o. ]# P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" T& u, O5 X9 ^* c( @. }8 u7 w
% A$ I& G: M* ]% O6 r/ A4 K    /* Write a 0, so that no underrun occurs after releasing the state machine */1 x0 w' k8 n. m' r( B/ j9 Z
    mcasp->regs->XBUF5 = 0;& _0 }  S# ~3 o
    mcasp->regs->RBUF0 = 0;* B2 X( B0 G; s$ {! l) k! S
! L8 a8 b1 P; u
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 o) v# J, `- Z  s: b8 R0 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 e* ~% w% U) \: e7 K+ D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + I+ f2 o5 G( `/ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; B6 y: k3 J  k1 N$ r
' X% v# z* c$ z6 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 l; X8 ^6 }" q4 v( {  w7 F* z1 Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 A% J1 `! Z5 ~' L, O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 m0 F  b) {4 C6 s# m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- R: ^  }) ~& o4 g/ n8 V2 N. s; k

* U) c% `& y  a7 s    CSR = 0x0000;) v3 ]$ G& Z" ]3 h) |
    INTC_INTMUX1 = 0x3d;5 L: ?+ y6 }/ w# p& E- c. b- L* R2 A
    ISTP = (unsigned int)vectors;) z+ `( |$ f- w: Z2 l: y$ D3 h
    ICR = 0xFFF0;  
, w0 q: C+ L7 q! @    IER |= 0x12;  
2 [+ [+ R, F( \/ |7 E    CSR |= 0x01;  6 U1 _- k8 I  a4 O2 z' ]6 `, b/ \/ H
/ z8 u! g' ]/ l+ u3 W9 O

# r9 m+ z9 `. M- @8 W
. P2 ?- p% i2 D" o# R' J还有就是两个输入输出函数:
' @/ T, X* n" P" L' Ivoid output_sample(Int32 out_data)
6 |- ]8 g0 |) R# v6 _2 J. E& \{  k6 g3 @6 W7 Y, Z; I
  AIC31_data.uint = out_data;  ; t( b; \* v. T9 k- [
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" ?) }* c' U8 {# G0 Q) R}2 B. o8 c+ w" t$ q

# Y% Y# B: P3 o" G- w4 X1 SInt32 input_sample(void)" F7 D; K! g! J' o3 a4 K
{  . y# W# e' ]2 d- o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' W7 [0 B3 f2 h0 v  return (AIC31_data.uint);" A2 s! k& R' H! T: A
}
& n3 t: a% q2 n! k% K" b3 C; I* |$ x" m
分享到:  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-6 22:27 , Processed in 0.038617 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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