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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) Z# U( Q/ r- j5 m
main文件:
2 i' n5 i0 s; _/ [4 ^# ]# X+ [4 cinterrupt void interrupt4(void)  
- _6 ]4 \! |' m) C& U) J{* J1 w- g7 c+ E- }# D5 D+ j
  Uint32 sample;8 A  h8 H' {3 p
  V, k: K5 b% Q1 u
  sample = input_sample(); // read L + R samples from ADC8 \* s7 @( F' X+ u4 I
  output_sample(sample);   // write L + R samples to DAC 3 S& {1 z# e# q
  return;8 E; s4 K$ v6 C" j' c: ?. x: T# W3 u
}$ S. p8 N) O: W  g$ `
% S3 n8 g& |( }3 x1 M! M
int main( void )2 b! G" R; g+ v9 e0 ^  H  J
{# F  J1 T3 y" p1 z! S, A* j, ^1 j

) o2 T. ?( ?& M: S4 a5 |& ?) y$ b    /* Initialize BSL */
2 k# Q! A, R' e    EVMC6747_init( );
5 g* N" B' A2 v- S8 u' e        /* Call evmc6747_intr function */
0 Q9 t4 N- m) `& Z; D    aic3106_init( );
% ^; X- B! \6 C' T  K8 }        while(1);
0 Z0 M+ J5 `3 {8 B}
" X6 K+ S% T4 H  }, \% O9 C
3 r0 _: `0 o: c' M# j
7 l! w0 W( }/ E2 z. v9 Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% E. O% y$ Z8 h, ]8 m% f8 `/* Initialize MCASP1 */
# F* q; |, I* [0 V: v* K    mcasp = &MCASP_MODULE_1;
! E1 h( K0 {7 N: E+ j    mcasp->regs->GBLCTL  = 0;       // Reset
* ~2 T4 k' {! d( s8 y3 }; L    mcasp->regs->RGBLCTL = 0;       // Reset RX
* {6 l7 Y+ d6 }8 D9 h1 B    mcasp->regs->XGBLCTL = 0;       // Reset TX
) y) o3 ~2 z6 a" G    mcasp->regs->PWRDEMU = 1;       // Free-running
7 I& ?4 y) O4 k, `! B& O# {  v   // configure McASP0 receive registers/ w7 k7 j* r1 @9 O5 U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' b5 T5 n: X: S" g    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 T+ W- R& N2 g: `! J; @9 q- \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* i# ?% O% b' c  e$ G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, Y, F# T* l: w3 h+ M    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 [/ K2 m: n% Q5 [9 h* O    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 o4 @$ S, ]$ o* A
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 |) h- y2 v& m" I4 J4 e$ @
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 ^; |1 O7 a* p! g
7 z2 i2 ~% a' m1 Y2 I- L) t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ i0 W+ B( u2 a    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- {+ S! P5 s5 X7 U/ t  t& j    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% l# w. V6 Y" X$ h7 J7 A8 l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 H, _8 z, ]5 C, _+ I4 W
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 Z) V; ]7 W) _
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ S5 b/ z! X$ D8 N2 T& q5 P+ ~    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 k7 N# Y& m1 Y% K' z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 ], J% j) F' a- s4 E( u. y8 H
* b7 x! Y+ C7 ~6 ?% h* n
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. r* G2 D5 ~, d3 L9 a# ~# @: d    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 q' P; d& [. S/ ?    mcasp->regs->PFUNC      = 0;          // All MCASPs
. H" k$ O: [+ N6 n: M2 c5 W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 R9 M7 j" s) C: e
5 c, B' H. k' y6 u8 s
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 k+ d4 M) B5 e; S0 v5 v    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ q) b9 V3 R- b+ r. Q. F: n8 O
    mcasp->regs->AMUTE      = 0x00000000; // Not used
# n5 s) j! ?% X( a* Q" H! c, j6 ^. L8 u- E- H9 ?6 ?  L
/* Starting sections of the McASP*/4 i7 i: T5 w4 ~1 i
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' ^% a1 D# l1 z3 ^  h& f: e+ z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % M; p$ j: i$ f; O, U& D% Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # a0 F5 ?$ q9 w& T% j! a9 \  G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% U( a  E1 c8 Q% G0 J
( g6 Q$ ?! j  O$ ~
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # d* _# U1 M4 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 V$ A' q& b* F1 H$ `1 c! @# h
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. c, N! X/ [: A1 h. x" [; J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# C/ d4 u/ a; [) X8 p5 P8 g

3 L2 J" b. O' C+ |    mcasp->regs->XSTAT = 0x0000ffff; 2 X- c3 G. D& H, K  ~3 g
    mcasp->regs->RSTAT = 0x0000ffff; 3 T4 D0 r9 D' j" s; n1 Z4 Z% K4 h& c

- l8 z% e) C3 k+ f% ?    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ T- z  w9 K! O& _1 T9 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. ^; p+ G. Z/ \8 x! N% c    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 k7 A: c- h& `- F3 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ }' U  v! j- c. n; W  g( E5 E
4 A  K2 j8 r# m* j7 e* _/ c' [) g
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 |2 @0 s' N* S4 h, v
    mcasp->regs->XBUF5 = 0;
1 H! R. }: ?1 q6 w& \    mcasp->regs->RBUF0 = 0;
0 T# \. k1 T- y; n
4 Z7 g. g% b! H& C' B$ M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # k( o. k' ^: D; v0 U/ H8 y4 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( i* C8 C$ P* m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( L8 L" K) C+ |' k7 Z. u3 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ e$ R) ~- h$ Z! ?5 L% O3 E! `" G; f) Y% U5 `" O5 E5 C( k& j0 w  H9 D! Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' G( p8 i# c8 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  a8 N8 L9 t3 b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . @7 e, H5 T7 z' _. z- |3 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( V- ^# I2 \+ f& @4 A1 n2 g7 z
+ O% O: i& P8 x3 ?# e4 _* b    CSR = 0x0000;9 |2 R& ]5 J4 s$ T# k8 P2 ]$ P) E
    INTC_INTMUX1 = 0x3d;% P( Q1 F6 d0 t, l+ C$ V
    ISTP = (unsigned int)vectors;
; O# h, T8 Q4 B7 \2 N& A/ q! p1 U    ICR = 0xFFF0;  / F; U8 I+ [4 B5 B* [7 k6 k
    IER |= 0x12;    G* e/ W) ]1 k5 n4 o1 y7 g
    CSR |= 0x01;  
' B3 E) v2 V2 {( M
) B: V9 _$ j3 L; Q5 b3 W$ V( C. I# S) b6 [* t$ I" X" R
; {% [9 M  h' ~0 {' k6 R; L
还有就是两个输入输出函数:
+ K9 a( j+ d! tvoid output_sample(Int32 out_data)
$ ~3 E7 ]& {0 Y" D' {9 M" L/ \{
1 \$ {* f+ `; e7 k4 M  AIC31_data.uint = out_data;  
3 F! U' k' \: z+ b  V# s  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 n% E+ W0 Z. {}9 H  K0 d% E0 t/ j" D

; g' ?% j0 D/ wInt32 input_sample(void)# I1 N2 a1 }( N1 b  ^; r2 K3 |
{  
# q9 [% S, h6 R  W0 F/ L  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 c/ a' m  @" M# @2 b
  return (AIC31_data.uint);+ G9 _5 S$ u; n7 Q7 C& h9 k
}
& n" ]3 U/ s0 V' o4 `: T5 _) E+ i8 y  ?% ^6 P
分享到:  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 08:32 , Processed in 0.039499 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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