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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) M) U% _4 |# T) v
main文件:1 A) Q4 p& M" o/ h
interrupt void interrupt4(void)  
2 Z, Q. \" |% F" Y: \{
; A( J# T$ I6 S* y# B' q  Uint32 sample;
3 T5 c* b: A2 a( p- i8 M1 x& e
% i# F: [0 }( d  sample = input_sample(); // read L + R samples from ADC
2 g% E: d* ]- k5 j, O4 h  output_sample(sample);   // write L + R samples to DAC * Z; s3 ?6 w. Y
  return;
% _" [& |% Z; }}
% k$ m& A  a$ Y" T" m* Q
4 g/ S, ^( p7 C- ^" K' Fint main( void )4 I$ |. s% a8 M1 i+ g7 e, J
{
  E% a1 `+ ~+ X5 l9 N  o6 O+ l* p* b4 b& T: t6 f, a. K' Y
    /* Initialize BSL */4 o5 I. N6 l! Q& E0 v, T% \# w+ z
    EVMC6747_init( );
. s& h9 A7 W; D' ~) y        /* Call evmc6747_intr function */
9 ~- t0 J# m, A. y* w    aic3106_init( );
9 ]+ \* F% `7 a+ `# d. U2 u; y        while(1);
, h& A: m4 J' E# x+ W}' j  q6 G' M- v
( l# ^0 _+ v6 ]/ r6 b

8 X, y+ d$ N3 Q  a* R0 @# w% |: Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 Z& c, G4 }4 W* N( n( x/ s/* Initialize MCASP1 */% e3 q: f0 r5 O" h
    mcasp = &MCASP_MODULE_1;
. i" {# D' w5 z: L8 D    mcasp->regs->GBLCTL  = 0;       // Reset" R  o) O+ q$ Y* ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX
; r- w4 @4 J; d    mcasp->regs->XGBLCTL = 0;       // Reset TX( J; [0 z! a/ R( b
    mcasp->regs->PWRDEMU = 1;       // Free-running
; k9 x; k0 [' l2 |* ?4 D   // configure McASP0 receive registers8 K7 x+ a9 E9 A0 L' t* k
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 o8 u- q( t4 p3 Y( k' u1 F    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; K' [* b, S( L: p& U/ ~8 Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 x. |, ~2 M! ?) G    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* K: V! B% H  `- d; l    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* Y+ m+ b4 [9 z' R# W
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ J8 p1 ]) B9 {; A    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* S5 A# _# C% U: N7 T* t* R6 E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 z0 S3 n; T: \& ]# K* f
8 o( c, v/ e+ ]% i) g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ h) f& u  H0 K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! ^7 ^& y% n4 m/ _& ]    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 q3 L7 V7 x( Z  }! e' G# e7 ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% Y; X. ~2 t4 G& q9 D; h0 ^: `: D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. _  g# m, W/ t* _1 s/ t' R8 t7 A: n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 Q" ]! l! k$ |. w5 k( G
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- e/ J2 {7 G" a8 O3 c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ ]7 L4 I) N2 x' I* G3 b1 J, }* j
+ u2 i) w; l9 z- N( J
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! N; @9 @7 H2 n1 U& b
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 g( l) M) B7 ^: A    mcasp->regs->PFUNC      = 0;          // All MCASPs! V& C8 [0 G6 Y2 Q2 v3 z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 p$ Z. E2 B7 ]0 {3 y+ N

1 Q4 Q2 f' Q$ }0 X& @/ r* s    mcasp->regs->DITCTL     = 0x00000000; // Not used/ _  Q( l, _8 C2 m0 d
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# w5 K0 {, \5 P+ _# B# o% G+ C    mcasp->regs->AMUTE      = 0x00000000; // Not used* S8 U" m! x0 \  T

5 e4 f$ O7 h  ~3 _8 `3 e/* Starting sections of the McASP*/; Z( R" L+ }3 L
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % \% S& @, V) A2 ?+ ?3 a9 |& W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: W  K( q% q' r: N# s/ c    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + A( Y2 A) A  y# l& r8 [# k) t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 v) ]9 ~  s  L' G1 o

6 h* d; X' o" ]3 R    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " E5 _0 }( w$ N4 {% Q: A! O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# C  L/ U: l# l' Y# U8 g3 }* Z. i    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 ]& @3 \; F! b2 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% i4 z; y" y6 j
, _% b4 K' B9 A# L8 G- z. x: S
    mcasp->regs->XSTAT = 0x0000ffff; . N# u0 l9 A  g
    mcasp->regs->RSTAT = 0x0000ffff; 2 K3 [# [* F" |9 }7 q

4 B: \) g1 P$ Z& l    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 j- N2 }  X% o2 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  y' m+ C/ n/ z" [& V0 |6 T    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 v6 A  a* q$ e4 W' W  s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 {2 p5 R3 S- G2 [( e# L4 j
9 n7 L& `; c  o- N; S6 }' M9 Q
    /* Write a 0, so that no underrun occurs after releasing the state machine */( |' z9 g; |  P1 ^
    mcasp->regs->XBUF5 = 0;
) k" Y  K6 w/ G    mcasp->regs->RBUF0 = 0;+ v, n, ?2 B& t1 x* a2 M
+ k( X" ?9 C1 ^% z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 T9 g9 l6 ~8 B: w- ~6 |: Z! {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 ~" p  `+ O6 Q# ~8 v/ k    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , P" G8 e  T) l& x3 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 b3 L' K/ l% M" x. K) p* w, r: A1 g; }9 R
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( x" k0 ^& Y7 F) Q; U% `$ H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 p+ L" b) h# B$ B  Z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( t. M( b0 N3 w7 @( V) ?+ a7 K: x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. l3 @/ C7 S& J( Y, C8 B$ f9 \5 r" G6 ^0 |# ?; ^3 X7 Y
    CSR = 0x0000;
6 |/ z9 r# ~* X    INTC_INTMUX1 = 0x3d;; f3 ]: G* q) f+ i5 d5 ^! h: ?. c
    ISTP = (unsigned int)vectors;! n2 V0 F( a. B' s
    ICR = 0xFFF0;  
, J' I- V3 u2 ^* p1 W9 L* J. u  u    IER |= 0x12;  
. x/ r8 `2 o5 v    CSR |= 0x01;    G9 z  z1 _5 W- p/ }. r4 ~, h

# o  O* a" P2 N5 {
  i6 R: z- ?+ z( W6 c- P
  L& o9 m8 M0 y4 Z. c. w' B还有就是两个输入输出函数:
3 G# {3 W( }* D: q% Jvoid output_sample(Int32 out_data). S( X* B- r( G# j+ |3 @, ~
{
6 v; R/ b3 E# S, N  O% q1 S  AIC31_data.uint = out_data;  
+ _8 w" c' e- L  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 m+ k' U  l( Q7 [2 m( o& z}7 `; Y& I' E1 w; h5 X# C4 G* d

' W: K6 ]9 `" r# \Int32 input_sample(void)
- U- }4 F. _- Z* E5 V{  
' k7 b. H9 G" C  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% t6 O5 k* L. ]& u  return (AIC31_data.uint);5 ?. ^' D( m0 `7 _# r; z) a- [
}
& ~3 z6 P1 e8 D5 N
0 r/ \3 J. o0 q7 D8 [1 ?
分享到:  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-20 03:09 , Processed in 0.039009 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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