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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: |) ~7 k# X9 \4 Z  qmain文件:& p# T, b$ ^5 Q6 ?6 x
interrupt void interrupt4(void)  
/ Q3 l- Z+ |- l6 y  S: Q{
8 T9 h, ~; \1 Q4 H2 V' \3 W" g. u5 ~5 r  Uint32 sample;
6 `, S- s" f( l1 m; C% b' w! M7 M3 Y
  sample = input_sample(); // read L + R samples from ADC
" w1 ]4 p) A- \; D5 O! w  output_sample(sample);   // write L + R samples to DAC
0 _1 H& }! ]8 V0 J/ ?. I6 g$ f  return;
, z3 u, i0 g) u1 a- X0 _" J}
) x7 T$ _; l2 `2 o% L$ S
# c$ r0 i8 U' ?  |int main( void )4 n  l, [; L0 @
{
) x! d" f/ o% R: l# r1 y. O6 t; Y5 z( E$ I
    /* Initialize BSL */) p: g1 W8 {4 R; E
    EVMC6747_init( );
7 i3 _7 C$ h( O! M/ w: y6 r% ?- W        /* Call evmc6747_intr function */) c, N- K* F4 m0 O
    aic3106_init( );+ ~& I- h* N0 l7 \* l% `0 W8 l
        while(1);) K2 J/ X* K2 @; Y$ s' X
}
* H1 v$ t9 c5 P: D  I$ Y5 s
0 E9 R+ b) e, F& C
) `+ S% ]  A! j% x! ~0 x# raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. g& Z" q+ e& e: j- Z
/* Initialize MCASP1 */
! Z4 a* F  e: b4 c5 X    mcasp = &MCASP_MODULE_1;
) U- O3 ~8 N9 z2 q& `    mcasp->regs->GBLCTL  = 0;       // Reset
. e' p6 i8 l& K$ h7 N/ G2 j2 J    mcasp->regs->RGBLCTL = 0;       // Reset RX
; G: ]  Q1 A4 [1 D# d3 k# M    mcasp->regs->XGBLCTL = 0;       // Reset TX/ B& v4 Q/ }5 \" m4 Q6 F! i
    mcasp->regs->PWRDEMU = 1;       // Free-running
" z$ T5 ^* Q& j' q9 i   // configure McASP0 receive registers
+ p6 C! Q8 j4 x* j$ w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 O) I! }% c. x" H. B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# H% M) Y' i- t* @+ V0 _0 A3 X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ v, [3 e% x! s4 w9 s9 y! B; y0 `    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): n9 U9 m5 ^6 ?4 ~8 R5 }
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% C% x/ y) f' Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, V  ]' n" C0 N( S1 }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! V. y0 O" ]- f; v$ {
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 H' d+ ~- ^* J  Q. O- Q
% |" s+ G2 ]- d    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: i% @: F8 Q/ |! `2 }" n2 }9 s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% V* Y* o3 m: K3 U+ z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  G- f+ R# D3 w' Z2 j" p' Q$ ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" d6 o; F7 ~/ }  A7 x' @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. W% v4 r; m1 P' o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) p. Q3 l" k  u8 ~' Q/ r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 }) r- L5 g! ~# R/ i
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& B+ x- C- A1 n+ p$ a! j6 j7 o2 V# a6 f8 j  c$ P' y0 H0 J% s4 E
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- a2 ^! I( P( W* p7 Z# h: `
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 C1 ]+ w2 V* B9 Z8 }; k4 e
    mcasp->regs->PFUNC      = 0;          // All MCASPs/ o( \4 Y+ J5 {) ~- t2 f) y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& j" ]- J) N6 ~6 x: I- R# |4 p3 N! u* X
    mcasp->regs->DITCTL     = 0x00000000; // Not used* M2 \. I$ o: T+ e- @! Q2 n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( v8 x  u6 C$ o8 Y& I" L0 x    mcasp->regs->AMUTE      = 0x00000000; // Not used$ X/ u. r, {' \+ ^9 Y
' }# P; D+ {1 O9 g2 W- I! s
/* Starting sections of the McASP*/
8 ^7 j4 v5 n# A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 y  M1 p/ D! N  |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- ]8 q9 N' L$ c, R9 l  v1 n! Y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; X3 t8 V5 }; N8 I6 y7 g+ M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% k& r1 o" O. I8 u
0 F; U: X# P7 m6 [: O
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 t# v) z; d: k& i9 i3 \7 S% O/ U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" H$ p3 c! v( _, }7 l* s6 t1 S    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 ]: r* D: f' i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 {+ S/ i' q" t  h; w; ^
6 r. R4 @" C5 c/ c2 e% T
    mcasp->regs->XSTAT = 0x0000ffff; " x' n# b) N& E, D1 ^: W
    mcasp->regs->RSTAT = 0x0000ffff;
$ m" K& x. {7 e+ C- j% Q: o5 ]! Q+ @; W" Q" E3 D7 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. C0 f( t5 G& @" e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" b& T6 u7 n& G& }  d. W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , v* t$ L4 A9 z3 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 Z2 U8 ~2 e% N! c3 j+ K( |
9 H/ R8 j; _6 _0 ]( w0 r3 ?
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 e4 s2 E$ G) {2 q: c7 x/ K
    mcasp->regs->XBUF5 = 0;
8 j; v3 ]1 W8 k" t7 O    mcasp->regs->RBUF0 = 0;: Y, W1 @4 x; F; L) e
, q3 e5 t, B! f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 J5 h- l0 H. m5 i8 n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 Q3 L* ^/ x, j3 g# c  a; n( v4 \( }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , H0 b! i+ D2 r- L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 q0 _, o9 i9 }" j9 u) j- U" L! M& X9 F9 d2 l4 L
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, A! L! D3 p3 H2 \- @0 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 V6 [! Q0 {3 _9 @9 [
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 L$ v0 ?, t, K2 q  v( C* X% z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ l! E  Z) g; E+ _4 K; [, _

8 O! ^/ i0 Y  l9 u    CSR = 0x0000;
. Z; `! ~1 [7 o- n- _    INTC_INTMUX1 = 0x3d;
  ^. k1 I1 v# \/ c  W    ISTP = (unsigned int)vectors;
: S* N) ~  d* z8 h8 {0 g& J    ICR = 0xFFF0;  
# z& {; I6 X2 b$ C; G4 c    IER |= 0x12;  % D6 Y, H+ y" s% g7 g; M5 [
    CSR |= 0x01;  
3 h' Z: W2 K4 p2 V6 W
" {7 N6 w' _) u$ U: o
* F5 y& E3 k0 s! R
) s/ W6 j. n3 M  h7 e还有就是两个输入输出函数:
- T7 j/ r  {  Wvoid output_sample(Int32 out_data)8 q; L( g+ I- z" T% }2 B* i: {4 p
{
' H) o3 ^" F# D* r9 J1 J  AIC31_data.uint = out_data;  
: M) ]3 M% ]0 P  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' B* ?3 _8 k/ V# C5 y9 X& e7 h" P% h}
% ?" l1 [/ B  @3 O, J/ X1 S
* V0 M3 N6 F6 U% kInt32 input_sample(void)1 C9 d/ {. h7 k7 x' u- m
{  
4 w) y8 U# c7 z# g  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ ?/ j/ b7 D/ \& |/ |  {( ^. [  return (AIC31_data.uint);
# L. z; [0 C- q, O& r}
; M- }' U. E8 K1 Y% z- g- q9 Y5 D
. Z1 C( J6 S- Z! m" M8 u
分享到:  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-12-21 04:14 , Processed in 0.041373 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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