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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) p  ?6 A0 j2 ^- A2 h/ G, H7 l% X, Hmain文件:. k9 B4 L( y% y$ ^* l; R7 k
interrupt void interrupt4(void)  + _% f$ [% K2 g; D& B  @( G
{3 T3 Y, ~: y$ r, Q
  Uint32 sample;+ k& Q/ _5 @  l2 t% d3 h0 z

( a% S0 Q9 P* M! S( r/ n  sample = input_sample(); // read L + R samples from ADC
$ w( e9 c3 M6 [( h  output_sample(sample);   // write L + R samples to DAC
- h3 k% \: C* ?! N; e; c, J  return;
2 ?7 Q. |1 G& d, N. ]7 ]2 l5 ^}
; q* a/ M0 h1 i/ s
9 K. Q. A: {! Bint main( void )7 y2 p4 I- R$ f6 b, |4 M4 T
{1 h4 k- v; H9 [; C( H, g

& C3 E* e5 L' B; o$ o! F9 m    /* Initialize BSL */
. y3 I2 \# ^/ u8 R  r9 K6 B( G    EVMC6747_init( );0 h4 G2 Q( W& a
        /* Call evmc6747_intr function */
& S# x  U) z, M4 x    aic3106_init( );; X7 n. i6 r5 @! t! v
        while(1);
2 \8 Z; u) j% H% x: U$ M}
3 ^/ ?9 Y+ x7 g! ~+ X4 h- U
* H* u8 p' V1 E: K# o% {1 g4 S' Z5 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ f6 m1 B) k8 j/* Initialize MCASP1 */
9 _. ?* X- i8 H- |    mcasp = &MCASP_MODULE_1;
; Q( f' C; h; h$ y3 M    mcasp->regs->GBLCTL  = 0;       // Reset
3 `/ |9 z6 V  G+ G, Z; p( _+ d  p    mcasp->regs->RGBLCTL = 0;       // Reset RX* @1 K! K" O1 n1 |/ Q
    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ r+ O- h4 b$ N" s3 S9 G$ @    mcasp->regs->PWRDEMU = 1;       // Free-running  d+ h( h% L) M2 O; Q3 L1 @# U
   // configure McASP0 receive registers, ]5 S2 l) N6 ?+ R9 X" ]; r) f- R
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* a* V3 A2 d+ Z1 ^/ j' L    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( F/ G2 t2 M3 L
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' n4 D- I. w: V, d% H9 q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! r$ l$ r) v( i
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) P2 s9 n% I5 P$ Q; Z9 z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. J: f7 z/ n/ `    mcasp->regs->RINTCTL    = 0x00000000; // Not used( i( p) H/ s& e9 \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 P% _& N* q! _. N
& [# t' c; R) T1 E    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% W) ~9 W$ p3 x' D& v4 _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 y9 a- I) P8 v) R2 D7 o
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 k$ K0 F9 I, T2 p
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, \/ ]& [3 W1 O. C  b
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- w" u% z2 E$ n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: S% Z. T( ?$ u- d$ H- ~8 i
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: c0 h' r. A6 q) H) K
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 y9 w" x3 K' B/ v
) o, f! I; Q4 k# p
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* e( |2 `# r* M) {, M; E4 g
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 Z% Z/ V, i6 M" n% r  R4 Z8 C    mcasp->regs->PFUNC      = 0;          // All MCASPs
, w% @/ [& A$ k$ Z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* ^) z2 [6 O+ e0 Y6 A! e7 |1 O

) F& f; b( s6 l7 _    mcasp->regs->DITCTL     = 0x00000000; // Not used8 ~+ C' }6 \. M3 B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( d. m4 s, a1 e8 S
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ C/ D9 M2 f1 ~1 Y
% R0 C6 B* I) l' @  U2 s
/* Starting sections of the McASP*/
. x$ j6 K4 \; g- r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. Y& p6 f, f7 b; W% r& g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    y0 A8 C* b2 _6 {
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # N) p" E  @" _  E* N# T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% d+ U5 G0 o" [% K( g
3 [  f* Y4 M2 Z5 _; O
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 ^- Q9 z- P3 Q4 ~, }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ v) Q9 H; |# y' E4 X    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : M9 s0 m( \* t4 o/ u( h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 c1 V+ |1 k+ @* S: v. I3 O+ P9 }5 T( X/ y
    mcasp->regs->XSTAT = 0x0000ffff; , z7 w- A: r8 }" ^$ n/ x- k# F
    mcasp->regs->RSTAT = 0x0000ffff;   Q5 g6 q3 s+ ~) r

1 K/ l3 {6 N( S    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 n5 j! j# ~( p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 O7 |; k, D4 R    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & p, y; N, X/ R8 N' l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 G" s( d" K2 ^4 F; F  n
5 T) ~6 t% m" l5 {; `+ B3 u
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 e# s* _7 j0 w    mcasp->regs->XBUF5 = 0;
; \% z& U. C( n    mcasp->regs->RBUF0 = 0;
! ^# i' I5 c8 i9 {
5 ^" n' \9 d1 X# S/ Y4 r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 i8 w$ Z+ I' e$ a' _" U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 M/ z! o+ l3 E5 Z% e    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 Y8 f9 `4 J  f1 k2 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 u) g% E- ^- W, {

$ r: ^9 O! `% l$ `2 G& F9 \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' `9 s+ k' @* O" C" N3 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- \! p) A/ N! v* q) V+ w, l
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 K- M: [1 ?/ x5 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ A- G% e( h$ [1 n: M
+ C: Q  W1 s/ e& c% A: A    CSR = 0x0000;
- [( ^3 k/ O& F7 ~    INTC_INTMUX1 = 0x3d;
6 I; _3 i( e3 u' R; ]    ISTP = (unsigned int)vectors;
. z( d' _- G+ r0 L- G) Z    ICR = 0xFFF0;  : ?- }/ E: ?7 u6 A4 o8 o0 h: h0 Q# l9 B
    IER |= 0x12;  + X; K: C% Q" E8 L: n2 A
    CSR |= 0x01;  " Z6 J3 Q4 O; w2 m" r

3 W* p; f6 r, W, E2 d" l0 C+ A& l) N- }$ z% A+ s+ U

  ^. X  @$ @7 X1 q' X还有就是两个输入输出函数:
5 R5 D2 O! P! o( mvoid output_sample(Int32 out_data)! R; z9 z) w  l/ N6 Y$ i9 c$ Y
{" u4 \' [# a% k- m+ W
  AIC31_data.uint = out_data;  " s; H9 X! ~& X
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 l% F: t# n) t7 f/ r/ }8 ~
}2 ]2 I- o1 g. @; |8 i, x- P2 @

9 z4 f7 s! W3 M6 x1 }9 N7 B/ |Int32 input_sample(void). }% |4 `5 C& b& h( B
{  8 i  Z( v) u, ]  v1 ^* K6 X: x
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. h8 ^: d/ O+ ?( }4 ~3 j  return (AIC31_data.uint);
( H* j8 S7 B# w2 V6 @}) W% t& K# a  s+ v7 j' {+ m
1 G6 X0 u) d2 K: H. a
分享到:  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 21:47 , Processed in 0.039160 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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