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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ l7 c4 X8 x: {; X0 J  J; emain文件:
0 L: v- F9 n- pinterrupt void interrupt4(void)  
; I2 Z4 l8 C/ I. W# K" Z, Z% N{
9 H* l- n0 t; N9 j- z: O% k/ |9 E8 j  Uint32 sample;
& @+ P- A" ?/ R
( i7 d) d* B! f( d, g  sample = input_sample(); // read L + R samples from ADC
. U6 j" ^5 Z5 f' R  output_sample(sample);   // write L + R samples to DAC
: k% X0 ~/ E) _; G6 H/ }( u  return;6 w! g) }! |3 W9 u& {% b
}  Y; N3 d  L8 p: e& r8 S8 {4 a( B
  G7 {2 `. ?, e! t& s/ d
int main( void )/ V0 Y7 B$ i+ F4 ?; n
{7 t' |' ?( g2 y" @) D2 ^

5 @! _1 {; N7 M4 Z/ h3 c2 {    /* Initialize BSL */
6 c2 e7 {5 Y+ H  p; Y    EVMC6747_init( );0 S  W1 F* K0 _9 ?$ m$ @6 R; U
        /* Call evmc6747_intr function */0 K4 ~6 d4 j9 `, {9 Z% r0 e
    aic3106_init( );" D/ _2 s: F2 i
        while(1);
  s% ~9 f1 A# `3 y$ q}
3 I4 h1 b& _- J0 V  R& D; h) [9 T& z  @* O$ m

6 O  ^( I$ P% H+ `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( p3 U" Q0 B! V! J1 W9 r/* Initialize MCASP1 */
3 Y: I# b5 X% X# e8 j6 p    mcasp = &MCASP_MODULE_1;
1 t4 E6 c. n, Z    mcasp->regs->GBLCTL  = 0;       // Reset' W5 b9 j# w3 r, F( C
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" w8 n7 A2 r6 y8 N, O    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 U! s& `0 S) I; }    mcasp->regs->PWRDEMU = 1;       // Free-running
# b& f% k3 g' W   // configure McASP0 receive registers
7 F: r- Z0 d8 y, l. J% m& v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  ]1 W* L+ P0 l( S' T0 r0 X5 D: G    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 b; D; e" }+ C/ c5 G& h
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( N' ]. d- ]- @/ a0 o/ e2 _# b    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* R( p, S4 C  ~% w1 ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' ], \$ t  J5 p" l( T6 m8 F9 T. `
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; ]$ F/ b- Y* ~' H* N' z3 E0 K  [    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 ^( J' Y7 e1 ~2 p+ [3 a2 |
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, ^$ @. o/ p" ]9 n3 q. Z, A4 h

& L9 }! ?$ j  @( M5 `8 _4 _. k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 c; f2 l+ Y+ A8 |2 Q5 x) f    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ n8 k, J& k2 k1 X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 g( C6 }* _; R+ {/ ?  M4 U. ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) W4 W- N" p6 c) Q) q/ I6 j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 `" X3 L/ f1 ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* I6 S0 [+ ?. s0 E2 d. I8 j3 }" C! y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( H+ M( Y( a9 k3 ]; ]" S
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 m# ?& w% L6 b2 E3 S

. }  P0 ^- J) i( L, R' i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ j0 O- j  u8 a- }' v) E  Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 d& z$ b" j" L8 R3 ?+ [    mcasp->regs->PFUNC      = 0;          // All MCASPs7 A) ^$ W) Q* v0 I
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ B( v4 H; \: s  C1 e# \

" ?- x  T& B: @$ j& B& W" ^" C  I    mcasp->regs->DITCTL     = 0x00000000; // Not used  L# G' K/ W, R5 f; p) s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% J- l# z4 ?) O" k# K; g. k4 K    mcasp->regs->AMUTE      = 0x00000000; // Not used, I2 P5 f# ~2 I1 a% C, y7 ~

& V5 ]* \0 Q( ]# \' |' z8 I/* Starting sections of the McASP*/# j8 S8 f' e! s8 J" W9 m' f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 h0 w0 R. Z6 a. l$ ~1 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! ]3 m0 x. c' r! S0 R9 s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & ^6 B( V; d$ u- Q$ W. l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% |4 A! s9 n  K) _9 S
  y' i: Y% t; {( d    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 \' N0 ^% t4 _, L1 T$ D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* Y# T! n  z7 g9 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  v* x$ i9 g* n/ y$ Y1 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' P4 V, W+ I. p1 ]; x$ K# }+ U

# q4 J! F6 o* u$ X6 S+ u    mcasp->regs->XSTAT = 0x0000ffff; : f7 i- p4 y* C8 K# x' z5 _
    mcasp->regs->RSTAT = 0x0000ffff; ' s! G. _8 f& W- T. M, K2 ]

( C" [5 S6 Z) W, f( x5 h# S* }    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: P/ `! l- g. z. z/ j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 r0 |& I7 z( k& {) q1 ]& l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) t" [6 g0 a5 G  Q$ W! a8 C4 B( h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 h3 C4 ^. Y/ S' m
9 B6 E: I$ U* D$ o. G& e* ]! o
    /* Write a 0, so that no underrun occurs after releasing the state machine */4 ]5 f) j8 ^' M, |0 ~
    mcasp->regs->XBUF5 = 0;
3 A; z) \  i% X3 R    mcasp->regs->RBUF0 = 0;- I* B9 C! b  ^/ i$ T4 p3 d' K/ [
; x; y, B% t* x; a5 u4 D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  R. {# B4 r1 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' w4 X2 u, S/ G" R2 Y, a2 z* M/ G    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 ~4 [( `# _' v, h+ z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, v- Q, g3 p! z' t, M" r3 C8 z
! i% ]9 _+ _- t1 ]+ M6 @5 T' O
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & U# M- Y  U$ M5 ]) {4 f' `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- ]$ o" B+ Z# x, A
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 l5 K) c5 q( q$ V6 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( J1 P, Q& b( c% q# v: L" k7 ?# b% {" n) x! Z/ l
    CSR = 0x0000;7 l- N  l' [' v5 A2 I! u
    INTC_INTMUX1 = 0x3d;
( B( L% ]7 o* Q4 o/ c- `    ISTP = (unsigned int)vectors;
1 S! {7 q, V0 y' U  h- b0 O    ICR = 0xFFF0;  
% \3 r( s" V1 y  v5 [9 I7 v9 G    IER |= 0x12;  
7 J6 C) L/ w. U* _3 s    CSR |= 0x01;  
" }& G. |. K4 Q2 D/ T+ \- {( f0 v1 d% [4 o- P- W

  x* y- m8 v' Z4 Y; S1 h( D4 F& X: W1 t4 `" ]" w5 a' \& q# Z. c4 J( P
还有就是两个输入输出函数:
& V& ]2 j. A0 M+ m0 D0 W" O% Fvoid output_sample(Int32 out_data)' J7 _( n! Y( @9 D% m" E4 }8 G; \
{
* i4 n& k% d! U* n. R  AIC31_data.uint = out_data;  
$ U3 B& q& R9 q* u8 H  MCASP1_XBUF5_32BIT = AIC31_data.uint;" `( t0 ?- Y4 R- {7 i! c
}9 O. V7 L1 |; s4 ~3 y
& G; o" P: A' f: Q* |8 J6 t
Int32 input_sample(void)
8 i# l. R5 e2 _- a; h* E  K) W! q{  ) k' M( N; I1 O, T) D- H7 n- C3 j
  AIC31_data.uint = MCASP1_RBUF0_32BIT;" j4 o, g5 ~. |- t& b
  return (AIC31_data.uint);: K* S/ j" P, T+ I: M
}! h! }0 i; c# I# a$ v1 Y

3 p9 J7 I7 u  |" ~6 Q/ f) 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-11 08:12 , Processed in 0.039902 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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