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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ o( l" @+ M/ I4 hmain文件:
# z8 l. y, P: I* i1 O3 finterrupt void interrupt4(void)  
/ {% @# ?" ?& ^  k2 H{* ]4 R/ e) ~4 m; Z. p* `
  Uint32 sample;
' [# Q% @) G& G$ d9 [( r( d( u) K
. \; G1 K! S1 [% q  sample = input_sample(); // read L + R samples from ADC
6 O4 m4 F$ X. j8 t: g! Y. W' Q  ^, W  output_sample(sample);   // write L + R samples to DAC 0 S7 i" p# [* Y; s5 Y: l, L
  return;9 H/ q3 C4 _6 ]1 h1 q% }
}" b+ b4 M+ y5 r8 f
/ x/ p/ A* J- {* D4 @: O* ^
int main( void )8 j2 L) g* Q! x
{
: B& @4 F' j) f& s$ v5 n' o) N, I  R) a) `$ ]: E
    /* Initialize BSL */9 e. h7 v6 \( x  B
    EVMC6747_init( );& U% i4 q- T% z) X( b
        /* Call evmc6747_intr function */: h& {# {3 O! n$ F( Q
    aic3106_init( );9 U( n, c: @/ ^0 Z) Z; p
        while(1);% A& N) P; c" C/ t0 [1 z
}
" z  V( U5 v& X# V$ r. z' E' j- e$ {1 n: g% S$ q- X

+ R1 m0 B, ]( j! j& R. ~! T& b  naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 P9 r. p" S0 z1 T9 _2 ]
/* Initialize MCASP1 */
) N8 S$ {+ c: G- f: i2 t    mcasp = &MCASP_MODULE_1;
; ]) V: E0 {" K    mcasp->regs->GBLCTL  = 0;       // Reset
. f; Y7 v: E0 q) }" p# M4 w    mcasp->regs->RGBLCTL = 0;       // Reset RX
, K& H" p) h6 z( K: L    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ Q" Q, i5 u& _2 n2 q  d    mcasp->regs->PWRDEMU = 1;       // Free-running# E* {+ }' X0 h: c
   // configure McASP0 receive registers
; j& e. t, V, o% W6 I9 V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 T) \0 O( F6 l, u9 C9 @  T' A4 b    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& k7 P) m5 ~5 ~4 M4 {    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 Y# o8 S5 O8 B6 v2 K8 t$ [    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: o% W3 n+ D7 z$ `; n4 c; Y) E  G% l. K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- E' q9 I5 M0 C8 T- w& w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 K( C5 U3 I) n' U$ W* H6 T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* W8 _, g* E; K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 X- K& N/ q6 D0 C2 t$ ~) g5 T2 u/ b9 s! d, V
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 P' m5 |) z  S8 ?0 e1 h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- O! l9 @/ e  Z" m" \) q* r  y; P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' y9 ^/ i% E; S( W: y- [7 w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 u2 H, S8 w$ m
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 e3 E9 K( f; t! S    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' W; a' @0 N  t5 M    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 [* ?' y$ Z7 i9 x# @    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 L6 l; f! {  P' t9 U2 h  K  D* u# I
7 ^4 c3 O+ l6 A% X    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ A. w6 F$ |& w: w
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 E5 F, u4 v7 F- q$ b, S- m# l    mcasp->regs->PFUNC      = 0;          // All MCASPs  R! f. Z/ q1 _, E9 b5 w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ K# H" Z) P5 m1 B7 o
$ B: O2 M5 p! {( k3 h
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 c8 R" Q( w) r( P- E. [3 q  g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 m9 b6 o( C4 Y0 E7 q    mcasp->regs->AMUTE      = 0x00000000; // Not used: e( P2 j% l. z) A
: ?/ e( `5 w# M$ N8 B( a* Y$ R
/* Starting sections of the McASP*/
+ S% w# N  v8 r7 ]; H" f; A# \# M+ i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 {% t2 ]& ]: @, {6 j2 X+ {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    h2 A( R3 B$ P2 a4 F. d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 U7 Z7 P4 Y) J9 B' J: |( m5 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 ~8 x1 b: T; p9 N& m

& l. p. F7 N" j3 e+ H) ~6 ~% V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 V% d; m: v9 C- `2 y  h6 f. C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, [! p; @# O0 T2 }* N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 m4 c3 d9 Y# b! [/ K5 d& P+ x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 E' j- F0 B! D8 e% I' K' k; w

7 s0 Q7 \6 d; u! {% y    mcasp->regs->XSTAT = 0x0000ffff; . a0 k) Q1 }  D
    mcasp->regs->RSTAT = 0x0000ffff; $ n9 e" z) l' C. w

3 u% |) ]" ~7 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 h# e* Z9 Y5 ], f/ [& u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 j( a! m9 F' H5 @0 M
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; Q' n4 L# s8 r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  R& e4 G7 Q7 n2 v

4 u) @- o- Y. ~  Y2 J    /* Write a 0, so that no underrun occurs after releasing the state machine */  n% N) ?0 M1 {, F+ Z7 y; m
    mcasp->regs->XBUF5 = 0;9 U& g  |3 U( k7 I1 y  H
    mcasp->regs->RBUF0 = 0;! Z2 e8 m# z2 j: ~

& @1 q, u9 e5 X9 N' b0 X    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; j- ^0 t* m' j8 _; w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: e& {" h% T) \, d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ p* D5 q& G6 [8 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" @8 \# D/ }: ]
) @: p! X! _  ]' u+ G. ~: h    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ A0 P' o- {. a$ C! {$ c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 g6 k( a+ j6 v5 s- U! Q
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( z2 C1 @! m5 J. `% W2 r& r8 b" u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- P8 R! v$ U0 i; k% h1 l6 O* \
6 j7 n. j8 G- G6 Y# M$ e3 B% `8 @
    CSR = 0x0000;/ f. L8 d/ |  M8 ^! z
    INTC_INTMUX1 = 0x3d;
* q# h) Q- n8 d1 M6 M1 K    ISTP = (unsigned int)vectors;! z0 L6 A" y7 B, E4 W
    ICR = 0xFFF0;  
* K8 A3 d: l+ d+ q' f    IER |= 0x12;  7 P% I5 `+ q% F0 E/ w
    CSR |= 0x01;  : P* \$ s1 j! P& p
& t- R* k1 {, u
3 k  f$ m" M- O: {1 }- l3 r

9 H, E! G: G) w  h( S  D5 V还有就是两个输入输出函数:/ d! t0 U' ]0 t" j% k. v% U
void output_sample(Int32 out_data)
" t% K8 f, a' f) p{. e, ~+ Y& D0 w8 Q
  AIC31_data.uint = out_data;  - Y( s6 q# R9 p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 k! L' b: I8 T}& B5 O; E: m! Y$ r" \( \4 m

+ w) ?' l& U3 D3 H7 e& g5 C; ]3 i: HInt32 input_sample(void)
# T+ J/ F) h) y  T0 |, _3 \{  ; |* k: f( v+ j* {# [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 B/ p) X1 I/ N6 Q: V" K
  return (AIC31_data.uint);
: f3 F. K5 t3 n% a( Y* |+ Y}: a" e+ E& ]# P* e7 O& t$ G- R

7 {5 k- Z, R) o, ]
分享到:  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-4 19:29 , Processed in 0.040928 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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