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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 N- ?% e8 P' Q8 a9 g% |main文件:0 y7 C* l- Q) x! h) f4 Z" I, @% ~8 q
interrupt void interrupt4(void)  9 \5 P! V# v3 M& ]0 y/ V! ]. |
{
) O6 ~2 y+ Y( l: i; @: K  Uint32 sample;
$ M! o' [( E" E) v2 k! u5 m
3 U6 P! E/ l7 S, F3 v* i# Z, z9 S1 \  sample = input_sample(); // read L + R samples from ADC# G/ j+ I5 t& C( k0 O) S" T) t
  output_sample(sample);   // write L + R samples to DAC + e4 u8 ~0 x# E3 S
  return;( a1 Q1 i  ?) `- }2 ^7 t' S0 N
}- `* f" O: i% }6 T

# J5 V) }1 v5 ?1 ~; v9 }7 G1 _int main( void )
/ \; W8 `6 {& e/ \{1 Y5 F1 B1 E, r; J  z
' e! S6 h& Q6 I6 d  i$ U) ^1 k
    /* Initialize BSL */
% W/ @# t' X$ O& n# y4 n    EVMC6747_init( );5 E( h4 |" O( f# J
        /* Call evmc6747_intr function */9 k: p& W9 L/ K+ t& X
    aic3106_init( );
* h) j3 u$ E! k' e        while(1);7 E# G7 P5 Y# w) }: a
}: G* P2 b! C% r. |
+ E3 C9 O' T$ n; y1 V! t: d7 F
: e5 G' R9 {6 _6 }' z# F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 M. H. I* V( A" r: ?9 C5 d
/* Initialize MCASP1 */1 o, Q! f) u, W
    mcasp = &MCASP_MODULE_1;2 c8 D. b8 o) r1 p8 v3 }- n
    mcasp->regs->GBLCTL  = 0;       // Reset4 Y, K" }+ Y- K) w1 b( w! P
    mcasp->regs->RGBLCTL = 0;       // Reset RX
: _1 J# J0 V0 Q0 {    mcasp->regs->XGBLCTL = 0;       // Reset TX3 p7 w" W6 H" \; r5 ~5 E8 X7 h
    mcasp->regs->PWRDEMU = 1;       // Free-running
" {/ x- J& {8 C   // configure McASP0 receive registers
+ t- Y6 L' C8 i) d* c8 r    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 m% k& \6 [+ ?3 S' k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ }2 Y6 ]" U$ y" A+ g: y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% S: p2 E: I$ i1 t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* E! o9 f( w) f, U. e* L  B" U1 P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 v8 M8 I6 f5 \6 ?  s5 w, V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! N/ f8 @/ i" Q) z# h4 |6 o    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( t" q. `2 z% G" ~% `4 d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! A7 D* F1 F) N+ P# k1 K! S
% O0 ]  i2 A) X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 ]/ p" Q6 f9 p: F6 x" X  O
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- I1 ?- K% @1 Z; U! C4 ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* L# A4 k; i! A7 j
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# g0 H" S/ l5 q9 z* t1 Y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( Y. U8 T% P" ~8 w4 }+ D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' W, u" G# R  s/ Q* ~7 n2 Z8 ~3 n    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; I6 Y' e6 _1 T/ ~, L$ L  `
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: P; n& ]7 n+ b: g  j' G' r* z2 j: a( D" E; J% x) |: N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" F1 f" B1 T" C7 B5 v3 ^7 w    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ O' J. j; q% r- u7 }# h4 p
    mcasp->regs->PFUNC      = 0;          // All MCASPs- J2 _# o% ?0 Q0 f$ D: Q2 E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& H% @' x% D. t, G. p
  e  B3 e8 u+ S! J    mcasp->regs->DITCTL     = 0x00000000; // Not used
& `9 e) a" B+ ]) ]  i# o' |    mcasp->regs->DLBCTL     = 0x00000000; // Not used' {" B2 ?1 \. J5 ^& P2 g$ r
    mcasp->regs->AMUTE      = 0x00000000; // Not used: J, Y/ u+ Y* `
' Y! e( j/ O  n* e4 X% m- x# ~
/* Starting sections of the McASP*/
. s, F- [0 B* l4 m( c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- U( r2 y: a  g4 f' x2 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 M0 l! \3 D+ t7 f3 ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 t! u5 O8 u( O1 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 k- G7 u. M# ~6 A! c

$ s3 {! U! a' a2 R, D" P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# S8 V( G0 i; p& s) m7 w; l/ t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ |; n3 h6 u$ O! o6 R( |    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; @2 Z2 B' \: \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 L5 K; Y; h: x2 c
5 ]/ }( M( r) j    mcasp->regs->XSTAT = 0x0000ffff;
, k0 M! ?9 o3 d, Q; ^" s5 `- ]4 h    mcasp->regs->RSTAT = 0x0000ffff;
0 X/ E$ z, H' t, m6 t4 u4 I4 r0 }" M1 p& k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, }+ n( @. m  @1 C$ v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 G7 O" W0 J& }2 q- J  l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # ^$ ~% T+ w+ E% a& F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% \$ s( s& C; W( m9 `
9 q; H- E$ p4 ^% f1 P
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 a; Z! A5 _. o    mcasp->regs->XBUF5 = 0;
, i7 g  [3 {- ]% j- ]1 ]& t3 O; v    mcasp->regs->RBUF0 = 0;
& d4 V6 N7 m* u' c- j
1 p- J' O% T0 \/ J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 m5 A: Y% x3 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( Q2 N" f  ?2 m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / }; t+ ^( i& Q- k* T6 P3 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! @* Z# h0 }" L( M% p( w7 T7 c" h7 J, I9 e
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 p  p3 h5 U) K9 D2 X; O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' c$ N; N  x( E0 o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: p1 A6 U* ?& X2 e$ X0 {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% U* j) n  P2 c: J7 r4 C
& x/ L) s& N1 u0 U/ g
    CSR = 0x0000;/ N9 |1 O$ K7 N! o) ?
    INTC_INTMUX1 = 0x3d;- [7 O: a. w  g
    ISTP = (unsigned int)vectors;
0 w3 v  w# o' o2 v. Q  _( n% @    ICR = 0xFFF0;  ( G( g, {1 @$ S7 f( V. [
    IER |= 0x12;  ; J- J6 {7 ]+ P, p& @
    CSR |= 0x01;  % E( p. A: j; C5 U; a6 K% |

( w$ i) \, |  B2 a, Y- D8 V9 D! A
& W- x7 A! ]4 G( a2 U/ d9 u
) ]) C- ~' ^) T# U: t' j5 T' p2 P还有就是两个输入输出函数:; A8 d9 Q1 q& G! O
void output_sample(Int32 out_data)+ e! v. \: E9 K! [, ^
{
6 k+ {6 A; t% @* L7 l  g  AIC31_data.uint = out_data;  
8 \! A2 [0 O( _9 [7 B4 v( v9 L  MCASP1_XBUF5_32BIT = AIC31_data.uint;! T; i' o6 T5 E, r! w( v
}2 W- J6 ~$ z$ a

2 h7 K' S$ X: @0 ~3 A/ L; RInt32 input_sample(void)4 a& ]+ H5 q4 ^8 A% x- V5 h
{  + R1 M; a6 x; l' G; {1 O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;& T$ y0 S$ N' t7 a$ x
  return (AIC31_data.uint);: w: M/ ]; y, Q7 m
}
! T5 b- b$ q) _; C
+ @/ O/ o% [8 V
分享到:  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-5 03:48 , Processed in 0.038977 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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