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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 r, Z- L; F6 _8 B9 ]6 m! p5 lmain文件:) w. j9 J6 M5 H4 O* N/ [2 E
interrupt void interrupt4(void)  
6 j4 D/ s/ g5 t. J, i) Q9 B{* h9 J- B5 V" X) {3 z$ W8 g6 t
  Uint32 sample;4 C) {  p( _# W5 j# X% J) {
7 }$ F) f1 J' u; Y4 ?6 z/ X
  sample = input_sample(); // read L + R samples from ADC
& Z! d  p  x- {- a; U  \  output_sample(sample);   // write L + R samples to DAC
* v+ |# t% ^7 C( [, a2 R  return;
" n- K# q; R( ~}
% N4 v& `0 ]; I" S& Y9 N1 R/ G9 K% E
int main( void )3 w( N7 D* l% q4 |( O/ |7 z5 g
{
1 o( T  }( {2 E( K: J) v- v
  J# K/ b& \$ H; S    /* Initialize BSL */3 s" o) N6 t4 G) l( L- g
    EVMC6747_init( );! V* @- U1 i, w# G6 P
        /* Call evmc6747_intr function */) o: g, k9 a6 Z7 |
    aic3106_init( );# Y: \. v! a/ X, E% S
        while(1);
6 j; D/ ?2 T% M7 p& ?6 H( H}$ d1 q: f  p! D4 o

; E7 Z9 o+ U1 @0 e7 e# K# d. t# i* F% A5 F* j" }
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" H# m; R7 `6 S0 x+ L
/* Initialize MCASP1 */
$ j' q  b% z" b0 ?0 ^    mcasp = &MCASP_MODULE_1;* d  Q+ E6 a! E" c+ }
    mcasp->regs->GBLCTL  = 0;       // Reset  Y. g0 K1 v9 k1 T5 l" s, x
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! g* Y! W6 ?( C5 B, L    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 L0 o8 u" y) y* F" Z    mcasp->regs->PWRDEMU = 1;       // Free-running4 T0 H% \6 x" S, w- `' P: n& q
   // configure McASP0 receive registers
+ N: ~( E5 Z# V5 z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. N& B9 e3 q" Y! F0 K    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; Z4 V1 X. U" Z/ e
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( c3 H! d# Q! F! a2 p# w    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& ?; E9 @* o7 h    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). c9 e' H% w+ z. ^- k# r
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& S7 N  m# A/ \5 t& m) @    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ X# J& ]0 a- D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: f. h! v& S* k/ \/ C
1 ^$ n; q4 K8 C0 m    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 M5 x3 P! x: E4 [6 I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% J  b' `! j7 r8 @4 u
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
  P0 s7 M+ P' O; p2 A/ L- w& x    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ d) |) M) v+ H
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 i# i1 W3 h+ ~) W4 K9 u1 k% C: s6 ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ \% s$ B' M7 A1 l9 w: `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& {! {6 e* q4 G6 |4 y. m4 q- V7 Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 s' ]6 f: X' C

# b6 E: ~7 r8 @: Z7 U% k% l  w! P7 |5 [    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- H" I4 T- }8 }5 m7 E    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: u- D& m  {; i4 w/ U1 T! x; Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 N5 b; W% k' v. Y2 b7 `6 ?$ Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. Q4 I! F& [( ]8 G, J7 l4 I, B8 D3 L0 ~4 Q
    mcasp->regs->DITCTL     = 0x00000000; // Not used. a0 l- `" \1 V6 c& u% X% h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' N6 Y8 N: Q2 C1 _8 c0 U( V* Z* o    mcasp->regs->AMUTE      = 0x00000000; // Not used3 c' Z) I3 e) U! c# y6 T6 I: n9 e
; M7 a6 |9 [2 W- J' _" Y& h* Y
/* Starting sections of the McASP*/: W) I" S0 f( n) z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 `' O" D' I9 s2 v- b  g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + q* R5 E% j' f2 `) G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' I2 i/ s& r* R6 s% x2 a! Z3 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ B! A% J6 H8 r1 z# U
- f. m& `4 d* _1 ?6 E2 g% e4 k. B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 P4 F5 d( G% H- h7 E( w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( E& V! V$ Q7 M$ ^  x' u( S2 M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( p5 M% C) O/ n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; p5 C( j* i# D6 \, G

1 _; H& L2 t+ M3 |8 x7 Q$ J, B' W    mcasp->regs->XSTAT = 0x0000ffff;
! t% \% j: Z" N. P    mcasp->regs->RSTAT = 0x0000ffff;
$ d: V3 ]8 x4 N' A" u! Z3 l# l) u
; i8 D; _5 k& f( t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  C& t( h& ]+ O6 u! X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# Z* s7 m4 B0 l" \" _9 w
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  n# x; `( }" z, A# Z' g, p( ^& K' G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. e+ t+ {* b9 J& w1 Z0 X

& R. s/ c1 F1 K    /* Write a 0, so that no underrun occurs after releasing the state machine */6 m6 k+ Y( ~8 O/ Z2 Q; u
    mcasp->regs->XBUF5 = 0;% A2 [2 z6 w* }5 K0 ^% ~7 H# l
    mcasp->regs->RBUF0 = 0;6 z" |$ p" j( ?; a" Q: U: n

+ ]/ R) ^, \# j3 [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 j; k3 d& F9 o; V9 v5 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 C6 R9 l: q/ M  @: d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Y/ }, ~. A2 M# T* V" K' {: ]6 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 `4 c# g5 x1 W8 D( g
# Y. x% y2 ~( Q: L8 {$ ?    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" L$ a: a. V& O# X7 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 X' S! ]& m0 M4 u5 T; ]/ T; x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 _" f( Q0 R& h9 I9 E+ x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 B# _, [1 D1 A' |  w. g! K; t2 T
    CSR = 0x0000;: k3 h0 O  g: R4 n( R1 ]4 v" Z- t2 Q
    INTC_INTMUX1 = 0x3d;1 N0 E. w. x& v' f6 D0 i
    ISTP = (unsigned int)vectors;
% v& k. ~* u( F2 f/ k2 i. o    ICR = 0xFFF0;  
  K/ p! Z) H. e4 n" |    IER |= 0x12;  
0 j: f3 m& q% e+ X    CSR |= 0x01;  9 ^( V2 o  e4 ?2 l
) Z- ^! r% Y: H. N+ r

) Z7 y, y0 ^( o
& W  o1 O3 B' z3 R/ [9 }5 Q. o2 H还有就是两个输入输出函数:; o4 E% S* T4 y
void output_sample(Int32 out_data)
4 }: i. ]' i( G3 d( o{
$ s( ^3 S6 v/ _6 F4 x  AIC31_data.uint = out_data;  
) z# H1 H3 u7 a- W' @  MCASP1_XBUF5_32BIT = AIC31_data.uint;. h" P" q4 ^1 W8 q
}
! ?) W. w+ m+ O" Y5 ^) f" G0 ?" z) T2 Z
Int32 input_sample(void)' c! g" J8 j( g, M! j
{  
$ e6 p+ y" n# I$ \% i8 c  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 {; P: `1 m& M  return (AIC31_data.uint);
& m: r) ^$ F( F6 Z8 d) V}
6 v6 V( m+ U, d9 N
, k$ O$ b5 c( Q4 {3 |5 K
分享到:  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-23 12:11 , Processed in 0.040081 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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