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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% Y  J; E- h/ T4 _6 T* {' e+ Q
main文件:# M- K% F5 C1 o0 h* r, c4 Z8 J
interrupt void interrupt4(void)  
: n1 O2 q$ r6 m/ h% ?' V  ~+ p) u{
) l; A1 Y' B2 F& H" t8 L' v+ Y4 m( F  Uint32 sample;
8 {4 M; W: h/ j6 J2 _5 y$ K
& k8 g2 N* }* y- ~" ~7 l' O& r& G+ n  sample = input_sample(); // read L + R samples from ADC
4 p& V! Y; W9 i3 G  l5 ~  output_sample(sample);   // write L + R samples to DAC
( j5 ~9 S7 h$ n9 A  return;
* Q' L; k' N) ^0 u5 k) S}; B$ T+ I& u0 `! m7 U3 {

* ]8 i0 m: A1 P  f# ?4 F, Lint main( void ); H6 L0 E6 [, I& C
{8 v( }* C6 ~4 C0 I
* ]6 R. ^" d0 K: T5 Y. ?& d1 _9 z4 y
    /* Initialize BSL */
7 K0 W& T: O3 ?' Q4 v    EVMC6747_init( );
3 _0 `" r9 F! N" g        /* Call evmc6747_intr function */
9 Q& r+ X5 L2 R/ O" ^    aic3106_init( );  b( g# ~! `7 U2 v
        while(1);% ]3 }. U* N$ K! a; @& x5 q9 C
}
. T8 H! Q8 l9 Y' R
/ L& g% _8 p7 \& }+ j! j( X' ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 n: i* n- Y  ~# C: C" H+ C8 b( W$ e: ]/* Initialize MCASP1 */
, N8 r' I9 }* h# t5 }6 t    mcasp = &MCASP_MODULE_1;1 q. `7 n: `+ _
    mcasp->regs->GBLCTL  = 0;       // Reset
0 d( F; T$ i+ y  ~8 G6 E9 C    mcasp->regs->RGBLCTL = 0;       // Reset RX9 g- X6 p9 w" _( X
    mcasp->regs->XGBLCTL = 0;       // Reset TX
* M3 w  j: [* Y' N+ a    mcasp->regs->PWRDEMU = 1;       // Free-running
" M; N- A7 s6 y" Q  G/ B$ B   // configure McASP0 receive registers
3 L9 J- E1 O: G. i# m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" Q9 c) K: u3 u* z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* ^0 j/ [$ Y# ^! |3 q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. i3 ?: R# c5 q. n
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 Y: W3 X. f6 \; }4 M- u9 U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 D' W6 s  e: _% ]% D8 {    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 h7 W1 G; H3 K3 v0 T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 S! k2 T' V2 k' ]0 ~: J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 h* N4 V9 \- J, D$ f. N5 A/ g. v

/ w& f# {& W3 m# M2 K+ ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 `1 ^7 ?7 F1 x: g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; b/ H- x$ E4 t; y( }% {+ W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; {; f; a* X% y: x4 L) z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' R7 T. d+ Y: [: B  h) \    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 ]) M( i( x2 X/ n& @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# E: h; N' z( z  u4 r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ @( {7 X! h) e3 b) E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! J; X. n2 U" z) q' y) Q

" x0 `, v1 S0 g, `: [4 G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" g! q7 {$ l2 U5 y: c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 A) p! A) K8 k% @% q  r    mcasp->regs->PFUNC      = 0;          // All MCASPs, m. k8 o9 _8 k- ^; \8 J" Y# A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. j7 k) @( t8 v$ q3 Z
; V1 u& O( F# J7 c. p+ z
    mcasp->regs->DITCTL     = 0x00000000; // Not used
- B3 y: U2 t! u1 x( @- u* e    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 F# |5 Z7 {$ }
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 j. @  r. H9 j6 j- w0 [
/ C' Z! l0 V' M9 D# w+ s; R& j
/* Starting sections of the McASP*/$ {3 l+ z/ ~  G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 B0 G+ R! ~$ p( ?  ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! \7 S; ]8 |) r  l
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 F  ^+ N6 D  X' M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) v( {6 |* N5 M3 F$ C4 J1 w

6 s7 E: {8 H; F7 b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 Q- g8 N0 n; s  |5 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 ?9 W0 m$ H5 m4 T$ P/ \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 |1 P) S" D0 k1 T8 Q% A# `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  d5 E3 b2 A* O; K0 N2 q1 x. n
# }% J2 @+ ]; f6 u    mcasp->regs->XSTAT = 0x0000ffff; % a0 ^9 D% z! N+ o" B2 O. \: A) Y
    mcasp->regs->RSTAT = 0x0000ffff;
  h8 B* S& t8 x! _6 o' `. L/ v3 ~- z7 D" U+ N2 N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( U4 S& P9 R7 f, F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 \" x8 d& N" a+ U6 j    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ @3 y8 i& |' g7 ^+ e# j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! B) U. X, @0 b

# A* c$ m; K1 M: z* r    /* Write a 0, so that no underrun occurs after releasing the state machine */9 F2 j  m# `# P: h- G' ^
    mcasp->regs->XBUF5 = 0;
5 z. b* k9 M' R% L, d    mcasp->regs->RBUF0 = 0;
; p- W% X# r. w8 u: C
, J  N. f0 A, K+ ?    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 V% s* V' \+ u  o& |2 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; \& y. [4 ~" s% m  u+ \- {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ [1 m5 S: Q! K7 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# z/ ], _7 M4 L. c" j
6 c- J1 M/ d9 P% {; {% x    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   R/ x& G( ^$ P0 R0 `" e/ o' d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 ~. Y) I1 \  V- p$ W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! A% Z; E4 C% X# l* L% B" [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, h5 e" B3 T5 [1 X6 O: ?3 r* q
. d1 V; u3 K- q/ y: J
    CSR = 0x0000;
9 J. w( |) Q' L- q) \    INTC_INTMUX1 = 0x3d;8 ]& S! [* g0 M& Q, u3 m+ c1 `
    ISTP = (unsigned int)vectors;3 Y2 L; [( W! Y
    ICR = 0xFFF0;  + r$ {; O7 m; F! |
    IER |= 0x12;  $ U+ v; I; M* e  T
    CSR |= 0x01;  $ I, l) d, s1 Z  d5 v

6 }5 c; s# g9 `  m8 V3 r' R% O& L; i/ {9 h+ [( Q3 a" ?( V* L

8 B/ j' ?1 W+ g- O# e) z, n8 m! J* C- C还有就是两个输入输出函数:5 U5 |4 `4 j8 t) I
void output_sample(Int32 out_data)
2 T" ~6 N3 h1 v  D5 v, n{  d/ n8 r3 O% j9 I9 U2 k
  AIC31_data.uint = out_data;  % {6 d0 d# [# N3 S8 F
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 H: m7 x5 Z2 O}" p8 N- ^1 o5 C; b1 @
* m# Y# o5 v/ U
Int32 input_sample(void)! o1 H/ a/ F& ?" D0 N0 B* r
{  
3 D& F2 d& O* n  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 H4 a! n* G' o- T/ Q% d1 L( W& A  return (AIC31_data.uint);
/ b" [8 v/ ]: M6 N1 ~}
: p, t2 |% |+ `! Y& h
7 |" p6 f) ?1 ~4 W3 l: b
分享到:  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-2 22:13 , Processed in 0.040041 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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