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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( j* R8 b2 T9 f$ k
main文件:
3 l+ k$ T8 b& t# \4 Pinterrupt void interrupt4(void)  
6 b1 r1 m4 I+ a  t3 a+ f/ M{
; B9 E  `- j" ^6 m) _9 U  Uint32 sample;
' J+ B! A  C9 Z, a, S3 j. E  K$ N7 m. S/ m, O
  sample = input_sample(); // read L + R samples from ADC
, q0 K- }: Q& V& D, ]  output_sample(sample);   // write L + R samples to DAC
. o/ w* L  L  q' L" q  return;
% ]& @. c" i1 w3 L! Z1 \' M! v}# S6 _; u. S' y9 I, x
; T0 }5 U0 [) F6 X1 |
int main( void )
0 ]% ?0 F0 E+ G& |' N) x+ ]{
- u0 Q( b% L. `/ d3 v: F/ G4 ~. w& k2 S0 ]9 S
    /* Initialize BSL */) O0 h" o$ v, a8 o2 J
    EVMC6747_init( );
# G3 u# x& Y. x0 ?1 X# K+ c        /* Call evmc6747_intr function */; Y- }. z: Z/ b+ l  W4 u
    aic3106_init( );
" V- j" j) g8 k0 r7 X. B        while(1);5 [+ w' s; u' X# p8 F- k
}6 G% g/ ~8 b7 {. c

% d) A( H; Q, v- U1 l$ U
9 @+ x3 m/ X- j- G; n6 saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) z2 k; c, F+ E. s) Q4 M. ]% H/* Initialize MCASP1 */
% [! |) X+ \& J! l3 u    mcasp = &MCASP_MODULE_1;
3 v) E7 E1 D9 U- ]8 |    mcasp->regs->GBLCTL  = 0;       // Reset
& @- H+ I+ X: h7 m8 u, J* ~    mcasp->regs->RGBLCTL = 0;       // Reset RX4 K1 J( s1 G- V5 Y$ E' I) H
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& l' C+ l2 U  V. n- T9 r4 z1 a& F    mcasp->regs->PWRDEMU = 1;       // Free-running
1 W, b3 K$ F, |. c1 b0 \: ~# [   // configure McASP0 receive registers. t& ^# ?- A) z4 t7 A: ^2 W4 @/ E8 H
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 i  h, `, i7 `4 P: [" R/ F" Z( J( m& N    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 m% E4 ^* M6 a( f" g    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, r& U' B; B0 ?8 Q3 O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 I- d+ M) ~7 ]4 A
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( |0 s# _  O, k/ ^  a/ D; K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1* k( t, }$ s, R7 k1 U/ W7 e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 e) W% `/ H4 t% x9 ?: M3 y  p
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: w0 x* o% O* z2 K6 C3 I! P) O' V9 K5 ]. Y# E& j3 b
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* n7 ~3 V+ e4 `$ ]1 x# j! c( {, Q' C' V' Q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% \" k1 @& k) a    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( l& I# L8 I$ c% a( D6 U    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ a# c+ l' @; [/ w* {# q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) W2 B6 G- D: {# r9 Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" d& `: z! |" ~- s* y- b! @2 D5 d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! w2 D- N# d; e7 h    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* T3 e, \) F5 y  A6 p; X, `) _5 d& G7 k# Y6 G/ o
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' W7 Z4 F' Q) R- K/ b7 o+ }
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( ?& {2 ?" o( [3 V
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- R: `2 I9 @# E: k5 I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% i7 j* Y$ Y+ b6 \" |* v' i8 I
9 H% E' H9 d- ]* G3 ^9 t
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ J  F; t4 Z, u; y+ r8 ~
    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ T7 X* G* i& ~2 @, i7 x
    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 n& s# ~3 t9 s$ N' o; h5 S* R* H3 E, X% s6 d2 l+ G
/* Starting sections of the McASP*/
, I7 t# g1 N6 V- T% \+ H    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - c8 m7 k" f9 d. Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - Z7 z. a% q4 o! u
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% `2 x% s. k+ z+ q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: r# n6 {9 H. |2 E% X( w8 f. T& x
- G, ^9 W5 z8 u6 t* P5 k    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 o+ i5 b1 F( k5 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ R" N% ?, ?, N& h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 r! w7 e/ o5 i7 {0 `, J  S& X: A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 o# q. k, N8 t; a$ _# D$ b

9 I2 t4 R$ M. ^9 |2 x3 S    mcasp->regs->XSTAT = 0x0000ffff;
  ?( F7 y" o3 E- \0 ?' {5 W    mcasp->regs->RSTAT = 0x0000ffff; 2 Z" u4 |9 Y. ~) A; @' W
( |, ]+ B$ H; T6 {1 C
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 G: C) |$ r* ~  q* U2 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 J6 ^' G  |" W& ?! L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 d( R! L& k0 q; P! F, V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 u/ `0 G" `4 t
# U% {. G# U' n' I: {+ l& B    /* Write a 0, so that no underrun occurs after releasing the state machine */7 f4 v, x, q% ]4 K, {
    mcasp->regs->XBUF5 = 0;
0 V4 ~. H& F! u; t, J    mcasp->regs->RBUF0 = 0;
8 d5 X( K  ]- n, r+ o, H* Z2 C3 K# `( }* @9 X  E/ w
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ |$ y; Q6 R2 b1 Y' k- x  _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 l+ Y+ W; \# D' B3 z- x' \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" q5 C) Q0 I, J) G6 t+ i, d( F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, N0 V7 i- f, R  m
1 r7 h. `1 c# `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 y  f3 g* m7 b$ I- K+ Y& l- Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* L9 q) U: l1 Z5 u: ^1 }' |: j! _
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 c( j6 C" E  _% P  k& j! H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! Y$ `8 J: ]5 e5 a8 l9 O$ C' \( }* x( X- s# G7 @9 j
    CSR = 0x0000;  ?( d" u' E0 B$ X% r! x0 m: F* E, G
    INTC_INTMUX1 = 0x3d;& g6 |7 W* N$ \8 \) q$ F( x
    ISTP = (unsigned int)vectors;
$ j4 K! i, I( {7 J4 ]* n2 g    ICR = 0xFFF0;  6 Z4 n+ [! l, c6 a3 k, e: `
    IER |= 0x12;  
# a' l3 }, ~% L. @" d/ K. N$ u$ {" r8 o    CSR |= 0x01;  3 V0 r/ N/ c+ s5 t2 f2 P8 x$ r
8 a$ e( N9 y4 r6 @1 z3 N3 l
& F, D4 y! B* J# ~0 f

4 Y/ q5 [0 x- e: Z3 Z) j还有就是两个输入输出函数:
) U6 C# i, U) @0 b  U) tvoid output_sample(Int32 out_data); h! }& `) L, ^9 L9 @3 c
{/ c4 Y, }3 E. g* n
  AIC31_data.uint = out_data;  # Y2 e/ R, K  n6 l" _: z
  MCASP1_XBUF5_32BIT = AIC31_data.uint;- v! m, H8 v* g6 N
}
& E! ]& O1 x8 C% o/ }7 _, ?( H1 H8 R7 N: ]$ L$ W
Int32 input_sample(void)# e- K4 [% r2 E8 C- I/ ?; D5 X/ J$ d
{  ( ^6 H" B( Y: y: u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;  i, h6 ?, ?: C  q9 }  z5 Y- J
  return (AIC31_data.uint);9 V' y  y0 v' f* `( S
}8 C7 w6 L" B3 N0 o
9 O+ v  F# _, a) _! P" D
分享到:  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-30 13:34 , Processed in 0.039124 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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