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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" n" m9 q0 h7 {, e7 Ymain文件:
8 h7 {' k. l- u) ~+ kinterrupt void interrupt4(void)  
: L# _# C2 d' q{
6 F) q: p5 L. ?" n* F, J  Uint32 sample;- z( k# y- R0 T% ]8 n& o
8 l& U8 [% Z5 a) `2 V: O/ P  B
  sample = input_sample(); // read L + R samples from ADC
" q  m3 c, v0 a5 n- Q% f8 g  output_sample(sample);   // write L + R samples to DAC
, N- P1 X7 X) |8 T  O7 \  return;
8 d2 k; x. x, `' Y/ K}
& s* E5 T. }3 O0 [8 i/ H& m/ R7 k, ~  b0 j
int main( void )3 N' G2 f% f# l5 h/ W
{( k/ s- m) s4 C7 Y4 v- O0 Z

, O' z" l0 U$ Z    /* Initialize BSL */
  E1 w( I* ?! c4 J    EVMC6747_init( );6 ^- h7 q3 B6 T) d& ]( [
        /* Call evmc6747_intr function */3 A- Y- X2 I- K/ n
    aic3106_init( );- d4 T7 `8 U5 D, [8 C) U8 [
        while(1);
1 o; i! T. R4 ~+ S+ j( j8 r}4 x7 ~# H; b% x8 A- z
1 T0 Q) k1 F+ g/ o
1 }/ @* e: l% v1 e+ f1 v; x- S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  i6 l" V1 a& o6 n" U: @  W
/* Initialize MCASP1 */: ?2 f( q+ h3 i* U9 f5 Q
    mcasp = &MCASP_MODULE_1;
" c4 y; @$ D3 Q+ M3 [    mcasp->regs->GBLCTL  = 0;       // Reset4 `3 a; w/ E1 {3 W) D
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 s6 T( f2 m: ~. S2 n. p
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 H5 A8 v( a; i. B4 F    mcasp->regs->PWRDEMU = 1;       // Free-running  R5 V1 o  T( d6 G# ~; e; ^- w
   // configure McASP0 receive registers. p6 r( v& X, k0 Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 h7 K; x7 {5 w2 E  |    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# H. a  v. w. [) ]8 q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& _& _. I( C  S3 n0 u( [7 A- e- x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& }0 M) a, ]4 ?8 i# I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 B6 A0 o) n0 K$ C) P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! g: R" J" s% _% b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 \$ ]/ X3 N( {" X3 V. a8 R. f
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 Q% c1 \6 L. B- M/ P, B! B$ L9 m* N5 y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 d8 ]. C  m. W. D7 b
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- T% K9 M- p3 g# _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! o) [) V. v2 v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, C: e* b9 |7 {* m" q% e9 c    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ y. l& I8 A" e3 |; H2 @
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& g% \, [% w* l. T
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. _9 S6 [1 o) t3 B0 P, W6 q1 w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ?2 U1 ?3 K% o; Y8 l% V
9 B! z9 ^, y& v9 z$ z- W( W
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 H/ B' ~* F* l! l    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) t3 q5 b4 z3 t2 t' |8 ~) E
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) z, b# V0 S% _. w8 z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 V3 I  q: c- H

! Z6 Z) \; E* o& v" i    mcasp->regs->DITCTL     = 0x00000000; // Not used! i2 ~5 g5 ^* \* _& R# I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 E6 z% V/ s  d& q0 n    mcasp->regs->AMUTE      = 0x00000000; // Not used& @) R+ Z; |. K/ z" B1 g% B8 x
: {& [& L2 ~- I1 w7 X
/* Starting sections of the McASP*/8 |, |5 G8 C% m8 M- U: b
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , g+ v$ s5 m8 H+ t  N8 H" A& g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % v% J: [# y1 B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . v2 H& w- b8 c. ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 r3 R  E$ g' W! H

# V: ]" ~/ d% {5 v/ U) e: ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 C2 L' f1 j3 z( L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ o' Q  l' T) [  r0 i6 q1 x/ ^5 n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " i$ A6 F* B- Q/ G4 g- M# c. s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( M4 o3 C' ]/ a

# \. w3 U( T5 ^; F: ?$ ]    mcasp->regs->XSTAT = 0x0000ffff;
$ a( x! O  O! w! C# e( I5 O    mcasp->regs->RSTAT = 0x0000ffff;
1 T2 q( |, T7 c  q' |8 O% \; V/ G6 l( U
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 V1 V! w3 s: W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ N4 n* |  m: Z9 W/ Q4 a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' ?2 K5 [  g4 X$ @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ W0 h9 _5 j; B) [& c

* h2 k. V& v; _! w. s/ I    /* Write a 0, so that no underrun occurs after releasing the state machine */7 P: ^1 N8 {! d  R, A& e
    mcasp->regs->XBUF5 = 0;
! Y- G7 @* ]# Z0 A5 Z+ E    mcasp->regs->RBUF0 = 0;
) k. x3 r, X7 P. j" ^# S
/ G# ^* [8 `' W' o# V    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ s* w! Q% [1 [* G; G8 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ L& y$ C0 M' i" `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) _  A' g2 Q* q- ]' g6 ~2 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 j( K1 ?% `4 @
, J! a" r! h) Q, m: g
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! c+ I2 f* y6 J  \0 i, t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% x9 v* E* j+ H* r+ d5 a
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 Y7 K$ _3 l1 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 a) Q! {9 A2 Q' R: s% o  W9 V) w% ]) P3 n' M4 K" `& |
    CSR = 0x0000;+ a) ?6 o" u, w+ K
    INTC_INTMUX1 = 0x3d;
4 `* y4 S1 O5 ~" O" x: n# I    ISTP = (unsigned int)vectors;/ ^3 u/ F/ T0 y9 D5 ?0 l/ P
    ICR = 0xFFF0;  
! j. k8 u2 r* _! R# Y    IER |= 0x12;  ! N  M7 g4 S2 o
    CSR |= 0x01;  % L' x7 r1 g4 W& G

$ W+ @# I/ h$ Y0 N
/ U- [" R! c  |4 S6 v8 X6 d1 Y6 D7 e- N. ^' o% @  e
还有就是两个输入输出函数:
0 @5 f9 p5 n& p# M6 pvoid output_sample(Int32 out_data); ]+ y& f: P9 g
{% Q' j" {, g9 h9 N
  AIC31_data.uint = out_data;  
" `' N9 l- Q) [9 l+ P; K" X* V) C  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 E/ ^. y% K1 c4 s) w# l}7 T' }4 G2 G) e  J9 o; L
: |( Y) B6 a7 J  ?5 a+ W8 u
Int32 input_sample(void)* O2 x5 Y6 m9 X% N& G' ^& z
{  
8 I0 U9 n- M7 [7 J! o( k  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- g+ k8 v9 ?$ h  B. z# x& v. f  return (AIC31_data.uint);
! t0 V4 C' Q. i9 ]6 f}0 C  o- d4 T5 i8 a  J- V
1 C8 a0 Y' U+ S0 Y1 p0 s$ 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-11-16 23:33 , Processed in 0.037939 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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