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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: R+ P. ^3 E( K2 d/ B$ imain文件:
" v& E9 o2 k/ e$ T% e+ Qinterrupt void interrupt4(void)  , t1 X' e' @8 {1 |( Q& p% Y- \% g1 B$ }8 G
{2 s, M$ N. V! V' n( v* j
  Uint32 sample;
* l9 Y, T# T* B1 `, n9 V! k: u
3 W4 B3 G+ ]. {. d$ x5 y+ W$ c; R  sample = input_sample(); // read L + R samples from ADC# m. ?. E6 n6 O# C! b  y& ]& [% V
  output_sample(sample);   // write L + R samples to DAC ; B2 L) |# Y" ~% e+ m# H/ H
  return;
: m5 C% }; Z2 b* I7 ~& R}
- I' z! ~8 w( C" y1 m6 {; E+ u! j' {0 O
int main( void ): X/ r7 y- ^9 J" D& Q$ W
{
! B! K. G/ f. J# @# I- K& y5 {& x  y2 v- O2 P9 ]: U
    /* Initialize BSL *// b% [3 M$ o. B. ~- l
    EVMC6747_init( );
( W- `$ d8 o  O8 ?        /* Call evmc6747_intr function */
  ]' |% u) g$ ?( b0 o" o. b    aic3106_init( );2 M4 C1 Q! n2 `8 s
        while(1);* h6 F+ Y6 ?, z0 m. }; T* q
}3 E* l  U0 d9 H* I: T) s

* `4 P: h. ^& j  ?  l4 s9 p# X7 @. N" F. J5 |3 a: [0 ~5 Q2 V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 m. {) Z4 t$ S. ]/* Initialize MCASP1 */1 _/ G" Y% y8 Z' z
    mcasp = &MCASP_MODULE_1;: ~  v' h6 @1 i7 u% l. n, @( R
    mcasp->regs->GBLCTL  = 0;       // Reset
3 @9 Z3 W3 |9 N8 z2 G: ~    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ }$ d( {% ]$ l& p    mcasp->regs->XGBLCTL = 0;       // Reset TX% ~* q- U1 @: ?& w
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ N' h: k5 T& Z# I7 b/ S) ]0 U   // configure McASP0 receive registers
1 H& d7 k* @% i, h  Z2 m( T% q! F- N    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, E/ v# B9 Q. \9 z! |3 Q3 S
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; _$ t6 s# Y+ z% \' @2 R9 ~. t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) w2 \- S# ]: c, P    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, }: \# Q$ v, u' z$ Y4 n4 P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 a- N# t9 L" T' [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: R5 \: _* C( X/ C; H8 A+ _$ i6 Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 _/ S2 a% Q# g- I6 x3 ?    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  d. T5 h. V3 o( S0 ?' ]7 S

- a6 ?; h6 Q" T& E9 h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, _; _  f0 m) ]# i
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 B5 Z# ^- r  z) o/ n$ S* ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ o4 r, o; Q. H4 l1 |5 v    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 T9 D7 b4 }4 V! O/ I( M    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 F3 S% K& D0 e( r  K
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' k, O6 L5 d* \, D4 ]; e* X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, ]7 G+ s$ K" M+ }6 I0 z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 [  v8 U- a. y8 i. [5 v8 u! f) `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 }3 T6 l/ `; a) t- c1 C' F4 w! G' X, F
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% S8 ?" y3 d2 q: F* O6 ^) v
    mcasp->regs->PFUNC      = 0;          // All MCASPs
: W% M, k! p) _    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 h2 E7 C8 ?: a- }' b
- A" v( E$ w, t7 h* C2 H, N; u    mcasp->regs->DITCTL     = 0x00000000; // Not used" \: [3 ?/ u: [! H$ t
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ a) k8 u) ~1 e- |    mcasp->regs->AMUTE      = 0x00000000; // Not used
# Z9 N) C& J. s8 W1 i& w8 Y. q$ q8 \) A& }
/* Starting sections of the McASP*/
# A" c" K' i4 y3 u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( |8 P: W5 Z' u0 @1 h' M/ \2 O7 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , g% _, Y' e5 |+ z0 v" F: `
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 ]% {, F% `; Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 D0 Y* s1 k( h8 V% p; e
+ q4 F/ g) t5 a+ Y. F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- m% O/ T  @3 O; j) h% B0 ^3 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ L- K6 c& [" O7 m7 F, A4 _" r; y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! p8 o/ n" }6 s/ k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 O, d' J1 S# r6 h% Q; S

4 X" u! X6 B4 a, }8 g* e    mcasp->regs->XSTAT = 0x0000ffff; 0 [: S; o- N7 ]
    mcasp->regs->RSTAT = 0x0000ffff; ! T& F7 X6 l: ~1 \  V2 J5 \
7 J; X' Z; K8 x5 l7 K( G3 I3 q+ j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 i9 d% D+ i$ Q8 ^+ j" E* j  y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) [" l! w2 X3 k: {6 q8 F" ]' j
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . y% j" M/ ?( u6 P! |- t# [1 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 Z" Y& V* J/ V" Z, a& S- X, q3 A; }- ^8 O) w6 @
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ x4 Q4 e7 Y7 j8 ?- D. O9 m) R    mcasp->regs->XBUF5 = 0;! R6 D  |% J0 v- ?! Y5 j
    mcasp->regs->RBUF0 = 0;
3 i. E5 C' G: Q: S8 q* d/ g9 Z; ?$ F, v+ k( }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * u0 I! ^/ m7 c# |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- F7 r8 c- a9 {: ]+ s. w! G  R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* k2 A9 T" w$ C% a; M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 t7 G* M* W; M( d# y, H
4 @2 x0 x4 v  T/ i' Z- E
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 p$ P" ]) ~7 c2 ?4 f' j3 X$ ]& ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( C; l  j8 F; t
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 d& T& w: M/ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: R) }$ V. ^& U& Z& K5 a

& E0 D9 ^9 \" C  f9 B    CSR = 0x0000;
- g2 A3 ]" ~& x6 E  m6 v    INTC_INTMUX1 = 0x3d;
  Q1 D/ t: a. m, o8 @    ISTP = (unsigned int)vectors;
& B8 R1 @4 n& b5 J' y8 B+ f. z5 e% h    ICR = 0xFFF0;  0 w1 }; A. {% F  l
    IER |= 0x12;  ; u' s: f) q( `' F+ S( y# \1 m
    CSR |= 0x01;  . y7 J! i! S1 ]$ P  P
% R( O' e9 e# ~7 K5 a$ O7 ^
' x6 Z- O+ D$ m0 r* d

6 _: C: `# @0 _# K还有就是两个输入输出函数:
3 r% z5 d6 |+ l; ]1 Rvoid output_sample(Int32 out_data)
: N+ C- g! ?( Q# S! W" S5 V{
- Y; ?' q7 x; j" l  AIC31_data.uint = out_data;  
. O/ p! \  f; d) o& q5 X/ I  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. p9 y" d' _/ s2 ]}' f( D2 j$ P( s( j
0 F% J  J- B$ ?$ Y+ o! j& P9 z6 W
Int32 input_sample(void)
" f" Q" ^; E- T: u$ G{  
! v! V2 s# E9 H' G  AIC31_data.uint = MCASP1_RBUF0_32BIT;) k. r' A4 e  d& x
  return (AIC31_data.uint);* |6 H5 X3 q4 Z; l
}2 V6 @6 w8 C" R8 L6 q

  `& c1 m( t. E( \  E0 }" ^
分享到:  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 05:30 , Processed in 0.039737 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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