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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 h8 B8 q5 l( E# c6 |" e" I. v
main文件:6 R  r' `  [- w( R
interrupt void interrupt4(void)  ! F- a& ]1 P. S
{# I2 d( U" q+ t
  Uint32 sample;
+ V2 G+ s# B( p$ `7 X- x% L$ ]) M, r& p  u& Q9 g0 ?
  sample = input_sample(); // read L + R samples from ADC1 h; k( [* T# y( Z" t2 h$ V; r- `
  output_sample(sample);   // write L + R samples to DAC ' B, b/ K! M: [0 J% t/ }% ]
  return;( C8 f- Z2 d' v
}- J$ W4 F, n. K* q0 @; x: k

* D" A" T" h8 \: C- fint main( void ): s) z; c  @' F$ Z/ Y1 c- N/ E1 m
{2 D; _# F* m# `$ o7 s( a

0 a' f& M3 G3 \! Z( `; p    /* Initialize BSL */
( M' n8 A4 k5 T2 a: Q- {9 B( p3 |    EVMC6747_init( );
* s" t, u( N, S& `+ I        /* Call evmc6747_intr function */( L# A+ S" A' w9 h* i: {
    aic3106_init( );
; N) {1 e: i! s. W) p. S# [7 c% x  ?        while(1);
, J* ^3 H) d; b" d9 }/ [}
. C, j, h8 S+ K1 R/ }% [3 j/ P6 V) d3 D* z. O* A2 q

" {1 ^4 h; N- }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) @9 W; n* o( c% ?/* Initialize MCASP1 */- f. R- s& J& {; M& C
    mcasp = &MCASP_MODULE_1;
' \' j5 R8 a1 h, A    mcasp->regs->GBLCTL  = 0;       // Reset
3 Z4 B$ ~; x1 ~& H6 L; m/ J    mcasp->regs->RGBLCTL = 0;       // Reset RX. U7 |' R' v  H! w2 i
    mcasp->regs->XGBLCTL = 0;       // Reset TX* X: R% g. n5 o" u- F
    mcasp->regs->PWRDEMU = 1;       // Free-running
( P1 J' u4 U7 H8 b# d   // configure McASP0 receive registers
% ]7 r1 z" U3 F# j2 X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 o" N7 W" h  T8 `' Z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ ?$ t! F4 N/ ^- E3 P
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 j3 C3 {: q2 N7 _" t$ I' I    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  T0 x5 n& }& T8 q4 b
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( x* s' _/ S# k* W. m; I    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* t8 d' T/ r4 V( E1 H    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! E3 I5 k1 h2 r$ D$ G  W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) S) \. b( k1 j2 M8 T
$ Q3 n1 O4 C' b' Q" Y* Q& D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# }: }  w8 j( a6 j" i7 r/ ^' T    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ d8 F& Z5 ?" H) C/ |" m% Y5 R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) v0 [6 f- }( q+ g
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" M& o7 X2 l* ~3 V0 q+ n, N7 w$ |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( K8 M+ Q  b: L0 Z9 \+ c# l- _# }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 E, f: O8 l% g4 n" Y& F) l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" [% L8 B& B, v+ T, ?    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- z1 P" a# w2 _1 B! V% m

% [6 @+ p  u% c3 @1 O- K' j% [    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( j3 V- a" y" p7 u' P
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 O0 ?; _7 k- G$ @$ w0 W% l4 P8 m
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) Q1 a& [/ o& B3 ^% _. i3 C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ y& e, U$ |& r( w* ~! ?! W( x  H) g1 O/ n
    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ Y' w2 w( b+ \) b) G# G7 ~( R    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& X2 O/ N( m: Y5 U) o% `* N) w  U    mcasp->regs->AMUTE      = 0x00000000; // Not used$ v9 T5 H6 G6 H: j- x
7 n. N# K" B" e7 o1 C. j
/* Starting sections of the McASP*/: y5 ^3 [( s- L% u7 P) f5 U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: r! ~$ I) d) ?+ V" e3 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( O1 k: |. P+ j0 i, N. c" C. o! [    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * I4 k( `/ }: f7 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# P' q7 U+ j: r
' B& x+ k# _' G6 r. W0 e3 I( u0 Z9 j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 {  j$ J9 I/ [/ @/ A$ U) B  L' a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ m$ a" A  X9 a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( |  S4 d4 _% y6 s1 c! L/ |9 Z2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* x3 v1 y8 F" q" d

' G4 Y$ w8 i: z    mcasp->regs->XSTAT = 0x0000ffff;
* X7 h) q9 _, o  S( s    mcasp->regs->RSTAT = 0x0000ffff; + t& O9 P2 h/ q$ w0 s% n
  I0 ?5 d! }/ r8 d. `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 {0 o- S! \  Q: v3 v: z( R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" {1 B; q+ I6 J6 j$ f9 v
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! |0 e) _; D" k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 E( S$ h' f9 g, ~3 @  {; ?' d

' O, E5 I* G7 R% J. h' \8 V    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 E( i6 c, g' d$ q    mcasp->regs->XBUF5 = 0;
9 b1 T& F5 o* z7 P    mcasp->regs->RBUF0 = 0;
, `8 ^8 X# L& R5 z. Q
1 N1 b; R1 Z& m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 l) S) A  p- M, [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' o8 `4 W" Z$ y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 z, X# Y, w; L5 `5 Z$ X( d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 s6 |$ k* K% Z$ n6 M) v9 O
2 S: @$ g8 c/ N( |9 f
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& q1 @* }1 H2 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 I) _" d) a/ I" U+ N% ]) e8 u' N0 q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 W/ L* Y- M$ n) q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# ?' r/ F" O, g5 Q9 X
: Z% a4 u; h" |8 i2 z1 t  k" z6 O    CSR = 0x0000;5 l- N. F- X( ~! v$ I1 p
    INTC_INTMUX1 = 0x3d;
( n# L- n6 G0 w) `    ISTP = (unsigned int)vectors;
" y% V: P0 {1 X4 F    ICR = 0xFFF0;  
4 ]  f  M: b4 q; V1 @: C7 z- A' ?, \    IER |= 0x12;  5 L& q+ z0 \) I7 ~+ e6 ?8 S
    CSR |= 0x01;  
5 ~  \9 ], D' K6 v* O4 x; J
( T$ f9 E( h2 b5 i0 w6 _0 {: Y' ~' x3 D  K

! p0 P, ^" }. o0 x5 h4 ~还有就是两个输入输出函数:- D  ]3 Q/ ]& I4 `0 Y7 U7 R* z
void output_sample(Int32 out_data)
8 @+ E4 r' P$ J{0 d  Y9 N7 s, L& r& e7 {
  AIC31_data.uint = out_data;  
  G# x) S& R/ q: a  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) j" ~' Y5 P: Z8 s9 F$ s4 n}
- J4 G+ N6 {5 R+ d& W& ]- J9 G# Y" p- D( x3 }: l9 n
Int32 input_sample(void)6 X8 T- t2 J9 y/ H2 d( ~& ?
{  3 Q, a+ }4 o3 N) i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 B& [5 X2 b1 T# A  ^  return (AIC31_data.uint);
* L6 @. Y1 R; d& @# I7 r4 c% A}
" x8 [; L* _! X* z7 r# U, v3 E! ?0 \. W1 C# i0 @
分享到:  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-17 04:15 , Processed in 0.049396 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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