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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& U2 T1 R8 k! T# P
main文件:; E3 ~( H$ m  B2 f/ S8 _4 s' u
interrupt void interrupt4(void)  
. q  l4 W" R. y+ O/ `$ r. B9 p{+ v6 h3 Z$ Y) i2 h
  Uint32 sample;
0 [$ d1 |5 {* d, n+ q( \' g( l% g
5 k: y* |5 H6 L' G  sample = input_sample(); // read L + R samples from ADC3 ^) \: `% ~1 w! M9 Y( N5 `6 r
  output_sample(sample);   // write L + R samples to DAC # T- j, O) W+ i5 L
  return;7 o+ t1 [# ?# Q' h. ~0 p
}
7 d) K7 l  T" p3 z- ?( e+ q/ N/ F8 e# z+ p
int main( void )3 F0 G4 a' j- o2 T! o/ h
{% g. U: u0 m) ]; Z# ]3 \
* s* t. T+ X0 z" l7 S- A" k
    /* Initialize BSL */
& O* O3 ~! I6 E* k9 _3 y' C5 f2 I    EVMC6747_init( );
( F  B5 A2 A( m  h' v! H2 }        /* Call evmc6747_intr function */: N3 f9 A. I; x) r( L
    aic3106_init( );
6 K9 c9 `' x8 P) K& ?1 Y* x        while(1);' `/ a% N* ]1 ?1 `
}! u! U. c8 A  \- ]

- w5 A0 B6 G; O- u! U: b; S4 I# [- G2 Y7 z9 ^& B$ r
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, H3 ~; d0 r8 A* G8 g8 s* T
/* Initialize MCASP1 */% _/ Y/ w9 e4 i8 {: O. B( O% q. I
    mcasp = &MCASP_MODULE_1;7 v: `/ @/ x4 |0 d& F
    mcasp->regs->GBLCTL  = 0;       // Reset
" w# f0 y$ Y  @    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 R7 ]) Y0 v4 d6 m* ~1 X- I, b9 {2 I    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 w, b7 r: n/ b; d    mcasp->regs->PWRDEMU = 1;       // Free-running' _( m" K; G+ z: J6 u
   // configure McASP0 receive registers6 q5 n: ?* T' m* C3 y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" ]5 G1 ^* c# i- l
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* {4 t3 _/ C% C& ]7 N    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 H  L7 j! D' J" X! j. Z, R    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& z8 m5 Q( r! k6 }6 V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), ?" b) `6 t9 X% N) d3 D
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ C6 Q7 P6 i: [% D/ T    mcasp->regs->RINTCTL    = 0x00000000; // Not used! Z  ?7 T: J2 d
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 P; d0 `- c: L- V2 |
* X8 q2 ]2 \. h9 o    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- {: k7 R8 A# ?: g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 L/ ]4 ?  g0 ]: r  p; t. c: x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 B+ Z! h# k" z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' [+ O3 q+ v- _) G+ ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 S) ]; ]7 A% |( v4 U    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' G& y2 ?. H  I2 I" H5 u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 S) O. ]# h- w: I3 _1 F4 H    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 J" m  A, h; u' f; B
$ y7 r7 P  o& Y4 c  J' ]5 H3 E
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 H2 p5 x% f: h' K. \0 Q" Q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 X# r! D1 b+ f1 V2 t' J    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 [9 d; F) j& f, W- a1 i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! h. ~; b  F$ l' h$ o2 _; p$ C! y# G

; p) n0 l( W1 V+ K    mcasp->regs->DITCTL     = 0x00000000; // Not used& p' o) q- J. ~% Z* V
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& y, P" k# E" Y+ a
    mcasp->regs->AMUTE      = 0x00000000; // Not used  ]8 L" Y0 {- r, A

6 L! X7 B( U+ B1 A/* Starting sections of the McASP*/
! s4 A9 K$ ?8 f" M0 j5 j' ~# ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / U& {6 V. m2 z1 Q- d  ?! T2 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    ^' V& i# U0 a4 V" v# b1 X; H  p
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" G- k# S/ T/ D) H& p$ }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 H3 D. D2 Q# K& N
' J/ x2 e( X8 a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 i8 f( I- J; K5 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" @) U8 b5 ]: ]9 ?  h6 `# U    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 e: R- o. y5 @$ C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ g/ J: W8 p! t' A, \
& m+ }* c5 w% a5 |
    mcasp->regs->XSTAT = 0x0000ffff;
- p4 p  N/ q! T0 [1 e) u    mcasp->regs->RSTAT = 0x0000ffff;
& q, o* v; d/ g) T7 @6 ]# Y" ?) E3 x% h* Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 C- L3 j2 M/ b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, q4 q/ k, L6 C1 z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 h$ C6 ~7 F6 w) o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) \: j+ m5 j3 M( p' w* F

$ u, J8 F! `+ c6 k  |- d    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 f) p; Z) E4 j* J& ?+ ]    mcasp->regs->XBUF5 = 0;4 u6 J7 V' w$ |# V: @- q
    mcasp->regs->RBUF0 = 0;
: m4 Q4 L5 w  O! w- C8 ^, C6 C# Z0 e! f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ O0 G) q, p# S# P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 r- k" j7 y5 l; R0 n+ M1 n8 y) g    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 W8 k4 m% r# t. k7 p3 A0 J8 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 G$ G% y5 K3 ?' m0 T  w0 r
6 b( w3 z) t. M$ f. `% D    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 H6 U( c8 b4 X% S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; E' F9 J' s. H8 Q/ R( R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 _4 P3 b2 }- v% L. r" o+ [+ N4 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 A1 m8 i9 F) I6 y' D- E* y

/ f$ V7 a5 y( x: _% \/ O" ~0 O2 M    CSR = 0x0000;
2 y8 X$ f: v, p/ }% J5 Q) ]    INTC_INTMUX1 = 0x3d;
: R! I) k. B9 H, L  d7 z; @6 w    ISTP = (unsigned int)vectors;
5 j- a, Y- c! e    ICR = 0xFFF0;    Y! I# P2 M, G2 Y- o) e6 v0 z# b
    IER |= 0x12;  
" B) k/ J9 C9 b( y6 v    CSR |= 0x01;  + N2 I6 d- `4 t* L$ f* G# m& Q! I4 @
0 c) k# Z6 r( t$ b/ k3 b& ?, H) x
) z. p: i: w: A

' i, r. p$ i0 A$ P" g( Y8 V9 H还有就是两个输入输出函数:( |& c5 o9 j( g# X4 ]; Z
void output_sample(Int32 out_data)8 b) f2 I5 s# W+ Q/ |6 B
{# Y  U" ]: \. C9 D2 }. }2 L# ~
  AIC31_data.uint = out_data;  
( q6 E" v/ P# N7 p8 o  MCASP1_XBUF5_32BIT = AIC31_data.uint;! i/ _' l6 v. Z, s
}
  B& @+ H- U' ~5 L+ S' O: o$ i% r1 x- r. }
Int32 input_sample(void)
% W& z4 W3 G1 ]0 J5 z" y5 y{  
& A% |3 P& Z5 o1 c9 l, \% a1 e  AIC31_data.uint = MCASP1_RBUF0_32BIT;- K, U) F: M3 J" Y( i
  return (AIC31_data.uint);' ?3 x* u) p6 B$ W$ r
}% O" M& i  g$ i* s+ R& |

. o8 k7 G" Q+ M: {  [
分享到:  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-2-16 06:08 , Processed in 0.041508 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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