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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, c4 y: \3 Q0 O9 I9 c- C
main文件:
9 y  h: z! U" e/ s( Qinterrupt void interrupt4(void)  5 w2 ?! I# `+ C
{3 N, T; q- Y+ ?9 G: v. z
  Uint32 sample;
7 u& ?- z' r8 Y3 d3 r6 O
8 ^( P) i" z6 O3 b  sample = input_sample(); // read L + R samples from ADC  c: B& ~2 ~9 k
  output_sample(sample);   // write L + R samples to DAC 2 ]4 R# H8 l" y6 W' c. w% E7 v; k
  return;# ?4 h# {0 V1 @$ F( Z; k: [
}
8 Z' G% A4 f, r$ N" |$ B# V6 z3 n( K# ?6 d9 N) }" V
int main( void )
7 w+ v1 L5 p" e4 e) ]{5 V7 n- b/ m+ l8 q& o  f

; Y/ h  g8 G0 R# r% B4 O    /* Initialize BSL */' a/ B2 }$ f3 [( b: X% e$ O
    EVMC6747_init( );$ V* X! }7 }6 W8 n0 r) R4 D
        /* Call evmc6747_intr function */: e$ D, k" S. E# Q  h8 e
    aic3106_init( );
- Z6 w4 U/ W2 d$ p        while(1);
5 |3 t  n% f: [9 m}
" d: u3 L. L7 H2 {) P6 R/ B" b0 _4 v3 Z$ V) P1 Y% P" P
0 m! N5 Y0 E5 l9 E5 w' j2 x1 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  n' ?1 Q) p- v# W5 E( ^5 k
/* Initialize MCASP1 */% Y) S) W/ y2 I3 O
    mcasp = &MCASP_MODULE_1;
, I+ i8 U) A( a; g' ?$ y    mcasp->regs->GBLCTL  = 0;       // Reset0 o" ]# w1 t& v- x
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' N4 V0 ^/ L1 z. U) o0 Q" U    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 \  s* s; B( C; a: t    mcasp->regs->PWRDEMU = 1;       // Free-running
9 ?6 N: L/ E5 J$ b( E2 F   // configure McASP0 receive registers
* c0 M$ r0 C% D, M5 _3 x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# t# w/ t3 c& [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" v* }, _* K0 e; G" k5 S% O* V    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 e9 f- R; ]7 x5 B6 T6 d8 S
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, _% q7 R7 m; y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- u* r$ ?) i  o' _1 D! Y6 h% d    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, F) ?1 G1 W' u' I7 ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used- W$ ^& {. ~" Y- ?& j! @
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ \' H) h: U7 M  j- H4 w
! J  z" a0 s4 \$ ]3 J6 [$ _5 x5 J8 n
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! }4 O9 Y* C9 k# v2 E- h    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 p6 q5 x& `1 o, h5 l" E. A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# I1 a$ h# u2 V# a" |4 t
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 P; ^! Y6 j$ \+ c    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 J* A2 N' X- h* U3 K' [2 a+ x
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: X3 _/ ]# q9 a* E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' K) s! C# V) f' z2 o    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 v/ I8 n5 P" z) ]' X% o5 b
7 C5 P. w" ]2 R. S1 t' K
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 G6 ~: _2 X( ~) S9 d4 h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* l- T  O: V; t3 {5 g. g
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ T6 H6 I8 c9 S* e  [. x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. `9 y% P' I& j, F  D, A2 q7 {/ v/ H
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 E+ d& J8 t7 I+ [0 g( m    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 {& e4 U4 S9 a& ^* p' k; m    mcasp->regs->AMUTE      = 0x00000000; // Not used
% f5 D) x6 J- B- {" d% m* i
; G+ z: ?0 i7 k7 k6 V8 V/* Starting sections of the McASP*/4 O' p/ Q0 g" ^1 X3 N( y9 J4 _9 s$ f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% u4 L( A5 q2 t4 b+ g, t3 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( @0 R% Q9 u  L' N- F$ _) O8 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 T2 b4 R" p2 e8 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. H/ q( b3 E/ C: z1 F( I6 v% {+ u4 ]0 h( [5 C! \6 P  e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 v* U, ]3 L; l5 p  [( Y" B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" D% A- Y; ]9 f' t& g, H
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 g' H; d3 F, Q' a: h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# ]+ a* N" d( d
  u$ N; F6 T5 h  u0 F
    mcasp->regs->XSTAT = 0x0000ffff; 4 o0 f% ?1 R" S5 n/ {
    mcasp->regs->RSTAT = 0x0000ffff;
6 a6 ~! e  p1 |# U' O* V& L( P, s3 q" V: y" S% w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% `+ Z+ O, h1 Q. W" N3 n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 ^, D% e5 A9 r
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 u& N7 _  Y( H2 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 c$ _' V4 K: _7 K4 }3 |8 G! ~: u

9 V$ z0 b) ^$ I, `5 y    /* Write a 0, so that no underrun occurs after releasing the state machine */( F  l! I' r/ _9 Z
    mcasp->regs->XBUF5 = 0;
/ o$ o4 r) j0 _1 u( B! L    mcasp->regs->RBUF0 = 0;, U# F' |# f& o' s' g
5 u7 m+ q0 {7 }0 |) d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; `" |  P  s& H: e& x/ X( Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* }8 y8 ?$ l3 A1 B+ v6 v. O7 v4 C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; P2 y- S/ N( B7 g" o2 C! `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 m1 z# f* T4 W( r) R" }! _- d4 D. U( W8 I; |. C% h9 a+ P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . I* O: G3 u+ w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 K; |6 K5 t9 v% b4 ]* x% u    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, Y# A# T1 o' b  I% R! R- [5 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# \" t  k) }" s1 Z
0 q- `2 N  R- }( g" g* R- Q+ ^
    CSR = 0x0000;/ D3 t  H/ }# m5 F4 w2 @% X3 N' z* ^
    INTC_INTMUX1 = 0x3d;
1 d% T+ q9 a/ k+ x6 X    ISTP = (unsigned int)vectors;
- |( h- w7 j# Y    ICR = 0xFFF0;  ) B$ A, b8 \% d: g1 _; p8 H7 T% M1 y
    IER |= 0x12;  " m3 \2 j" M9 e+ K, `# w3 F
    CSR |= 0x01;  3 s! }/ D9 x! k! O" x" {

7 a5 ], o, |5 b6 M  i; e# {1 Z+ X( t; X  C1 z3 c

, j( T+ s% @8 p* b) u+ a3 v还有就是两个输入输出函数:; m1 a+ Q: g8 e6 S
void output_sample(Int32 out_data)
+ q' }4 ]% R+ t7 g{5 _' B8 R0 N* i
  AIC31_data.uint = out_data;  - v; b8 y' E) h  d3 e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 d0 h0 U& s: W) ?6 V) k
}
% ]  o& v8 F4 P/ N2 Y
7 S$ J8 M1 e5 v+ q$ CInt32 input_sample(void)% i$ G) f/ ^$ c8 V4 s' x
{  
* S* i+ C3 S8 p7 H. y" h  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& i% X8 B) e" S) J& D4 I5 Q  return (AIC31_data.uint);
9 V$ L2 r/ t% E& M6 \( K: `}
* r" L6 R! u% |- y+ a6 n0 D2 q( N* t- d: g0 s- x" p8 _' t. ]
分享到:  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-7 17:26 , Processed in 0.155841 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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