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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) _  \- f! d& V; B3 G" H3 T) k5 y
main文件:
5 T; P6 F( }! A; sinterrupt void interrupt4(void)  
& `2 n+ l6 z1 _  A* T1 y+ }9 T! X{- a, W0 |0 V6 r# F2 a, ?6 a% v
  Uint32 sample;
, w; t* z! ~* Z$ S& }/ A2 E* G# t: ^- K. U! r3 u& \6 l
  sample = input_sample(); // read L + R samples from ADC: a5 p8 u7 Z# p3 k( u; B
  output_sample(sample);   // write L + R samples to DAC
, N- x3 m9 L/ c# X  Q5 L. ]# J& ]  return;9 R3 o$ B5 Y7 i! u' r( c; E0 w
}
9 _* m1 {9 K- ?3 K* }; J
$ F5 _+ c8 T6 J0 Jint main( void )5 y% c: y0 t+ z# ?" Z; p! I" Q7 j
{
" A/ L. ]: [0 L# t9 C
0 c) @% A1 Q( y: K% g+ T    /* Initialize BSL */
/ q- \9 z/ a4 @2 f    EVMC6747_init( );
( t2 H: Y' w/ s9 i) H5 U% J        /* Call evmc6747_intr function */
2 ~4 ]3 S9 P4 x% c; M1 P    aic3106_init( );
; U& {: B6 ?6 @        while(1);4 V" b2 a5 ~. s2 g# {
}: Z0 e1 o0 i9 [- @8 `7 @

- U$ V8 S7 V6 U' r9 p* N4 r
! g: J! f3 `& kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% i" [4 s# b, g
/* Initialize MCASP1 */
3 w" Q% A# d* p. b! b. N    mcasp = &MCASP_MODULE_1;; @1 ^9 Y7 c6 ^9 ~
    mcasp->regs->GBLCTL  = 0;       // Reset9 M  |' w, e. o8 w. o* m; Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 e3 W) C+ j0 O0 P    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ d# P% _( m" ^: j: a+ G    mcasp->regs->PWRDEMU = 1;       // Free-running7 q. ^, q2 n8 P! J0 r( i; A  K' v# Z
   // configure McASP0 receive registers
) X/ P9 X. `3 q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) S) A+ E5 O3 g4 B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 u6 y4 {/ G1 F; |& ~    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 Q) H4 ?$ Y# x' t$ q: j2 t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 L3 P, \3 W& B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* K7 A( h; T: `, i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 B/ l% M/ S. j+ k; C    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; }5 W8 J+ Q! J4 ~7 P0 |2 y% a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% k0 [# u. T: a! u* {6 w

" b4 l/ {3 C1 `; E7 a7 Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' H9 I6 @  S: b9 c  r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' h! u. f4 c* p/ s+ O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# B1 a! X1 r$ g! V6 H5 L0 A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- C3 r8 y# ^" E$ l5 A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ i7 e6 B3 Q5 _+ N4 K8 j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 V' E& Z" |' a0 A$ h1 g7 ^! B    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& m7 L' F- m, C) {
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! q+ ^& P) W6 R* Z7 \( z

! x( E( P' s* b" s- f' k) }4 P& L    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& V6 l0 G3 _/ F! l) u
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- {* ?1 `, z, |. L( l- `8 J, G  L( ]    mcasp->regs->PFUNC      = 0;          // All MCASPs
( O4 }8 U8 v- H9 L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; E& X- [3 N7 G1 r% q# W# B: J; I: h* w7 v: e# n" ?- X* b8 v4 S' d- E
    mcasp->regs->DITCTL     = 0x00000000; // Not used% o7 V5 P  K" n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) L+ i# k; u- S5 c- m  a    mcasp->regs->AMUTE      = 0x00000000; // Not used
* d  P( y/ `' b/ F( X
9 p' s& T* h& M0 z- A* I/* Starting sections of the McASP*/
; b. P2 z# x; _, J2 M" N8 z* ?5 Y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 X5 t7 O, l! X3 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 O  t, a) i& M# M    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! e0 X. A2 F% {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- z) V. N( |# ?5 k; V- ]/ n$ W$ N, E6 z- ~0 K* d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 p3 h: a' R# C7 S. r& U2 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ S9 a/ h  Z2 {    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ^" j$ Q# g: ^, |- O1 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 s+ K, l- T0 K& F1 c
0 }: j3 Z! [9 w, J3 W
    mcasp->regs->XSTAT = 0x0000ffff;
$ t1 m" P- i0 }3 a* y) N: z4 Y    mcasp->regs->RSTAT = 0x0000ffff; . L' y$ t3 k  Z0 _- Z; i, D
- T* h1 S3 q. c  a( l+ b$ C
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* a! u2 h& e6 y- \2 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 u0 L; {4 j* O' o, J0 r" z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 G) u$ f. ~. \9 V+ E5 Q1 Z- E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# O7 i. N* O, w4 P; t0 Q8 s+ x9 Z+ M
    /* Write a 0, so that no underrun occurs after releasing the state machine */$ c8 M" U4 o! s5 Q% U% x
    mcasp->regs->XBUF5 = 0;
2 _9 g7 {" L( \9 q/ s    mcasp->regs->RBUF0 = 0;
9 C; u' d1 A; f# r. m- S
( L  ~2 x- S& I3 }! e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 e6 a5 j2 o! b1 c. p  S& p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ ^* K4 R0 g+ v' L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   @$ o7 W4 e- W( q6 e% S% \+ {7 d% B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 ~0 `. e7 y) P7 [0 W: X

) d0 r8 B/ ~7 u) h* J. D) I    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( O1 w/ g) W  H7 Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  t  i& O$ V9 a2 K; z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ X% e% c. j/ C0 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. }* y, E. s9 Y2 I, U3 _$ y% r$ x

4 z% T  q4 w; r$ e+ y    CSR = 0x0000;
% }4 }) s, B4 N; k5 @    INTC_INTMUX1 = 0x3d;
- O. W2 \# N' l- m) [# q/ |    ISTP = (unsigned int)vectors;6 d5 K0 v+ e2 n( ~4 a
    ICR = 0xFFF0;  7 k+ `) E( u2 S0 T4 ]+ f
    IER |= 0x12;  
5 B8 N% U8 k$ ?, Y& \% b    CSR |= 0x01;  
, e+ [* I1 J" O1 N6 N5 K& `5 @, _$ Q" }3 W4 q6 ~9 s: A0 f

$ T. n2 J. @, j8 u% c
3 b1 B5 ]( {/ ]+ N" O还有就是两个输入输出函数:/ l2 @$ A0 {6 n
void output_sample(Int32 out_data)
+ Y$ e+ D, {: C! s; y{# r5 N  b& j% n2 {
  AIC31_data.uint = out_data;  + J0 Q9 G, G0 j. Y% l* c
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% i0 Q+ v- |0 M% \! B}
+ M7 A" R7 j! t3 j1 e# z) p% _4 Y
Int32 input_sample(void)0 U6 q2 }3 `5 I7 R" F1 o* _. m$ M7 t  g
{  
: a8 Z" Y% t7 B5 |  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 a6 i0 B. C: B# d" c, n  return (AIC31_data.uint);
" h: ]  Z. N5 p3 z; B8 S}6 e* R7 n/ q! Y& t* k6 V! O

& S4 m9 O( F' d* @) {' B
分享到:  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-4-4 20:49 , Processed in 0.039525 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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