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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* Z$ S+ z( H$ i$ d. `/ m6 C; h9 bmain文件:1 w& z4 K; N% c
interrupt void interrupt4(void)  
0 d* o+ C: [! ^  E{
' g$ G- S$ x# ?" V# D  Uint32 sample;) A) V5 v4 I3 C1 }, ~9 Z) X3 P

& _) U' f" u- r" I# \  sample = input_sample(); // read L + R samples from ADC
* ^* Q( }% k: X+ {$ H, x2 N# Q  output_sample(sample);   // write L + R samples to DAC
; @" h: z2 v8 }. N* s: g6 C  M: X( z  return;. W4 Y- v7 ?% n: g# X
}
6 }. D7 w, R6 A; p# d, i1 r; v8 ?) V
int main( void )
/ H! z! S8 ~8 v1 C{
, r2 T- Y: w% f# e
0 v( [7 K1 k8 X/ y! r    /* Initialize BSL */; G3 Y5 G- ^+ @# o. F, e) a
    EVMC6747_init( );1 N- K/ N3 @$ h( Z: S$ b8 A9 w- o
        /* Call evmc6747_intr function */. v$ @. h8 ]6 p; z' k2 Q3 m
    aic3106_init( );
( X+ r  R( O: ~2 X        while(1);: _  I' K8 C, L2 h* @& ]
}
0 O: C4 ^& \5 q: M5 R
+ N9 i; {' Z, P9 N# {6 o
: p( j8 x3 \! d- C( O0 J, \4 ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* N" e7 O0 e! w9 w1 ^7 t/* Initialize MCASP1 */
' l" Y& v# o, d0 z( r    mcasp = &MCASP_MODULE_1;
6 Q  S, J+ C8 q5 e1 f% g) ?0 ~    mcasp->regs->GBLCTL  = 0;       // Reset! _% ^0 q" V& D
    mcasp->regs->RGBLCTL = 0;       // Reset RX
) V( h+ [! E" P- ~    mcasp->regs->XGBLCTL = 0;       // Reset TX' Y% {& U* }( k9 w0 g, h
    mcasp->regs->PWRDEMU = 1;       // Free-running
( S' x  F7 F  n" C8 ^# H( t   // configure McASP0 receive registers( C- s9 G2 h- h1 c/ `& {9 A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) @* ^, ~# U7 L# Y- Z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. n$ {+ {8 D+ t" N- g! l* d# ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. |: l) E( [- p& s
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 H6 i  @$ a* J6 j8 `    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# r4 h- B3 {4 u8 D: G/ }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ [) K2 C. x4 q$ @    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* V, k9 W* l% d( A5 L3 j    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ k/ X* s# E0 i- ^

! [0 v, o  \2 n- c4 f( b    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 z7 i! d' G0 p/ _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' I  V1 [! {: A( G# x6 g. h7 Z7 G
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 b, `1 E0 |* k# g0 o* L7 ^
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ F3 J( d0 O6 n1 J    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ V; X: T; C; y* B. d: p( I    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 V. D' X: h8 T' p. P1 m, d# I    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( ~, n7 L, t2 h. B1 P/ W/ c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 c$ k( ~' j# W6 `8 y+ P! K5 ?6 ^3 @' z& i% W% O) L
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ ^* I. Q0 J0 ~' E9 l4 v    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( @: f) ]5 I8 |, I- L) U% |. _
    mcasp->regs->PFUNC      = 0;          // All MCASPs
% @$ `; v: C; W- Q; m& R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- s; w4 P- Z4 J+ y$ t1 I
1 y4 A4 q$ U8 a( @0 v9 ?, |
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 N0 w1 J# w6 A& O    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 R& F5 d' ?; [8 q( _; h7 {
    mcasp->regs->AMUTE      = 0x00000000; // Not used
( H) T1 H  g! l# d3 z9 O# q* ?$ P( {& F2 T6 f
/* Starting sections of the McASP*/
" B; H  z$ G( f    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( ^( G) r( R0 @, d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! [) }6 f0 I& t% }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 n2 g( X" m" g$ t( R4 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ~& j! F  A) c3 K6 ?+ ?9 `* U) x
* h  x% L0 f3 `  q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " S1 }& S/ A5 i( R' Y, Q. y0 b8 M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- {" G5 @! s2 ]% a1 p    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; E; `! z7 C3 [9 w6 k- R) u( s* o' R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) ~9 ?( }9 p. F7 z/ g, S* d9 n7 N
3 f0 X1 s' q$ c  y, v2 B    mcasp->regs->XSTAT = 0x0000ffff; 6 e* d# a8 A  K
    mcasp->regs->RSTAT = 0x0000ffff;
- i. @2 t, X/ j  j" t; i  [6 x% k# ?9 w% ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 E/ S+ h- Y  p5 \% j. U- m1 Z' j: W; D: O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' q" o/ X  c4 o8 _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # n3 Z% j1 G9 B' h5 M/ p4 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 n0 [. P" m: L, F4 x9 u1 {7 ~. L! r3 g2 G: e
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 g4 H5 c$ f4 i6 p  [/ ^5 ~  N3 d    mcasp->regs->XBUF5 = 0;
8 R% v  `4 |% `$ i6 c    mcasp->regs->RBUF0 = 0;3 B; c9 P+ d, P1 y/ X1 _9 u/ q
  r: l6 V3 L4 k, L
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : x7 l* u* Z/ `  u7 `0 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, v5 H9 ^% H+ m# u4 |
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - M3 S. B2 ]2 N9 W" W+ Y! L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; ]) v9 ~9 e6 k2 B+ Y1 v! O6 r) H) E
0 J( R% \. n2 W' m) n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 T  c9 u& u7 s+ \. W; e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 B4 r- E# H6 k+ s4 L# d3 @    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' M# ?) j: U8 f7 t" O  v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 a. h# L' U1 B+ o4 W4 e
9 l# k4 t- k' Z. Y: f/ S    CSR = 0x0000;
+ c( b1 a% s* m& p# |; h) o6 c( C9 [' l. L    INTC_INTMUX1 = 0x3d;2 R. Z# G. W, G: z4 {# {0 {5 u% U
    ISTP = (unsigned int)vectors;
  t5 G* e  s0 }; o    ICR = 0xFFF0;  ' v. a* z- F. g; r. ]* k$ S
    IER |= 0x12;  
. r- X% }2 q0 L$ h    CSR |= 0x01;  4 x; L4 l3 L4 s
2 |3 b( z- Z1 o, R# e  f4 c

* d7 \" I! P! r) z1 d9 H. S, k
* w8 _; l6 y6 m. C; m- i还有就是两个输入输出函数:
" }8 P$ x. E' ^7 _/ ivoid output_sample(Int32 out_data)8 G: Y0 d/ g8 p9 w! s. [) v; G4 e$ X
{
7 H, N# d9 e+ V$ R1 B- a8 ~  AIC31_data.uint = out_data;  7 l% o/ Z$ J$ \9 @4 d# V% H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; M; ]+ F1 c! D& o
}
$ a/ k4 c4 F1 z( Y
! A% K  V- ]+ IInt32 input_sample(void)
) s% R, s; E0 y2 X+ M# V' \{  . P1 y8 A( q0 Y0 u2 c3 O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 w* e9 X6 @$ V
  return (AIC31_data.uint);
5 L$ d% q# n8 ?1 s0 V. o}3 n5 L7 B2 u1 C+ S8 Q9 ]
( I! ]+ f- h# s  Y
分享到:  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-1-20 23:50 , Processed in 0.043005 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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