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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' |2 ?4 t$ ]) M. O) S' \+ S
main文件:
* R6 x) |- @, H3 J# Rinterrupt void interrupt4(void)  
7 [/ |1 A9 A1 a: t3 \, U; F{% N1 P  [, ?0 F& h: n# n0 f" U
  Uint32 sample;( ^7 r+ R% O3 l; B7 n; p
/ O" ]2 T8 N5 F* k( G# q9 a
  sample = input_sample(); // read L + R samples from ADC( K  H$ d: `- H+ S
  output_sample(sample);   // write L + R samples to DAC . r) a+ f, V5 L# n
  return;1 N- j& |) P& @5 G% j3 u. \% Y
}6 Z% w. X, p3 W* _: C! G# J, }6 e

2 b9 V5 n. W# y- v9 o9 p  f6 s9 uint main( void )% a; u4 |" M8 f5 [6 g
{" A. \' t' Z$ m% @! }- a) Y( E1 \

6 z* A$ Y8 a1 a; G& e& w& X3 J    /* Initialize BSL */. i2 b8 b, E5 n" X" [
    EVMC6747_init( );
. P9 O. P) d+ a+ c        /* Call evmc6747_intr function */- o; C) d" f" C- s
    aic3106_init( );
. x0 |" y) M5 ], t" j; D& \        while(1);
& s: l0 W# v& B5 c: \; @}! n5 B: B- o0 e2 M! c
, G/ [; E. q6 V4 g5 k+ N

) C6 d5 Z( a  h, L4 J% d) Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ }9 m- G, f4 T5 m6 Q, X1 ^/* Initialize MCASP1 */1 ]1 ?7 V2 a) o1 f0 F# g
    mcasp = &MCASP_MODULE_1;, X( M! t$ }9 M, ~
    mcasp->regs->GBLCTL  = 0;       // Reset
- Q& K4 x. O5 C1 M4 B3 R    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 u- H, G( \7 B1 m1 }7 s: g9 z    mcasp->regs->XGBLCTL = 0;       // Reset TX
* Q9 d# i7 O; B( ~/ i3 r$ b    mcasp->regs->PWRDEMU = 1;       // Free-running
- ^1 i7 ?& r& {0 h) l   // configure McASP0 receive registers
2 r* h6 M- ?. w! C1 [    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ \9 a8 T; Y% H1 Y6 t! F9 }8 r
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# H4 E9 i2 n' U5 y; |; @% D
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: y% L. O9 \1 k( j$ M8 ~: C
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), |9 F: A  @6 E7 h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 Y* f7 v& a  m# @7 e+ k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) _; g! P! Q: y. [& V, X    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ P+ ]. t0 C( g5 \9 n  k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 \: l3 x  [& P2 a
! U  J9 J& W* R    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# ?$ h& D5 ]. `: B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 l) v" D3 D; k" p2 D* k+ h5 ~0 K    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' Z  j7 k; {! a# n6 p5 u
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 r) S) I/ P, L2 _1 l& V: v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. N# a9 o# V/ D
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 a& h( t* m3 C/ p, N    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: c' X( X+ Y2 v, {7 D0 i) y( k' r: m    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% e$ ]  @! X' V# F6 y$ M/ m
7 E7 o  w. r: L8 i! B4 Z4 S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 f( r5 x, }3 G# R    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 c3 [6 L3 {7 l    mcasp->regs->PFUNC      = 0;          // All MCASPs, V: H" r3 W# L0 W& W+ m  _- \
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 m- p: K2 g$ [$ N) i; b; ?) s) b! |$ i' H6 k- m
    mcasp->regs->DITCTL     = 0x00000000; // Not used! p2 n; i4 F* U1 J4 f5 _% h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used- I! _. q+ x: ^1 |1 _, S8 g
    mcasp->regs->AMUTE      = 0x00000000; // Not used
" |  p% [3 {$ \' v  s9 T# l. [1 b) A0 E4 h
/* Starting sections of the McASP*/
/ i/ b  B& }/ @/ V+ l" N9 F    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 J5 K( T( t( V9 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % K1 p9 z" g6 k- G" Y+ H9 _
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# j0 u* [9 K( k/ w" I- n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ K! c0 A+ v8 g7 V8 ?9 S# P" f1 a3 R% X: M6 {4 R
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, U* k7 I! r( E  s# @# q) h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 c( v% b2 G1 h. V. A6 W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - ^' }- ~( p7 u: n8 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% @  O6 c( p3 A' D
# i$ L8 i: u, |3 }
    mcasp->regs->XSTAT = 0x0000ffff;
' [4 C# H6 o% m8 x4 v    mcasp->regs->RSTAT = 0x0000ffff;
$ T3 i# W& j3 U# l
* f0 ~9 r, l+ O' I" a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) ]1 d: R0 x4 w$ j7 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. u2 L' v! n$ S1 i8 M  N" o, ^5 l2 C    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 w3 l4 {9 Q  [3 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" Z; x5 E1 _. X6 r$ c

1 [; P9 I& B; ~5 s, N    /* Write a 0, so that no underrun occurs after releasing the state machine */9 L$ x! L* k! K- ~' L6 t
    mcasp->regs->XBUF5 = 0;
' A) [& V# p* a( w- q% n    mcasp->regs->RBUF0 = 0;8 P" b! w) u) s

7 [' K; ~0 c% |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - D* f, Q$ {% Y, Q9 C2 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ j# N- a& W" B/ v3 `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 [( t# u- ^; ^, M0 ]- M& `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- d* N) R5 P/ R7 e) w9 U: m6 K* q

7 F$ `7 v8 u% e6 V( }% Q2 @$ Y! E. d    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 h( g3 N0 a8 O  W0 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, g1 m% g" z* n# B+ J
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 R8 a; b4 x% R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( R4 j1 i  r( n0 P. i5 Q% q
; w& }/ L( W) ^
    CSR = 0x0000;$ h- }  W' b( X* [3 J6 H
    INTC_INTMUX1 = 0x3d;
! U# b7 {( p  h. L$ {. b& ^) j    ISTP = (unsigned int)vectors;* f0 ~( N( w/ h
    ICR = 0xFFF0;  
0 ]5 L& S, ?- B1 ~+ b4 O/ N. w    IER |= 0x12;  $ W/ Z6 L6 ~- X5 o
    CSR |= 0x01;  
6 p4 u" g/ C4 N3 D, E; x* r3 \* a% N2 K3 G  ]0 r
: n. A! m5 c$ ]4 j* i# B8 g
: Q( j; a2 x  n* f* |
还有就是两个输入输出函数:7 A% H- r/ F, F+ [' @. t2 z
void output_sample(Int32 out_data)
( W! s6 A+ }9 \- A{' l" c5 B; I1 X! M
  AIC31_data.uint = out_data;  6 p  o% ]4 E, o
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# [' C4 I; |7 d$ F0 r3 U, p' y}- @: K3 T: J0 d
& C5 v( e4 l/ r% Z& J2 X
Int32 input_sample(void)  J& R) g1 |- O" U- R# N; s: r8 f) N
{  
. T" L; V" C5 x" b' T1 {  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 p& |$ {- k9 O4 @$ T; {+ ^  return (AIC31_data.uint);
" r2 V- p2 P1 f}0 _1 N6 ~  o; E/ ~$ K

2 w; O( R. Q% H; x2 f8 |
分享到:  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-27 19:27 , Processed in 0.043449 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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