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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 S. I1 ]7 H) |% b/ n# K( x
main文件:2 |& i" k  X- ?" M( c/ d
interrupt void interrupt4(void)  
5 h6 _& L( b( J" b2 N9 e. v. ]+ V{
  i8 V0 R+ i7 o* R  Uint32 sample;3 Y. ]+ k/ S3 p4 ]

/ [- V* r8 Y: x' K! B  sample = input_sample(); // read L + R samples from ADC& J0 v. Z$ V& e0 k) k& d
  output_sample(sample);   // write L + R samples to DAC 2 j% T; [! W4 O" ~: `
  return;$ K! `3 ^8 Z# V$ Q
}
8 x: C) {% I0 v3 M( J# d! M3 t( h
. j3 Y& V" C# W9 x: [+ \6 tint main( void )
& d4 j% s: ]8 \{
$ \# t% A+ }6 @: M$ S) `2 q9 Z# C1 I# h: [( H- o- N! x3 x$ U
    /* Initialize BSL */3 `$ J' K7 C3 b6 n# O
    EVMC6747_init( );! s% j; [' ?9 y# {
        /* Call evmc6747_intr function */
7 c# V9 ^( m1 _7 v4 A    aic3106_init( );
; C) q; ]! P& {/ J- k) U        while(1);
! C3 L( W4 P; g  n6 z}, W5 Q! \* u( B$ {; P2 k

/ [( e0 I) `. A  e3 b
$ F7 D- P: m1 k% Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) U6 I4 R, T5 y5 @, I
/* Initialize MCASP1 *// e! ~2 H0 S: P  \- `
    mcasp = &MCASP_MODULE_1;
" `. k2 u" K& V  T; @    mcasp->regs->GBLCTL  = 0;       // Reset
% m( [& H% z$ i( F    mcasp->regs->RGBLCTL = 0;       // Reset RX
* o+ E4 g8 e! f( \4 @& Q) T8 g& {    mcasp->regs->XGBLCTL = 0;       // Reset TX
  I$ o  ?5 Z4 B5 U    mcasp->regs->PWRDEMU = 1;       // Free-running- `0 q. x5 a  j6 ^* w( J* [- Z
   // configure McASP0 receive registers+ t7 O% R8 a, w9 X& I# V0 z. ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* u. G# Z: q' b, k# l% w
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ j3 i+ ^$ k; O8 P3 u5 ^8 x
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( a* h  `0 b! `$ _3 N- i
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 K9 f9 P7 k; F; E$ m    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 ?+ [& O; K' ^9 M! w* a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' R" z4 A: Y; G
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; w8 n( _8 J# u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 h+ k( q; G: O) N7 Q2 f
/ r! V+ t( r: N; P" G# b0 i  f) L, l    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 ?$ H: [- F9 A  w; x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& I7 v) V5 ^$ F8 g2 ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 N# z/ K& H4 p2 h    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ n: v. U. \6 `' Y0 s5 E* b    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
9 T  _3 a$ D- O: K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 l( G' ^' K9 ^    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" P9 K, V4 D3 e# s) M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 {4 W4 q: d6 w% r

5 g) Y% g# I/ b    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ g8 K) ], z+ s2 {* S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! X& p* a; e  L7 b/ @
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ C4 X6 {0 P5 w1 ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 L0 c/ M* j! d" s* D, W
  }8 ^6 X; J1 Q5 [: W. q- `
    mcasp->regs->DITCTL     = 0x00000000; // Not used  n7 {- t$ \9 V; i/ f; d, j4 H
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 m& S2 A1 y" ]+ ^5 Z8 Z4 m2 Q6 u    mcasp->regs->AMUTE      = 0x00000000; // Not used
: A9 g8 M- ^# p8 d/ j. [4 b" u; R% p( Y: Y
/* Starting sections of the McASP*/
* s( e! P* Q. e2 _1 n0 e! S7 m    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 V( D. J9 _7 m4 w: d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - ^2 a6 Q' \4 Q# \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! H3 l% G2 B- _* k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ h- r) p8 D" }0 p) J% t& T! y# {( D( }' W7 l
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' Z3 T6 t5 F. o' m- j7 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- H5 K7 l8 B. c2 W. c/ I, L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # Z1 E* b& N! s7 g' j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) X4 n2 q& B2 U+ Q7 d" ~$ X. }5 g/ e4 Y8 k) {9 }- T$ j) @
    mcasp->regs->XSTAT = 0x0000ffff;
" H! \: v7 ?" L, U5 p" B, b    mcasp->regs->RSTAT = 0x0000ffff; 0 U4 y3 l6 Z- f, {2 f

0 b9 S/ M" _% C    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  ~- s& B3 W! w0 j8 [, P& l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 ^1 R7 T; S( a1 x
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; E$ i7 d. k; Z% f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) v2 w' B7 ]) Y# H! j; \( J/ }: o, ~5 k6 P3 o
    /* Write a 0, so that no underrun occurs after releasing the state machine */# i! M& V2 ~5 r( Q* t$ a' m
    mcasp->regs->XBUF5 = 0;
0 i$ h( T# v7 h( i9 F    mcasp->regs->RBUF0 = 0;9 `* L5 B, a  y0 [; h
. N! W4 A1 [: c/ ]- ~/ l- j: B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 h6 l" W: ?4 ?0 p# H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 s! E& w2 }+ `0 ]    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 W' ^; a. G' P- k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, J; ~6 ?5 @' ?2 t* E

; F/ w: ?2 C( x2 Z8 W: K* [% X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " q: o. \8 o$ q+ C1 J, p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) J: r+ Z1 g( m4 _  U- U    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " J" k# p- U$ c4 ~8 s) O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 v$ t/ z$ {9 q4 ~( _3 U

0 W, M0 E" ?% ?1 R7 C9 h    CSR = 0x0000;
( ^! w6 f5 v4 l9 w- {0 g$ l, a    INTC_INTMUX1 = 0x3d;2 ~3 R) V. A' b- k
    ISTP = (unsigned int)vectors;2 _- U9 i+ s- `, Q
    ICR = 0xFFF0;  
: a* l* I( h4 O9 z/ e! b    IER |= 0x12;  
/ H3 F* b5 n2 C2 U, ?8 I    CSR |= 0x01;  ' l" d3 `* O( T6 R- d3 V8 g! F

, Q3 N1 N- ~! R$ d7 T- R, \' T0 M$ V& ^' N
: B* y& v7 f* W4 d  q$ \( E* P% o
还有就是两个输入输出函数:
: C6 {5 j9 D' s+ X5 H1 |3 K6 hvoid output_sample(Int32 out_data)' X" O2 V* w4 E; {  b
{
6 Y/ {( y% W9 \* D  AIC31_data.uint = out_data;  # w0 G: r  P/ W- Y: |% M% b
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 S& n/ ^8 b+ [}
& c6 n( X0 Z8 h: s& z5 S% L
# K/ W0 p$ Y: e* dInt32 input_sample(void)
/ L6 @5 q  Q& s+ b( R2 _, K+ [{  $ }! I. }' d! Q1 B5 D4 q* r
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ c4 j, E6 j' k" `  return (AIC31_data.uint);
5 O% x0 m% D! U" \. f}
% ?* |; c( F; W+ _4 b: L5 ]% Z3 L$ W- V% F+ Q& D
分享到:  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-22 07:28 , Processed in 0.049775 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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