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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% |) x  [8 G' \9 C$ N, Tmain文件:
: ]# f3 n; L( K: }2 [- e0 t( sinterrupt void interrupt4(void)  
# P9 V2 Y( A. h4 H5 D' ?* f{. x, u8 s5 J  ^3 a6 k) S# p
  Uint32 sample;
# p. L" ~" G/ c# m$ X8 _$ V" ?7 j9 F6 b
  sample = input_sample(); // read L + R samples from ADC* Q0 n* W( o, \* E) U! w$ ~' e
  output_sample(sample);   // write L + R samples to DAC
% K& V: j7 E- k7 {  return;( @! F( Y7 P: b1 `5 A6 e4 z
}
" R! z2 h4 a3 h- {
6 x; C. u) I; }int main( void )" B% H" e7 Q$ _0 E( F3 [0 j
{# j5 a- i: A6 t2 s5 n7 A8 |; E( Q

. U+ Q6 o" b! ?8 q1 ^; a* `3 U    /* Initialize BSL */
5 k( p, j# D* r    EVMC6747_init( );
" f1 _& ~& B. v$ s( V( _        /* Call evmc6747_intr function */
, A! U$ H7 P: J# f2 q' d; o    aic3106_init( );
( |' W, O3 H+ N- u0 Z$ X        while(1);$ G( v  m2 g3 l/ w7 l+ l) D
}
$ Z  x( P" R2 `' }% A3 I2 x& q, O  l2 C

/ w$ f: E9 b  j7 L- taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 T. H/ @( z+ S1 H
/* Initialize MCASP1 */! J0 W2 u3 }1 N/ p
    mcasp = &MCASP_MODULE_1;
, h7 M/ G5 w$ b, G( M" _/ |/ ~; e! ~    mcasp->regs->GBLCTL  = 0;       // Reset
8 q9 H8 q7 Q! ]% ~7 t% W( R- G2 ?    mcasp->regs->RGBLCTL = 0;       // Reset RX
: k) M# F$ v4 u4 \/ F1 _    mcasp->regs->XGBLCTL = 0;       // Reset TX* D! F5 w1 w' I9 U8 ]7 d4 R6 b
    mcasp->regs->PWRDEMU = 1;       // Free-running
) a$ V" `$ g  r# U   // configure McASP0 receive registers
7 h. o  P0 V6 p. f/ r% s$ t7 e    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 o; X* O. s* q% t) h  a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; `  f$ U4 z" m% Y! f5 k2 Y6 J    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; m  V5 t: b2 j! k9 D7 ?    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 Q+ Y( J' w4 K% D# t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 B& x6 B$ \9 E7 G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ W; W4 E, X( c; U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- I+ y+ e; r  B( v2 h1 N+ m
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 I) h. z* C2 R: o& A- R2 e# y. `8 L$ D( V6 ~( S; p! C" l* o
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# |" K8 v; n0 F6 g0 o2 j
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ c8 S: ]% j' E, R6 D  `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% Z) D2 T/ f' a4 ~9 |: |$ ?% ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, U  r: x# R9 M3 P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, E/ a* @4 N, X; r& I* G: ]
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 Z9 D8 y5 I4 Z' F, Q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% K3 B4 {+ D2 `# k1 }7 y% b- ~9 q% ]    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 o& x- {! [" u# H: k' Y" ~2 k: J
8 h$ [+ Y6 L% H/ w4 N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- _, j  v6 F& |2 ^2 L. N1 S    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" Z0 J+ K5 i1 L/ T( E* b
    mcasp->regs->PFUNC      = 0;          // All MCASPs
( Y& F2 E' [! u) i3 P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  t, Z2 q" y4 R; Q7 N. B! G
9 {' Q9 L) T5 z- c6 `$ ~
    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 Z) H: n+ h; \* K$ l    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 N8 P7 H/ {- F  C% L    mcasp->regs->AMUTE      = 0x00000000; // Not used
# D; d- v( H2 p$ r. W8 R' |1 K; g& \# m1 _" b- @
/* Starting sections of the McASP*/
6 n  c( K& H$ e! K6 j    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 W; k* `8 s1 L! U$ n5 B9 I7 o% d& a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . X& X, w6 Y( X8 y3 e" k
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; f. l8 q( s! L3 e4 a2 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  Z- ?$ V0 P& x3 [9 z3 W
8 Z5 ^& j3 g+ r; C
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: ?6 n, B1 @1 ]  v2 q9 S1 G1 k7 i: L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  C" V7 t8 m2 m: I* D" M
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ z" A% K3 Z% |: S/ B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, u+ C$ w- q  n1 E: Y
, K" v) o2 k4 [- g
    mcasp->regs->XSTAT = 0x0000ffff; " V5 ?( j. A+ {; d
    mcasp->regs->RSTAT = 0x0000ffff; 4 e7 e+ @1 v5 m7 ~( j3 m- ~

& p. |+ E) y6 [+ p. n% a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& W8 d+ f7 L& q+ V* o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  F" f# R5 I( u/ T- C- g8 q" j5 n    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 \& W7 L% K- w9 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; O0 U- ^0 b) t3 x# m0 e
+ [) J) u3 j1 H8 g9 X5 T; c2 e    /* Write a 0, so that no underrun occurs after releasing the state machine */& [: N! w. ]; d3 g$ U/ M0 F
    mcasp->regs->XBUF5 = 0;
3 z# _  z0 J: c. e( O: Z    mcasp->regs->RBUF0 = 0;- ~+ V5 z, z7 R" E3 U
* w3 n5 W5 b- @1 q* Q+ D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 V1 |/ _: J1 j  A1 \6 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& m( y0 h* v( j
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + g* M0 T* m+ a8 S# s) V% N" V$ M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 D# H5 Z: j5 V: w
- k3 }: f& D# y3 g    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 j- s4 Q/ }$ L5 c' O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 |$ r; n# @& `& H% x' v/ L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 f* T& r9 f/ h% g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 N9 p. c/ D* W0 i6 ~
# i# q4 s. ^2 b! P: H
    CSR = 0x0000;
7 r) v+ A/ e) V& D  [    INTC_INTMUX1 = 0x3d;
: w. S" U$ B. q8 i" ^0 s( m    ISTP = (unsigned int)vectors;" t) G! G! m, _5 N( I
    ICR = 0xFFF0;  ! r, K; q, i2 u5 g* @: p% f/ V) h
    IER |= 0x12;  : ]3 {1 M" |9 A0 a2 N! m/ t6 F
    CSR |= 0x01;  
! z5 b7 d/ z6 b. S2 Q+ O0 ?# `; q: g# K) @' S4 |

  v- S' Q" t4 I" c8 ]6 m+ d: |. y
# o  m0 \/ S0 g. o* W/ g/ M还有就是两个输入输出函数:/ u* v; Q& z4 ~9 h5 i+ F
void output_sample(Int32 out_data)
# M2 y' Q0 ]1 G6 L) G{2 }# {% ]( _+ I" D2 N; I2 H
  AIC31_data.uint = out_data;  * C6 m- J' R3 K9 k) I; T
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 Z) X% M$ ~$ p3 x7 k}
/ q2 J" C8 n" B4 I% \; i; e' J3 r" g: @. H
Int32 input_sample(void)
% N/ v9 h% u; u2 f& W; S- X; W{  
5 f( j" N7 r: F& \) l  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ _1 O& H1 N7 W! \
  return (AIC31_data.uint);- P. r. T6 f+ s6 c
}
, j0 S: v& J4 v4 L& _
# E6 g: M) _1 f- x9 @7 Z
分享到:  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-3-15 15:48 , Processed in 0.045340 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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