C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ S4 O* y* A8 n% z+ Smain文件:# U: s5 p2 k3 a
interrupt void interrupt4(void)  5 m" H( y* M1 F
{$ I2 ?: S/ s$ H) P' I: E
  Uint32 sample;
& y8 p7 Q8 Y9 s; D4 Z' v% k5 t+ _& U+ Z$ s; c+ k
  sample = input_sample(); // read L + R samples from ADC- R: p( C0 t$ c0 a$ e
  output_sample(sample);   // write L + R samples to DAC
* J1 l- S4 f+ `. y3 X  return;( k. `7 Z5 t. ~1 e1 ?3 U" o
}9 S8 p/ [3 d$ T; a' W3 |6 M. V
8 G: y# `- j/ ?, _- p) l- a
int main( void )
* v* y0 k9 B4 K9 q- J& m{( }0 x; B$ Y8 M) P

& U, L- ]( H# r" p+ t/ @. u    /* Initialize BSL */' N* y  z7 b2 P6 F0 f! l& u
    EVMC6747_init( );
0 J! F! ]6 \$ l- M4 |8 o, ^        /* Call evmc6747_intr function */
# t6 @! c3 T9 `6 z! q4 K5 B' E    aic3106_init( );
3 `' D3 m  j2 d; T. r/ C* W        while(1);
& y' }2 W5 c% @  D5 y. j}7 m7 u7 ~, w2 D4 ^

0 C9 s" a- u5 M/ h, \0 U
4 A% ^9 |+ i& U: k% o5 xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& U$ x) Y( a3 c" a( {5 L2 P
/* Initialize MCASP1 */
* j, L2 e- f/ |2 G2 k% v+ B) ]    mcasp = &MCASP_MODULE_1;! S9 S# X+ n. @. b( ]0 |3 Q! a
    mcasp->regs->GBLCTL  = 0;       // Reset% v3 l& [6 e: v0 @4 V1 P& G
    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 p. [9 u6 M5 Y- k% y    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ {( W! }0 Z+ f8 z* y    mcasp->regs->PWRDEMU = 1;       // Free-running4 Y- _5 u: b6 f* J
   // configure McASP0 receive registers
/ D( V$ H3 w. `, s3 n4 t    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) p8 X8 d7 u: v  I0 M$ |& m% }( O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& r; W3 E9 J' A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) U4 n  U) R$ ^- l$ h5 C( T; Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 T+ a; I1 l/ V) K, ]9 [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! C/ ?/ q) B/ w) V) ?* @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ f+ Q4 T, l4 E    mcasp->regs->RINTCTL    = 0x00000000; // Not used" N. r5 ?6 K1 P/ p
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) o, L( u2 \' t4 Z

1 k& j; d2 z7 V. [! y- ^% z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 Y; d4 z  z/ ?& H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, H7 _! Q! E) H1 C+ w  i8 b    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 N8 s& Y7 f9 \* }7 ^( F% h
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' ^6 n; v9 h, j9 X1 k6 F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 h  j% Z3 h2 V. X( {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* j& [% J3 a1 R8 G5 S  K( p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- r$ ?; w4 y7 s) R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* K4 C# X/ r8 J: ^0 @5 _3 O; b) {) Q- ~
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# |' x" e( s  z! ^& ~8 ]; k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT  z4 t7 g. o' d2 d4 d7 v
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# {$ _6 c* R* j7 B9 {1 f% [, W  K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 ^. S" C  {" B% `# ?1 o6 a
/ V8 \* O/ X2 `0 R    mcasp->regs->DITCTL     = 0x00000000; // Not used4 j9 d1 l* W7 y6 M/ l
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 I/ D9 G0 g5 e% _* W; v
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 @1 d# U2 I; J

2 X0 @( K6 _; T! |' X* R5 x/ y- G/* Starting sections of the McASP*/* K6 m' d1 D% |4 X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 M+ [- b4 x2 z- X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # R; O5 t% c  ^2 c& ^' q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( O9 C$ V3 K; U+ N7 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( B( D7 I) g5 A- D' _
) E( q/ [$ |& ?, |( Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% A2 A" d0 y0 Z: ]5 x8 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 Q4 G! g& }$ e6 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 H, Z/ L$ X6 N7 D8 L' O0 `' E  i% j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 j: t" Z. c# I# j! y7 A0 z. Q2 \# u+ }9 X7 j6 S1 H
    mcasp->regs->XSTAT = 0x0000ffff; - n5 h1 \  e+ P1 v4 u2 ?" `1 n
    mcasp->regs->RSTAT = 0x0000ffff;
# @8 v$ O: r4 }. x$ Z
8 [% W: _0 m4 v2 z3 x- H8 Z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. N: e2 f: x5 n/ R( {- v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 a- {* F) p1 Q! b: Q; ~* D    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " {4 U$ d0 s, A- i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: w7 J# z% m, z& L& r. I& ], q0 ]
( E. m' ]/ k: A: Q( s$ T    /* Write a 0, so that no underrun occurs after releasing the state machine */3 A; D% e, m* X0 v
    mcasp->regs->XBUF5 = 0;
/ a1 R8 l2 z' j& m+ S; Z& I3 u    mcasp->regs->RBUF0 = 0;% v5 }+ p- G9 {  ]
9 e: r7 h2 b" }5 O
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( c& n' k4 M/ h; `0 {  d; B$ R% j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( j) e9 f6 r9 i% l
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" {, r% L2 h$ t$ ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  c& r% \! M3 l6 Y
/ r' z3 ?1 X5 {& e2 b: ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 n* N. ~0 V8 J' w* R, O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" ~& X  Q2 l4 |
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , z9 C0 W) _- R& D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 @$ ~$ g( g" U$ {6 D$ H# Y

% g& k$ x- ?4 _/ w    CSR = 0x0000;
# X% e" Q0 o# T0 x' C1 n' i    INTC_INTMUX1 = 0x3d;
0 l* N1 k8 `- c7 l    ISTP = (unsigned int)vectors;
" b$ S& o0 @5 Q+ x$ K$ C    ICR = 0xFFF0;  
0 i4 S- u, O; u9 b( h* }' R    IER |= 0x12;  
. }% j: A7 N: {1 z/ Z    CSR |= 0x01;  
/ [* |- l% q# N! x/ `; o. U% o$ D
1 m/ ?4 L  `8 i1 I3 Q, \2 W" ]6 [
: b# _7 U% l3 _
9 K1 B/ e  S0 V- r; E- w- Q; g还有就是两个输入输出函数:
0 ~3 V2 M4 w( ?" V7 c% rvoid output_sample(Int32 out_data)
& c+ H4 `. r" J8 ?{  Y3 t4 h. N1 r
  AIC31_data.uint = out_data;  
* w! E5 }! I- q; T! R  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 f3 ]3 M7 M9 Z7 E/ F1 ~: W
}4 C* P; R! P& h" S% j3 O

6 k% G8 ^: I; T& f; e8 k6 ^, g8 ]Int32 input_sample(void)1 q8 F4 ]" _% N1 O) L
{  3 ^! E2 C8 K) R  l5 v# C) r! _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: I/ @; k* o+ @7 c  return (AIC31_data.uint);
6 j" v( }1 |1 Q}
+ i* i# h/ a; y5 F6 `" m/ ~9 [8 }( j" L# w* _
分享到:  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-2-27 01:05 , Processed in 0.060293 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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