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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ L: c5 E( K5 C5 `* v( L
main文件:
% `! R1 u  }; Q. a  c/ Z- r9 {$ Binterrupt void interrupt4(void)  
3 Q+ ^8 I8 M) n% [{
5 C. p. r; k5 D) H5 D8 v  Uint32 sample;
0 o7 v) H+ _* g  @/ q: t+ Z9 T) e8 u
  sample = input_sample(); // read L + R samples from ADC8 w1 o/ \; H* J
  output_sample(sample);   // write L + R samples to DAC - m) n9 N* c# L
  return;
: |9 `- L/ i6 D% `2 V}
: G6 G% l% x$ z) a: H8 q( L% f* M& C
int main( void )
" I( f  N4 @* I; |6 \7 S4 ^6 S. U3 L9 ]* x{
4 K4 B9 u+ y' R( Z% c9 `
* i5 E2 \+ r# _    /* Initialize BSL */- m, \# C* S) A! J3 ]
    EVMC6747_init( );/ _5 B2 F0 V9 P& r8 J. T
        /* Call evmc6747_intr function */
0 \: w# o: s( K/ X    aic3106_init( );
+ G4 y0 w: U  Y6 X* x        while(1);
9 C1 T' S( G  k}# D' m; x( w2 @2 J; O5 J
; R" a2 `# T7 B: L# n
, z" r$ Y/ s2 r% h8 F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ _" J5 D0 {6 i" o3 J5 g8 f8 o; a. f/* Initialize MCASP1 */9 u( b% p  L  H1 u1 K( N
    mcasp = &MCASP_MODULE_1;
9 ~7 i6 f! j7 I8 N1 h) j* ~  O; K, g    mcasp->regs->GBLCTL  = 0;       // Reset
7 t$ O7 N0 }; r) d8 x& z7 Q    mcasp->regs->RGBLCTL = 0;       // Reset RX6 p9 |' y; U8 Z. b4 w( V
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# J2 A: w$ e: L7 E    mcasp->regs->PWRDEMU = 1;       // Free-running4 K( {% I5 S. D
   // configure McASP0 receive registers
1 B( T3 [8 o+ ?5 o1 U) z+ [    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* J; F6 k. U# d" K! h2 d
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  T7 s6 @" h! p3 w( X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( H% P# {9 v1 l$ h8 M# w4 R$ U
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' L" H, x& T. t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- ?7 j8 ^8 I* I7 r8 g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" a1 w+ k1 t$ P1 U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  ?) j% G4 @3 d  N    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 b+ ^& s% x' T5 a
* ~$ G1 h: [8 ?0 Q6 c6 S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' I/ V5 O$ k3 m% p- s1 w' w    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 W" {! L$ L- g3 S4 M' {9 E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% W! Z  z' U% Q* ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ }# S8 u& l9 \4 f  u" U
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ w5 ?# l; P  v; B0 C. A; I: V8 c    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 U- ]* a4 \  Q4 K  o2 @6 }    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 V  U( |' U% l  u2 E, G- g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 K9 u, u/ u* t
: E* a, G' n- E- D0 j9 c    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  |6 t2 Y3 q6 u9 b; S+ m4 [4 S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 F0 \) g) Q5 Y+ V9 N4 W    mcasp->regs->PFUNC      = 0;          // All MCASPs
' p3 U8 d# N6 o1 H2 m2 l1 V    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  k' s0 j) X/ T0 |, J6 [* r
' }3 o! {# m$ @+ q1 |, c    mcasp->regs->DITCTL     = 0x00000000; // Not used! M! z4 e& {# s( x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used* H1 ~! |; X* `, x" @* P3 |8 P
    mcasp->regs->AMUTE      = 0x00000000; // Not used# v" o9 f8 a3 ~" Z5 u
- s, t. N0 O  @" W0 H9 V
/* Starting sections of the McASP*/# H: j0 c: J+ R+ H: P5 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# U- Y6 U6 f) B. O4 M4 S( K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 M$ u5 X  @0 O1 c1 c& ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, u' a2 f7 Q- W5 y0 l$ q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; X" v/ n7 u8 h, z  d3 |$ I! {+ T4 C6 r; ]) w2 I0 M: U" J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ o- D7 Y3 a$ p5 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! K" l# o8 \- K" O: ^    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# |2 f- L+ W. c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ n( V; M& Y# d* `, z! d" c: i0 |2 b% V5 D- ~; g! V, z6 E
    mcasp->regs->XSTAT = 0x0000ffff;
4 o% V! G7 o% S  u    mcasp->regs->RSTAT = 0x0000ffff; & u5 ?' {, f5 |  K
4 O& C3 @: q* I
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 n1 F# C) w' m9 e( v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 t& P, `% ]" X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) Q4 i' W2 m6 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# V2 [5 r, q* e
! a$ {" [3 r7 r    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 ^% U% T; M# X* [8 c    mcasp->regs->XBUF5 = 0;, T  Y: F1 d  ?0 ?6 |* q
    mcasp->regs->RBUF0 = 0;
3 {$ Q$ o8 r8 G
. P! |- y' Q; Z' n7 e& I7 ~3 X8 H6 |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   n, m  e4 r$ a% _$ d+ Z" M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 O& L5 T/ t) o# J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 [) g* s, b! z4 ]; {9 E- S0 [' r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 N9 k9 e" T) i  p: L) V
" J- K* s- A7 c8 X. \6 ~$ B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 o; g1 c- Z6 T6 m2 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 q  @, S0 Z# ?4 K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& Z! F& }0 \0 O' [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 n- E! n3 X- u" F1 i2 ^

( p1 i  x: q0 K3 D: N8 g/ _    CSR = 0x0000;
% |6 A. Y! \6 q3 G6 W# m5 N    INTC_INTMUX1 = 0x3d;
9 D/ X* v, I# I0 T    ISTP = (unsigned int)vectors;8 {, ]1 b$ E7 |/ ^8 e& f4 E8 A
    ICR = 0xFFF0;  
! g" ?/ L' ?% |3 {; ~; _4 }1 @" O    IER |= 0x12;  4 H) c% ?# t' Z" ]
    CSR |= 0x01;  - T: @$ B  `, v+ u8 X+ I& s! `( l
" M+ ~4 D. b$ i+ G

' J: K9 q( N! \! `0 A. o
( T. k3 N$ l$ K8 q& g9 F' K还有就是两个输入输出函数:
6 J1 _9 c8 s  f7 ~" o/ p' x; Xvoid output_sample(Int32 out_data)
% z$ E1 D+ i: J! i' W1 R& h: ?{
3 G: e7 F3 L9 ]0 Y3 C. K. X  AIC31_data.uint = out_data;  
0 S% \$ Z0 m) E  ~. }0 c( V/ P  MCASP1_XBUF5_32BIT = AIC31_data.uint;) e* A7 _/ X. H9 q+ r8 S
}5 j( i% e4 v; u" R
5 c& I3 z8 b0 E
Int32 input_sample(void)0 u- J% s. P4 n
{  
* ^* J7 X5 x0 L+ Q* k6 f  AIC31_data.uint = MCASP1_RBUF0_32BIT;; p7 e' H& G* [$ ~
  return (AIC31_data.uint);, c8 ^* ]) i# Y- L  E
}: I7 j  A/ @% h" |( u& w* k. Q
0 @/ U3 U) h: B+ I$ 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, 2025-11-21 16:14 , Processed in 0.037936 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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