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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 G, j6 [, g( F$ smain文件:% ~6 L1 k0 k# T  @3 W: z
interrupt void interrupt4(void)  
0 V+ ^: c; k3 K! \8 ~0 ~{. Z' j/ u% c) Q' F* C, i3 G
  Uint32 sample;
! Y4 Q9 R% p  t/ M
0 h; _& n! a0 o# N7 t# d  sample = input_sample(); // read L + R samples from ADC8 [7 W( f  L9 r# O3 n  [
  output_sample(sample);   // write L + R samples to DAC 0 P1 |7 J6 y" q8 _& d
  return;! G4 e$ \+ s+ M; C. p# I9 A5 d% H
}' e6 s, @2 K) H* l
1 m, g+ T, ]" {9 I4 R( X3 E4 W/ z
int main( void )
" c/ \' o) C$ J, r( F{
  I2 o5 j, J5 h. k# e% S; r6 `
    /* Initialize BSL */
* |- f+ x8 p& {" M8 p6 ~    EVMC6747_init( );
7 `  C' n7 }, x& S        /* Call evmc6747_intr function */
/ M. `( \7 h- i* a    aic3106_init( );! L' Z' D/ a7 N* x" C8 N2 z
        while(1);9 n  q3 i; C: j$ r- T" e4 Q
}
- O+ D3 S; p, v0 Z. I
: C/ @3 n) G/ C& ~; V$ v7 K. T( a$ I+ q1 V: L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 J. z! V# v1 U0 S% U/* Initialize MCASP1 */
0 n  \! s1 E  c* f* M, e. M3 [    mcasp = &MCASP_MODULE_1;6 e+ i$ f, N1 K$ ?' D, O5 v
    mcasp->regs->GBLCTL  = 0;       // Reset
$ ?& Y0 k" F' T4 `    mcasp->regs->RGBLCTL = 0;       // Reset RX3 L1 N! t2 ^+ C2 V6 C2 l6 }
    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 D: p9 O! A0 j+ u    mcasp->regs->PWRDEMU = 1;       // Free-running
2 @' k, U1 H3 S# t/ o/ I5 W1 [   // configure McASP0 receive registers! x! t: F4 ?% c. @! T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, {$ G) ]( ^5 I+ ]    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" i! T4 c; r6 ~& K5 E8 L0 d1 J    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 R8 Y) C5 Q2 d" O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) t2 u* F, [/ c, @* ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 o+ D1 x  Y1 y% s& A6 S4 \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( }' F8 J' t/ i: R& l" z    mcasp->regs->RINTCTL    = 0x00000000; // Not used# {; f: z  v: Q1 U  h5 v" p/ ^+ v
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  I+ j  {& ^$ l- f: d0 q7 H1 R
; d3 ?4 u4 P, T; f, E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ I/ d$ u' }2 E0 d: W- B1 I% i    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" _' [& H" W" G$ g7 s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! C3 j) W7 r# Q& M& N) T7 k. U) B
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 B# l* A% m5 R, |3 D    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 N8 I3 `- m$ c  E1 U1 D  e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 w2 u/ M! d% @, e6 p! v
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! A5 p8 j  P" S6 \5 T3 i7 K5 q* p    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 }1 Y' M/ A+ k$ F

+ t4 ?& L1 u% k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% C& W% w' `( c: h$ M8 W: M! |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 ^+ \/ G5 R2 ~2 [
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 h2 ?; H2 y1 v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; o' r3 H7 S# e, g9 E
5 S0 d# m- O2 m" Y5 }( E' m: l! f    mcasp->regs->DITCTL     = 0x00000000; // Not used  B( D  ~% w5 [1 ]% Q( x5 Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used) |/ J- c8 ~9 _, w4 ?7 T
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ d+ L; i8 M+ x$ ]/ a
! V' q$ Z6 N6 h) z/* Starting sections of the McASP*/
* i1 I, }  \" L    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# T6 D0 z+ P4 ~6 c7 `, x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % E8 N2 R& _) l. b5 p2 E
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 t! K3 M2 I) V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' b8 p; j3 _+ R! p! H1 d$ y) ~5 H) o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / h% z' X" `+ G4 ^- B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( [) g- H9 j1 a! d* |    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 A8 e2 l: l; Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: O; s5 @  F: t" \7 u' n2 |
6 [, l: N7 E5 c6 Z    mcasp->regs->XSTAT = 0x0000ffff; 7 a; m. [  V, o/ {8 N6 \/ F) ~
    mcasp->regs->RSTAT = 0x0000ffff; ; h* S. j$ r& s  P
: Y$ M; n7 W" _$ n7 d
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. x" i; `' T. u: p) D4 I$ {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 V/ M9 I8 y: u5 b* Q% i
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # y- D0 @* f) J2 c$ J! L- n$ p5 K% m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! Q9 N# w. w+ z8 b, Q0 N
8 P9 e, R, j9 F% Z: }0 h( }* \! g
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 G5 t& |' E! E# X+ B" ?, A, @. V' b    mcasp->regs->XBUF5 = 0;
: J& I7 l* I0 a+ w    mcasp->regs->RBUF0 = 0;% p3 F- C% T0 ^) `) L. l$ m) s

9 r% ~; D; H) L" q4 h$ q) s) T    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 e* n* g' A1 f5 U! B9 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ Y+ k& ?: b; h/ C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # _7 L; d; d7 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 H# u$ f0 T) d, h
5 Z: ?3 t# |1 L0 {& s+ u    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / a2 {# ]4 b' a0 h$ ^# d' x" b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! D, f! R5 B; l" e" U$ q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' e" e( B& a6 T& X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& N3 a! _' Q/ n4 I* ^2 M& U
) B* L9 \" ~, b8 z# O    CSR = 0x0000;
% z! b( r% V- b. x7 |0 B    INTC_INTMUX1 = 0x3d;9 F8 `1 M, h( w
    ISTP = (unsigned int)vectors;
4 S4 }/ t1 w/ Z" o9 ^. m- f7 |    ICR = 0xFFF0;  
( g1 ^" P2 G" ]: \* E1 h    IER |= 0x12;  
( f( K5 x, z3 K' \    CSR |= 0x01;  % w3 K& N- {( \( k% C
- F+ k, R4 {: ]" S/ F1 f

( u3 Q3 A: N. T. F
4 o8 Y: \/ d" t/ C9 _还有就是两个输入输出函数:* I- O8 |1 V4 C) I. n3 T9 Q  @
void output_sample(Int32 out_data)
* h4 y* o7 I+ W7 i5 u{$ z1 @9 N9 ~5 y- z  g) n
  AIC31_data.uint = out_data;  % u1 p! y2 q7 n
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 ~! l" [" D& L& ]! T}
, c$ k7 ]8 c$ O, Z% p3 e% Z1 n# j4 q9 b3 S5 v3 i
Int32 input_sample(void)9 B6 X2 o! \9 u; S( {; _, O
{  
. O( m+ q8 ]  T- G0 `  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, W4 ]0 ^0 I6 Y2 {7 I# c* O  return (AIC31_data.uint);
. h) A4 O. @+ c# z}% H7 `8 ], {8 x! W

) B. F9 D4 i! r) c' }& B% @
分享到:  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-1-18 17:22 , Processed in 0.058065 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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