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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 q2 e5 `; Q2 t* Kmain文件:
- a! i" {* G9 l' H+ Rinterrupt void interrupt4(void)  
$ p: H9 b& {  ]% H{
2 N1 d! ^' G! u2 }$ w  Uint32 sample;/ s1 E7 k/ ?; M% i3 l
& |* g: ?, w. t4 |6 m5 U! ^' ^
  sample = input_sample(); // read L + R samples from ADC* A* X4 D1 S$ t  x
  output_sample(sample);   // write L + R samples to DAC 8 R  \9 M: I0 S! P' I' ^4 \
  return;  E$ W6 m  l& \1 v$ ]5 x
}& [# d/ V" X2 K9 C- v- q' u1 A
1 B% X, o  q( v- j* u
int main( void )
% H9 \( Y, P$ h9 K2 Q# H) x5 z{" [! l2 j* j! J6 d/ Q6 p+ O
: U7 e$ Y+ @* d1 R8 x
    /* Initialize BSL */4 m  u% x0 c, Z
    EVMC6747_init( );" v4 a1 W) \- U! @
        /* Call evmc6747_intr function */
* L. i2 Q) ~% N- |- P# e, ^    aic3106_init( );
, w2 c' h$ Q' u        while(1);6 _7 ~- q( K# s# ]& y
}3 j3 q9 x5 t1 y6 [
! M4 _0 d9 f4 o; x9 E
! [+ m7 H" ?, X1 Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: d2 y8 J$ l+ K- o8 }
/* Initialize MCASP1 */6 a! v4 b2 l+ k
    mcasp = &MCASP_MODULE_1;3 W! A$ ~# x. Q2 |; n3 I3 v
    mcasp->regs->GBLCTL  = 0;       // Reset6 X1 g, z4 q7 l& L  \( x
    mcasp->regs->RGBLCTL = 0;       // Reset RX% q3 ]. Z5 d$ t
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& z* U" O( P! h4 \$ F5 x    mcasp->regs->PWRDEMU = 1;       // Free-running& p# n/ V4 n; T6 {  u' H
   // configure McASP0 receive registers
3 r& W3 L5 {% R4 r0 F" f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' C* `$ f! F' A& r9 q9 h) L- E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 u- h5 ~% i9 U4 z$ e2 w/ k' Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 ]! M1 o0 V4 e4 E0 B9 Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 K8 d$ M3 e! g8 A3 t
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), L6 b* y' Q# r1 m  G0 M( Z/ [; ]) n
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& B+ M$ g4 n+ H" f' c9 v    mcasp->regs->RINTCTL    = 0x00000000; // Not used, l- j8 D' |5 w0 [9 P  Q/ y& I
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 X) b0 h7 [! V/ H3 @
+ ^9 O6 w# x9 r% u+ E1 W    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- }) j! V  }( A) m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& ^( ?) O" O1 r2 a
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, g+ I! i( Q& k) c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 f2 E: P/ v4 `7 N. o" n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 G, r6 o7 ~; j, ~) f    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 E$ [# |: L" U6 L" F( g( y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! d  ?8 L  B! _) R  j4 Z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& s: W1 C/ N+ V* R0 @
2 E& x" R& d0 X2 v2 I  j5 ]
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) U1 T3 k7 E7 a" t: j+ P% a  ~4 q0 p
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 e- [4 r3 U# }4 X4 k0 {
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# W- m& E/ T4 j" K( C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' p& S% r7 O' H& n
! [- _, V* F2 o. P    mcasp->regs->DITCTL     = 0x00000000; // Not used
- @1 t2 L% t9 l- W    mcasp->regs->DLBCTL     = 0x00000000; // Not used- r! a/ p# J4 Q6 `9 e
    mcasp->regs->AMUTE      = 0x00000000; // Not used
( D1 A  S. z  S9 l4 e4 y
  l( J7 A; b/ I; c/* Starting sections of the McASP*/
2 w* B& j* I: `5 y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 I3 _) p+ J* i0 J5 d7 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: C. ]. s, |, o: D. X2 }    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' g+ L( v: @" c& ^% q# `5 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) K8 s4 F( w6 ?" s4 A! L
& b' w8 O0 M, n
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ s; y$ S& ^; `4 ]4 C" R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* U% X. x* t+ _9 g, e    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- j$ t  a1 V! _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 M# Q$ B+ `! T9 ?. t! f! e% @& ]  t3 ^( Y5 o9 v
    mcasp->regs->XSTAT = 0x0000ffff;
; c/ Z' g, Z! J. d, T' A    mcasp->regs->RSTAT = 0x0000ffff;
0 b8 U( R8 O7 Q2 I! T) ]- ?% W+ c5 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) c. }- F! r  H0 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) F) S1 A8 J# S, h
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 |1 I5 h, a$ E- N" n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- b0 B5 [0 K8 ?5 K  o9 y; V; S0 j+ Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */* b$ i6 S% {* Z- O3 f9 r
    mcasp->regs->XBUF5 = 0;
& ^# S  E0 j/ k    mcasp->regs->RBUF0 = 0;- Q1 W" ^1 X, u1 V/ l' }

; e( G, g% ?5 _- [6 i% x    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 G1 X: z7 a6 ~* S$ {7 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- d8 U& y, M+ c  F; A1 g3 ~5 _
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  l( m' Y6 r" Z' B: @# d* v# e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. U2 b$ `/ l8 \
2 ?1 N9 @6 j% h% R# d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# \3 d( @. z' O! G% N3 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" Y; |5 X( b( {9 ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& Q6 J$ N+ k% M7 h4 }. g: M4 o+ Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 p4 B0 o6 Z, `# {- d9 K6 K9 i( E0 a5 O' p0 N& ?& }
    CSR = 0x0000;: y$ L# e' y. ^4 k# S
    INTC_INTMUX1 = 0x3d;
1 c. Y; O( F* [! v* _    ISTP = (unsigned int)vectors;. q! f+ s* h& m/ r  Y0 G
    ICR = 0xFFF0;  
% N9 j/ Y2 f  }9 Z2 ^2 Q5 ~! C" c    IER |= 0x12;  
) R* \2 }- X7 Q: w* C    CSR |= 0x01;  
/ K& @6 L) b( w! p" o% j( K; f& u, J5 m+ c) {8 k; d
9 B( k" F' R9 `  d: Q6 R# z- x
/ w& ?6 M* f. U' u. ?9 {/ N: \
还有就是两个输入输出函数:
% X4 R7 ?! A4 M3 k# Gvoid output_sample(Int32 out_data)
! }1 J/ \" d; v, S{
* n% F1 g. I" k5 N8 Y- y0 M  AIC31_data.uint = out_data;  . j8 m6 g. O8 Q+ N7 ]+ j' ?
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 A# I- k  p+ o# Y}2 {0 e- K; o1 [5 ?5 w
1 l  ]$ P2 o# R) I
Int32 input_sample(void)
6 X) w% D3 I7 L+ o0 D2 f( u" G2 |{  
+ ?/ z% l; Y  j/ z4 h; e9 `  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: x6 A  G0 }8 c( E9 {  return (AIC31_data.uint);* z% e+ [0 h, p/ w
}
( y/ f3 K5 o8 Z; J0 r; S% V: F
% O" m4 Q0 o, S7 @# C
分享到:  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-22 08:47 , Processed in 0.041239 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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