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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 j# \, ]+ O) R, b& Omain文件:' z5 I! c& u5 e9 |  O- X
interrupt void interrupt4(void)  
9 a, @5 ^. d! _) K6 p7 T{' q2 A9 ^3 {0 D0 R
  Uint32 sample;- q% ]% C2 h. C6 V( k8 V+ u

$ {  t) d! v9 l3 k( n% U  v  sample = input_sample(); // read L + R samples from ADC  g+ c7 }/ @. |" ]
  output_sample(sample);   // write L + R samples to DAC
8 N1 p" _- S, W2 _9 d* \  \  return;
( R* e+ L) g3 {9 `# o! P}
$ M: c9 r9 X1 K* Y) z# W. F" u' \
0 A8 E# a2 h0 t; r8 h0 w; uint main( void )
+ L7 Z; \. \. Z% s6 c{$ Z& V! D3 ^/ C3 i) H0 ~

: r* D: r6 M. p- M  m, v* X4 b6 |    /* Initialize BSL */8 a4 i: S0 L* u0 [
    EVMC6747_init( );& w7 D6 b- R5 C# w4 Q% @7 D
        /* Call evmc6747_intr function */, g* @* h( W! ~9 d
    aic3106_init( );/ X& r4 H8 T# F7 {
        while(1);: }* B' \( [  K5 d. T2 `1 P
}. a1 _2 N6 W' R" P

( C) N& I- B: f+ ?0 Y% o
* w3 f* Q% g1 \/ g5 o; T) Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) y# ?1 {4 h" G
/* Initialize MCASP1 */
- C. W4 R- [/ y9 n$ {% M    mcasp = &MCASP_MODULE_1;5 c, [5 v. b3 s
    mcasp->regs->GBLCTL  = 0;       // Reset
" h/ a! t0 u( u) H0 p. r    mcasp->regs->RGBLCTL = 0;       // Reset RX
& b( V0 k' c2 l: T' T0 M7 P    mcasp->regs->XGBLCTL = 0;       // Reset TX! y5 j/ G( e& C4 ^* }
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 D, j3 u: p: `7 l8 C   // configure McASP0 receive registers/ A! s7 [% m* N; J! d; F
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% B8 U8 P/ y, b/ ]* Z- N: _  ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ~2 G& w  a  W) Y! w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 U( A4 j7 ?% ?- N9 x5 d2 ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), G. `% D1 {+ V# ]( T
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 N: H0 w  \5 v. ^; c
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# z. s" v1 Q3 w, a! \9 g
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# w- F/ Y% p! r, @, c1 y' [    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: V' Z: A+ L" X" I3 t3 w' j
2 Y" t# Q  t1 k  c7 ]7 T  h* J% t$ `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, o) I% g% H% x! C    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& A, n' `3 N2 a" c- }    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 y! S$ a/ j/ V% S3 x' X    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  p3 R' W9 \. T' h7 d  I    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' s8 j* c. U2 W
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 M; P* V. O! D+ m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' V6 Y, v; ^3 Y% F4 |7 g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% c8 V) W! d- Q2 E( Y+ t' Z

* D+ W9 o3 F; o6 r" {& \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  j) F6 C" O0 ?7 S/ A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& ?& G$ J/ ^2 l# `5 V* m    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 u$ d$ J9 ~4 i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# P$ T0 U% j( Y  j
' T; V4 R8 J3 E' w3 Z
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 g% l3 @0 Z' D3 A( G9 i    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; \; T1 K* r7 ?- E3 u. }" f0 Z    mcasp->regs->AMUTE      = 0x00000000; // Not used  M6 m* s& o- \" m8 Z: l% u

. a0 Q# T1 s! o" U  d$ z* g* H/* Starting sections of the McASP*/
: w% H2 x; v2 F    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 O) j/ D. F$ A% I9 B$ ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , Q- {- o- y4 ?( A  d9 [; d0 U
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ ~- b$ P0 r( Q2 b$ d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! ]$ X  T) m. V2 K

1 c2 l/ K7 X2 W, i1 W) k! {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + U& s: Q4 ~  w" d; e0 ]" j* j7 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% f" m3 L! Y% _) b/ A
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & n/ V5 u3 H7 p& D0 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: i/ p# L+ B6 m1 G

) I) w, F- J& n, k    mcasp->regs->XSTAT = 0x0000ffff; ! H; `, {  k- A
    mcasp->regs->RSTAT = 0x0000ffff; . q5 ]* `1 Z0 m+ X: H
6 d5 U+ ^; e' b. |+ u
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 r" ]% u6 D2 r3 ]4 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 ^) _' W6 ~+ \& k: [
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 a9 _3 y) q! w* o" S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 P- }6 c; ^0 Q" s' d% i9 O; K
) E6 F* X. A" w8 g    /* Write a 0, so that no underrun occurs after releasing the state machine */: G+ y' I  e. S8 l/ V  ?
    mcasp->regs->XBUF5 = 0;
, h( x" K8 L8 _( R  C7 M% P2 h    mcasp->regs->RBUF0 = 0;* \: _: ^* K  u

0 Q' V7 G0 \( ^# ]/ ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 \$ @+ b3 x1 t% R! b. Q' ^& P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) q7 n4 o: E) Y0 Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 ~) a( [' u3 t  q3 ?, X; I9 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 s$ Z( \$ A% \& _4 `

% g; a9 L$ O9 J* o, G: d    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% [; K( o8 _& q  D- R0 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ m: v' T; ]9 l9 ?    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & U+ C7 }/ z7 {2 j7 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& z* ^1 A! Y# e, }# B5 z( R5 ]2 }" P; q1 J
    CSR = 0x0000;
6 D% g; y  a" ]8 M/ R    INTC_INTMUX1 = 0x3d;" }0 a* D2 T0 Z4 I  F3 \6 x
    ISTP = (unsigned int)vectors;
' H' q1 G, O* j/ ^3 F1 e    ICR = 0xFFF0;  
4 p* ~4 _( O% I$ v6 U+ v/ \    IER |= 0x12;  3 O# n! r( k& g" q* M0 ]
    CSR |= 0x01;  ' c& V8 ?( G0 r9 k, Z

0 B2 x9 l) s4 {& t
- I6 D+ O  _4 C& p' S' L8 ?- H2 m8 V$ L) R  }7 X
还有就是两个输入输出函数:
' C9 E6 d( _. B: \4 D( h, v" a7 |void output_sample(Int32 out_data)1 [# ^  n3 g. I$ z2 u- n8 p
{
" S6 b, B" E* t/ G( ~+ F0 ]  AIC31_data.uint = out_data;  
! u% O; ^" Y8 j! T  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" r  m8 F5 H4 _1 w9 O9 A}
0 ]3 ~9 b1 j8 s9 U2 Z9 g" B! h: \1 q5 Y
Int32 input_sample(void)+ X0 R5 N. j/ @# t  i
{  8 r: Y) n/ ]; O8 B/ ^; z4 e, Y' o6 h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ F2 L8 H" @* x; I. O& w: B& z  return (AIC31_data.uint);7 w. m4 L  c; M8 \1 s( K
}
8 f$ Q  y& x6 G5 c& [- C/ `9 \3 `+ Z# u+ B1 I: n
分享到:  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 19:55 , Processed in 0.039353 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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