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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 T2 X- u5 j& _7 c+ j5 `2 P6 {2 ~! Vmain文件:
& s2 r- X9 i% c7 Q/ kinterrupt void interrupt4(void)  0 e0 K3 R  O; c  D+ Q# U
{
/ Q# X5 `( K* c0 n  Uint32 sample;( i! l) @5 t! x
& I8 a8 u9 e" [% z
  sample = input_sample(); // read L + R samples from ADC
3 f- H6 E2 j; M, R+ H' c) f  output_sample(sample);   // write L + R samples to DAC
, V, O" x4 k1 A6 ]2 k& g  return;
& ]2 f! I& V9 @. f$ c}
9 w2 N8 R% K. @) b+ O  J
8 n  ~" ^7 v+ Q+ p2 \) cint main( void )1 G) \; h0 o: B* O( `
{
* Y$ }( A  b2 {4 J
# f& V) S1 N: U' D. V% p* e    /* Initialize BSL */
/ b; a# w+ b$ m; S    EVMC6747_init( );: A3 }- M1 s) F1 \# x2 Y# s! }
        /* Call evmc6747_intr function */! _* u7 Y  T4 {) z+ E- W- n+ `, Z
    aic3106_init( );4 J5 W# T: i; \5 J0 g  g
        while(1);
2 W' I/ y2 X% b* |  I/ X}% ~9 \# i" \& f

5 y+ ~/ I9 g5 w# C  J& d& `
& B% R" M) G) q+ ?2 Q6 aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ H& X+ _) c* i/* Initialize MCASP1 */* a: A; d( C0 e( S5 r5 _3 O; i1 H* {
    mcasp = &MCASP_MODULE_1;
% W' i; }/ T6 w1 u    mcasp->regs->GBLCTL  = 0;       // Reset
+ A8 F; s# U+ @3 l# Z& Z2 A8 i. X% S. ]    mcasp->regs->RGBLCTL = 0;       // Reset RX
, d/ J2 ?% H8 {4 d; F; L3 I    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 J# e- D1 i5 |# n, V9 c    mcasp->regs->PWRDEMU = 1;       // Free-running; B7 l+ y" Y6 G; T9 k1 _0 D- v  t& K
   // configure McASP0 receive registers: O) a; J: O5 i. t
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 @5 n( E6 h, p- n, C  D    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 i7 g" b& t/ A( Z1 L( p$ n
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 v2 Y  A% A- j* z; X& Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! F! `- H0 @; ]# O1 a
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 h% ^* P3 q( |( `+ @$ ?& ~. K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 @; q2 I2 L8 q/ Q, V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 N7 L; Q5 c: G1 [+ D% f& W/ A; v& a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! Z  O1 N+ p' k: |
8 K. d; c4 p* H" e9 h/ h( I/ H    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  G- `# Q4 w6 K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 ~& J) R) o& B* O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) `# [+ P4 W7 {8 U  U- |8 C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, r& z. p; a8 Y7 B    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& |5 ]7 }9 n( l3 U% S& q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 m* a5 L9 j$ p6 g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, l1 Z% U+ e7 ~& I& ]    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! n9 K% E' K; B) Y9 v4 p3 z) I. j. d
' C. B" D% w1 u, E) {( O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 v8 n( T( f) |; P6 @6 ~
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ k7 r$ d" g! D9 c( G9 |    mcasp->regs->PFUNC      = 0;          // All MCASPs0 H; Z$ w) B! j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  Y4 R7 h2 j1 i+ x2 y6 P
8 ]. l2 \3 L! E2 F    mcasp->regs->DITCTL     = 0x00000000; // Not used
, G% e8 L/ f% _; u! J- ~6 B& B    mcasp->regs->DLBCTL     = 0x00000000; // Not used( \( \, G2 @7 E- m, m
    mcasp->regs->AMUTE      = 0x00000000; // Not used$ W4 F/ V( D5 |
+ R& o" [* T% J5 Y% Q* D3 u5 y
/* Starting sections of the McASP*/
7 T; U# S" O. `# J6 g1 k& x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. n- s8 H7 h6 Y# ~9 I4 r$ k4 ~; s$ X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 Q" `) r% a8 ^6 }6 D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / o9 m  G7 N- [9 w. t$ [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ k- m2 N3 X: I; n$ C3 n. {7 \
& O+ R, W  U( c7 \% {( s    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' B2 h% |# S5 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 F" S% L8 g" Q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- F! u4 y- e$ @$ E) F9 a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 E: ]0 e0 I# R8 j" C2 H+ `4 |: ?
; P* ]1 d; ~; P* R    mcasp->regs->XSTAT = 0x0000ffff;
. a, b. t0 W# i9 U% G* V    mcasp->regs->RSTAT = 0x0000ffff;
- R$ O5 B1 G' ]2 K+ g' d: Z! E% K) n
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ P5 r' z4 K+ ?" S8 ~4 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 z- h8 X8 o$ e; w
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ Q' W; `8 F  U1 ~6 a7 L& i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% B/ s; `% ~* K( h5 H8 u* Z; g
  C+ G+ @) M9 y) w! h* a: P    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 e* k$ E+ X( L5 s* [7 ~! \    mcasp->regs->XBUF5 = 0;7 e5 y# y/ |* A& k( |2 [
    mcasp->regs->RBUF0 = 0;
- b8 l8 c' H9 R0 D! A% n
) u) D4 E1 }0 |' B. L' O2 v2 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; c* L9 ?+ v" I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ H3 H4 V1 C# _* [9 Y! a/ G    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 Z. i% {3 y* C+ f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) n; N* F4 R/ w6 o

% A& S! A" P5 W& z5 `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   @9 R3 {/ d5 `# o: V/ _" C+ F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( L2 D# }! A% o2 ?' U    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 _8 M/ r5 w* U' C' _8 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! D8 M4 q0 r8 ~8 b3 f

7 O" E% N( ]# o% [; Q9 c* |    CSR = 0x0000;
( }; w0 `* M5 s% ]    INTC_INTMUX1 = 0x3d;
7 ?' Y3 k/ L2 I1 L5 V    ISTP = (unsigned int)vectors;4 ~  i: v0 m% b8 l
    ICR = 0xFFF0;  1 J4 \, {9 t) w! }
    IER |= 0x12;  
- N* u5 v7 `" k    CSR |= 0x01;  
- C; g5 {& V; k  q$ u) ~4 f1 S' H% ]1 S6 O/ u2 n

, y* k- I8 k7 u! C, C: [, s% D- D+ Z7 Q
, q( |; S5 E7 e% @$ g还有就是两个输入输出函数:
  ?; x0 g6 ~: _( A- f( ?8 Rvoid output_sample(Int32 out_data)0 d; C3 {7 z, l1 p* [: ~1 X
{( x4 `& w! ?' a# a/ \" \
  AIC31_data.uint = out_data;  ! \  I7 {/ F1 a. s
  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 X0 @: I- A& c! f! O: ~1 t# V
}
* J  c) @1 ~1 i, r- q  x" X3 [% n# j
Int32 input_sample(void)
) C! K* p$ Q# x- [" U+ u{  
3 y  o: H* B# L/ f- }  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' h* L# P8 R$ \. p7 L1 {% J( v  return (AIC31_data.uint);% O7 k9 f2 U7 ~, f0 E0 E
}
9 O4 T& h$ a0 q7 X8 p" {, l( f+ j) G7 k4 A6 k. X4 L2 v( q# H+ `
分享到:  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-1 07:32 , Processed in 0.040341 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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