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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& I" f0 k  {- V, P4 ^! Fmain文件:1 k' B' n( n+ b( D
interrupt void interrupt4(void)  . K/ Y. [" M( |7 i. z$ ?
{
0 i: Z" {  U9 G  Uint32 sample;) |( W. d1 Z% A, Q" ?
6 [4 J! v/ @; X2 |
  sample = input_sample(); // read L + R samples from ADC& a& Y% y7 r  t( A) c. I, f
  output_sample(sample);   // write L + R samples to DAC
; T( \+ s& g3 _. w8 g  return;
! _" W: O9 o; J3 k4 V# U}4 w8 `6 O+ @% b% o; G. t( J

; r/ b" |0 p' x- q; L7 b9 e. `int main( void )
6 \' y' ~- b/ j{
: S/ v' L& {4 u: T- C3 h  I- Z- M1 r7 ^5 X
    /* Initialize BSL */
8 L$ F4 s! c0 n( f. Z7 V7 P    EVMC6747_init( );6 Z1 n) J- R# [
        /* Call evmc6747_intr function */8 H6 J3 y9 ~6 ^1 Z9 o) T
    aic3106_init( );, t# z: h1 F7 |4 J( X
        while(1);
1 ^) `6 t7 Y6 ^}/ D) W# L, v- _2 t
' z9 t$ ], I1 I) t

1 D! c- X1 c- I: r% q) e- @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 x$ l+ y2 L7 ?% ]. y5 \; f/* Initialize MCASP1 */* B# Q  W) B& O9 h/ R) Q
    mcasp = &MCASP_MODULE_1;
, A; \0 w+ r1 q    mcasp->regs->GBLCTL  = 0;       // Reset
/ y' g3 V$ A2 b8 v; M1 t( X" h    mcasp->regs->RGBLCTL = 0;       // Reset RX9 N+ O; U- T5 F; x
    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 l9 X+ r/ ?( m    mcasp->regs->PWRDEMU = 1;       // Free-running  M, `4 L: t" S# f
   // configure McASP0 receive registers
1 c( k/ I; W0 f  V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' `) m" _; V: ?3 ]2 k, `* p0 \' @    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 l: k- m9 v$ w# U    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" L+ r: H2 v2 w* w3 p. C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) Z' U1 t7 a% A9 u5 O0 A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 r( t1 A' m; ^! c0 L    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ s8 a% @# V, M: V/ Q5 [
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" |; j0 s/ U) Z5 G! K' ]5 y, H    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 I0 \- P( W; k3 u+ K) U9 v6 ]' }0 y- X1 `$ B- G3 q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 g$ E) s+ Z6 U% s: V3 R" O    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 B6 I: C: d# N' f: u    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' Q4 D! C& v9 A. [0 Q0 W9 e2 D/ ^
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 B9 A! C6 d: Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 t6 h3 l2 X  C# j/ e" \
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# ]6 S9 L! r. @2 N6 ^% U( |7 x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" G7 Y' a4 t$ A4 H; d7 Y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* ~, [% ?" V# Z: ~+ D1 z9 b0 [9 C8 ]! E+ n
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 _$ ^/ @# y! S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( O% T4 E5 u# g- ^" m
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- ~8 x  y0 e- K- g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' \1 }) u. Z4 r/ s- b
4 B1 m! _& R* {0 U    mcasp->regs->DITCTL     = 0x00000000; // Not used
) f) t! D9 N. ^' V. b    mcasp->regs->DLBCTL     = 0x00000000; // Not used4 n! z9 A; {" E( U1 X& w  G
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& x8 E' C1 J2 `* L0 \- B$ u7 i( n/ I2 t' P( p+ f
/* Starting sections of the McASP*/
/ x" V5 [: t6 `- g7 s- M6 N* t* Z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 \" j, y7 I+ _% j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- z7 F; C) t# a3 z    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   e8 d& I- S9 W+ Z( z& E9 N) |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ E3 z8 B. v  w# b0 t7 Y
( `! A& S; k) u" ~9 u0 ]    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ b2 V  g% l' x4 z0 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ v+ }) k0 }% N4 o
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 w0 ]0 M# D' B$ g$ k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* w- R/ `/ ~! j: n: t

: }& P/ u; {: w$ I    mcasp->regs->XSTAT = 0x0000ffff; 4 i9 r7 J: e4 x2 C
    mcasp->regs->RSTAT = 0x0000ffff;
% j, i6 Q' B, _& o% b8 t2 V/ J* X
# k, o( F+ p  v4 r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) V; [9 Z8 S% J. e+ g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& Y' D, j  K3 [! c, h    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " z- e( |9 L% D* |" q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 x, n8 N1 i2 i7 k1 V( W* P
: F! T) C0 F. H' Z5 j    /* Write a 0, so that no underrun occurs after releasing the state machine */0 W4 q+ ~/ L( w. N
    mcasp->regs->XBUF5 = 0;
7 t8 a0 p% \: ?# y7 c    mcasp->regs->RBUF0 = 0;% ~1 V/ h# X/ i6 ?( c

9 t( }; z3 W4 N9 h/ |7 [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 S# n* E  D3 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, c5 L3 y' s- Z8 g3 S: W7 n" u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# y: H% u& w& O6 S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( e* q8 A+ V6 t* Z4 }2 R1 Z5 l9 ?' r! @" x. D: i
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 H' O! T: {6 j4 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 d/ Z# a0 I, r  J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 K& I5 Y+ Z/ n  W% K: @6 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# J2 [; H' z! k$ v1 b/ u1 s4 t, T, T- C7 l4 |
    CSR = 0x0000;+ \7 \! r8 c8 Y9 I3 f0 C
    INTC_INTMUX1 = 0x3d;0 o- _. Z+ m4 i( h$ A) D' y
    ISTP = (unsigned int)vectors;
+ a, D  [/ K/ `1 M8 C% j    ICR = 0xFFF0;  
( p" c2 \* e9 z; Z& _    IER |= 0x12;  
  Y6 h; t% G" J4 K0 S    CSR |= 0x01;  ! b2 i3 \" t; w. N

7 @$ }8 ]9 v4 w
9 [/ p' S% h3 o% \+ s/ n, U* E7 R# u
还有就是两个输入输出函数:/ u  Z* M" |: Q
void output_sample(Int32 out_data)
; \# n3 ]' ?/ ]{' z& A6 |( E" z6 J$ j
  AIC31_data.uint = out_data;  - ]3 Z$ n' r, k4 H& B) m9 x7 ~+ {
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; S% \* L- Y5 V; r1 m" R}
9 q0 T! N* {) s# [1 N& H
7 z1 K% ~1 G9 a. P$ Z5 jInt32 input_sample(void)
) r% u2 ]3 A  i6 w( @" F/ w{  ' Y: ^/ {4 f! U; k5 L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 N4 s" R+ Y8 d: w" Z: Y' X+ m
  return (AIC31_data.uint);
! S) H( u/ k) L}
! i- k& \& G0 K4 J. ]; U" N; u) J  G. |* e
分享到:  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-5 08:40 , Processed in 0.050722 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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