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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% O- k5 l, O3 J, a* Tmain文件:( t5 o2 U. @% ]' y6 [
interrupt void interrupt4(void)  % A# a2 y1 C5 M/ _( e
{
. M4 a3 X* p; P2 q& m  Uint32 sample;4 m9 Q- m  l7 U2 A% j7 a, H9 J

# M# S# C2 S4 Y) F" e" N9 q( m% ]  sample = input_sample(); // read L + R samples from ADC
7 m2 ~9 j1 v* q; [: |( R8 f/ u  output_sample(sample);   // write L + R samples to DAC
6 e5 T  ?( k/ _- s3 n8 u  return;) e; V  \7 s1 Q6 V# ~  `
}5 d0 C- G* m, Q% S
+ A: [2 L, y: H  l4 U& t
int main( void )
8 K. w3 l  g4 Q$ b' q8 i- `{
' ?% h& P$ N9 Y) l8 o; F& o4 T# m# ~0 W
    /* Initialize BSL */3 ~; j: t/ F" G6 Z  ^$ l- ]
    EVMC6747_init( );
2 ^3 K( p/ _$ h3 y: F        /* Call evmc6747_intr function */3 }( _3 p. `' R" b2 m* h
    aic3106_init( );; E8 x7 ?! J$ t! \* G& e( b# V. a5 s7 s2 ^
        while(1);
* m$ ?( M: L, n; _* S' K7 U1 z}* h, f9 b% y* H+ h& c7 R& @

: ^8 O6 M4 k, X& ?! z4 [6 ^* L' l! I. T4 T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ S2 p4 V4 W) Y! Z3 N* s
/* Initialize MCASP1 */; `/ q7 K, q: p! {
    mcasp = &MCASP_MODULE_1;1 N' |2 r9 C& ?) U
    mcasp->regs->GBLCTL  = 0;       // Reset
# H  a" S; Y  C; l    mcasp->regs->RGBLCTL = 0;       // Reset RX* M$ T$ D  }' ~( D2 {$ m' ~. s+ p; m
    mcasp->regs->XGBLCTL = 0;       // Reset TX; Z/ j& m5 ^( ]: `
    mcasp->regs->PWRDEMU = 1;       // Free-running, p; f& n* L' |! v  e
   // configure McASP0 receive registers
; a' M$ R8 l" f9 n; R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 `. s# C9 Y4 K) }$ _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ k% f5 N+ X/ O$ A1 U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! N3 N1 ^  A$ U) h5 z  h/ t
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 f5 Q/ K) G$ h+ W
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 \% k1 q+ E; k! {- P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% G# c* s6 T1 n) E  \, L& Y2 k    mcasp->regs->RINTCTL    = 0x00000000; // Not used* |, O- u. b8 R) x2 R
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 Z. u( x& L, b8 Z
5 S& n, v4 l! L% }% O
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ Q& d+ h, J1 t8 s( V2 [& ]0 N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# }2 N, ], V. P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% H; c1 m" d+ m+ F0 h# S2 B/ r! Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) C' ^8 r8 b* I# f- P6 A, k
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; a7 S- n5 K+ _0 J    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 {# y% A( y; m8 J7 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% _4 G( U: ]) }3 O5 t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 C3 E! `8 l+ D4 ^& ~9 k5 E

0 I0 x0 f6 G6 O) m7 H    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! o. V6 {- F0 F8 r0 [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) N# w+ u- G, c0 `6 ?. f  F+ X1 b7 S# l    mcasp->regs->PFUNC      = 0;          // All MCASPs
! }6 R( p' y* F: H7 k0 F7 h+ w) l, m1 |    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. ?1 d7 }# y% a3 n; v' A
# C5 F- w7 J# u* X7 O    mcasp->regs->DITCTL     = 0x00000000; // Not used
# K% u  Z3 I, L  d    mcasp->regs->DLBCTL     = 0x00000000; // Not used* d) W3 X; I3 a* ?& G
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 {- H3 z) z! e2 F: a! t
4 o8 I7 a0 W( w' }3 v8 X
/* Starting sections of the McASP*/
0 Q2 @' J5 Y. {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; L* ?9 V% L6 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: R; R+ E8 ~- m  q( O! V    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   n* _4 ~/ d* u- Y/ W3 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- M& |  R  R9 K! e! j7 F6 K* n+ M4 B" \' b1 E
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  h( V8 U/ V% D2 ~" J. t5 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 p2 O5 c% E, G8 ?    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, _( p1 n+ }! Y8 P. [. k. ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ c' H3 B) Q$ B
# t  J& i' @# J7 w" W, |4 E
    mcasp->regs->XSTAT = 0x0000ffff;
4 k, V$ n9 B. T# e" N* m8 z/ D    mcasp->regs->RSTAT = 0x0000ffff;
: Q, `; m& i- s' i1 e
7 G0 a' `9 _7 D# e- k3 p' }! n    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- ~( i6 P# C- j% B% |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. j  ]- o! K% \% _; ]) g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 E2 ]' P2 g# T8 o) t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) `% B' p. ~( p+ N: x" y. j8 `
2 O8 J1 r* s! ^1 W0 N4 L$ S    /* Write a 0, so that no underrun occurs after releasing the state machine *// d6 m6 C5 T2 ]! _( y7 ]3 B
    mcasp->regs->XBUF5 = 0;
; t& o$ L  Y1 P% R0 m9 Q8 r. ?    mcasp->regs->RBUF0 = 0;: D4 _& _3 q" f9 ]8 R  Q* d$ ]: F
2 @# }% A9 ~8 }: M: n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # b4 u% v% G# ?' j$ |6 Q4 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 T" ~) G  N& E3 j    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: ~1 H1 O0 c: b9 j/ O0 B* U% i# M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: r2 l+ S: q4 ~6 z1 i1 _6 l1 M
6 y9 T& s; h* d" |1 G7 J( R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' A  O' D& J; V. z, f/ D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 K. Q$ A# a9 E& i! |, I    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) c: }: K- I% Z6 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ S- A6 M# k! [
$ {2 O: |  d! P3 @    CSR = 0x0000;, `, g% G& p  g  ?4 \! N$ e7 d
    INTC_INTMUX1 = 0x3d;7 L  I) I% a9 @. I
    ISTP = (unsigned int)vectors;
5 _' v- s# T, Y    ICR = 0xFFF0;  
$ D: b  B) h. o- N) j    IER |= 0x12;  
2 O( T+ @2 P( r! y: t* V9 l    CSR |= 0x01;  
2 N0 `( u. o! [, A4 y
2 R+ m3 s' T3 O" ~8 I1 `8 {/ ^6 U
% h8 ]3 D% e/ f2 Y/ P
还有就是两个输入输出函数:2 P! q+ w$ ~! }- ^& l
void output_sample(Int32 out_data)! C; V% f5 v* N0 v  u
{
* t. z/ r2 z, c0 p# ~# M  AIC31_data.uint = out_data;  : J, d. @2 H; ~& ?7 Y* U  u( b, j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 p) t0 W. I& k4 ~0 u
}. E+ K# s$ R  k. T2 o+ O; ~

5 x, m/ s# a7 f4 x+ g2 ^Int32 input_sample(void)" w) v9 o; Y: @/ u5 a
{  
- R9 j- c1 v; ~+ q/ z  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 V2 g* N" ?$ g1 F& X+ F  N" J" ?  return (AIC31_data.uint);
3 `& R4 [" Z& Q4 S* D' X0 E}1 {' f. @6 q- ^0 {6 [: K* u

' f5 Y( p" S# p5 t" f
分享到:  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-7 00:12 , Processed in 0.039587 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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