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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  \! ?. _) H/ ?- A
main文件:" z% f# {0 K- @4 k1 \( b7 M2 T
interrupt void interrupt4(void)  
/ V1 p( f7 J: e$ {) ]{
+ M7 c1 J8 K8 }; j9 k& a- b. t8 G  Uint32 sample;( P. w+ @' D* v" H  v( P0 {' ^2 g
3 {7 H6 r9 ^8 o4 f
  sample = input_sample(); // read L + R samples from ADC$ s; D+ J/ A1 s6 R; Q: Z. A! m: M
  output_sample(sample);   // write L + R samples to DAC ; G: n5 d2 n& c
  return;% W9 D5 l  Y- C
}- U2 o3 b! S. \
* J! Z3 A' U* T0 D! ?
int main( void )" T; ~/ l1 E% c  B# u7 @) V
{6 U6 {, d* Y" D& V
4 s4 L8 C6 [  D& l, d
    /* Initialize BSL */, E$ E: m( v3 Y$ L
    EVMC6747_init( );
$ V" \$ p7 |* E% K; z( z/ U        /* Call evmc6747_intr function */
) w# ]; Z4 _3 h1 ~2 Y, A    aic3106_init( );" o* D* I6 j: G" I8 j; m" _
        while(1);
0 Z9 I# j$ n  t5 ?. i# E}
3 u6 T, M; Y9 U. r# `+ h, G2 O- p' F3 D$ d, f

( g+ g2 M* @( A7 Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 L- Y+ U+ @/ V0 T$ H5 V
/* Initialize MCASP1 */
% g1 t2 A0 t" v# a% n* Q5 E& N    mcasp = &MCASP_MODULE_1;
: T' i) L8 T+ V, \  e    mcasp->regs->GBLCTL  = 0;       // Reset
" `9 m* i8 D5 `- H  n8 {9 l    mcasp->regs->RGBLCTL = 0;       // Reset RX: N5 X7 K! t# j! ~8 l% I
    mcasp->regs->XGBLCTL = 0;       // Reset TX: h! g0 d- o1 Z, l' |
    mcasp->regs->PWRDEMU = 1;       // Free-running+ X1 V1 K' d0 @7 L5 q! u( _& ^
   // configure McASP0 receive registers
0 g0 T/ E- |3 M; h: }    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. O. t7 a! x, E* G2 n    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! ?5 U, i8 Z: J8 j9 l    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ T( B: A) B' n8 }8 V2 F    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( K1 x/ ?7 n8 H" I  s+ A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 \( S" r( s% e6 w( G/ s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 A( B6 T4 l$ B    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 n5 F  A( E; b: v/ \9 L9 G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  u9 i! |9 ]4 M9 O5 v  M
2 d) O! q+ v5 U# E( |- U
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% @2 L7 c" T9 b0 l2 K; k. a- w
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% p& \) L# [9 X0 M9 ]    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 j6 M* a# C9 k' Z% @    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ v, E/ j, D8 Z) i- T2 t/ b
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ W" s( H) b4 k) K  H+ o( F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 ?4 Z4 s: g: `( M    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 p( q0 t- B1 z, j- d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* J% \. S' [9 n% ?" Q  B6 y0 w
- C# E1 t# Q9 L( x' E3 m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; U; |! i1 D" d; D( R3 _4 X8 g7 c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ y6 ]) l4 |  d; i  L
    mcasp->regs->PFUNC      = 0;          // All MCASPs- _& ?# }$ P- b5 J  [# @9 |; j: c
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ D: s# r# E9 F7 _& S
2 U2 |7 a6 N/ ^( M" Q4 q: L( I
    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ S. a. u$ n' }9 D2 f5 Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 Y9 o* l* N# ]0 |8 [# z' `
    mcasp->regs->AMUTE      = 0x00000000; // Not used# b( b3 s% P' P5 N4 s
7 I- \( |! b' S- ?" @4 t0 \
/* Starting sections of the McASP*/& J. ]7 u8 B7 ?0 m& X$ O
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   E' N  h* M. V3 V1 s7 U4 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 y/ k+ W$ h6 Q; b6 g# C
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . q, [+ W$ B6 j4 z% ]8 R5 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 w2 [) \3 W1 i. [

' D" h* ]4 ~/ c& n7 j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( f6 ]# m& s! S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 l9 Z# s( O$ M( u1 f: _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 w3 d/ A3 l0 U8 o# E" X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 `' X+ S/ ~; n* j3 B+ [& U; R& w& [6 b" g3 @
    mcasp->regs->XSTAT = 0x0000ffff; , ~! S- Q8 ~; \5 Z/ C
    mcasp->regs->RSTAT = 0x0000ffff;
7 }( N' m: m  g  e2 n, ^# ^1 X. ~; z* Q8 n( \7 M
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 _0 G& W4 Z, g; T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ M9 a& i- D. ^& W. v1 @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - X5 y5 X5 V- d8 p7 x) C. h. \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; B1 T: W2 Q9 ?+ w
0 X0 d9 x4 a5 F8 M" w# z2 F    /* Write a 0, so that no underrun occurs after releasing the state machine */3 X) i1 E4 i+ u1 d2 M- O
    mcasp->regs->XBUF5 = 0;
1 o0 ~  f& j5 q- ^    mcasp->regs->RBUF0 = 0;. F# q, f2 a4 b1 q5 x: W( Q

; ^! n( _  _) @" F    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / Y4 x" R* c6 d/ X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# U- z& H8 K& H# c- g/ }& v
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' }4 |3 ~( u; Y1 @  I2 a! X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 W& G' t$ w1 B% P  p6 N! f
" ~+ V( l/ ~0 M7 [; [- [6 B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 y- X4 V) \+ |1 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( F% Z; U* N8 Y1 y* X/ p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 V; t0 L; c- M5 b7 ?( s+ d( H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# L3 b% b  X1 V4 a! h
* X/ y4 e3 W- W4 J
    CSR = 0x0000;5 h6 d/ `$ O* i. N- l
    INTC_INTMUX1 = 0x3d;
( h. \. h, M' ]' H    ISTP = (unsigned int)vectors;: c1 U1 X6 l2 ^3 G1 ]$ x: g. |5 R
    ICR = 0xFFF0;  6 J0 C/ Q# g  I
    IER |= 0x12;  & C. S6 T; t: i- z
    CSR |= 0x01;  
% I# @( x* k$ c
+ f  _5 Z% C& S6 A; _: [
6 F- q  l, B, P6 h" w, o! ^+ |! X% G0 Q2 ~2 b" I' R0 t5 y
还有就是两个输入输出函数:
) `7 e  C! D6 e" f5 d- g& Kvoid output_sample(Int32 out_data)7 V+ X8 G5 G1 E# K" K' }" m+ f; I
{4 _9 }# I0 o4 ^# u; l) @( W* T2 b: Q
  AIC31_data.uint = out_data;  
) g  D0 P& m9 C8 i  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( S) g# C! x3 R+ _6 K: J3 v}
: d8 ?% ^9 D& V6 h0 l9 w" U$ K& f8 W, |' I0 m% |
Int32 input_sample(void)
# E, C0 f! K7 {/ E/ r: e( W{  , F! l+ k/ A' ]/ N: F5 G) D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 O4 D" M+ o; M5 V/ w1 y+ ~1 f  return (AIC31_data.uint);$ L7 n* F* V2 n6 c5 G7 S( G
}5 Z5 p/ X- i$ Q1 r7 {# L' s4 h) C
6 W5 n/ B, O8 i7 ~9 p! r
分享到:  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-25 05:57 , Processed in 0.041402 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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