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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 [, ]3 Y+ r9 w1 B6 O
main文件:3 F4 [; Q2 V; I( j6 u( G$ F* |
interrupt void interrupt4(void)  
- T; r* q( W, C- d0 d; t{! |7 V4 B8 Q0 X
  Uint32 sample;# I  N2 Q- S) z

5 ]8 L' s, p' y* G! X$ h8 O  sample = input_sample(); // read L + R samples from ADC
0 G- |9 ~6 t4 `4 k9 O1 @  output_sample(sample);   // write L + R samples to DAC 5 t* f5 V' G) [4 E, O
  return;
+ K1 M% C1 K0 X/ I1 O. ~}
! n+ c( ^+ ]% ]# O
' `2 \9 a% B3 P8 E+ Dint main( void )0 [3 U/ }: f1 G
{4 x; y1 @; i+ g8 \( Z- i+ h* Z

  A7 l6 L9 q0 Y! s8 K# ?8 D5 _3 p    /* Initialize BSL */
* }1 Y" o* L- j. |6 {% e8 \& A    EVMC6747_init( );
0 n1 t! O4 g4 C% |+ @" z7 u, B        /* Call evmc6747_intr function */
* @6 x0 ]1 Z: W; G    aic3106_init( );
1 j5 p$ Y/ j; b' {$ [        while(1);
7 I' L5 b  L4 E; I8 Z' I. c}1 ~+ J% x5 _1 Z2 \0 V

1 J, m) u( P! b4 K9 Y" ?5 z, g' q0 L( v* S% Q9 {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 d8 N* j/ h! b/* Initialize MCASP1 */9 d- T/ L, u9 d5 ?) l7 E
    mcasp = &MCASP_MODULE_1;
6 l* S# B$ s% ?2 ^6 ?( N# `  y    mcasp->regs->GBLCTL  = 0;       // Reset# K& W4 ^! S4 E" Y" a7 k; d
    mcasp->regs->RGBLCTL = 0;       // Reset RX
, _% ]* P9 N* t' q! |, Y3 n    mcasp->regs->XGBLCTL = 0;       // Reset TX
. f3 Z; y6 @: L9 F% z# ]3 q0 y  ^    mcasp->regs->PWRDEMU = 1;       // Free-running
) K' N3 s- f7 o3 P4 q2 o" |   // configure McASP0 receive registers! \! b8 q* O# g$ _+ k
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' F* ~6 q  x* f    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% O  {# {3 v1 }! _
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 O8 i4 A& p2 v# P0 Z: |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); A! G2 a, T4 i* U% y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 ^) X+ @1 w& M. B& s- C
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 o8 ^" n/ X: N' z$ {# |2 @0 d    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 B' p8 w4 t6 c, Z- S: @
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% e% s, Z' ~. ]6 w& E1 p) {7 G, v( S5 ^; t+ P. b# G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& s9 e$ Q6 _+ d
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 E6 t) N) [* P) X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( K+ V/ K. t5 k6 Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: v* L. W7 Q' C2 p
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* F4 {2 b: {; z& r; O5 _  T9 S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 x! \, s7 f% @5 m# n- L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& H7 o6 t+ M; P! D4 W/ K
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# c1 t' e& d9 a8 B" y0 O0 n6 z
$ x3 F( J6 G: [) E7 I
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; p! p$ B' f& O* a, W/ J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# k: P$ y% M  g* ?$ s1 h    mcasp->regs->PFUNC      = 0;          // All MCASPs/ }! E7 g1 @: L# m( c6 @
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% O9 s* }( j" H. H. d" h3 F2 S. i4 _0 s# I
    mcasp->regs->DITCTL     = 0x00000000; // Not used3 y: F& b6 w6 i8 n* |, i$ ^7 }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 o, h9 H# U8 m5 W9 n9 Y2 |  x    mcasp->regs->AMUTE      = 0x00000000; // Not used8 p% A7 W7 ]! \( b' c

7 E+ d7 f' ]  w/* Starting sections of the McASP*/* {: F* E( ]+ Y2 U$ C
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 V% n# F0 b* ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / k& V5 K: u3 D
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 y2 G1 I) A1 G& Y6 e% f/ p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 p/ Y) V- x3 T& m* Y
6 Q8 e. Q* Z$ f% x' K1 J    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ g. V9 x  Z# H0 m6 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& S, Q3 O7 x9 f7 l5 ~1 X! q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 |4 E2 `" a3 x: v( q2 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# q+ N6 m$ h7 ^4 i7 b1 v- `( a$ P1 n1 b1 x, N# j+ C
    mcasp->regs->XSTAT = 0x0000ffff; ' D" m4 M6 }7 `# v4 o- V
    mcasp->regs->RSTAT = 0x0000ffff; ! l/ \" U6 \" g; ]  g8 A
* D0 Z  a0 S3 q9 y9 F# Q# Y3 e
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; {; p' @4 o+ ?7 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ p+ _& B1 s) D  q: }) a1 C9 D    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, v4 K& s& }7 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 i% N& H0 W+ t  Y& W! @9 S5 d9 |0 c& H
    /* Write a 0, so that no underrun occurs after releasing the state machine */
! X6 u5 C8 z, A) @8 O. Q    mcasp->regs->XBUF5 = 0;
  N& o$ D6 ?6 N) z3 d3 s* f$ q/ S    mcasp->regs->RBUF0 = 0;' i" q: g/ ]0 C+ F' g

2 D4 D! [8 `8 p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' w3 ?; U4 a: d% c$ N& A7 |8 A- G4 m0 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% n/ K* I& L( Q& V( W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # E  {0 x  I: @* J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! b' r/ \' m+ d

6 C; ~  K! L  B1 m& i    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, }) N; G" D! T+ `7 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% Q; f, C; y; ~# `7 e2 O
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ {" b  R, ?# W/ \0 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 S- J9 }0 Z$ Z) t9 S
" }! H7 k3 I3 q1 ]& `
    CSR = 0x0000;
  b* {- m3 N) V( ?0 G$ e2 Q& v    INTC_INTMUX1 = 0x3d;1 M' H1 X- d" n( o% M: |) R: S
    ISTP = (unsigned int)vectors;
& ^4 g0 s4 p3 L+ S- g0 V9 O" d    ICR = 0xFFF0;  
# G. I& a. t" y    IER |= 0x12;  9 J3 `7 C# y2 V- [  r
    CSR |= 0x01;  
# ^: r3 A& k4 `7 f9 q# H9 ~
! f  U  ^6 E# u/ }  E
3 E4 v4 ?- }2 \9 M  g3 Q; |5 K: h$ |( t; V& q
还有就是两个输入输出函数:  _5 N+ G$ K/ d! i5 ]
void output_sample(Int32 out_data)3 ]0 u$ m3 d4 g  R; M
{0 w* o0 U9 [( g# T# @9 o
  AIC31_data.uint = out_data;  7 [" R3 b* o% v6 T4 ~( F
  MCASP1_XBUF5_32BIT = AIC31_data.uint;! h- U" A6 n, c; N
}
* ]8 c1 P7 ^8 I. @" h0 _
$ w( [2 O6 |! DInt32 input_sample(void)
1 q6 {/ ?# ~. N7 m" Q- B; g{  4 p- F0 @. k4 R5 o$ n+ t
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ ]. O. Q. d; X5 u9 K  return (AIC31_data.uint);
: i: I+ ^' v, `1 H3 g6 y( R}
9 }  I7 p$ C$ D: ?
( R, T& n; a/ ^; m! b+ j
分享到:  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-8 18:18 , Processed in 0.037869 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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