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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* ]/ I% m0 S' `/ I
main文件:2 K! e2 O3 B& |
interrupt void interrupt4(void)  ) X$ x1 R$ K- U; D" t
{8 G+ s$ s4 R! _$ }
  Uint32 sample;
# B2 w" o5 U2 c' r, e& b" \7 R  Z7 f. Z8 A
  sample = input_sample(); // read L + R samples from ADC# d8 Y3 c5 E6 ?6 ?/ Y: G% ?- k& ^
  output_sample(sample);   // write L + R samples to DAC
0 K' v: i5 ^" q1 r; d  return;7 m) I$ [5 |$ z! }  a
}
0 R6 o8 |5 k2 W! O9 G7 @1 p2 L& \. M: ?, m+ B
int main( void )
# a  J/ J! S1 k& V/ o4 W/ q{0 A% ?: u0 U' e- y9 K( j& ?

& o1 n+ i6 Y& z' V" m, ?    /* Initialize BSL */$ {- R3 C5 ~. U0 C' D
    EVMC6747_init( );
! C" C2 D0 `: P! x  h( [        /* Call evmc6747_intr function */
% n3 x# l2 s) f6 T) d* k, j$ M  J7 U    aic3106_init( );4 ^7 D- U, `+ p5 L7 J) {- Q1 F! u
        while(1);* z( }$ p; Q( U$ h
}
" M: J6 V# {* a7 U$ L8 b, a9 Z5 g$ z
% B. r" r( }5 W9 E& g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ ]" u8 f8 B  T8 M6 f/* Initialize MCASP1 */
# J% ]& ?. [* z8 D+ X    mcasp = &MCASP_MODULE_1;+ x9 H7 F% R( M9 c8 U! p& p' W! _5 }
    mcasp->regs->GBLCTL  = 0;       // Reset, K2 B" T9 `( U) ?5 J
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 L. ?, v/ S' ^: j' H
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 c* g6 y' B! @. ]    mcasp->regs->PWRDEMU = 1;       // Free-running
5 g/ Q" b7 _$ w2 H  m# |2 x( v) ?   // configure McASP0 receive registers
& B  T6 m: C( [* r* c( u- D4 G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 r2 R* k9 h  S/ p8 _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  D. ^1 F* \# l, V6 u- v6 {- [* l( C    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& H: w/ D5 @6 W# |7 ^1 V
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- X) K0 Q) {3 x, @1 `- _" q' I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 [6 H- g' f$ E6 d2 K, }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. p; Y# k6 x* c3 }) A  ]/ y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) H% a3 [- V% E, b7 d$ f    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 @. `- a5 O/ W: {* m4 b

: s/ X: w3 s& x2 G) I) g" E% |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# h, A9 _3 h1 I; x. w. |    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 m9 n! ~! i3 Z* K
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 m4 E& O" x/ r2 {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& C4 Y) f8 t- v* k, x/ H3 Y/ H3 s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& H3 |. a: ]4 u1 X7 x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 Z; i# K9 o2 ^) F4 @
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit/ t; C) k# R* F0 g; O! a5 {. Z) S/ T
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ c+ S1 N- C  o5 j
9 H' k. D! f" }
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% ?# k; E! z  R
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, g9 M$ a0 ]' E# ?6 Q- L, j# X
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) }$ q7 \' M3 r2 J4 R, U+ q, {& a    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 K" L4 ~& C3 Z1 [

5 W3 U1 W# @0 [+ y; z4 u* `    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 e7 ?, N: \5 [' E' \4 e6 [3 a& f    mcasp->regs->DLBCTL     = 0x00000000; // Not used  `& E% ^: W. m/ S7 Z, M+ H
    mcasp->regs->AMUTE      = 0x00000000; // Not used- Y& L2 F, O. R* m  O

' j3 ~+ R0 W1 M# ]: g- B9 C/* Starting sections of the McASP*/  T$ K, p' W9 Q$ ]( h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 Q" u$ _1 E" e: K7 q, _4 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . Z6 L2 x% V  V& n
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( a8 J  Z$ R5 i& A+ A- c8 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 y- z0 a5 r: z  H+ S) H
! Y9 K: s. P9 A1 k9 R1 V& {$ G) q" d( j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) g: R- Q$ l8 A* M+ n0 o- \! D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% k) I7 k# S& u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& ~% O; ?& _$ v% A9 \% q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& i# [9 e; }2 E4 D# e9 }! W5 `

& m. r% h9 {5 F" @4 s# K" B    mcasp->regs->XSTAT = 0x0000ffff;
$ v' ~4 h8 N- |    mcasp->regs->RSTAT = 0x0000ffff;
7 m" X" z* l. U6 O' q, \
& B- k/ Y( S& U; `" G: ?3 e8 Q* {    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" n* y0 {% @& ]5 D. M7 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" A% Z. \# D: J8 d! e( ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: W% W. J/ T6 x- O7 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! u5 G* K  m  S$ ]+ Y+ q" q
# ]; }+ s$ |* N- l& @5 x) S    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ X  \& G/ g% a5 y7 s( h& \( H    mcasp->regs->XBUF5 = 0;
; e* X1 i; U0 a( d* U    mcasp->regs->RBUF0 = 0;
! d" v, D9 S( ?3 o$ J( x5 B* ]! }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # w. {! c( Y5 R, q9 I6 B) ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" q0 ^# C6 J9 B
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 y* i/ t2 Y! I5 u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 w' S6 w8 q; z* B" K( @8 a4 h' O2 q' |) L+ j) `& z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. o3 v% S2 {1 W4 h6 F$ k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' S4 B$ P9 q+ z- y5 y( k4 F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! C& ]7 k$ B) O: V9 V4 O1 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" [( k, ^5 r! s3 c; f0 p0 _: K1 H) p+ \, X; b9 o7 i, b
    CSR = 0x0000;
3 O) z' n: f2 x3 W6 G/ G* g    INTC_INTMUX1 = 0x3d;
9 I% F& q) O, v8 A& J6 e    ISTP = (unsigned int)vectors;) H2 c$ J7 P9 J+ B& T8 q+ J8 H
    ICR = 0xFFF0;  
4 T( y+ M1 t' N5 ]; T# u    IER |= 0x12;  ) k6 X+ i6 [0 v, _
    CSR |= 0x01;  : a/ K0 l, I& P- Q( [0 a* |

( e+ ~& A) K" u6 g1 c/ E- N5 {/ {7 y& D2 ~2 E4 _" g8 H7 T, v7 K+ ]2 h

, y0 \3 M8 ?; I, Z还有就是两个输入输出函数:
# m3 x5 Z; m3 jvoid output_sample(Int32 out_data)
7 V4 l& E3 c* c8 c3 }{/ X; Q6 m2 P% b$ z3 Z) I; f) B
  AIC31_data.uint = out_data;  
. y& Q4 \) p1 m* G5 t: M3 q3 W  MCASP1_XBUF5_32BIT = AIC31_data.uint;" E, m1 k4 ^9 L: ?+ w3 n
}" ^1 D- }2 o: [0 f0 a& ]
# o, z: v( \9 g! S! O% t. [" ?4 X
Int32 input_sample(void)
. A- l, n  ?' H3 N+ q- [* N{  
0 l* K1 s) z, N0 X4 y9 N, y  AIC31_data.uint = MCASP1_RBUF0_32BIT;" `  l3 E; J: j
  return (AIC31_data.uint);8 U" P% W/ }: f" d
}2 G' c0 g' h- l1 Q# f, i4 b
* q/ M1 ~; e2 {2 W7 s4 {
分享到:  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-9 18:18 , Processed in 0.037952 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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