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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! d+ y, s/ d: C9 I  O
main文件:
! @' m, U7 }7 [) J% vinterrupt void interrupt4(void)  ; m/ k- A1 B6 L! v8 t
{
! Q  U8 A9 V" X* d" J. {' P" _  Uint32 sample;0 q! l/ B% k% y% ]& G, d  M

. P+ O( P" b- ~9 b2 d9 Z1 @  sample = input_sample(); // read L + R samples from ADC
9 \. w7 B6 w7 v/ C7 X2 {  output_sample(sample);   // write L + R samples to DAC
( e+ n; t; h% E# i' f; M2 W+ T1 O  return;
6 R% B: X( C  [8 Q' \6 n}
. W6 H3 ^: B4 d, B
) @2 \; q) _* ]$ y5 g9 }% oint main( void )
# K; z) p, k# u/ M! K{
7 D0 A8 f) D% o: m/ P/ }. e8 f9 Y" N# ]
    /* Initialize BSL */
4 g+ i* @1 B0 v: `! T# J0 d# t" e    EVMC6747_init( );+ O" `/ E8 I, x5 J& f2 y
        /* Call evmc6747_intr function */
  h0 }# i7 \- `" k5 A, b: T5 ^    aic3106_init( );
/ D. J% h3 v5 m6 z        while(1);
' j$ f) G! Y  K4 C5 {/ C}
  [( q) s0 B5 G- ]7 m5 m: I+ A+ t1 d* _2 L& d
8 v4 H; R6 H$ f9 a; I0 p2 [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 ?2 a6 H8 M$ c7 Y2 n' I. [
/* Initialize MCASP1 */3 Q; Z0 I: d$ a3 n  f/ `
    mcasp = &MCASP_MODULE_1;
2 P$ E4 X/ w6 T( z1 U, ^! {/ P9 F+ l. ~    mcasp->regs->GBLCTL  = 0;       // Reset4 g: |% L4 W" |* @' m7 t
    mcasp->regs->RGBLCTL = 0;       // Reset RX" P% w5 R! S+ m! g$ `" i2 b7 p
    mcasp->regs->XGBLCTL = 0;       // Reset TX( @$ W6 V- |" E+ u" [4 b6 T
    mcasp->regs->PWRDEMU = 1;       // Free-running
) e! e) D. n) d- o   // configure McASP0 receive registers
( Y! D! d1 t" ?! S9 N" N( {    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) u8 ?# ]5 N- D7 I    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 ^: k8 a6 E/ t# x( e# \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 f2 O; e' h  n# `5 n  ?
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 q/ X3 n& T* m+ [8 I1 E+ }3 ?0 Q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  I( n% P2 P, C6 s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( H  j; `" S/ a+ [$ R$ Q  Q9 |3 {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 k" g1 k( e! ~- f    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" W; h( h! w' D% p2 o
. X2 q: `  [. ^% U3 N    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* l. F% J) g' u5 B5 z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 C9 q$ b+ _* g( ^/ T  Q" X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 h2 B8 y* H- H+ a7 V2 Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& B# R0 j* j- h: e0 `2 o& Y2 y; J! x
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 [0 u8 i- Y/ L1 N$ H* J" L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( m- B% d7 I* p8 ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: O3 o4 @) x) S1 X+ `( i: F* k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 J" L( K3 ?/ m3 i8 }
  t; p% Y3 a5 n7 r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# O) @! _2 s" I7 W( \/ q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# K% @. P( D) b1 z    mcasp->regs->PFUNC      = 0;          // All MCASPs* j6 X+ f0 j4 `: ~+ v+ {3 G2 p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- M5 ]; w. X2 r7 A( F( I9 h
, f2 s0 w( Z- [  M/ y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
, @; a$ j) B5 F    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* v: V* N0 c, ?! z8 E' e    mcasp->regs->AMUTE      = 0x00000000; // Not used4 U9 G; X' O& t7 i( A$ d& @  U
) Z4 k" M( o) }& V3 {# N
/* Starting sections of the McASP*/
$ x8 f1 t" f0 L& y2 e( }/ y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& L6 Z; Y3 F2 L: v- u4 V, s8 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 s8 r: h# A+ n0 d! u( H3 F8 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# c6 n) F( z1 s; I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' g) S  ?3 h% z; |
4 ]" j9 A; V# {2 ^( G; `7 v, x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' e+ v' X+ I# g& {% B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 x" @' @- k# ]( M8 w' c    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' `3 E, r& B3 a5 a1 v% l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; Y; [0 j8 `+ X- C$ f
$ q1 y, {) I9 j: @* s( W) ~  [    mcasp->regs->XSTAT = 0x0000ffff; ! Z# e3 t" e1 O* A3 f
    mcasp->regs->RSTAT = 0x0000ffff;
% M- a: f9 l. L7 M8 R# e
% l  C2 u. h$ }( f# o' k8 v1 U    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' W! J1 i$ C/ @- F7 Y4 C6 l" W$ q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 I! v& M' n; H5 O
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# F/ H& y1 {# w& e# t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 o* u* I; _. f& J  L6 ^

8 V% T" }) J! e8 ]' {/ `+ }    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 j0 y3 C2 e6 l    mcasp->regs->XBUF5 = 0;3 U( l. }# _  ?$ \
    mcasp->regs->RBUF0 = 0;' R4 S) s7 d* u0 `, @
9 ~7 k0 W' y) _% |3 u9 A6 [3 i
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( f9 c( |3 e: O$ ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  `- ^! `' {6 L1 c' j
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 d+ y4 E& y  D9 o. X! Y- y6 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) w* [$ `# C& N/ E9 |2 i: d4 w4 V

" }# @- N: `* R$ x- z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 Y  r5 b2 A9 p' ]8 q4 h2 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ o2 _8 Z: h3 t" Y, [    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 I6 h2 d8 [6 c# B: g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ f  |: d& S% J0 i( u3 ?- Q
4 p7 C5 ?* r- I
    CSR = 0x0000;
: J& ^1 `/ Z( x, ^, d    INTC_INTMUX1 = 0x3d;
6 i2 y; M0 k) s- M$ I3 ^3 \    ISTP = (unsigned int)vectors;- \* s1 |8 ~, P3 q
    ICR = 0xFFF0;  3 l$ i+ V) s- g' t
    IER |= 0x12;  
# F) P8 ?8 v8 g/ K$ [0 I8 P    CSR |= 0x01;  
. T$ K" i; F5 \6 D8 @* m# r% y" R( q& e% J( C! m# l* l
9 G2 P4 d. ]( ^. _, d

9 Y1 J7 S! Y; U) Y0 R5 @还有就是两个输入输出函数:
4 y3 q' k6 w! P4 q, g* L  Vvoid output_sample(Int32 out_data)
6 q5 h: B( [$ J{
4 x' R- k* p3 t+ ?  AIC31_data.uint = out_data;  
8 B3 c* ~* B  w8 G9 V1 Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  R& B7 a$ D1 `' e- N. i* ~9 i}& J$ v2 F* [3 R  q4 H2 r

! g  c9 \* O2 u8 U0 x* v# QInt32 input_sample(void)
. l. c  v( b/ i, U{  
6 ^# }/ [. z) v" H9 L1 o# U  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ |2 @% y" I) t! P
  return (AIC31_data.uint);8 G1 p% y0 M7 @# n$ q* {& x
}
9 q, ?1 D/ r! O( u# I' V8 K. }, S$ U; l. b4 X6 h4 j3 s" c
分享到:  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-23 12:04 , Processed in 0.039699 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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