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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 G/ s7 w$ }4 v# [' W4 ^1 P
main文件:
9 H6 K* }  y9 g4 Iinterrupt void interrupt4(void)  
* \1 ]: ?7 x! E( a( W% }# a7 k/ w{
3 k0 p: r. _# w# D9 c9 y4 }, m- A  Uint32 sample;
$ w& P$ ]$ W7 i" E+ v
- g8 D) J3 u, a3 _- }' Y  sample = input_sample(); // read L + R samples from ADC
/ f, h8 X- e  C9 |8 X; o: B" u  output_sample(sample);   // write L + R samples to DAC 4 ]# k% y9 ^$ R9 S3 y- e4 J
  return;9 X3 x5 ?9 j  c3 ?. F, b7 F
}( d4 f" W) h$ U  `$ Y% ~
9 D' V/ _& W: l6 Y: f& b: n
int main( void )! E0 w2 L# }/ C- b) D6 l# b
{
( |( f6 Y  k% k' `# S. L, G7 t: ^( ^+ j
    /* Initialize BSL */
* z" S8 W# g' N+ J    EVMC6747_init( );) o8 ^; C( W: L
        /* Call evmc6747_intr function */& F* m% T( }& Y3 `& E* E
    aic3106_init( );
# Q6 e: x, E2 J1 ^) ]! n        while(1);
) V6 b6 @( V8 \8 C% |0 m& z}
7 o8 z* Q/ E- B& P, S$ A7 j, D( M" Z5 Y
* Y! U6 q# y( t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( H+ \6 k( k- t4 s4 m' S/ T6 {4 \
/* Initialize MCASP1 */+ P6 Z0 w" {3 M$ Q. s0 z5 n
    mcasp = &MCASP_MODULE_1;  A' i& I9 B  m* ~' j2 @
    mcasp->regs->GBLCTL  = 0;       // Reset
) K, ?  Z/ {- q' y# o8 L    mcasp->regs->RGBLCTL = 0;       // Reset RX
% d. s1 y0 n- V    mcasp->regs->XGBLCTL = 0;       // Reset TX
% X$ j" p; b. ]# R0 Y- B& Q# P/ w% Z    mcasp->regs->PWRDEMU = 1;       // Free-running
. z6 |) ^! g5 h8 M, k1 n' m   // configure McASP0 receive registers
. n- o5 v! q6 j+ h( j    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! A# U1 p/ R( _( L6 v    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 Z* D8 Y* D2 e" @( \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# l) L! [: J2 q8 ~7 t9 \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- P# @* ~- M! x& U6 c  y8 l+ {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ A( p' C! i$ n/ }; g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; c; Q6 c" O& v! |; g    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 l' @7 a- E  m5 ]% x, ^9 c    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 F0 s4 C$ G9 j0 @+ G' X/ e" x1 q! S. y2 a  W3 j, O9 f% g6 M% z
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' j/ d$ p8 _$ j* W1 L7 X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. ?  n3 ]* h3 k  m: r    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 |' t9 L( H. F% q  C; B' {4 ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 F, L0 M) K5 j" n# Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: g1 K6 r' H0 o( B1 K2 C
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 H9 }9 x  Y" _3 [  N
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. h  ]8 |. f* x7 q3 y8 F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- I4 Z7 L; e3 ]4 a3 M
" |: b4 d! M0 h/ \7 ~
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" i3 d& \, \  K9 q% |/ q0 q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, n" F$ m+ z; F    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 W# \3 b& N6 I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ B) r' }$ s7 |. U
' K% [' c! _3 [# m1 @    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ A" P' ^# h# u+ O/ M    mcasp->regs->DLBCTL     = 0x00000000; // Not used* p8 o) P% k. j: h$ x  c* M
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 ~9 C- y5 H$ ?  e

& h+ H* t6 C! e/* Starting sections of the McASP*/
% e2 _2 j! u/ e) ?2 c! T/ U    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 y& {$ \5 R& q$ |1 K8 ^4 }" ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 X8 `6 r+ w, c! P: n4 W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  e$ [/ {' ^- {0 Y, o- T) b/ w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( u& _4 K2 I9 u

, M4 l: v$ m3 I; B- H    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 W  H: e6 K+ w$ p4 c8 W# H2 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ _# @; {6 [/ _% T- u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' H% i: U! d+ X1 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, \/ Q' G6 p& b+ H
7 z0 m% ]" N' }1 h; ^
    mcasp->regs->XSTAT = 0x0000ffff;
! p* i3 A& u. i* T    mcasp->regs->RSTAT = 0x0000ffff;
6 g" c/ N) e! C& h5 [
# Q4 y  I' Q% j  k/ p  b. g+ {- I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& s. C- D2 D# j  C" X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( f# o& v) p+ W  [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* n% c# t4 a& s+ w" P) ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. ~3 y# W& m+ B" f: J: b

: \3 |! l  I' d% O6 o: `1 q! c    /* Write a 0, so that no underrun occurs after releasing the state machine */4 P1 k! O" X* T8 e5 A) W
    mcasp->regs->XBUF5 = 0;* `( N% z! r- Y3 I
    mcasp->regs->RBUF0 = 0;
" c$ ]! {  R/ ?: `! ]/ z1 |
2 j! T0 b( s4 F    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & c' U7 e2 E- S  H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% B( v) J. u, @: g% u' R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 }4 V6 `8 K# v& v2 V$ ?, d: ~+ m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ ?& p4 M/ z& h0 q3 ]7 m" I$ I% r& N3 m* P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 {  J7 J* A: u" w" W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' Z0 I9 Q6 U+ J1 N    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 }- B* Q' V6 n! Q* q; i5 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 D# I  R- ^- _3 U
# y4 T  k* L# N5 `
    CSR = 0x0000;
/ @5 `; h4 o4 P* a3 z    INTC_INTMUX1 = 0x3d;' o4 K4 r. i: i' |% [9 _
    ISTP = (unsigned int)vectors;
1 f# O' l& T  V2 G  }    ICR = 0xFFF0;  # `0 J5 V- j, S0 f4 B
    IER |= 0x12;  
) W; C5 T, L5 q' V    CSR |= 0x01;  7 W" {7 y8 Y" y2 k  J
" V+ L' q  K+ p( _; q
9 @/ P/ M9 [, ^# ]# w# R1 V
3 @- O( p% A+ y8 v. I) D6 k+ h
还有就是两个输入输出函数:
5 N0 I* e- n3 r, w; [void output_sample(Int32 out_data)
9 F; j2 C* |2 c! J{% @( K' r, V' h3 _# }' m2 V
  AIC31_data.uint = out_data;  
5 W% C; a. B- H  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 f6 ^& Z; k4 {) l' p# d0 x! n3 y+ [}
5 @7 L7 H0 J7 k: v
$ U  }' B4 h" m, L# IInt32 input_sample(void)% t- l* R% r( O8 W1 v& i6 c& Z* H
{  
8 r# ]  M" i2 ]; Y  {( B9 E/ Z5 A  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- Z8 |8 @6 ^# G' C  L( S8 Y  return (AIC31_data.uint);% q/ k3 u5 n$ ?
}, r0 b- R. @/ C9 A
' T0 \. o5 d9 |  M) p) C5 G
分享到:  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-13 00:43 , Processed in 0.039002 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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