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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ X) _8 z9 q% f- u) X/ lmain文件:" l4 M! H' ^8 R1 x. B, y3 q- q
interrupt void interrupt4(void)  
# [) Q. U6 F& `$ Q  O/ _- G: L8 _{
2 i0 \  j& A4 n- ~: G  Uint32 sample;% ?, a6 V/ G6 j5 N. E- C) u
0 v4 k$ J0 q7 F% z. _: r+ V5 V. ?8 G
  sample = input_sample(); // read L + R samples from ADC
8 f1 ?+ S# B' D! C7 ?# @, Y  output_sample(sample);   // write L + R samples to DAC
: b0 `* `: T  c" q$ t& ^  return;
/ x7 B. E) V. X$ }; m! N/ X/ z1 d' x}& b# v3 J& J- C1 ]
, v2 [+ M, B( h2 r
int main( void )
, k1 s3 V0 X/ e) j{
# o* s  i' I- @- r% L
5 Z; Z( D; _4 t& f0 ?( c    /* Initialize BSL */
/ ^* C1 K/ c% X7 y    EVMC6747_init( );0 s: [5 U0 s! r/ E
        /* Call evmc6747_intr function */
0 L% B1 u7 a8 d8 J    aic3106_init( );
! a- b+ J# n, l% i7 x5 A" ^        while(1);9 t/ V. F$ p5 J
}
7 m5 l8 H/ _* |+ o2 Z  y- P0 Z- F3 G' i1 o

2 z" Q: E, ?# U3 q2 t  G. [% aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 Y/ K% H9 h5 {* r' Y; A/* Initialize MCASP1 */
& k  ]  y. h. E    mcasp = &MCASP_MODULE_1;( c7 F4 x* o8 M! R+ e
    mcasp->regs->GBLCTL  = 0;       // Reset
1 q- M1 X' K  P8 B2 |1 p. a    mcasp->regs->RGBLCTL = 0;       // Reset RX( o4 Y2 u( {! Z" x6 U/ V; N; B
    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 b$ [& R1 r, e, E; H4 M0 Q    mcasp->regs->PWRDEMU = 1;       // Free-running
) j. P. i& U6 h; ^& j+ m# Z( A   // configure McASP0 receive registers! Q& R# G9 {4 c0 ~4 l" ]
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 n% E! A/ I3 L: r7 \; d5 V
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# _4 z* D5 L& c
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 ^4 W$ q8 M* s8 b3 b
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 I: t( Q- `, i3 d" n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. Y$ X2 Q: l+ x% w& `    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& ^; B( H$ |& B! X+ Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ E* C- [, l( W; i( Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! K2 w$ Z7 o3 q* l+ O. N
. x$ @9 u( s( D4 G) x3 \) }9 a& v    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  o$ G7 U  r7 @, `: v0 q( W    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) `. Q9 \/ c$ m3 Q0 i9 l
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ i: I+ @- r0 H3 G7 h    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% {9 A! J" ?# T# @: b% J4 q6 Y- ]
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 Y# n5 ~1 w9 S+ N5 z4 m* r# ^7 v
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; v; O- C7 l& J  e9 Z4 B    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 M; j3 L7 e. u0 n9 w' p
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 [. U6 f6 A  d% O9 R, _

& z5 {4 ]" N; r- e4 v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* f, Y4 x3 J* g" W+ {7 \, b+ ^
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ e$ u8 k4 B2 P, ~    mcasp->regs->PFUNC      = 0;          // All MCASPs0 P7 a: w) N0 I, @2 Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ S8 c* \4 ?$ W" r

/ }0 k( U; G' i2 O% ~1 N! {& i    mcasp->regs->DITCTL     = 0x00000000; // Not used
( g6 u' B8 P& l    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 p2 S* \5 L! S) l. Z6 i
    mcasp->regs->AMUTE      = 0x00000000; // Not used' D) i9 q) m) }' I3 c; R
0 x$ A, b! M: `' R
/* Starting sections of the McASP*/8 v! _; I$ B) U$ P
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 l' G1 a8 a8 Y  ]. M& F( [1 M# V4 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  K0 d7 c# `( P5 c    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 j" G% f, K5 M; f3 g, m( Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ q: D! C' M* C+ W3 C
3 P" |% E4 G  i- @$ w+ ~6 c
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - y# A0 M( c# ^" L& }6 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ p1 s7 J& n9 G7 s; l4 t4 q6 @: I
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 g( g' x+ d  b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 n5 i$ x- I$ a3 [8 t5 h+ `0 d6 w3 `8 n  Y7 G
    mcasp->regs->XSTAT = 0x0000ffff;
. m1 D9 R; _$ G9 E3 w+ C) Y    mcasp->regs->RSTAT = 0x0000ffff;
1 D( j0 `' ?7 _2 E
: [) E* s5 w; Y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 [# c9 Q, s: _: A3 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 C  y0 ]6 b+ m" K
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 V7 a! K4 R/ D5 H3 L  Y) w7 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 {! {: V, B! |3 m/ w  p( g8 U

. c, _  k" ~4 H3 ]+ B) P    /* Write a 0, so that no underrun occurs after releasing the state machine */8 r( j, ^% V4 r5 }# u
    mcasp->regs->XBUF5 = 0;
. l7 }& q& j9 q9 h! P! n9 ^    mcasp->regs->RBUF0 = 0;
$ U$ J( ]/ D; J! g7 @9 i% A  W' `, \- E( m: b0 H
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : c- e5 z$ V9 {$ s7 l2 L. g; ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 M1 ]4 c9 C. w' Z+ ^    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ t  U8 s7 \  a( B5 Y0 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 o) k# N6 n# x/ z9 H8 _. c4 N8 z! n) W  N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 X( M1 f: J8 j2 H9 `. @7 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 D/ u4 A. `/ j  |, p3 E! _' z* ^
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 i. {, [  q, Q$ l" k5 ~" w% W* m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 C$ S' [& [0 a! _/ x

5 e+ ?0 p& R  j- G& H    CSR = 0x0000;* z8 [/ S! O( N0 u! u7 N
    INTC_INTMUX1 = 0x3d;* [4 L/ T  K1 B7 J& O9 q
    ISTP = (unsigned int)vectors;
, U( T- `- \: ^& |  Y+ _4 [: F9 O    ICR = 0xFFF0;  1 Y' h; I# ?0 Z( Y, S3 j
    IER |= 0x12;  
% d! l, E9 j- e1 ~! p    CSR |= 0x01;  
# x' r- Q2 U0 q2 i  Q) O5 L; ^
6 G& |- _% P" r* J7 U0 Y! u  ]8 _
8 n8 |& Y" m8 `  I
还有就是两个输入输出函数:
. O5 s2 F6 d$ m4 p4 w$ G. mvoid output_sample(Int32 out_data)
7 m% j5 H6 f" d# M+ c4 M& A{
: ?; x  {7 O) K% ?- N9 u+ {! j5 i  AIC31_data.uint = out_data;  7 M6 ]* w1 P0 a9 ]8 }
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* h+ E) f( o9 V) t
}
% R2 l$ A$ G  b' [& v1 f$ h' R: C: _6 U& Q
Int32 input_sample(void)8 M+ i: H) m1 N1 ~2 d' v
{  
/ d  I$ R, _, f( `+ W- n/ w  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; F4 A7 B+ Q6 H, Y  return (AIC31_data.uint);
7 e' S4 |3 b7 J# N$ v) X}
: l; a( v+ j5 Z3 c& V, a* N
7 w  I* p  v6 O+ k+ 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, 2025-11-13 19:22 , Processed in 0.039878 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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