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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ a; u/ J8 {4 \8 k
main文件:2 e4 y4 M2 j2 R) n* p* P* h: h
interrupt void interrupt4(void)  3 s, d9 d3 V' N5 s( F
{6 a( w. W  ]/ h+ t0 Z
  Uint32 sample;
5 v! c0 B1 x3 m6 t" T
8 ^5 P% I& N5 w  G8 O4 T/ @0 y" Y. R  sample = input_sample(); // read L + R samples from ADC
4 T: A) f3 V; L4 X5 |, Z! Z  output_sample(sample);   // write L + R samples to DAC ) k; W/ d! H- _
  return;' |; p6 ^6 Z7 J7 J( S9 ]" h
}, j4 g( D3 j) A# i( ^: D. H
% s! m; O; g3 x/ r4 s# k
int main( void )) S7 S! F* W0 v8 U: r. G
{0 Q" V: D; D4 {3 m$ I

$ r8 r% h& k( {( b" V    /* Initialize BSL */( X- M  Z. C/ C" z( {1 v( U
    EVMC6747_init( );
0 [: U) z9 P; X6 t        /* Call evmc6747_intr function */  A: ?# \7 E  O* [/ u2 D" {
    aic3106_init( );
6 l- A5 S/ Z/ G3 ~: |        while(1);6 Y( b$ p) Z+ O' _- K
}# J8 L; w0 w6 z! O  C. S

( I9 }( w4 K* e( W  [3 |! W2 l1 P; r* I' r5 H& c9 I. o3 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 v" d! i7 x3 L
/* Initialize MCASP1 */
- [7 E4 F4 s, I/ D    mcasp = &MCASP_MODULE_1;0 B: L5 G  C2 i* I& i
    mcasp->regs->GBLCTL  = 0;       // Reset; O) K6 C, j; Y" x* o
    mcasp->regs->RGBLCTL = 0;       // Reset RX
& p# N' |9 H% `4 F, i0 @, H  S    mcasp->regs->XGBLCTL = 0;       // Reset TX0 g( d0 @8 B8 u1 R7 {( j9 I1 R
    mcasp->regs->PWRDEMU = 1;       // Free-running4 `4 f2 n$ Z1 `6 j2 e  J. W
   // configure McASP0 receive registers3 z- _  G+ o7 ~) N* @% @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 L. k9 u1 B; u: {
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 C0 U  i2 Z) c0 o
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 n, J* C- N( G5 C. o/ u9 ?    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 n3 r- {% q& j
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, L/ [* c5 [& m    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ ^8 K  I) k- h7 E! X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used# f$ u! Q& R! G; @# I& \1 d
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ y# n3 d2 b3 y1 N

' X+ S5 @  @5 @3 M0 j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ o8 j$ N$ {  [- O( L
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 {- R! E. N5 I  K" F3 e
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ `6 M: c$ s( v0 T" H0 |- U! ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  Z$ U% w+ A( C; Q' J2 Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 j& R$ U/ y0 s/ }1 w! O* P2 Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ {& h$ l4 n! ]; V0 b+ a9 I- x( _& H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, q# Q- Z# C$ w0 C2 {, M! P
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( M; H# ?! |( `! \* `( @+ _) B) o
9 G4 i: Y( H3 Q, G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: {" T- o' u( |/ K1 ]" d9 g
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' _1 X; c) a) C& l! R5 q, h4 r    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 n7 Y+ f" ^- h) Y5 p, `8 ^4 k    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ H) H  s2 h' D7 z$ ?3 {/ `
8 l6 P# F' g+ J# l5 X
    mcasp->regs->DITCTL     = 0x00000000; // Not used4 i: R( C5 Q  R1 e# r& j) k2 X6 ?8 x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ Z1 y: C' O2 v' }  p% ?    mcasp->regs->AMUTE      = 0x00000000; // Not used+ s1 ]5 u. q/ `6 h

& X+ {7 D# X6 B# I* y5 ?/ N/* Starting sections of the McASP*/+ M+ o4 S& |% u7 e- `% `) }6 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 V3 Q# ?/ x/ t5 y: T; K# }) s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 u7 g1 c3 u1 h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; ~7 g; Z( \7 A8 x) h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 `9 j6 y. l- o, d# _) ]. E$ r+ p3 z& l' N4 s) ~- d3 C
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 U! D$ v! @" |+ V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, u0 j& N; v7 y( a4 C  i7 [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# v4 E& N( f2 Y" v  q# o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, S3 `9 ~6 p! o4 l8 q/ T: d1 Z8 H2 ?: }( m0 S5 y' \
    mcasp->regs->XSTAT = 0x0000ffff;
, E/ Z! A, H& E. p: L    mcasp->regs->RSTAT = 0x0000ffff;   m9 I$ |  U( ]4 l
$ o8 n5 V6 C4 q0 c3 b  F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' S3 n: |* w" H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; B5 w1 }5 D' M- f8 z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / x6 H, m, k3 l5 Q8 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 g. _, F# Y0 {
9 g+ e- t# W5 g    /* Write a 0, so that no underrun occurs after releasing the state machine */4 m* E* o. Y0 e* g' V2 ~' G
    mcasp->regs->XBUF5 = 0;
+ _0 W8 |: v) t+ W. J2 g$ A    mcasp->regs->RBUF0 = 0;3 J' I+ C. C1 v" ]" C! v1 }" X% W$ x7 C

+ v, I$ h3 y" v) u    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 w- [0 V& C: f: s) D1 a* F9 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 @1 X; a2 m+ r    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + g; k9 H- I3 v6 Y$ p) l0 p9 o% M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 J9 b5 C: ]8 {4 e+ C# h' H
) ^0 t& S  R5 x
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ Z. Q  C7 o( W- \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  v- V$ F/ ]3 f7 _+ w1 G5 o- h! F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 U  v) D& I7 R: B$ t* g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 |& q* i$ I9 y% n
: K! ]+ ^4 a, N. ?+ ?8 K
    CSR = 0x0000;" j4 ?9 K$ L" C
    INTC_INTMUX1 = 0x3d;2 N+ l4 ~5 ]* K
    ISTP = (unsigned int)vectors;
4 D9 U& E# ?1 a3 |4 b1 m    ICR = 0xFFF0;  
5 `% P: r* {/ c! o' D0 ]    IER |= 0x12;  8 i. C6 b' s% F% S% g( E' E8 m8 e
    CSR |= 0x01;  + `9 H' a! p; q5 n. I, K9 Y) j1 ^
* B/ ]0 U$ i6 z# W* y2 e

# i7 k' Q: [" R' u
7 t# \$ V0 \& B9 i' E还有就是两个输入输出函数:$ x% ~. |3 k5 O2 ]$ M
void output_sample(Int32 out_data)! s" ?8 O5 j% s0 p' ?' X
{
, f3 K& B8 `. u8 n7 z: }2 F  AIC31_data.uint = out_data;  % }+ @' o: P- B0 k! B
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 G% B: [  p: t2 A$ o5 n}. v6 {6 i( P/ F. T' U9 U# w

7 J9 R& w; t  b$ Y; nInt32 input_sample(void)$ C. a3 }5 S" {3 A6 |
{  
+ p, ?  ~) v3 y5 u3 A8 }& e6 D8 g  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 ?* Q% k8 K% e* t6 ]: N# z5 ~% p  return (AIC31_data.uint);* e6 Z; u# X& l* f, Y! G/ L
}( f  D+ z1 o1 F- _' u4 f9 B
& P$ h. Q+ g/ _# x7 h
分享到:  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-1-27 00:29 , Processed in 0.041585 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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