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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, f: ]4 N" n# M% `8 F5 y
main文件:
( F1 [! H/ W% r, ninterrupt void interrupt4(void)  , O7 m& u& f3 f7 q& R# ]$ ]: f! v' d
{
# ~" o1 z  ^( L- [" j! e  Uint32 sample;; ?6 u& A( A5 g) p3 c

2 R+ @! K' w: N! y# Z. r  sample = input_sample(); // read L + R samples from ADC
1 Z# J# X0 C# z2 I9 h6 ^  output_sample(sample);   // write L + R samples to DAC
6 i9 I6 A0 ]  O! B! A  J  return;' {2 Z. e, v# K! d  ]
}* j; d( V  {1 h$ {7 [& X9 g8 y( ~

4 V) @, \0 S; P: Pint main( void )
  @9 e. X" }7 d( f{* l; [1 w5 K" u# t& W

' d: A- _5 H: r5 S" V    /* Initialize BSL */9 G( s, r" r0 m9 o& Y7 b
    EVMC6747_init( );
( k2 ?, u- y1 J6 B4 @0 a4 S3 F4 Y: u        /* Call evmc6747_intr function */
6 v0 c0 e- Q' D* U* `" y! P+ K    aic3106_init( );, V' `4 P. I' k, _8 Q" T6 p- ~7 [
        while(1);8 m* {% H4 L! N0 Q4 Z
}
9 n* P7 M+ y9 U: M
3 J7 T- A# G2 k5 ?/ L! _. D. ]
# V5 ~  _' X; O& _3 T, ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- n* f& }3 E) _" m, l3 @8 b/* Initialize MCASP1 */
2 I# a$ }/ |) j; h3 g) L    mcasp = &MCASP_MODULE_1;# U: d9 {* N9 p& Y" f
    mcasp->regs->GBLCTL  = 0;       // Reset9 X0 p: O# ^- Q" C) \& d. z1 q  @
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! s7 |" r7 l" [5 u8 x9 E1 D! S    mcasp->regs->XGBLCTL = 0;       // Reset TX6 S. Z6 q3 n: Q
    mcasp->regs->PWRDEMU = 1;       // Free-running+ K; M7 Z( e# S1 g# Q; f
   // configure McASP0 receive registers
% `" H2 C$ y/ W" w, C' O3 a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 G1 ^1 |+ Y. }1 H) y, }7 R1 e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 K+ e3 j( s3 |; n2 t3 }
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) e$ Q6 b; E6 ~8 m% {) p9 k6 v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% O5 H. Q- q$ Q; J% p, [* D/ h    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' F# d6 G7 o* z$ t. G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! L- s5 i" l& p# G$ j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 U9 L  U! t, X4 x    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 ?% o5 i' g) f: J
+ N9 {8 Y7 F5 p# g* y) K
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 _( A% |0 m0 l) w# b' e    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 ^: c- N. K/ t# [! L0 f    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 U% ?* M8 k" [/ Y+ P( j1 ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 d  C7 y6 ~- J- k& B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- p1 j- U3 f, F, I- S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& H5 N  @0 U5 D" O4 H& G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% `% e) g/ G2 i9 W    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 @5 m, U: T# N' A
. y8 b0 H: ~% X; I! P! l; _
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 Z' H; }8 X( j* ]
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ I! ^" Z. I, c+ H  k3 h6 E! ]    mcasp->regs->PFUNC      = 0;          // All MCASPs- S9 v5 A) {; |" Q; Q/ G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- X" G2 T4 P- `/ @
) T1 t& W" n; s, F: N; T6 j
    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 B$ E5 H4 ?2 g    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# f9 w* Q0 S" L/ o3 h3 W: v    mcasp->regs->AMUTE      = 0x00000000; // Not used* f( x% z* A* T3 w9 O! r/ I: I

( L3 O$ u5 |/ A* t2 ^$ A/* Starting sections of the McASP*/3 \5 s0 ?+ @, u% K8 _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ j' c' f' ?  D' _6 g+ E1 w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ Y, B2 W0 z- q; \6 s4 h! m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' U2 j+ T* N6 v0 _; r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& k& W) X, B* U3 W2 N5 [. `
/ o2 Q1 L$ V! C: k7 m  V
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 v6 O9 K3 F8 ]. r; i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 e. Z9 y2 D* j; A" e3 I0 k2 ^    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # E, N+ o- T! [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, @: P: J- g  ^4 E" K6 x
) S4 V/ U/ q# Y5 B5 ]    mcasp->regs->XSTAT = 0x0000ffff; / E# u9 l8 r  ~; m
    mcasp->regs->RSTAT = 0x0000ffff;
* F6 }* K( n: `# h; q1 U: v
. z5 ?& N9 b5 w. v+ ^    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: o3 W2 L# W2 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 g; V  \# g. ?% E: U  N
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / t9 h* k1 ]3 k- o- a# @- e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% P6 q. I  x3 F  l9 J
, Z+ ]) D6 G+ y) R# k" M    /* Write a 0, so that no underrun occurs after releasing the state machine */
* S1 i; ?+ J7 o, k! Q0 n    mcasp->regs->XBUF5 = 0;9 l) C' c' U+ C8 S8 o2 ]2 K4 d
    mcasp->regs->RBUF0 = 0;4 G: x, @' \8 x8 Z: d

, P7 I  j9 e( `/ J; y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: b5 ?. |( s2 |) p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 S! e1 s" n9 d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : M/ Q8 V  g) g. G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! o9 _) f4 Q  F: }6 `! P  K7 @/ B) I1 W: D" c" B! i
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) H: n- g& c/ e( @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 r  |; L2 X% w& p4 r! F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 `5 Q3 Y* F; e4 ?2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; H* @- p6 w5 A$ z& T
, J2 g/ V. \" w  n0 i
    CSR = 0x0000;
5 D+ V$ n$ ]& O9 a4 L9 ~/ ?; w    INTC_INTMUX1 = 0x3d;
) a* z; a' q) Z) T2 v- W* l    ISTP = (unsigned int)vectors;! [$ b- D  m8 {1 Y9 n
    ICR = 0xFFF0;  0 q0 k" f' l9 D; S
    IER |= 0x12;  : a2 L# }9 w" g1 a5 C2 D
    CSR |= 0x01;  
1 D6 W' z  Q+ p4 P3 N# Y3 ~& r. k/ Z# @
8 q+ F, }9 K! `' @& w5 T$ _6 n1 k. d
2 q5 r; e7 i  }- M. n6 _. m4 X
还有就是两个输入输出函数:
0 R0 y0 ?# C; a: Q/ v0 dvoid output_sample(Int32 out_data)
2 b- S3 w5 D+ T/ C% u- m{3 q/ x' v$ Y/ S  C- p4 P- @! C8 B
  AIC31_data.uint = out_data;  
& N8 c* c% G( `8 s: Z1 G7 t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; n6 s. \: r1 x}
! X; W$ `0 f2 T" [8 D/ f3 [. r4 V0 U2 }6 U
Int32 input_sample(void)1 D; ^; m4 q# R+ K: H) `1 c3 j+ Y- V# i  F
{  - g; p3 v: j6 F4 b* j
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& ?: K4 u2 }% k  return (AIC31_data.uint);
0 j# g( u& L8 c9 ~' v% G}
0 q0 W8 t8 r) W8 F$ X" `
% R0 O4 F' c5 D7 h" h4 S- v- W- ]
分享到:  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-23 02:28 , Processed in 0.045256 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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