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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" v+ g# |, P! }( i; m" X  Z4 r3 bmain文件:! }/ U1 U" b  k: ?" X
interrupt void interrupt4(void)  
$ M/ v5 L- u5 ~( Q6 g{. c8 H8 @  K5 B: u, z1 @" e$ L
  Uint32 sample;
; b4 |( J# T, K6 X- l
; Y# x9 b* G  }5 J  sample = input_sample(); // read L + R samples from ADC
: g  F2 I0 ?$ i6 {. n  output_sample(sample);   // write L + R samples to DAC , j: u0 C' p9 M4 J0 F' |
  return;0 L0 c# ~5 [$ k
}
) M- g1 \; l5 |) |: n! [$ `
. p  t4 f8 x2 Uint main( void ). Q  K! C8 Y; R; Y4 O# `/ p0 H
{
* K7 F' G+ M& z$ \* a# h, u# U0 s6 \( f  P7 [
    /* Initialize BSL */2 m+ @* N, T6 X6 L) Z
    EVMC6747_init( );
4 g* h. h( Z, \1 ^: S        /* Call evmc6747_intr function */
$ @  {) q5 y- u! x# O7 Y! u    aic3106_init( );
; E: E8 }. @3 F' H        while(1);
3 l, P1 p6 u' y) J}( G3 [9 \5 ?$ G4 `

3 |- I2 |. q3 _( \- `& [8 A! C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 ]" O/ s* @3 b8 t1 S( |/* Initialize MCASP1 */
* D* w8 M6 ?1 x% ^    mcasp = &MCASP_MODULE_1;
1 w/ o- i. \7 v# J6 N    mcasp->regs->GBLCTL  = 0;       // Reset
4 L1 P+ l- _& H9 {0 ?# t) P6 j    mcasp->regs->RGBLCTL = 0;       // Reset RX2 T3 F( ]1 ^4 h/ H5 H! a: l
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# g+ d/ h, M" ~" C3 y: ]# w    mcasp->regs->PWRDEMU = 1;       // Free-running* i8 _+ e! g' q. c& d2 L
   // configure McASP0 receive registers
" s/ U# E5 g7 |! Q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 D' C/ z* a3 m& f8 ~7 t    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 N: L" D, p  a9 w- \) s
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, b8 O6 G" H8 V; o+ C
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 v! t! p3 `: A# r    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ w7 S" w$ i  L    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" N! e! h) a  y' M# X. j: @    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 A" l8 i& m, s1 Q; j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ G0 S1 F' j0 Y9 |* T% g, l% ]
( |7 f( {, k3 d4 e5 d% L
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: x: G3 I9 b3 h6 f( Z# Z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D* K+ j, z( d: n
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ m0 I+ j  \, l$ t& g" j9 x" K$ H    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. t$ p9 C* |6 G' O    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 ~$ A- ]/ q2 F# F' z& S2 q1 e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 S* w. U% w$ }- e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 {9 v% F7 V) h; c7 g2 Z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ @% `. x3 P# m: ^: u: k2 S
: W7 h2 A9 m6 y; A- `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: G9 i- k- l; N  _/ ?5 H. f: B0 e1 D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 W: x  |* _) G' r
    mcasp->regs->PFUNC      = 0;          // All MCASPs4 G1 O. q; X" W7 U1 J) c
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 e2 z$ d0 I* \. E2 e

! x# O9 e1 F* {    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ e9 Y+ L* h6 {$ Z    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& o4 E8 s; v# x( L, k; G( W5 K6 N, k    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 S/ I6 U1 d, w( d0 m( r  E4 F+ G2 m5 _) }' N5 U
/* Starting sections of the McASP*/& n& ?' R9 I/ G) S: g
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , R! ^1 d- L) e; o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 Y1 ^$ l' @! j    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : s. m6 ~% o$ x, U/ w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: \3 N3 `5 h( Z5 T/ |

9 F( S7 W$ V, o7 _1 F, e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " k: N9 ^% d( E. `7 c; Z- D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ O0 i& b2 L& ?- O  K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; m( h+ u1 }8 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 U& v3 F. W- U; r. V) B- J. k* a4 o+ P$ }/ }& B
    mcasp->regs->XSTAT = 0x0000ffff;
: g+ A" b$ Q$ q. }7 M! P5 F* [( [9 i    mcasp->regs->RSTAT = 0x0000ffff; 4 l* I& h2 t; k) `
2 e' R2 b3 o  Z# ], d9 c
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, n+ I/ L  J% v; l  M# K4 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: {0 u4 J1 E# O& o5 U    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 N" X9 Q. Z7 {( ^+ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& H$ V; b7 o/ e8 P; N* B+ g" T1 E7 C* e6 Z! E, o! `! q' Z6 D
    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 w! k& B; m" r- q+ w    mcasp->regs->XBUF5 = 0;
4 M) W% {/ c) L) y% ]1 z/ \    mcasp->regs->RBUF0 = 0;
. H" T. F* F7 J/ i2 V
7 P- B" g5 B+ Z) s; E2 K    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 R4 w, J' u6 `) l3 w- B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 S& t2 _; _5 y& J: L& z  m# O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- O0 g9 }( s% @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# r" A" q; ?/ I) Z1 G) B

9 u3 x+ u" q9 q. r: n9 l+ f2 D    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* r$ T$ z% F$ X) C/ o$ T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 c0 l% C3 q( E. ^; H7 H. m    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : c# A: l) t, ]. x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 r2 W( \8 o: w  o1 y
  m2 S  b0 J2 A  z2 \# n9 M$ s2 K# m    CSR = 0x0000;8 `7 ]; H# X# L/ x5 x1 B; P
    INTC_INTMUX1 = 0x3d;4 q  k8 A: S1 ?0 n: |& U* @
    ISTP = (unsigned int)vectors;$ t/ L) q  t9 N! U1 }/ R
    ICR = 0xFFF0;  % a. g" a& E1 Z' H) D9 Y
    IER |= 0x12;  : s9 C9 ]4 L! W9 P4 e
    CSR |= 0x01;  7 R- v3 D; I# o
! `4 S) F0 e0 t$ U% a4 S/ ?
* d* P: G% {7 M+ [! G* Z! L6 D
+ ^2 Q5 T( R7 b( l
还有就是两个输入输出函数:5 T0 i7 l8 |4 B4 r4 b) K& |) F, G
void output_sample(Int32 out_data)( A; p# d% J9 c7 R
{
/ K* J- s2 k) M5 ?6 `! ]( h  AIC31_data.uint = out_data;  , z9 B4 @  N. V2 l! a& B' B
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 h4 ~+ [8 v" n, R, i
}" d. ~! h# E7 f% b& j+ q( o) m

! [' J4 `& g7 v; oInt32 input_sample(void)7 O7 b, W5 o# C: H5 m" k1 I9 X
{  
* z) F5 x0 Z/ h- d) o9 L  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: X+ E; ?( {. C2 [$ @) s( O  return (AIC31_data.uint);. [. v9 y# n/ i
}6 V6 o$ k/ {9 `4 z& T

) U/ L# s& F6 f, m1 x0 b) H
分享到:  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-29 09:25 , Processed in 0.044009 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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