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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 e% A4 ~& q/ p- g6 k4 A/ ~
main文件:
  R0 H9 D: N6 N* n" P5 B7 y' kinterrupt void interrupt4(void)  
5 W5 d: r: F% ?- o$ h8 c{
: D8 D6 D- f' V+ R2 {  Uint32 sample;
% r# E0 l+ S: Z, I7 x' a. {; ]6 c7 q
  sample = input_sample(); // read L + R samples from ADC+ ^: I+ P8 h1 Z5 g9 L" [/ I
  output_sample(sample);   // write L + R samples to DAC * _- A6 w+ w# X" H9 N- t# c7 G
  return;
% R% D2 p$ \5 y# \; E}6 l9 m* P- U, R5 G$ G
! e# b* O/ s) [7 {
int main( void ). n$ I: s! [; T% h4 J( O# H& U
{! u; x) |, s( n. }" Z* \, y7 D
6 ^( k+ B2 D, T% i) J; D
    /* Initialize BSL */+ ]0 ~5 {) B1 r, e0 x
    EVMC6747_init( );0 L- G/ }0 [: p( H+ W, D
        /* Call evmc6747_intr function */2 ?, M( g, B& o5 v- H
    aic3106_init( );
4 j5 A  {* ~' U- N# Q+ R        while(1);" s7 d/ Y& l* m9 @7 |, P* s
}
! ^- K8 B) E" o
1 a( w+ H) |/ l* d  W9 ~% o0 a& d4 d" W* B0 x2 k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: d5 l* X- B3 _( k" ]. \* ?
/* Initialize MCASP1 */. T$ m: @, A. k& q
    mcasp = &MCASP_MODULE_1;- S) t' {$ m  w/ S$ V! U7 h- p
    mcasp->regs->GBLCTL  = 0;       // Reset# Z1 H- n2 P' ^  S7 Z
    mcasp->regs->RGBLCTL = 0;       // Reset RX  c$ \3 P4 \# d( ?, F
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 H4 _7 a# n) a) C2 T    mcasp->regs->PWRDEMU = 1;       // Free-running
% c) X9 i* S  q' m  G7 {   // configure McASP0 receive registers
) R2 z0 C% J" G2 Z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* o) {) l1 i) ]$ u! C
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, [+ q  k) S3 A6 Y8 q5 R6 A9 ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 b, \- w4 m. A( W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* M' c+ B; \2 Y& ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! M- \- K8 |0 f, j+ R; F1 G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ P$ j( d! J6 A    mcasp->regs->RINTCTL    = 0x00000000; // Not used% S- T. N  @# d, i
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; h( a8 N# P: X2 P

! r  n4 n# U0 M2 R+ V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* Y* t6 i, B/ `# I$ ~
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. ?" ?& z: I9 }$ Z, @3 ~* i/ j
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( @; U# Q! [; \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) D0 _) q1 \! V' P    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) @8 C. V$ t1 M  i    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* t& f  C5 i* @( A% L  T3 F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# _- ~0 b* Y. f& c- r  Q  C  a
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 v: m$ w  _$ p9 V! P- V/ w
9 l* j4 i% H$ x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! f+ k. z' \& Y- t8 j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 F$ Q- X! T! H6 s) O4 m" Q    mcasp->regs->PFUNC      = 0;          // All MCASPs/ O1 H3 T2 K) W$ x" ~" j( d; C8 x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  c( a# ?, n7 o2 O$ i- n' t% w6 m2 e2 A7 u
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ ~3 V3 J; y/ `% c' r, U
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 s8 Z9 z. V6 {. ^9 U. r# L2 Y( D
    mcasp->regs->AMUTE      = 0x00000000; // Not used& I/ f' [4 O4 {0 X' \5 a  T7 x) B
  N7 D4 p2 j6 J. E! v  U
/* Starting sections of the McASP*/: x+ @5 |: m1 ^# _9 |) \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / \* Z/ T% v9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 \( e( A, p3 L5 l; T9 ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! Y1 K4 _% ~. F+ y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( a5 R6 Q8 A" M( w
8 A& @% P, t# t! z8 Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " h7 m+ i" Q- L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* Z; v6 o) c7 Z- Q9 A' S( i( H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 z4 _6 K2 _7 B1 ]8 ?3 i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 z% R! \" V; l1 J; `
9 B2 X8 Y& z  _: G6 z* _
    mcasp->regs->XSTAT = 0x0000ffff;
+ ^/ L% C5 T$ ]    mcasp->regs->RSTAT = 0x0000ffff; 0 u6 ?% M, z, X% z2 w7 X
7 @* l7 l+ d5 m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# |8 _- R2 y, m) a6 a" D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% L0 k/ v" u5 Q; G3 |* c: x
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 @1 N$ I7 S! l8 J" Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. i% d% ~0 d  c) a+ V7 [- b
4 F* q  q9 M4 G' g$ P6 W1 a; Q    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 y" Q/ `) @0 V+ u  N4 P) D    mcasp->regs->XBUF5 = 0;
# O& f  k+ X$ I    mcasp->regs->RBUF0 = 0;( Y8 p- d3 {) E- E

. U1 B2 r! g6 x    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ u9 q) S6 T* ^3 P% B% h7 `/ g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ G' T# ]! t# y8 W    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % p3 M& r9 N0 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 `9 X4 h& T/ ?( k

) P; m7 z' b" g5 V% m. i    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' P" l. @* h) ^+ x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% z' L' t3 z$ T& Z+ c2 p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' I: ?/ `9 v8 T' D3 s- w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 o8 {  @( U2 I3 m7 ?  _4 W8 d
5 S6 a- I6 Y1 P
    CSR = 0x0000;
, x7 R3 l6 H: P, @    INTC_INTMUX1 = 0x3d;
. i( w: t2 U; f7 p5 d    ISTP = (unsigned int)vectors;, t+ f& {# ?, _6 I2 Q  B9 @2 J
    ICR = 0xFFF0;  
3 s* i5 P# i+ c4 d& b& e! L$ B    IER |= 0x12;  
% T9 i( a7 u. n% g& n& D    CSR |= 0x01;  + J7 L7 g5 g: U: L

0 D7 H: v0 b$ s6 N: N3 a) x2 n+ Q4 o! P7 c( O% f0 X1 B
0 O* o$ z% q  @5 x! k" _# a! i
还有就是两个输入输出函数:( n& t, x! b1 e7 V: G
void output_sample(Int32 out_data)5 ]8 K( W6 M- ^
{
+ L4 e8 ?* V6 q& \. E! L1 f/ w  AIC31_data.uint = out_data;  
0 q$ {- o2 h1 J: M  MCASP1_XBUF5_32BIT = AIC31_data.uint;; \2 ?0 V& c9 `1 h6 T7 H8 \! t+ q9 c
}& J: F  p: F9 A( i

3 H4 f. D# J; q/ Y# N) BInt32 input_sample(void)
3 q1 ]  ~8 M8 d, ~/ n6 t3 E1 k{  
2 k1 P, P9 x/ E; i  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" z5 ]9 c. J% G6 q) A; \  return (AIC31_data.uint);  t4 J& }" \, e, e- L) H
}- s2 F  b  g) z, b$ E' E$ Z. N) ^
. n6 Q0 p' f! D/ E
分享到:  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-23 14:30 , Processed in 0.039394 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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