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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 L- W3 p% N, p0 Z9 w
main文件:) ~2 J" M: c) |/ V; I/ F0 b& l$ I
interrupt void interrupt4(void)  1 W4 A* c. l+ I5 `
{( M1 d# c9 s! E
  Uint32 sample;
% t* d6 f' Y) I& _( D7 A  O, t# i' }- V; E
  sample = input_sample(); // read L + R samples from ADC" c$ O) Y8 R2 E  c' s" Q
  output_sample(sample);   // write L + R samples to DAC 5 S3 g: `1 {3 K
  return;* V4 ~; M# F7 a! |$ ]1 y
}
: Z: f; c& C& k3 t9 g& V; b0 Z% `' _" [% t+ k4 v
int main( void )
) Z; y* J9 `3 ?: M1 g; G! t) b{& M5 K0 m5 g- c5 \' q
% e! ]$ _# d) ]7 s+ V* C3 W3 k
    /* Initialize BSL */
8 \% c/ E5 t/ H' Z# D+ ~7 `$ ~    EVMC6747_init( );" d" r+ \" K) S$ s7 B3 x+ m$ t
        /* Call evmc6747_intr function */" f" s* U' H( G/ e% @, n
    aic3106_init( );
& C3 t- t* i$ B        while(1);2 I" P0 K# K& W2 p# C
}
' r: T8 r& I* Q, l( S0 }
$ s# j8 {/ z2 b4 t* [
1 q5 _1 Y+ @5 z' Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! y: a0 X  ^: j8 Z% X  e- C( d
/* Initialize MCASP1 */  x' i1 Y- W+ l: F% W' h
    mcasp = &MCASP_MODULE_1;
1 J! \! E3 A8 O' ^7 h/ |0 Q& U' r    mcasp->regs->GBLCTL  = 0;       // Reset$ g; C" w6 X  J" M, P6 w
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* `0 x8 r7 I: M, |# e/ c    mcasp->regs->XGBLCTL = 0;       // Reset TX. {4 f$ v( O8 m7 |( `+ f# Q( y
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 C0 x. \2 C2 i/ V$ S' I0 s4 M   // configure McASP0 receive registers5 G- I8 K; A. Z3 T/ `: b
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  t7 Y% t( q, J( V
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 o& k; Q' K  }" l) }
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; B& |+ _6 ?8 {% \    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" @( A# a, U) ~: d: ~8 [0 `7 N/ D
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: u$ N( J3 n( R6 |+ L2 L5 y* g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 `0 u0 X8 B' @1 E. ?4 z, ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 {6 D$ ~( s/ n& I; e6 ]& _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# i' r9 O9 q: k; Y$ k$ e; z

6 ]0 ]1 I& t& T4 e6 ?+ G% v% d    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* ]; I0 o8 `" M% O. }' Y! w( p
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 v% l/ F% r  Z3 W+ ~) j$ l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; C9 t5 j" K5 @$ R
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ x! y$ Z/ G. e
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK8 n0 r6 X* f* g9 m0 {2 X. {
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 R' U' ^- R+ _
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 d0 ?7 c  k* \! [2 j& ~
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 u: P% R# _- J) Z; e5 L
; m, e4 b0 z! W
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. _* l% l! ?7 N$ i: I6 A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  o! W2 n. v: g' R: r6 p: T
    mcasp->regs->PFUNC      = 0;          // All MCASPs; T4 t+ I+ R7 p" Y+ U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 d0 d# |7 b7 D) `' ~$ p
1 M8 C9 r* D. ~  `" W    mcasp->regs->DITCTL     = 0x00000000; // Not used$ I; g- J: h' D
    mcasp->regs->DLBCTL     = 0x00000000; // Not used  {9 C$ ~2 I7 A% l, t& \
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 F3 l0 m& q& M) H: E& l. H
, S. s" N6 n/ b1 e' C  H
/* Starting sections of the McASP*/$ M' I* L  G4 L. Q, A7 f& l3 C# ^4 r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 ], W+ C) g1 B- q0 c$ r# u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 p- ~; t& |# }4 B2 C
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 f. o/ j) Y; B( U( i* O: w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ f: a5 J+ K5 q+ m. K

1 p0 @) y4 c+ S5 n9 c0 ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   n) U% H- Z/ w& a8 e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- y! w+ X' j. \9 l( @: E1 f
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: A1 n$ b, A: ?, t$ q4 q# Y1 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" [' S+ \" j4 P$ A5 ]- s. V/ ?4 r: P5 b+ R
    mcasp->regs->XSTAT = 0x0000ffff;
: n1 J; Y" B6 x8 _4 n. w) {( _    mcasp->regs->RSTAT = 0x0000ffff; : [: _- n1 B# S5 |. A1 Q
" i: c% u8 z8 k# Q- Q. |" @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 [1 P0 `- z8 Q$ V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 v' D6 }( n2 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * C* f, s6 A3 j1 v2 j4 n! h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 f2 M# a. k1 a

5 ^. r& v: y+ ~( T    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 M4 @) y2 O* Z! R9 z. e9 F    mcasp->regs->XBUF5 = 0;2 G0 E9 Z$ ]# C# o" N4 A, `# [  i
    mcasp->regs->RBUF0 = 0;! ~0 T# L( r# v) D$ C' J' D
% H) c/ K1 M6 }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  [1 w$ b5 f9 j$ k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 l; y; @' w( B    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! Y2 a' x/ y) @. G- R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 M9 I$ @. @$ M) a& c& e. s

& C$ A1 J' J" H  R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 [) ?* ~9 \1 @: m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* T6 Z0 l2 X# N5 C6 f8 b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 p0 ]% q( B0 `0 W! A1 K4 d+ x6 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; O$ Y" b  V$ a
" u; G5 i  h) y. v" c
    CSR = 0x0000;: L' o: \$ S* F+ Z$ z; \( w
    INTC_INTMUX1 = 0x3d;! v& @" n/ D8 j! ~+ X- E# D0 [! ]! U9 d
    ISTP = (unsigned int)vectors;; k9 \6 h$ \6 j1 N
    ICR = 0xFFF0;  
, G7 V& x5 q: q/ G1 n9 n, O3 B6 S" ~    IER |= 0x12;  
, a9 I/ r: Q; w; i4 n    CSR |= 0x01;  
) U. L7 t* y" V/ f! |% D. L$ d
7 ^, |/ W4 z/ v" z1 {, n( v6 A, J/ X3 C
& b$ f3 s7 s& A- m: s" w
还有就是两个输入输出函数:; o- E; R) O+ C- M6 K/ |
void output_sample(Int32 out_data)% Q& l3 e2 e- o/ e5 S- h$ B% y
{  f& c% d& J! N3 s  e9 G; |( I
  AIC31_data.uint = out_data;  
; m% S1 _4 P9 ]/ m8 |' J) @1 W  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 l: Y, J3 {* u: @3 p! H: o* t
}
1 e+ ^) ?. O9 J3 z$ ]9 c% d- o( f2 o" `, q8 f; ^% G7 {& s
Int32 input_sample(void)& {7 v3 z& I$ b9 W4 ]) m
{  - o9 v8 I, h9 {- {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;  j! k% P+ q1 m3 X% P1 }
  return (AIC31_data.uint);, `/ c$ c! y+ M7 f" U* F* }
}* T, |3 v( P+ ]# Y, [1 d6 o
. H8 e* Y' ^0 t, L/ L3 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-12-15 06:10 , Processed in 0.042584 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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