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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ G/ Z6 J0 e6 v% r$ Mmain文件:
8 k3 @: A& u& O0 h0 ninterrupt void interrupt4(void)  5 L1 D  T- w- R: z. o9 m
{
. `4 U, `$ N( w# g2 v' ]$ Q  Uint32 sample;7 _3 ?) w6 N* s6 c
3 L3 i+ k. I$ Y
  sample = input_sample(); // read L + R samples from ADC6 p. K+ A( k7 H  j
  output_sample(sample);   // write L + R samples to DAC ' R. r; C0 n( d" D. I2 K
  return;$ S" H# ~" i# Y( j( E5 j+ L# Z
}
6 l- B4 N1 o3 L/ K
4 X5 Q& @9 m9 D9 X3 [int main( void )
/ i0 W8 ~: t) E1 \{( x  [5 T* q3 Q8 Q+ s( f. ?# s

) L6 t* ]2 M/ C1 t0 B9 F& A5 Y    /* Initialize BSL */( S! U6 j2 H( Y$ a  q8 ~
    EVMC6747_init( );) r9 ?+ I3 v7 t# c$ i4 t8 c
        /* Call evmc6747_intr function */
3 M; c- O. W4 X' L* c1 c    aic3106_init( );' D" T: I& K: A: n/ Z5 l
        while(1);
8 O% P3 o% u# n" f/ b* T1 P}
9 H( S. w; o/ p: t$ y& D" s4 ?/ J, ]; f: n2 ^% l  e& d

, L4 R% y5 z$ E) }# n$ Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( v8 H9 B# \6 Y. w+ [# R* c/* Initialize MCASP1 */) Q. H$ |, x- c) [! e
    mcasp = &MCASP_MODULE_1;# @$ `9 ~4 ]* y5 y1 h
    mcasp->regs->GBLCTL  = 0;       // Reset3 ^! ~9 U0 F7 a6 b, i; T
    mcasp->regs->RGBLCTL = 0;       // Reset RX4 g( v% A" r' a$ u, P
    mcasp->regs->XGBLCTL = 0;       // Reset TX  ]! P' E' X7 ?7 s6 G, e
    mcasp->regs->PWRDEMU = 1;       // Free-running
0 z  K5 q- j9 `2 w1 [   // configure McASP0 receive registers
( }6 f6 V2 }+ y, h; u1 H* |3 n; T# U    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 t/ G& s2 F% ]- V4 R
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, F9 ~+ s6 O4 M; l    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 f% `: ]% Y: Z- _* }7 q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ f# D9 g8 q! E7 j  t; m    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; ^* E7 e) [& V- z1 f+ D8 S8 H( {    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ i; W' D: s: v; S6 e, j    mcasp->regs->RINTCTL    = 0x00000000; // Not used# W. J+ o/ H0 h% P8 _# b
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 ~8 I. T: ?5 x  y1 ?. |
3 F0 G; N& q5 |# h; P9 d  m; z9 U    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, K+ m. d% R  E% F+ f2 T) G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ D/ `8 u4 r7 E& x& ?& Q6 j0 c, B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 s( V. S) d2 q) y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 [6 H. E$ q4 i: b( u
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ q. ]% M& E" Y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 f, V3 k: w  Z5 E5 G, v' v
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! o2 d: m0 o- Y6 F0 t0 V( N
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 l6 K; a8 @  N; W, w
5 x+ Y+ a6 N' N) l1 U6 x: G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" D  M4 D% F7 G, p7 |; }9 G    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 i! P3 l) Z2 m8 J) ~: D    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ v( Q" V: X/ q/ {8 j' o" L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 n' n% A3 v% T! S& G% X
- z. g; h) x* J& t    mcasp->regs->DITCTL     = 0x00000000; // Not used5 e  P1 G) X( u) ^6 U
    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 s8 i! d6 u9 a
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ u8 Z5 T- M( _& d6 B5 R: s# z& r( J+ F# P. `- M% E1 L
/* Starting sections of the McASP*/& D( m& b% \4 O) _; [# U3 }; t( S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 T' ?6 m* h1 `" Y/ [- v+ q. e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, ]- W7 @; E4 N* _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' G. z# s9 e5 b/ q7 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& A5 T* |$ ?' K+ ]( B7 @$ G3 [, u1 K8 I8 _" l% W# B4 v2 ~' y/ z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& e6 T% k0 J+ I$ a2 n% z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 f( X6 Y9 y/ A2 G0 a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 T6 l( m6 S! h0 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 |% \8 Y1 N# p- o) h! i! H. I8 s, a1 ^" N+ w& G4 W9 n
    mcasp->regs->XSTAT = 0x0000ffff; 5 P1 t; O% }1 ^+ p& U7 n0 }0 c
    mcasp->regs->RSTAT = 0x0000ffff;
2 W9 y: Q3 p- V8 @% w/ O( T4 Z" V1 @0 W- v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' A7 ]7 a8 {+ E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 t9 \) K7 D5 U& L/ ?7 R0 _2 G    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 n! i/ [7 s0 [1 F& A' @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 K8 K# u- l2 K; I% W

2 O/ P" k& h  O# N+ U    /* Write a 0, so that no underrun occurs after releasing the state machine */
  [. H( {/ r& ?, x    mcasp->regs->XBUF5 = 0;2 y- V2 e5 k( |+ J$ d) @; }
    mcasp->regs->RBUF0 = 0;0 K" c% S  f5 }- Y

/ `9 s" f9 o% E8 C; ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . n: u+ Z" p  v+ Y8 x9 x6 m+ p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" k; m& h* o8 r1 {% |
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% `% o( H3 x; `+ Z$ c2 L1 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" g: R7 E7 l! a4 B- Q; c) Q9 C% q! l/ Z5 ?, T
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # v! h: p: M! x0 d5 }' l/ e2 p: Z6 s, X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 t7 P4 w" D# N: _" z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! ^% @' D, n/ I$ N9 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% c/ o/ \! \4 ]6 n, \
  X/ V7 q2 P  c* p
    CSR = 0x0000;: F9 f+ S, n1 l4 J4 S
    INTC_INTMUX1 = 0x3d;
( v' e+ Y$ a* T3 c1 K, T    ISTP = (unsigned int)vectors;& n7 ?7 d4 z. m* s8 V
    ICR = 0xFFF0;  - Y4 G  d4 e% u3 A7 c- u$ d
    IER |= 0x12;  1 x! J6 {9 q2 R! v$ H6 _
    CSR |= 0x01;  & Z2 m: I% Q: ]; `$ L

! d+ v2 p& z9 S+ `, E7 Z
9 ^$ T$ y) b) J8 o8 ?6 O7 E+ u- K- Q$ m2 t1 n% A
还有就是两个输入输出函数:
) `# o: x& z: Rvoid output_sample(Int32 out_data)3 v# Q7 \! z* B$ j( j. Z1 P
{
1 N6 _* p# z( _1 n) I  AIC31_data.uint = out_data;  
5 \1 a/ e- Z% G2 n1 K  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" ?  [% b; c) I- Y/ \9 P}
8 y$ l+ y2 u( q4 a8 F1 `, F8 p
2 D) |4 K) A- m& U6 jInt32 input_sample(void)
5 @5 l9 v7 N& [$ j* N{  " ?$ y1 x, P  Q6 k
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. B  H& @) L6 P7 I  return (AIC31_data.uint);/ Y# c4 G# |! A! ~/ v6 r* O! i8 d
}) Y3 `- t# A! D3 b

& ]9 T$ m2 Z0 b9 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-4-1 06:21 , Processed in 0.044982 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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