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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# V7 X+ Z& `2 B; x# o# Q7 A: m" u
main文件:
; Y/ N: p. @- u% w, Pinterrupt void interrupt4(void)  # S3 T$ R3 D; q+ a! c: C( ]* H) J
{
% D( T2 X4 e: `% }% ~& R" Z  Uint32 sample;9 m" a+ {7 T. g% B- P

. G, Y2 C4 ?; ^6 R  sample = input_sample(); // read L + R samples from ADC
) d, M% {% u6 \& ]2 \1 V! C& p  output_sample(sample);   // write L + R samples to DAC
" \) |8 k% A. H  I4 w  return;# j9 }1 Y4 R& V' C
}
" o8 I% T: t2 F% D; K7 l0 s% F2 y0 [0 y3 ~! H  ^8 S
int main( void )( y4 u  W: e0 R* S) |) t
{
* C9 F, o( O" G% _" M* H1 l4 c
4 C2 @' _3 _( a7 \8 B7 G: H    /* Initialize BSL */) t) ^& Z0 p/ I2 x
    EVMC6747_init( );( j. |; Z9 v7 f3 K# h
        /* Call evmc6747_intr function */& ~2 C' d0 x# e4 x. Q
    aic3106_init( );& ?" H8 v% B$ z) `& r7 ~" j+ ]
        while(1);# l- I3 Y7 i: L6 i
}
  R4 O; v* A3 C9 g7 p
8 O. D! Q- q% H$ H4 C3 V" `# l& F. e" ~
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ N2 p4 I  j1 ^9 j/* Initialize MCASP1 */
; q1 s( q1 M" y; f# t7 p    mcasp = &MCASP_MODULE_1;& J' T1 }! |9 D5 P5 n+ h
    mcasp->regs->GBLCTL  = 0;       // Reset
! d* g" L8 I3 ^* ^    mcasp->regs->RGBLCTL = 0;       // Reset RX
& e9 w5 c4 a+ h$ b; o8 @( [    mcasp->regs->XGBLCTL = 0;       // Reset TX
% S& K4 b6 I& m0 ~    mcasp->regs->PWRDEMU = 1;       // Free-running
. ?: l* g6 J$ L9 {! w, f, ?   // configure McASP0 receive registers( E0 L& z) }; M! V- ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ e1 l" I. U: _7 q1 D    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 G% r- y. z# `  d. o/ T; T
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ K/ ^' F, ^( H3 Q, i" V- Z5 z. W    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( f6 Y" @( j3 b    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 Z& c+ T  v$ H: W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ H) \/ @6 d/ I- ^& |9 q: S4 Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* o& P; g, W% }3 A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ y& b! K( D7 N" ^

& I' r) c% f. A5 `) N- E/ q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) G) G  x+ u. P0 E7 g0 |- H    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 U$ r1 L5 A% E# D
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 F+ m$ s4 D. ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- [" x6 m5 |3 Z2 F; q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; l$ Q' a+ `2 V' [1 [/ f2 k; h    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; q6 a7 T; U' c8 a8 |# i5 ~    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  |# D6 M# }0 x4 t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' J+ j2 W# Y" c6 C" Y/ T# v; b- q) }! W1 z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ t# ?" ]+ F3 M, \. A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ Z+ k/ a" a  j/ t5 P
    mcasp->regs->PFUNC      = 0;          // All MCASPs' x" l. ~: a& D4 M+ V3 S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# g! k  q: O' N8 \/ ]4 @; |# G9 f6 n
    mcasp->regs->DITCTL     = 0x00000000; // Not used
# a# R. _2 W. {3 \, [    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 N+ p( m; k& {5 _8 i: m
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 v0 E) {0 K: {% w: o- P2 h5 G- u2 t% M+ w
/* Starting sections of the McASP*/! x+ F' z  |  W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) z/ l4 c  y& k; f: Q; }) b, e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 E" r! k+ F" @2 ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ a( o  q( E2 G. v  |9 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ h* L4 U  z9 H# F5 ]( @9 f
7 u- v& J  x2 T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" l# s0 A% g8 U8 h& ~$ {8 ~1 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: _( Y6 D5 ~3 {" l: {1 f
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 V2 W% `5 `7 a7 `8 s9 u: A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 L, u* z2 I! f" l- E+ P6 a# g
- X4 v$ \  j3 f/ E$ c
    mcasp->regs->XSTAT = 0x0000ffff; 0 R) I) N6 a2 q- ?, c" e
    mcasp->regs->RSTAT = 0x0000ffff; : Z0 L8 W! v7 E# x/ a
/ d' D* G6 `8 I: C7 t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 z! j6 I" ]5 o9 o0 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 l( J8 I4 [1 l: y/ ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# {- @: l+ z) R; t: @# [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! |, ?6 x2 E3 ?& G8 d% @1 E& x$ Z
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ R) b7 H+ D1 H# L/ I6 N    mcasp->regs->XBUF5 = 0;% u7 Y) @9 _/ X: K( }1 Y0 R
    mcasp->regs->RBUF0 = 0;8 J# Z5 P, W7 X0 {

6 R; O8 e% p; r' ]) x9 v    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# ]1 l2 F4 \% ~- u4 w6 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 q3 H8 e) b: {( B0 r9 F: \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ r0 @- A/ F7 m% q6 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" c& F7 s, H# {2 A. I$ p; \% L

% t$ K# G  \7 Q% f4 e2 U    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; E6 }  K* X% ^: ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, W; O% e2 d' A3 J5 a9 i
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# Z- M3 j( B% I6 j" s: A( e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% b: Y# X% |/ g8 n, r

2 z' ?3 m0 n- ?2 q9 Z+ d    CSR = 0x0000;
! p; h# p7 E& g/ b: i! ~    INTC_INTMUX1 = 0x3d;( H: n$ a' Z. N- g1 \; l
    ISTP = (unsigned int)vectors;
4 G' m9 }- ?  }    ICR = 0xFFF0;  0 }6 r. L2 o# q3 L% z: |
    IER |= 0x12;  % J3 P9 y4 @1 R6 T# g
    CSR |= 0x01;  
7 \8 f; @% R* U& p" q' q/ }% g# [
- H9 c- X) ]" @/ ^- [6 S% r1 ^! r5 g0 S; d: ]

. v' a6 B+ a6 {, V还有就是两个输入输出函数:
$ l! U6 ^5 b5 Y7 g3 i4 ^% Nvoid output_sample(Int32 out_data), M( ?- S4 T# {; @9 H1 V: v( g0 Z
{" d- J+ z& h" E* K9 z5 l# t
  AIC31_data.uint = out_data;  
! t5 `# U0 W/ @, d- B  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 V9 I8 l- v0 R" Z, p}7 g) l7 J/ X. a' t$ ~( ^! y0 |; Z
$ q( l5 b0 w3 b7 s, E
Int32 input_sample(void)
; q4 S# Z# B6 ?9 C9 Z" J) Q{  
" L' t/ t" `! p4 x  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ c0 l# F" e  ]% ?) J+ c  return (AIC31_data.uint);
" Z" x$ q  F3 I7 a7 P& x}- Z6 A) t" T- P0 B; S. O0 ^

' p/ S* L8 W2 l% D: r8 }8 o
分享到:  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-18 16:26 , Processed in 0.038247 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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