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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; i$ B/ G3 `- W  ?& l+ e
main文件:4 w; H8 g+ h4 w5 R) B$ S
interrupt void interrupt4(void)  $ {6 U1 H7 D- x+ p- ~) D  b
{
, \" }. X) H. l- `  Uint32 sample;
5 }# T& M9 D* L" V+ |; W7 ^/ Q# _& Y) |- X
  sample = input_sample(); // read L + R samples from ADC
: C  t, J- ~. O4 t5 ?  J  output_sample(sample);   // write L + R samples to DAC
& a6 q7 c2 F9 \" o& n. u% s  return;* @$ ]4 n' m# l/ l$ F
}3 X; V6 y; i. }3 a( }( X
. [6 n9 c9 {- @6 e9 i
int main( void )
& Y/ y2 R9 O. {0 b* F9 J{8 D5 G/ q) l$ ~9 p& x5 g  E

" a4 ~- S. h0 T) k* b    /* Initialize BSL */9 D5 @! _. _' M( f
    EVMC6747_init( );1 z) w$ I# _; z% Z% Z  j1 t. h0 t! H
        /* Call evmc6747_intr function */4 M( y# q* ]1 g2 w! h4 j
    aic3106_init( );' b2 m: m& _% a4 Z
        while(1);0 x+ f- |/ E4 H' q) M8 w' @( m
}
# P+ i8 b7 I6 W$ D. ^* |* g3 |0 Y6 Z  J/ N# l. U) X* t

1 v. Z2 s4 T- _0 R( \  uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 @- a" c3 i8 z: b1 z; z' G4 A, U" R
/* Initialize MCASP1 */
7 X1 C! P  u4 s    mcasp = &MCASP_MODULE_1;
& ?! U+ L2 K6 ^' }. m    mcasp->regs->GBLCTL  = 0;       // Reset
: g2 l! r) J$ O    mcasp->regs->RGBLCTL = 0;       // Reset RX
5 Q( i; R3 C* m2 s8 U    mcasp->regs->XGBLCTL = 0;       // Reset TX
! p* u" u( A3 G& k: J    mcasp->regs->PWRDEMU = 1;       // Free-running
5 k( _5 M( o% w- j: Z   // configure McASP0 receive registers7 B9 e) B- \( N  M! {; d, ]
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ n6 K7 r% ~# W8 i. l, ]* H    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, U# T" K; K4 d: _- e; p; [    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 X5 X: r: }* C; }" F( Z6 Y+ K9 m7 F    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! `5 v8 J6 X, |% B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 ]2 e; s% x4 @% Q6 ~    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; N: |3 G3 n% n. q6 O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: N5 Y0 N" i4 t( B: ^* t    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* _8 K; Z+ l" E- {2 }
+ ?) ?2 @$ S" d, b. P: n4 R/ P; ~
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 G% B, ?5 o: e- \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _- K) n2 P8 f/ Q/ X" i: U
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 ]2 n7 _4 ^% Q9 P) o" J$ M. E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 H7 W' Q% ?% i3 Y3 n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 x( p8 p+ F. z/ S9 ]: r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* E6 L# ]3 h$ H8 f! A    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% f, t% C- E; c3 D5 u% S& h' q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- {& u' D: |+ q9 l* z: ^) n& |" |' V  x
' F) }  f9 ]$ n- f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; o: r8 Y7 T" W0 \& R$ Y0 z+ M    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; x& H6 E7 ~/ y, |2 }4 b4 k9 R    mcasp->regs->PFUNC      = 0;          // All MCASPs  a) O  N$ Z. V. }) ]3 b) |
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 g& Q$ k! Q" d8 J- _3 R
  [, [4 X, [& T1 z% a+ d: y
    mcasp->regs->DITCTL     = 0x00000000; // Not used) E& d+ w, [0 S% z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 z( v, t5 \& h3 S; B7 z* F    mcasp->regs->AMUTE      = 0x00000000; // Not used* k4 L% f" T9 A  I' N
6 l7 X4 u! Y  z: u4 C1 M  R
/* Starting sections of the McASP*/
; q3 }6 d) V, L% o0 y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & Z- U( C- K+ A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % H+ v: O) ]1 W' X! P/ F
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 z% _% l# {0 e' X. d9 v# l8 E% b/ z6 z0 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ r1 o' R- X9 W! M& V
1 l( s2 Z: b' A5 o* I* h) h: n# ]! M
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" G0 X6 H  g5 N) x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 s5 S9 {! r1 V+ o/ G    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; }- F5 Y! p/ X* A4 _' X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 L# x. [/ \. n

$ [7 y- c4 @1 ]: `* W    mcasp->regs->XSTAT = 0x0000ffff;
0 C3 C( I4 B7 B; A* K0 X" o" ~    mcasp->regs->RSTAT = 0x0000ffff; ! i: J# `# T! x% @; a5 J# d2 V

* O5 y) M( n4 C  v    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ ~6 M: A. _% ~) `  v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 z& d9 Q8 y; Z  a! `' q1 H
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , r) k" w* Q' m  i5 U6 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 y% e8 B# y, @5 V  T5 \0 ?
/ }2 `+ Q8 r7 D: {* ~
    /* Write a 0, so that no underrun occurs after releasing the state machine */- R2 K" U3 `1 i" q7 d  r
    mcasp->regs->XBUF5 = 0;
6 J! ^# }  i: i2 O5 R3 @    mcasp->regs->RBUF0 = 0;
8 u: B6 s3 E7 H& ~% A9 y/ T2 V9 V" o" \+ e8 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % F& e( a4 Q3 {0 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ [" P( u/ ~1 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" u7 J. h; i" ]5 T& |* F2 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) V: R  }- Q. E3 }9 L
- K( U5 A- {2 n1 w5 L) O
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 n$ I* {: q+ G" w3 [/ A: u2 R2 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- a  A& I7 r. K: C: G+ X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 V6 w: P+ _2 G$ }: U2 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 }: m+ ^$ b. [8 G

' w. o; A6 n( h    CSR = 0x0000;
- e) S' x* D2 y5 ~; w    INTC_INTMUX1 = 0x3d;
; b5 k9 k5 ?4 G8 z/ q    ISTP = (unsigned int)vectors;7 T! d+ I3 p# J- \
    ICR = 0xFFF0;  ' C+ X  g; F1 I1 [
    IER |= 0x12;  ( K% b& w7 P& c
    CSR |= 0x01;  
* k4 Q% i4 ^3 C6 S4 t- H6 X% Z* S2 Y$ [2 C( y# q+ q

: a$ {! C% y9 C' v& m& t
' c. V2 n. u9 u还有就是两个输入输出函数:
. j; `# a# `, x8 xvoid output_sample(Int32 out_data)1 @6 `8 `0 Z. l- \+ W1 D
{
- i' \. m8 t8 U$ B  AIC31_data.uint = out_data;  ! U" \; ?6 p1 o3 ?, U
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. ^6 m7 P6 W( \/ f- B$ A8 B, U
}3 r3 @( C, a$ x+ ^# L5 M
9 d% J: z& x. D/ _: c
Int32 input_sample(void)7 F7 T! ?5 e# x: L9 ~# t
{  , e" g8 `& |$ U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 N" K7 C6 M) g& \! a, J
  return (AIC31_data.uint);5 _) N7 J2 q% l7 B
}
3 R2 o' ?& C- T" Z8 n+ i
- l% ^6 w! y; |" c7 S
分享到:  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-3-31 16:53 , Processed in 0.043783 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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