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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 ~  |/ k! S5 Y3 c
main文件:, Z1 a. a3 L" `4 E- m# K& ^; Z% z
interrupt void interrupt4(void)  
, U6 [: d! _3 C1 K$ o8 {8 d) W{5 o& u5 u3 ]* ]
  Uint32 sample;
7 Z; f+ J7 K. `4 U: j4 V9 [; i% R0 v! q$ K  v4 ]
  sample = input_sample(); // read L + R samples from ADC
4 g5 \% R. m: N. M  output_sample(sample);   // write L + R samples to DAC
" m2 s/ b8 s  N) b6 ^& @7 t  return;
1 b! @+ S6 N! w% ]5 \}5 ?/ h1 K  j2 h6 o  l. g/ L) _6 E

& H5 s" ]! x* g: rint main( void )
. |5 U, L2 t7 U5 g) |- `' ?{* U( \+ B5 O" J2 }* B1 ~, F
* B; K; W, R7 Y+ E1 E, M0 w
    /* Initialize BSL */) Z! L! A+ j  ~
    EVMC6747_init( );  z5 \. @0 a9 [- Q+ d. {
        /* Call evmc6747_intr function */
2 W3 J) [( J$ Y( |8 L6 e+ W+ v# }    aic3106_init( );4 g) L0 |1 T! C) f
        while(1);
3 n, w7 n' ^) N5 T, m, K! P}
6 [6 V  S: l% a  z: C1 y- c% d
! f6 C8 f1 i' W) }# C; c
4 u! J1 X/ i7 G" H# ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) G3 }; g: o* |( O, w# ~/* Initialize MCASP1 */" }. X# C; w* }, u2 C, W4 c
    mcasp = &MCASP_MODULE_1;
. [- j# O/ x+ ?- w* }; y    mcasp->regs->GBLCTL  = 0;       // Reset% }# K2 `  R2 `- b9 ~7 i  R: q6 Q) d
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" Z9 x2 h1 y" K. |2 R    mcasp->regs->XGBLCTL = 0;       // Reset TX
# A9 i6 b" @: N, X& w  c    mcasp->regs->PWRDEMU = 1;       // Free-running
3 E+ m0 I! w. n2 k   // configure McASP0 receive registers( R5 T% A% B8 b& N+ w6 ?, `# c
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. a' v% v/ d0 u. Q- g: l1 P) j    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 F) H. W) P/ P    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  c/ |/ N& N) |7 ~
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). J8 s' X( O+ K) R1 T4 s7 O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ i( t2 p, T* E* N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: u0 m. b( w9 E
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* k# P6 W' L7 B: x5 }0 a
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ^4 n0 E% g/ i- K
% l+ s6 `; `% S# [2 @' `4 g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) N9 w9 i$ I" k6 J& X0 Z3 U# M    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- L, n9 m/ n2 \3 C+ [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ D& I' H2 f7 P9 l
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 S# s6 {3 d$ L$ f- h, f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 B* ?# B9 N) K  |9 t    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, L% ], j+ n  E; J( S/ g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 s8 U, O* p7 i$ W$ K9 D    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 P( A* `1 S4 x0 [6 h# z1 P9 ^

/ G' h1 U' c! ]# I' S* K    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. L( p' ^- \- R1 \7 C) {- R. L" S2 {% K, r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. f. }6 ~2 P" r( i, u
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 Q: t9 h! u% |: ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" s* R+ j7 D# M# T( s
( V. _( f8 ^1 I% S, b# J5 H6 d6 W
    mcasp->regs->DITCTL     = 0x00000000; // Not used& a3 r  o+ ]* z- ~
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, I, D( C4 O. s% C2 D- v
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 g- G4 i+ P+ @2 p
7 u* O* I; h" J, n
/* Starting sections of the McASP*/
( F8 l2 @2 ?+ |( @2 q2 L    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, f5 b' _4 h4 i/ h' \# A8 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 ?5 F( V- C% h7 A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) c  s7 L* y7 b4 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 H( j- p5 Y4 P  c. v: R6 X# U2 r
3 O4 u! b9 ]2 Z0 s% P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( h# J' \1 Z6 Z1 q  Z& ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ O  I; g, E; g/ f$ L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% H* n5 f' p1 M8 @  y3 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" f. g% v  [  i  y+ n  I
9 l$ @  b6 _. Z8 h7 a$ a    mcasp->regs->XSTAT = 0x0000ffff;
* i, a+ ~& ?/ v$ [0 F7 e% d8 o    mcasp->regs->RSTAT = 0x0000ffff;
6 T. ^3 n. R- ]' a% R5 U: J$ Q% q( a* k9 z, ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" W7 E" K' C- q/ Z; P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ W  O! [  J! t, O" Q3 z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 c6 b5 x' n, a! B4 n" W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 J) A" e1 b* |8 B
( R& J7 O! D' `1 y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 @( J7 c7 e- J+ o5 M& A2 P# K    mcasp->regs->XBUF5 = 0;; y# t$ y+ @$ H! V8 i
    mcasp->regs->RBUF0 = 0;
& v/ [" m+ U2 L" L7 o/ M& H7 ^7 F6 L- P, ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% T& c: S) w1 M7 X4 C  [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& ^5 H! H4 h% ]: c4 B  k' \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. f: b& |# A9 v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 T, L% @) e0 S8 l) q1 f1 D/ L. _* {% l4 E' U  Y/ m; e
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " F2 k: Y% s& s% b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 r8 u' r) j/ Z1 m    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 _9 P3 z, A3 E' w4 `; z$ w) q, v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 n, r7 d( j& O( u7 T$ V3 j2 X  |

* @8 E6 c; `. R' A- u+ [3 E    CSR = 0x0000;
% W) S5 u3 @& ]: g    INTC_INTMUX1 = 0x3d;! N! W" c7 l6 W8 O2 o
    ISTP = (unsigned int)vectors;' V5 ^4 ^, o& g( b# m
    ICR = 0xFFF0;  / T8 K+ p7 k8 J- S: F6 U% k( q: Q
    IER |= 0x12;  0 U; x. V8 g! R
    CSR |= 0x01;  
! {9 U' b$ |4 r0 n7 u& u( e
$ C. l4 I" o8 F; w8 J
" ?: c7 s1 e- @! f$ z/ I! ?1 G. D3 K3 ?' k$ G5 i- H
还有就是两个输入输出函数:9 o5 V' y0 W! q* R* z) k' Z+ u
void output_sample(Int32 out_data)
$ X2 f' _# r8 o. i{6 N7 C6 a+ ^9 Q& j
  AIC31_data.uint = out_data;  
( a0 v) U4 r, F* Y6 r  k  MCASP1_XBUF5_32BIT = AIC31_data.uint;& G0 X$ {# R- b5 I% [
}4 ], a* x9 e* k% n

$ B( r3 U# A& G/ G% A5 _( I2 O9 JInt32 input_sample(void)
" h& V* j9 f5 n1 u, k( H{  9 {3 z+ @6 `: i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;- C2 |. h) b( a9 ?
  return (AIC31_data.uint);
$ d5 X6 L- f4 {* p' V% K}# }/ m" y' j# }+ T
# F; L0 b5 S$ W! T" ~) e
分享到:  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-1-25 03:49 , Processed in 0.041225 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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