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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" Q! u2 F7 Z* X5 {/ Qmain文件:
0 ?$ e& A8 p8 q& C# O7 I; Ainterrupt void interrupt4(void)  
$ I$ ^* @' w2 J+ g) R0 T{
: J1 `: `! L4 e0 V6 [  Uint32 sample;( ]# n& L1 T3 h2 n/ X( ]3 @# l4 v1 a
; f' d8 q+ ?  D( \2 g$ [
  sample = input_sample(); // read L + R samples from ADC( |& l3 ]+ T1 N2 u# u
  output_sample(sample);   // write L + R samples to DAC : J! m  k. W% B8 s
  return;
) C1 J, h. H5 w9 P9 O3 V& F* r9 [( u}3 B- [8 S2 y1 @0 X

6 H9 E1 A1 i9 ?  q! ?1 v% nint main( void )
0 w, F; y) D' W0 b{; D- c$ B: A( ^- X5 u

2 g3 {- E) {+ C% Q5 e! w" L    /* Initialize BSL */8 t+ M% k+ J' E. i; u5 |: b
    EVMC6747_init( );
6 M, `7 R) ~% e! e+ A/ K, X- a        /* Call evmc6747_intr function */
6 S) I& K0 [, F7 Q- f) H    aic3106_init( );" @: X8 z6 w# a3 h' r3 O
        while(1);
/ Y4 C. ^5 B0 S9 z6 `4 N, A}
: x; \* f' Q3 ^- J% t9 g; P: W2 Y+ B& c. g
- P6 {* L" O4 f: |8 X# g, R
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 t  i9 G+ _! q' K/* Initialize MCASP1 */
, \9 n7 G8 A0 \4 V8 l    mcasp = &MCASP_MODULE_1;1 Y1 Z  F3 [' f: w/ Z. G+ g. t
    mcasp->regs->GBLCTL  = 0;       // Reset
% T% ^4 A* H/ Y& C3 d* j) U$ O7 d    mcasp->regs->RGBLCTL = 0;       // Reset RX
! F3 U# K! q0 G+ i1 M# i5 p5 O5 P    mcasp->regs->XGBLCTL = 0;       // Reset TX
' R; T" X; d' m2 x) l    mcasp->regs->PWRDEMU = 1;       // Free-running
1 p$ K1 {" S8 \" _( z   // configure McASP0 receive registers
% V: p5 s' P& R" _0 d; @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! v' @5 [3 v( V
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 g. q  Q  j& R7 P( M- x2 h    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; \( Z7 e# l+ C2 j. O4 X
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 W+ Y# O7 [6 J5 _# ^    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' v4 ~& |0 }" @) l
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, c" x& _1 o8 P7 [8 y) r7 C* d
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' ?# d) I/ ^. n! I0 P( X
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  a; h3 g( w/ G' s+ Y- g6 }
: w- \/ @2 z2 h0 t7 y' a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- J( @% I5 Y' B9 T+ h% s) C! O
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 e/ B7 E: E+ z" E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 ?/ m- e9 I8 z7 X1 Y+ Y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& J% Y* C- w* I6 Y) w3 d
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 b8 C  B1 T. t- b2 f& r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& i" h/ d4 D2 S* p6 ]( S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 {+ l. O% \' y+ E
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& `- L2 |7 d- Z5 W; J2 y6 b" q$ {* B; j8 J4 Q) @, u; t8 B! u7 A. s6 J
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 S9 Y4 B# U0 T. G" D* J+ c  f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ H+ P5 w, z" j4 t& h. W/ w! d    mcasp->regs->PFUNC      = 0;          // All MCASPs
) B9 x3 T2 O6 m2 y, [& e/ O& f    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- i2 x) x9 j' T  i+ d5 Q; h
1 q% d; A1 \" \+ {/ g8 r
    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 c8 z, K" \1 @# D+ P5 K' l) a    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% |1 U% b4 a! C/ K9 |2 x# [) n) e    mcasp->regs->AMUTE      = 0x00000000; // Not used! r% a: T( S9 P. E$ j9 [

7 R  L; z' S) f" T  H, K+ M/ S/* Starting sections of the McASP*/+ c1 V; b: t( P$ |
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , M" V5 {! ?1 O( W% L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 r" z0 t0 A" K8 U    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 J: G8 m2 a( E! G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 b$ r8 @& U* Q: D

# _0 v- g) c. p0 x; \    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * ?4 o/ ]1 M& ^/ q6 x5 V5 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 j8 Z5 [: g% C- @
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 C% P1 @5 z3 I# N6 T4 p) x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ ^. ?% ]8 D# X# T

+ F, i  C1 Z7 z: v% R    mcasp->regs->XSTAT = 0x0000ffff;
2 f/ @8 K7 |( m- j    mcasp->regs->RSTAT = 0x0000ffff;
. s) u* u$ }8 G  K5 U/ e! n! |8 q9 I
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  o5 F4 d% O# U: `, e+ P! G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 ~2 F, F: v3 ^+ v5 h    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' F1 B5 g6 d# Y  ~9 i1 n: D3 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; Z) M/ c( F/ {$ B; N$ a  E; C8 C, N4 z- @/ h
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ I( E" _6 o" W5 R# K0 u    mcasp->regs->XBUF5 = 0;6 X* m2 ?2 B9 S  G& M$ u$ W
    mcasp->regs->RBUF0 = 0;$ ^; [# U% R* r3 P
4 \& u2 P6 I7 |. x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; B9 Z2 @) G, A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- R0 j" Y3 \7 i. ]- `" V0 d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( Q& |1 [; d5 W9 l  u. Q7 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& r! O+ Z3 ?$ c6 A

( d" E  S7 n1 ]1 G, f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( |6 I# z. d1 z2 t" _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: Z/ h  ~& e2 j2 [0 X* ~
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ B# K; H( t1 n6 |+ P0 {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) W8 |5 c, J8 o" t/ |7 p- j+ C
9 Y/ z  l; F) }7 k; Z% t
    CSR = 0x0000;8 [+ ~5 l: V' d1 r
    INTC_INTMUX1 = 0x3d;
9 e2 Y# V/ E8 f! B! n( i9 k) L    ISTP = (unsigned int)vectors;6 D8 x7 {8 c0 F: c7 d' g
    ICR = 0xFFF0;  & z1 V  q7 L& a0 t1 I3 ]
    IER |= 0x12;  3 h0 }5 E- J! }- c( q1 C0 n' Z
    CSR |= 0x01;  ' r, r, r- y# c: ~
) h$ C0 o4 ^% G9 m9 o0 N4 W
% s% N+ R, D( U/ c

" A5 g* {7 }8 e+ \$ j8 [% D还有就是两个输入输出函数:
6 y! Y* T0 ]; ?" B- svoid output_sample(Int32 out_data): g: F: n; x& [' H9 T$ _
{; n8 @+ S. H% K% Q% L
  AIC31_data.uint = out_data;  1 `* a; D1 y' t! r4 x7 A; @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;" h4 x. X. N! i2 N& M% S
}, a) H0 z- @3 h4 ]- g8 X, i3 y; P

! q, V/ A3 {) f) t( |, f& jInt32 input_sample(void)
$ `, l$ I9 K+ y4 Y. z{  . R/ m' Q( h( o: o# j* W# O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;& s$ Y- J; m8 W/ ~
  return (AIC31_data.uint);
0 m7 R1 {! p  r& j+ Z, E! D}
+ h  ]" C! O- Q" ?" f1 \( y8 r$ j
分享到:  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-17 13:20 , Processed in 0.047017 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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