C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( h  i0 q+ ]" z* pmain文件:6 G/ A; F, w+ G9 C
interrupt void interrupt4(void)  
- A) ^( r# N5 N$ J! j{  v. x. o2 w& y* r0 y: u1 s
  Uint32 sample;
# j- M$ v* R2 k4 C: y. T7 V: i( k+ y0 {# K* M( M
  sample = input_sample(); // read L + R samples from ADC
. G% b8 f7 r/ ?- W7 D9 H, P( c  output_sample(sample);   // write L + R samples to DAC ' Q2 o* T. J1 D' S. I7 N
  return;% q/ S2 y9 S- B3 f' x$ Y- x
}
/ X) |' l1 J+ a- {  ~' _! \
! S+ {7 w) V) G$ |/ U; a2 ?8 qint main( void )
; j( G7 K( w1 ?8 S{
! {. }/ P& i1 W( {1 p3 Z: W  x# e
    /* Initialize BSL */% q3 ^$ @0 e# y& v# S( H
    EVMC6747_init( );" ~2 d0 i4 Q3 E* L
        /* Call evmc6747_intr function */; j5 y% Y& W$ N- ^
    aic3106_init( );
' c2 y( g1 Y  x, N2 W- F; c) `        while(1);
# K$ {; _# U+ F, E5 B}) Q. @5 j4 L: k/ _9 N

" Z" z+ Y  K8 Y; r( b7 q3 j% u: q7 R
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 @8 g7 Q9 B0 E: O/* Initialize MCASP1 */
& |4 p: F0 X7 [8 _% y, |    mcasp = &MCASP_MODULE_1;
  ], l* |& ]  z    mcasp->regs->GBLCTL  = 0;       // Reset9 F2 B4 m8 Y: c
    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ }2 S( H5 R& |2 h* E( e( o    mcasp->regs->XGBLCTL = 0;       // Reset TX3 \5 s! i' {8 ~6 L8 u
    mcasp->regs->PWRDEMU = 1;       // Free-running' r* j! o' Q% |* ^
   // configure McASP0 receive registers0 j) G2 o# G% q' U( s, u  p  d' a
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 l% o7 ?& w  S0 o9 b
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 t2 ~0 W- T; e    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' e/ ?; c  f" D, {6 J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- ]+ i1 B. |1 p7 \2 E    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% {0 w* ~8 [" S0 D( U    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 M/ }$ n2 E& k
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' a. N) v! C" m5 H& P8 l6 J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& i7 V5 m) C, p% R
3 F4 u# R; m/ B3 U0 b& e# j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: ~  j1 b; ^. f# i+ l+ H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 M5 p% a" X1 y6 D; y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 N& `7 x! o5 h! U- q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 K) a4 g0 X& v( r% Y) A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, ?9 u& X  E, S- f; Y. Y) g. m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& A' M+ G( k, a* I; I
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- y* p0 s3 j- N% z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( u& Z! p# p% g1 C8 P3 L6 i/ S3 J4 o  m2 E/ ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% @- K7 k* I: M3 b' c! a" r! ~    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ [3 e& V7 y; ?7 b$ S  Z3 ?    mcasp->regs->PFUNC      = 0;          // All MCASPs
: z% T( M9 X7 l4 ~! p0 ]% @    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( D5 A, j  i. N3 l* c2 n
4 N/ c. p- t: N7 Z    mcasp->regs->DITCTL     = 0x00000000; // Not used# I( U: _7 f# j3 {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used" G3 b& L: g! ^2 H2 C
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 u, b# \. _# [, e  p9 @! ^& n% p* R

- c! s/ ]5 G, r, i/* Starting sections of the McASP*/" y: B" o" Y( \( y- c& }( i
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* }8 @  k, h: p) G9 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! a' u2 M7 b  E% s# \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * R5 f& W; u2 J( m% R# l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 Q4 [% E& X# G0 [2 ~/ g9 |1 i( Q3 l; i" u; m, Z, s, e( j, z1 U, @
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 K) w" S6 m) _5 T; L& E( s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 [% X' _8 c3 l; }! L  @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ X7 h8 s9 e0 |& Z, m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& t$ r$ B5 g: z" W$ A+ M6 x* U
' _" t: G9 B5 K    mcasp->regs->XSTAT = 0x0000ffff;
1 T# X1 ]! c% _    mcasp->regs->RSTAT = 0x0000ffff;
6 q. q/ Q6 l/ Y
' x4 P% e- _8 m+ O, W5 Y# t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" Y1 @) d2 V% w/ X8 I$ g5 \( f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, h6 |% r7 [2 @* N1 q8 I6 u, L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , {& i3 C1 d+ R- l" O! c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 b$ {, i- U0 d3 K. M3 _+ h; t/ {
. W! e7 b* l/ O* u0 {! F$ d, V
    /* Write a 0, so that no underrun occurs after releasing the state machine */' [. y) ]9 T+ s- l1 z# H
    mcasp->regs->XBUF5 = 0;- m4 J' Y% q( _9 S
    mcasp->regs->RBUF0 = 0;
& E+ c4 k& W1 o9 m3 B
/ n2 c  }5 i5 E! G: |! O    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 P0 L' I% W( J5 e& n$ w% z# r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 O$ e3 h1 w5 J! q7 p' p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; h6 C$ \6 J' `* ~% l9 B- U. w% C( L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( o# L) g. B& {- K: ^0 }# Q$ _  z
% ]+ m" Y7 Y9 r2 |3 U% F/ p    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 V" z: P6 y; D" P+ f+ _. ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ B6 W  S! \$ f2 i1 w7 e* b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( T9 Z0 f- ^9 l( j. U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 E. q! K" Y! w7 P  P" F0 C

1 U4 |" U: Z" A0 S4 [: S$ \    CSR = 0x0000;0 z1 y2 ?. l+ B* [
    INTC_INTMUX1 = 0x3d;2 [1 i" R3 {  u% k
    ISTP = (unsigned int)vectors;
! ]) k1 |  ]8 n  r" K# L    ICR = 0xFFF0;  ' K6 @0 j3 _* n) v( Y- L
    IER |= 0x12;  
, ?3 K) i- x( s, d    CSR |= 0x01;  
1 L4 c; p" ~) A6 g9 c
, K7 M. Z9 T$ f" w" w8 e0 B/ M% H0 ~: U8 B3 R
- L+ q+ U1 d; R2 C7 S  Z
还有就是两个输入输出函数:( n' z( o0 e. C0 _/ ?* `
void output_sample(Int32 out_data)8 C$ V! M/ o( y' E" g# d
{4 b" o  N: j- ?
  AIC31_data.uint = out_data;  + R. `# h# a" e  Q" E
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 x" _; |! t) m# A. p9 [}
  @) ^, ?1 h- `) R# R! h
: v+ p1 D! c9 x. Q% u$ l+ zInt32 input_sample(void)
9 N; Q0 f' N0 z& b{  8 `3 [# d$ Y' j( k7 Z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;! e$ {: ?, h8 Y2 B. `
  return (AIC31_data.uint);
8 t# ^6 K/ X- j; R( Q9 P}  p+ t$ R3 \  |
7 _7 B& O& `: d9 R# c5 Q# A) H. _6 g
分享到:  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, 2026-3-11 11:56 , Processed in 0.041514 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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