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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) Y" F) G$ e$ i7 h
main文件:
! X  L' c: L5 z, j0 Uinterrupt void interrupt4(void)  
( ?4 A6 Q4 v2 g9 b5 {{
& S! O% @  q1 A3 s; c! J) A  Uint32 sample;( u" t# f* d4 V1 L# N! z

9 f8 s0 ]5 Q( c$ r5 X. J! d  sample = input_sample(); // read L + R samples from ADC4 r' z) j$ Q/ N- g/ \% W! S4 f
  output_sample(sample);   // write L + R samples to DAC
8 D7 r" F2 S  I- J! r  return;
- @& G% g% c" ^" V* a! X! j}
: p( \1 _3 V( f' @$ _
) R1 l7 }8 E7 o& ?( r- oint main( void ), }& M6 Y1 z8 o1 U' J+ ~
{
. Z3 s! W3 m9 @1 d
; X7 V! A; K/ H# `6 f: G5 B    /* Initialize BSL */$ \7 U( A! V% C
    EVMC6747_init( );
$ M# A$ w/ F5 e0 y        /* Call evmc6747_intr function */
' X& X6 ?$ U7 N. S1 k3 Y, v    aic3106_init( );
- F! F* h* Q8 B, j$ Z, Y        while(1);8 \- }& c! K4 ?* s
}
4 f+ L$ m1 k0 }# v# _
  l9 _7 Q* h1 N  R8 H; D7 H+ Y
+ h7 T/ K( a% R! j1 z7 Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# n7 ?/ n& O, K& y  [; y/* Initialize MCASP1 */
( b' g! j1 p1 }; [) p  i    mcasp = &MCASP_MODULE_1;
! R" @; F' _' Z/ \& B8 Z    mcasp->regs->GBLCTL  = 0;       // Reset
% D$ l6 y+ A% s% H    mcasp->regs->RGBLCTL = 0;       // Reset RX7 S  T, F# }3 t
    mcasp->regs->XGBLCTL = 0;       // Reset TX, x/ R) T9 ]/ u* S1 R
    mcasp->regs->PWRDEMU = 1;       // Free-running
+ D3 X  O: C" ]/ R; n   // configure McASP0 receive registers
& a0 v) I# k; Q7 G# P9 x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* m* Y) [2 O' }    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- V! H9 l3 o) W* O% v3 }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( l) g/ L  q5 T0 f/ f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), w" v# S) c( f3 V# g
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 G, V' W: I3 R: ]+ G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; [) m( A5 J+ K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- X$ y: ~) j7 v  ~- N8 B2 \    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 Y4 d& O, N! f8 X6 E: e7 @: l* P4 }! ?' d- o
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* I& K& R' z' l4 B    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& V; _" Q, Q& Z  x+ I2 Z  _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! P" E/ o/ z8 F4 q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' ?' N+ b" b+ F, ]: S  i  T; @) ]
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ c& r4 Q  v5 F- L  l" r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; \/ q2 X3 C. Y# G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 V- X2 w" _2 n, y2 J3 l    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- I( ?$ ]$ Y+ ]" d
; |* O) ^3 ?6 {' H3 T* ~+ \1 w    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- r8 E9 p, e# ?
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' ?" o) N* [/ j- {- c
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- `# e& q6 A/ H; I0 \+ v' u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" |6 U& L; S0 q; N  f/ N3 L" ?& `/ W
    mcasp->regs->DITCTL     = 0x00000000; // Not used9 H5 }9 H8 B( U9 h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' \1 p  v6 Z: _; I* `, U8 m
    mcasp->regs->AMUTE      = 0x00000000; // Not used2 q5 ]' G: C: F0 a0 I4 X

, A/ U% \! b/ o4 G7 g$ W/* Starting sections of the McASP*/4 H% N8 }3 z, C6 ~  d# q9 \$ t
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 o0 v* \0 y, Q. T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  H3 S* L& i% o7 j3 f' R* _2 j    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% t8 L6 D$ w$ E# X4 ]1 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, G; x3 T* K  {$ C/ K1 I' @; c7 y/ f5 F# M# c! r, H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) X: O1 f. Y. r' c& Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: J! |/ @0 s! M
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' ]  I% R! t1 R2 z9 G5 Y, S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# G  D! I  U7 \, t3 f" O) n8 E9 c% `  k. a
    mcasp->regs->XSTAT = 0x0000ffff; 6 Z* r; r/ C* S/ j3 T- w
    mcasp->regs->RSTAT = 0x0000ffff;
+ j: o+ X4 G1 ]
4 ]9 M4 _% G; F" `; f0 V" B    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ~' O9 I# S- k0 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ L1 a; T9 Z  y- ?: J    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% i  r) e4 V2 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 q4 }  |7 |# t
+ C/ k9 G9 \7 z% p. O
    /* Write a 0, so that no underrun occurs after releasing the state machine */- p: I7 d7 R7 e
    mcasp->regs->XBUF5 = 0;
% o5 c0 r: L! O' W    mcasp->regs->RBUF0 = 0;  X3 ]! s& n) G  u2 R. @3 C

& i  s- L' v/ B1 L& p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ Q0 I4 x- \* r/ i1 h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# ~8 F, M  R9 T3 C& q+ m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 v6 k, ~/ A" f+ _7 J# `# m5 P, \) P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  k4 T: P7 M9 q

" V4 A4 q" o! l4 \- L: T2 Q, L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) G4 O& x$ ?$ F0 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: ?1 y! U& ]& E+ ?" T4 Q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; l1 v5 E: k8 U  {# s2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) [6 g! q; c3 ~* ]1 L4 d5 o& }# O& A0 K! F/ g2 u2 Z7 \- {/ L2 O
    CSR = 0x0000;
! N- e/ y( t, R, }. n& N) {    INTC_INTMUX1 = 0x3d;* Y) p% v- Z) o0 A" V- ^- t
    ISTP = (unsigned int)vectors;) [( F( z& P8 Q$ Z& H1 V& b
    ICR = 0xFFF0;  
: I, _( _2 E( {    IER |= 0x12;  $ w2 H: t* F7 [
    CSR |= 0x01;  - u' F3 y" u% p% b- v2 b

0 h/ B2 e; W& g( }; u4 B+ q3 D( q  _% j8 E1 O$ c, u3 ]8 N
# G# M# u3 L7 c) U) o$ K
还有就是两个输入输出函数:. c( p* [4 w- e- C3 n/ U
void output_sample(Int32 out_data), U7 k& H6 H: R/ H8 ]
{$ f% W2 ]3 c# b  r: H* A
  AIC31_data.uint = out_data;  7 o1 c# t) k4 R+ m3 I" `$ v
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 f6 S# P; b& p}
! y+ O8 l* H( E3 r5 I
- T2 ^7 y  s/ k: F" }5 N9 BInt32 input_sample(void)
1 I# U9 q- q# x- _( E5 m! `6 b{  % C5 n# _5 F/ M2 z! _& X* X
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: H0 B7 ?$ a1 Q% ~" z5 r# ]& G& Q
  return (AIC31_data.uint);
, ^" G& }6 n* p3 I}
# h1 {! `3 P9 P( K' d% H! p. u& X% K* [5 R0 ]8 X+ P
分享到:  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-11-19 15:38 , Processed in 0.038446 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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