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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' [" I  F  Q! n: H6 V" ]main文件:# c. `) J* E! a% j8 F$ X
interrupt void interrupt4(void)  
* @6 {. X/ }- ^6 T; N0 L{( V9 @  K' S: F& C2 [$ g: R$ G
  Uint32 sample;
4 A" T7 z5 M  v# B8 w+ E$ Z& }3 y8 ^& B7 B: W. D
  sample = input_sample(); // read L + R samples from ADC
! B# W3 @2 ]) i, V0 y, k  output_sample(sample);   // write L + R samples to DAC
$ B( x! E" j4 m" u3 R+ m4 W  return;' R0 ^( Y# i5 T% {5 j
}9 q% M# H7 m" }) w$ O7 g3 z
3 r* c: r/ A: P
int main( void )
% @, h. A  I, m; G{; ]6 n& w1 {0 Z0 f( X

9 W! x/ i3 J3 i, ?5 h7 u6 ~    /* Initialize BSL */
* r9 x9 t1 L$ u- z    EVMC6747_init( );) Y3 X# S6 {! Z* T( p$ p) m/ W
        /* Call evmc6747_intr function */
# I" m+ j' l( \    aic3106_init( );
& F- v4 v. W3 {& l5 ?        while(1);
: @, s2 j0 o) ]7 W}
2 V; z6 J- c  E6 t
# k# c* ?4 L+ b0 ?$ `. a0 N) C4 y( E& E( ?  k2 n8 i3 |, F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) T. k$ K* t: o  N* `5 M: ~
/* Initialize MCASP1 */
4 b1 s" c9 f! |$ C# X5 M( x# y  Z# [    mcasp = &MCASP_MODULE_1;
+ p9 w1 r- R5 R. @: b1 b    mcasp->regs->GBLCTL  = 0;       // Reset% f0 ~& {0 L9 K4 {1 w
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 \4 E5 R+ ]) p. t/ A' ~    mcasp->regs->XGBLCTL = 0;       // Reset TX7 t) c. O7 {  s" `
    mcasp->regs->PWRDEMU = 1;       // Free-running+ i9 H5 y3 x2 c/ @/ q
   // configure McASP0 receive registers$ V9 K8 I! C/ ?* Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ Z2 m$ h2 }, M- U    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) u- F# d  [- |, H: C. Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% `* B% o3 y1 D1 |! w! C' z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* h  d2 P: D' C  U% A5 m6 c( m
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 v; Z: w1 J- @7 a' P* U9 e" y" \3 p4 _
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, S: V# _  w1 ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 L3 Y) J0 ]% U3 o- N4 d9 F5 p! Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! U% I1 L" p+ I/ H3 X# F2 W
6 t7 q5 k* z% r, ]    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ m6 ~3 b( u. J$ N: J: L    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% B# R8 t7 h1 S( f3 B% z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 p% L/ e& d6 u- v    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 D0 v. t4 e5 F5 l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. ^( a& o6 d1 y# N  s    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# K0 k/ V6 H. L$ w6 p2 o$ o) ^$ i3 y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 b- G0 \) e+ v1 T6 v0 I    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: b, x4 V' C. u$ B$ a8 {  m9 i0 H% E7 i$ j  ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- X5 {& [3 i: O- M
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( M" t: R- @$ P( n0 {: }    mcasp->regs->PFUNC      = 0;          // All MCASPs. w" y* m& Q8 ~# w6 N
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 [- ?6 M1 d1 p4 o! a
, ?1 [/ j0 ^  X0 S- @2 w2 N+ x* h- z
    mcasp->regs->DITCTL     = 0x00000000; // Not used6 Z( J; D% r: o) B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  B+ ?8 p! z) ], I! w0 {! i    mcasp->regs->AMUTE      = 0x00000000; // Not used& E. Y$ z& K. q

, z! ~7 n* Y9 M. V; o: q7 h9 r/* Starting sections of the McASP*/
# z3 s# @, R) K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! b, p/ Y8 X" b6 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) X9 \5 J: i0 h% g9 o3 ]- c" I% {$ o, b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 F9 Y" ^7 W' v7 n2 w( I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 a7 h# i5 e( ]* ]
. t% z& O/ u1 X" K0 p! |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + u  ?  g4 r6 X; s  F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! @) h4 l  t! H' N1 S6 C    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ |( ~3 j* K7 h1 t! U8 ^2 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# H6 t$ a5 D( D2 C! V$ D
2 J* e% S- E3 B
    mcasp->regs->XSTAT = 0x0000ffff;
, {8 j( F% {7 w+ l' |    mcasp->regs->RSTAT = 0x0000ffff; # q" o9 ?5 K- z$ C
3 U+ H; y0 j" r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ g1 ^% a/ s1 J% @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) \8 _' M" o5 X1 [9 P# @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - h( v: F# c  m4 l. Q2 e, L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ U2 N  B- J2 O

6 S( g# R* l% k8 j2 X    /* Write a 0, so that no underrun occurs after releasing the state machine */
* C: s+ w1 [+ f: M1 O. ~    mcasp->regs->XBUF5 = 0;; R7 ]) U* o+ W2 n. N
    mcasp->regs->RBUF0 = 0;
8 l/ ?' u3 H4 D2 d. p) L: o7 y! v4 {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 k7 t6 x# S' G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 S1 W8 v+ w! N5 h5 H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( }9 v. H4 l& ]1 j2 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 M5 D, c( Z9 T, Z6 x( ^( L) A

: n- m+ q( i$ x  f5 L% {& t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % ~. C. b' l5 [4 }/ v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 A+ W) A. s- {+ [- `) q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' H4 ~5 `, a- m, t) y  B) W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 ^& X; c5 ]$ _3 v3 U  X3 n5 @
* g$ Y1 @! K: [: \( @    CSR = 0x0000;7 c8 S4 Q) a' v. K8 N! s9 o9 C1 k
    INTC_INTMUX1 = 0x3d;
) F, n. z3 l1 O6 s) z% o* D' f    ISTP = (unsigned int)vectors;- ?* `' o; l% u& Q; n
    ICR = 0xFFF0;  
: S5 y" m; w. }' W2 N! ^3 |/ S3 O$ u    IER |= 0x12;  * {" t3 I  l* T& _8 z& ^
    CSR |= 0x01;  
/ }+ }9 U& ^9 z0 C/ t0 _2 h  P. h, q

* e  j; k! T  G9 R7 R
; P3 E1 u( T+ p5 x* }$ \还有就是两个输入输出函数:( N. i: K' B! g6 X
void output_sample(Int32 out_data)5 ~  p# n  m1 j8 T: o& g" M
{
2 _6 ^6 C( v- E) C3 ^0 v  AIC31_data.uint = out_data;  
& M9 {, N  _8 e# L  MCASP1_XBUF5_32BIT = AIC31_data.uint;& ]+ {6 H, l+ ]
}# Y  \1 F+ V$ y6 }$ T

2 a4 w; y0 C) D0 ^* i5 T, r& ]Int32 input_sample(void)( u+ j4 J# Y1 S
{  . g; a1 v6 g0 u- s/ s
  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 L) D, x! l+ h% n% m2 o; {. v' I" j% o
  return (AIC31_data.uint);! _/ ^7 J+ R' X" E
}; W! |  z3 Y2 i1 e" X

1 B( X; |; V! M. K: }
分享到:  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-31 10:30 , Processed in 0.040070 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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