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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 w% f3 e' E/ d
main文件:; j; c1 X6 c& C: U- y" m
interrupt void interrupt4(void)  ! d! J" G/ y; L. Z5 m/ l
{
, D5 Z4 U2 T& H  Uint32 sample;/ ?7 H0 b: y: E8 Q: E
/ z0 v( C9 ~* d' z
  sample = input_sample(); // read L + R samples from ADC- b1 Q: ~0 m2 V4 ], N3 f$ v
  output_sample(sample);   // write L + R samples to DAC
" t9 A! j, ~* s' e, \  return;
/ Z+ f1 W& c5 @" h}
9 q7 i3 i$ l" L( D& p5 J9 z! u1 u  M/ U4 f3 c* |  @% `' `9 \
int main( void ); ~2 M$ U9 B$ k& H8 d9 G( u
{- Z1 V5 h' k* g$ o/ F
2 Z- l% }* h3 V. O$ j/ D; j3 M/ \* s
    /* Initialize BSL */
. n0 m$ M: J* o! B3 X: T' \    EVMC6747_init( );2 G% x$ ]  K. c( u3 B
        /* Call evmc6747_intr function */
( Q/ P9 ]( F; w, I  s    aic3106_init( );
; c; |$ o) X7 p; Z- G) i        while(1);
- }7 d- j$ g0 R# e}
  P& N- L2 Z. t$ _( {
0 R5 @& d! m) L9 f7 c6 u# Y
8 |  w# ~7 W; I, C* H' faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" _* w4 \; N, d2 G
/* Initialize MCASP1 */
6 k0 l+ S) j1 w2 e; o4 ^0 t: I- E5 T5 B' g    mcasp = &MCASP_MODULE_1;
" @* j5 n( L9 Q' t3 U9 f    mcasp->regs->GBLCTL  = 0;       // Reset" G5 M# S/ L" N/ |6 g1 M
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% b9 @6 W. [  L    mcasp->regs->XGBLCTL = 0;       // Reset TX
! E8 I3 m5 {  X: u) X/ Q; N    mcasp->regs->PWRDEMU = 1;       // Free-running( B  P2 D) a+ h" h. ]9 g3 S
   // configure McASP0 receive registers. t( q! a1 r& }; }' Z* {8 M+ Q, L% {
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" h* Y* A5 p) G; f6 h* w! c    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* S# r( C" y  H0 L' }
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' G: X7 w2 f% j" F4 Q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' k  \/ Z# E4 L% b    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 ~8 I  h9 _- ~7 v( h% t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, T1 o0 Q5 r" F4 r% |8 E    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* m- |( e0 |$ M& A0 e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! ?' o) w/ f/ N9 @0 m+ h' [7 R: K7 A( s2 L
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" a7 f# h7 I- J  {; [( Z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% G% a0 Q, n5 ]' W
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! {2 @5 ?. W/ f8 s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 z+ g) o( p$ [! Q5 u) t$ l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( L- ^2 n/ Q9 \- |' D9 ~! S7 p# [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! I: H0 ]; L$ o4 F6 E( Q6 L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 |0 n+ T" X, `
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 |  z* W/ t5 k9 e  \' f# k" \
/ E: i* o+ F0 K7 i! X    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- w$ d$ `+ I/ S; f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# W& f6 j! `5 ]" o) Q( d    mcasp->regs->PFUNC      = 0;          // All MCASPs# w) t! V) M% o, v. D; R( G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" T+ H! n' C0 x8 t9 ?; y
2 e% g+ T: l( e, k: s    mcasp->regs->DITCTL     = 0x00000000; // Not used. v* v) T9 D" n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; M* ?* q1 w# d" ~! S  k    mcasp->regs->AMUTE      = 0x00000000; // Not used  u9 n+ O, f1 {4 i2 K

2 p+ c1 {1 i  x/ G1 `/ M/* Starting sections of the McASP*/, p& G2 }( }, H6 J+ q% k' I
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 @+ \3 ~6 Y- U& g- [; B9 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; d  W( N6 b* D4 G, d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . ]" Y( Z. K3 X2 Z1 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 O6 h. ?4 y/ C
4 i2 g% l: E  K+ C
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 v1 g" a1 y- D. @5 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  K! t6 e+ z; W- R. x( b
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( `2 h% }; @/ X* J1 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 i6 W$ ?3 l: P4 y  _8 i1 O, @! t8 M
: [& L5 i6 Z  g8 e" ]9 v3 V! d( J    mcasp->regs->XSTAT = 0x0000ffff;
" z5 s0 a; N& D/ \4 o" {    mcasp->regs->RSTAT = 0x0000ffff; 2 r* ~. R- j: q- c- O) S8 z

! i: {3 t1 @& B  d2 D+ q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% P( n7 m' K8 y, u8 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* h2 e* ]* e6 {! w3 |; x  z" ~  N* o    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   ?* P0 X- i7 G( N9 v; M0 P2 M3 ~7 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 `0 K/ \. E9 V9 ^

$ ^9 T1 t" a) i! j* X4 J0 A    /* Write a 0, so that no underrun occurs after releasing the state machine */$ X: B% N  X$ g. \% j
    mcasp->regs->XBUF5 = 0;! {* Q0 m1 r& x' ~
    mcasp->regs->RBUF0 = 0;
$ }# t! A4 Z9 I0 Z" D6 J2 I8 W% i
  n" n; Y  m8 p; {1 a! n3 I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) @& P: r' I8 C7 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; R2 P& t6 p- P
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " o% r: d& s+ J0 p* X; v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. x$ p+ d+ R* g8 Z/ X) O3 Z$ o* U) c5 I7 c/ K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' ~2 r7 ~, K5 s, X' g1 Z3 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% f7 k, }2 v. z2 ~4 B( R9 v    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 K( L% n6 z7 O7 d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, }) }) i, o2 H; K* o

2 D9 e  |+ l% `2 m0 T    CSR = 0x0000;
6 q$ y# j3 Q5 a, s) y6 g% b    INTC_INTMUX1 = 0x3d;6 \/ `3 w& r6 {
    ISTP = (unsigned int)vectors;7 K& ^% f# i" M4 M+ _6 i7 |
    ICR = 0xFFF0;  
; w4 P, w& p5 A    IER |= 0x12;  
1 y) y) Y' D7 l, j2 q9 z$ Y& G    CSR |= 0x01;  + O$ a* }) w, I* D: b

9 L2 x3 }) b9 C3 K7 N' u, H3 a3 z9 I- p. t1 V

2 |3 Y" Y. R6 S6 H# b3 U还有就是两个输入输出函数:6 U: F5 |" U" Q, u4 H* i7 p
void output_sample(Int32 out_data), ?- n4 L3 S/ K* i: l: _  r; ?' w
{
- z/ `8 Q; H8 r/ a+ r+ R2 y  T  AIC31_data.uint = out_data;  
3 ]7 U' t9 X" l  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( o$ K5 |: ^7 q# z9 G}
: {' A( s5 w4 R+ {3 {% l) y0 S  `3 n+ U/ j. \0 [0 P7 v( r
Int32 input_sample(void)
3 E) n  Q( V7 `- ~{  " \, n& `& ^' \: D* \7 B. m, n% K' o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 S, k1 ^5 R! e, i5 f) r; h  return (AIC31_data.uint);- \/ x) J% S2 j# W; D$ B5 G
}
% {1 s- i2 w: X6 z* d8 |/ n# f0 h& E$ [; k' L3 T$ V, _% i
分享到:  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-15 01:38 , Processed in 0.036682 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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