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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& w# Y( b$ L! e7 D# ]) S
main文件:! Q) F% G& w; R) v
interrupt void interrupt4(void)  1 e- A" N, C1 K* J6 y8 _" _: W' r
{
& Y# C# [" e" S5 Z+ ~+ t  d  Uint32 sample;
& {$ n# ^1 w% m3 S$ v" t0 J
/ x% ]+ u& r7 i6 N9 x5 }  sample = input_sample(); // read L + R samples from ADC% m+ A7 h+ N* e( ]  v
  output_sample(sample);   // write L + R samples to DAC
2 F" i* c& _3 h  return;
) A% r- L+ U4 X( L9 E( x4 u}
! V! o+ [& L0 ]. V6 G2 L$ {1 D1 t$ y+ W$ ~( P& K3 E' g8 V. Y
int main( void )% v: o0 M4 B) E
{
7 m/ {7 w! c1 C0 e) Z# `
9 N0 m, _0 M% l7 V, I    /* Initialize BSL */8 X9 ~/ _8 Z; h' b
    EVMC6747_init( );( [( j0 ?! R% Z& [6 T
        /* Call evmc6747_intr function */
3 u. y! N+ S+ ^7 H- u    aic3106_init( );
, p: V- V7 r) W        while(1);
* o. L5 T! f$ y$ {2 x* Y; N8 {! T}. x: l. M$ o* A" y" F3 ~& F

# {8 ^# S' s' j: X7 F7 \3 x( |7 T0 K) W" z9 A2 ^; F4 h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& i) ?0 m% ~# ]9 T+ d/* Initialize MCASP1 */3 R1 J: z  B; z& r1 G
    mcasp = &MCASP_MODULE_1;
- L% \2 z% J  a- D6 _    mcasp->regs->GBLCTL  = 0;       // Reset
# D; l% @! [% b- C. I    mcasp->regs->RGBLCTL = 0;       // Reset RX( _$ M. D7 U( o2 {( X
    mcasp->regs->XGBLCTL = 0;       // Reset TX6 J7 N) q9 K2 J' h" @
    mcasp->regs->PWRDEMU = 1;       // Free-running
% T' u5 d! s* N5 m8 ^* M, c   // configure McASP0 receive registers# U9 {0 u# p2 B1 J9 p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 z0 i: V5 T! i8 q8 j* n    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 x( K0 o. g, {    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ I# w+ A; h1 x! a3 ^8 l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* B! [7 r- M- Q3 E
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 B% B) F4 x. ~1 q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) x3 T; Y) q# k* y' v& c    mcasp->regs->RINTCTL    = 0x00000000; // Not used$ d3 X1 r; N# W$ H6 ]! d& L' D
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' \' O5 p' z) Q" M5 c' y

: f6 y+ Y3 o6 f4 H" w1 y. \( T& ]    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; C6 h9 E" r' m1 s    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 |% V9 K& t+ o* \6 ^3 f" G) f    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' H9 [, u3 @* ]    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% Z( L: @5 ?! B) ~$ `' N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 C+ q! ?9 ~) I! @0 L7 M+ W. ]# `
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ a( C: w: y4 e' U0 M$ R% q. `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 X3 ~( P8 A0 d" L2 ?# R9 D
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' t$ c5 k" O+ D' c% s( c8 k, \2 e

# H0 [' ?. m  d0 R% B3 n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; B. r( d" `& W& N7 D, s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 @/ J; m" z5 `2 G
    mcasp->regs->PFUNC      = 0;          // All MCASPs/ v6 b+ I+ A: I) ^- y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, X8 s" X' `+ }
) s/ \  u7 u( @$ M& X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ r2 W) I, v4 H' F7 _8 I    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 I+ m! g( n1 N7 X8 ^. G4 T
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& H  P0 A( L, t2 t$ r2 n# Q5 E4 N4 h. A) J
/* Starting sections of the McASP*/, j% S. n) u/ s! e# j: p4 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. V9 E6 L  N" b+ f) N. N; L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 b& T7 T4 D/ R" h! s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- V7 `# N0 g" X* K* ]8 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ m" e+ J; f. q; r( [  f% e" G9 t2 J9 ?! Z; g' z- J! F+ Z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- W9 @6 N$ Y" d9 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* m: B+ \! s9 R) _: n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 h, u( M* J# Q1 l: W# i' U4 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 G# V9 ~& f0 r) m6 A3 o
( r  p$ [  u# X! [
    mcasp->regs->XSTAT = 0x0000ffff;
) K  ^. S  l# S; {    mcasp->regs->RSTAT = 0x0000ffff;
& U$ n& {4 y7 S3 e! k& f7 B) J& U
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: V0 J3 I6 Q# n! u  s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 g' G8 S8 L2 k! ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& M; b) t2 D  `9 L, Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% L' N3 \# C3 X6 E( U2 V
, |3 W6 G" m! i( w0 [& W/ ~    /* Write a 0, so that no underrun occurs after releasing the state machine */- }! l2 X+ k6 p) W+ i
    mcasp->regs->XBUF5 = 0;
" e3 y2 M$ F% k$ |' z9 u3 R    mcasp->regs->RBUF0 = 0;0 S; k' ?$ Z, O% N
" V4 B" V2 R1 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  d7 [1 L* [8 g, x. r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- v4 [0 `% D& A. w. M0 W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & T- U/ @* t% U. n. i: n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% {/ F# U* z* n. B% m2 ]3 I( A2 \$ J$ E; I/ z1 q7 ~% @2 d! z/ Z, K" U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 ?3 }; d9 ^$ C# k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 K, W; F* K( P7 O& p9 R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / M3 c: c7 {9 z& f) A2 N5 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" e4 a) }8 S4 t: \3 H% ]* ?

. a0 p! O6 x4 U' w# Z/ h    CSR = 0x0000;0 G: }' S3 D7 ?2 C2 V
    INTC_INTMUX1 = 0x3d;8 {8 I  s# P( G/ Z  C. ^2 R* I( Y
    ISTP = (unsigned int)vectors;
2 v  c6 C0 ~( U# k) |9 g7 [1 I8 ^    ICR = 0xFFF0;  / j! j$ i/ |- e4 B
    IER |= 0x12;  
; O& E; {5 D! a2 l    CSR |= 0x01;  
0 Q4 ~$ x7 n* x* X* r! D+ N/ I8 X) s$ {$ }0 d
, h) R, R; F. M2 k
6 n5 S( N3 I; }+ i
还有就是两个输入输出函数:* _6 F9 f! H) c* I) J! _
void output_sample(Int32 out_data); N5 C+ u1 B# J/ Y
{  f9 k% i( Q9 q
  AIC31_data.uint = out_data;  
( I8 R* ~1 r* _6 G4 m4 ~6 u. h/ k  MCASP1_XBUF5_32BIT = AIC31_data.uint;' W1 c+ x. X: l" y7 Z" o
}& J% n8 E8 m& n7 e; K' g( }4 V# W

! Q4 t5 H5 T1 Z. r. A) l) {& CInt32 input_sample(void)2 M: K% c: i" r8 Q, K' [0 S
{  0 V" ?/ v8 p5 ~3 W: `! F
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 Y- X: ?8 ]" A8 |  return (AIC31_data.uint);# A3 d/ T5 `6 x- n- f
}
. R7 d1 H, E5 B
( _2 a, j* e% n' ], b
分享到:  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-3-12 07:55 , Processed in 0.046152 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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