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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. z7 U0 k) A3 e2 t* {9 B* M
main文件:/ R* S& U( F7 w4 A" }
interrupt void interrupt4(void)  
( I& x" L- @; ~* s' q0 N{; ?: }8 D% E+ l' t) R: F- s! i# K" U$ P
  Uint32 sample;4 Y) M  i9 Q+ @% |- C8 Q
5 M* v- w5 S9 o0 ]: I0 e
  sample = input_sample(); // read L + R samples from ADC
* [$ ?  V: w& b: T  output_sample(sample);   // write L + R samples to DAC * R( E! L; l, L, {/ H: ^5 r* q; V
  return;
& U( D9 B3 H) `' \( W6 @- P}
* _  F; d+ s% A& A4 |
/ |/ X0 x, K$ y" D1 qint main( void )' }7 j* {1 ], W6 ^/ ]
{( J6 W/ [: L% A6 ~/ i: D. w

1 D+ m& \; C& a0 n7 w    /* Initialize BSL */2 U/ M7 O  H$ {6 h) e1 Z
    EVMC6747_init( );
. D  a+ M4 T  d, A. E        /* Call evmc6747_intr function */
% @, p5 ~3 G5 ?5 @5 b    aic3106_init( );
& o0 T' E1 S( y6 _8 u2 `- c        while(1);
" O' d4 }: b4 N$ c}3 \4 V9 p7 O6 B- A8 l- f% V, \
2 p$ [7 O7 i( A& ?6 s6 `
! S2 V6 t  T+ ~) Z! O# N+ ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 x8 E  N. k. x) l
/* Initialize MCASP1 */9 j0 p5 o) L3 j9 |3 ?7 `' x, z
    mcasp = &MCASP_MODULE_1;
* w/ V9 s5 z: Z) [    mcasp->regs->GBLCTL  = 0;       // Reset
% [' A* E( N* c4 P  B    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 \7 g, w  |/ i+ B) S' Y    mcasp->regs->XGBLCTL = 0;       // Reset TX! l' ?3 u# x8 \0 e7 d
    mcasp->regs->PWRDEMU = 1;       // Free-running, s+ t* r* Q* m+ D/ S
   // configure McASP0 receive registers
# {5 |: u0 |' }& W9 m/ h    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" k" k- t/ a& g! `8 J2 Q" h& d    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# c9 a" G1 G& C- _- U    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' J$ L7 c: o/ Q! f: u# ]% J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 l# P2 C0 H- M- D4 ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 e* Y& o- r* X7 L! v' V5 S4 l  O' L" i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! M) ~4 q5 E) T; I
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 c7 t  R4 I7 }. ~: C  e4 L* {9 c
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ K3 h# k/ I* W* L' Z8 G" g1 O
: p# \; F  C* q8 O! w8 N4 u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 P9 D% m6 E% C1 V# @5 D9 @3 j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" n! e' j2 r, S) ?% r+ h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 y. y& H, ^- [" U3 H4 n    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# ?7 r' X/ X1 C5 w4 [5 E: w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% x) O4 w8 M$ K* o" T8 c! I# R
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ t( g' e# z- @$ @% E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 L% [5 l! l: m  s( V0 Q2 b
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 T3 f: _* ~+ ]9 ?! |" W2 [; E" G1 j5 A
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% k3 i) [5 r0 g5 l$ _
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% T2 n4 K7 {; q2 G    mcasp->regs->PFUNC      = 0;          // All MCASPs, K3 C) _6 Y0 y1 A. O/ ?% O1 m! Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 J- Y/ F# K3 z. l1 p
7 N" c! J3 A$ o( W
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 a5 o7 K$ K* J, S& V  q1 I6 d    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 Z; n. B8 {; r7 Z  W+ Y& k" o    mcasp->regs->AMUTE      = 0x00000000; // Not used) h. z* q) i5 y. ]( V3 V4 c

$ |+ j$ ]; B1 g: K/* Starting sections of the McASP*/4 m. \, G6 {% ]3 z& Y$ s
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" X8 ^& W, ~" y; r9 ?+ u) Z9 R% d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 {; Z: z; j7 u1 J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 k  z4 ~6 H( P/ Y7 t3 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! ]5 |0 a* E% \6 P/ O! s  r

- x$ {  {. B; X- u/ |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 |  P) N" c( ?* G4 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# O: L( a4 \, l: C2 `; u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + V# n5 l% W( r1 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' e* Z8 Y( z% H% |/ h9 l
% z+ R" a; u( B& l& @& L7 a    mcasp->regs->XSTAT = 0x0000ffff;
) c+ a1 z; s7 p% W  f    mcasp->regs->RSTAT = 0x0000ffff; + o& D3 ~/ w3 k4 o1 T

' @( t& \2 k' Z2 s9 B$ M, v    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ ~4 y' c! S0 ?2 @( J% o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 x) Q6 W4 G/ R
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" y* F! g) P$ F) a. m2 c/ s% H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% h- a5 N+ R! i, ]% `; f- q
" m0 ^) n% y0 Y5 d4 e" S6 C: m" m    /* Write a 0, so that no underrun occurs after releasing the state machine */5 o3 e. f' E, R- c
    mcasp->regs->XBUF5 = 0;
) l/ A/ P# w" c0 V9 _( P    mcasp->regs->RBUF0 = 0;
3 H3 y/ M1 O* p2 S3 |+ R' N  V( v+ V0 Z/ M/ n  \( R4 d( O1 j/ |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / t: j8 i' X! E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* D. e6 V9 J6 P2 }' q* ^7 @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 K0 X6 a# s, V% b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& p8 r. T. q6 D; V4 d' t' N
0 M% k7 c2 z$ X( u; o& e
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 p. _5 T4 q; n% E: }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# S8 L! d2 o& D" J1 B0 v    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& s) v" a4 E# B/ y/ _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ U' r  t2 I  c3 ~4 ~  \3 ]( v) d

2 F. o0 l% ?4 M    CSR = 0x0000;: ]# a+ k9 C( N! f  k- e& y
    INTC_INTMUX1 = 0x3d;9 R) g6 H( m! i" n9 G5 D1 V
    ISTP = (unsigned int)vectors;
- a; `0 s( @; x- m    ICR = 0xFFF0;  ; ]& h. B! P4 y/ N
    IER |= 0x12;  ( y  [* u+ e" n! m& L  q& W
    CSR |= 0x01;  
- d7 F8 @4 ~9 T/ j) i' O$ v1 m. t
0 g! j# U% T9 w" x- a, x: P
4 k, w/ Q# v: ]% B
4 h' f, F( {7 p  G, x2 b! K; \还有就是两个输入输出函数:& p* G! j. v  k
void output_sample(Int32 out_data)
9 G1 @, t* f1 |. Q7 V{
* l- N+ Z: c  ^7 `& Z  L  AIC31_data.uint = out_data;  
1 A: o) r% i4 k6 C1 S  MCASP1_XBUF5_32BIT = AIC31_data.uint;) W  K0 n: j) }! [# d
}; P" X+ S8 v. g  T
1 j% V9 r/ E: L  |7 {. c; j; p
Int32 input_sample(void)
* f( X% ]8 R6 }( V) ]- \) I{  
+ ?9 P& P4 X3 B+ D2 `3 }; f" O  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% E+ m. I- n1 N8 L# ?( X  return (AIC31_data.uint);
/ ], e5 Y' l; L( u0 G0 p" t}' }. o) N; N8 o6 J, \8 ?
& z& U3 s4 e, U' i2 i3 ?! [$ [
分享到:  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-1-23 19:47 , Processed in 0.053164 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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