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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' H5 i8 g. }4 R0 c
main文件:: b& ]- q# V/ e
interrupt void interrupt4(void)  ) r+ N8 s8 O/ T8 N- J; z! H
{* N4 x* {' N' E2 P. k
  Uint32 sample;$ o) \0 B4 v4 B+ V  D1 N
: Y* u& J" [8 V) z( O, B" e
  sample = input_sample(); // read L + R samples from ADC
( ^8 Z2 b  K% M2 B8 u  output_sample(sample);   // write L + R samples to DAC + x) G2 h! u( @  ]2 W! h
  return;
5 i% d* F) C' A  k}
  |5 x. b1 }; m" u$ a% E7 Q; \0 ?9 v7 N
int main( void )0 Y; o. o* Y. Y6 |+ c3 m+ I  _" H  Q
{% K# e9 L, f& i" n+ m

& A( J+ }# m8 Z, x. u8 `' ]    /* Initialize BSL */
2 R4 u$ [( S5 I0 ^) x/ V9 p    EVMC6747_init( );1 R3 G. B0 K; H! @8 f
        /* Call evmc6747_intr function */( W  R" x- M- u( f3 x
    aic3106_init( );
6 X# X; W/ z5 I        while(1);6 ]+ ?0 G2 n1 R% m! R
}6 g4 Q5 W9 k" B! C2 K5 G0 V

& i+ r7 Y  c& Y* U4 S6 m- [
, B# h; ]! h' ~  K+ A/ o# qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. R4 l, t$ r) P5 B6 J4 p) C. e  ?. Q/* Initialize MCASP1 */; J1 ?& Q8 }  R5 F$ D1 `% A
    mcasp = &MCASP_MODULE_1;
4 v. v; n" G  |, G* [! A& {    mcasp->regs->GBLCTL  = 0;       // Reset$ L( i' _- ]( S  k; Z5 k
    mcasp->regs->RGBLCTL = 0;       // Reset RX, t) ]$ U) F' a
    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 m. L. M# z  C  x/ x  Q& r% k    mcasp->regs->PWRDEMU = 1;       // Free-running
- g; v9 U& _8 n: c& [   // configure McASP0 receive registers, W) _& o  H+ E
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 G! U, S1 ~% y3 r0 V    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! G8 J. W2 ^0 D0 j' p4 I* |2 |    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ K' {# b$ P* l* y; s) A    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( h3 n, D- \( R; P4 q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 a+ g$ `; D+ s' ]0 l. I4 M    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 d9 c0 D5 s& ~& _2 ?! Q9 f
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. z9 e: O2 c1 Y) I" Y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) O; v. d% |$ ^! G8 S
5 w$ L" p3 @. N- h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- L/ I. o( M5 b! X, A  U  S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 V) N/ Y% i7 \" l. R9 I; Q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) f1 K0 N- ~# M2 K0 c1 V" P    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' [& b. N+ _; R) p8 j9 z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( B6 b: G; u" V1 k" |+ d    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ z& M% r3 `) u8 t0 T
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 g- X2 U' m- L$ J2 Q( y- q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 m, R* _+ F3 h$ F. a& L9 b2 Q% K% k( h9 `  ^0 X. Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# \/ i" d* x+ [9 q' p. H' G* `, _% ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 ]$ ?! U( B# P* Z, B    mcasp->regs->PFUNC      = 0;          // All MCASPs
, G. Y9 Q2 a" R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) ]4 A$ X# ^* n1 ~$ d9 v+ S9 b) E6 |) i# h7 i  D
    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 _( W/ q  ~9 S. @    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 Q/ I- g- B7 b- v) W& q
    mcasp->regs->AMUTE      = 0x00000000; // Not used) l! t3 K6 V. w4 ~8 x2 E
' \2 B0 W  k$ S5 W" T3 T" Q
/* Starting sections of the McASP*/
3 Z& p+ h/ h" Q, J/ C! r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 Z: L% _- @5 Z; n& ?; S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 C3 T4 H# T. k7 z8 Z" {
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" l0 t) V0 s; _! d6 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& \% B( D% s1 p/ C  x4 T0 o9 s- X4 |- S6 N$ {. L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : L( K6 a* T' M3 }: f2 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ S0 C  _4 e% w6 W6 c0 C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 d0 m+ `: ?7 [# n( D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" x8 p9 r# c$ d  h- u# ~9 g0 b+ t4 d2 k: R. E5 z
    mcasp->regs->XSTAT = 0x0000ffff;
% K- o/ }9 c/ H  e- Q( I% a+ J    mcasp->regs->RSTAT = 0x0000ffff; 6 d1 ?- g2 v0 `! A7 M7 h
) u- x! U* G- Q: {* _$ o& d
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 E+ x6 p2 X; Y0 c3 ^+ ^4 _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 R  c" G7 ?; A8 U1 P
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 f' ^' Y( S# u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* W- J! m! N7 u' v
, l1 a4 }& k' |
    /* Write a 0, so that no underrun occurs after releasing the state machine */
- `- y0 _1 w8 q4 `    mcasp->regs->XBUF5 = 0;
( z9 a, S8 I- o2 d    mcasp->regs->RBUF0 = 0;: p" }, k  r8 E1 d3 A3 r

! `+ \2 v& k8 t' h- G    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 U4 e# `$ Q6 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# X" Z4 w7 R$ Q: S) X6 s
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 f) U) I7 {# j% Q  W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 l1 `6 [7 q6 s! ]+ t
5 T, r6 D9 }, a4 S# {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! Y* M: k: _3 p) G  U. n% S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 [9 ?6 p; ^: v    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 y% G5 d6 Z9 E6 n( v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ k% Z3 P. O) v* x) o( k1 L1 Y

8 h1 `) t* S( X/ |. K; S    CSR = 0x0000;
3 o5 U4 w7 ]% ~# }6 v    INTC_INTMUX1 = 0x3d;
9 ^3 n2 I# X: l5 s    ISTP = (unsigned int)vectors;! [! {4 m9 k. x8 @& {$ f9 J2 B
    ICR = 0xFFF0;  ( ~( Y+ M! w8 _4 i% [2 Q1 Q
    IER |= 0x12;  * e, z: H( D$ l% n7 \: R6 f) E
    CSR |= 0x01;  8 R! u$ d" ~# d8 T0 u

- P* ~7 |! E1 a* T5 a) |
$ T& x' B& z9 j8 y( r* \( q7 b2 f. r9 t' K
还有就是两个输入输出函数:) H2 a  m9 u. g5 V1 B; r+ j1 O! D
void output_sample(Int32 out_data)* U" S2 }3 Z7 H  p) X  p. O
{
( m5 X) L, ?  E" t  AIC31_data.uint = out_data;  
; a% Y* f  e0 c/ L  MCASP1_XBUF5_32BIT = AIC31_data.uint;" _/ q* j$ ^' Q! l2 W) B6 I. q4 D
}
& e3 d2 R0 k, k4 ~* E( C
# ?3 |4 |* U' _! ?2 i! _3 SInt32 input_sample(void)3 W; d8 n0 j6 w" F3 D9 V) L% X& ?8 E
{  
% s# p1 b8 I  ^$ X  e9 i  AIC31_data.uint = MCASP1_RBUF0_32BIT;# c: n5 I1 }' u0 i2 ~
  return (AIC31_data.uint);& m9 o# f6 z+ @$ `1 T& Q
}+ O0 r5 g& C0 p& y
# M6 I7 R; K9 d9 @1 {; V
分享到:  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-3-7 05:27 , Processed in 0.040205 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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