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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 ]3 A8 a/ D" D! u. o( f- Zmain文件:
# l, ^  j- P" u7 l# Sinterrupt void interrupt4(void)  
4 W: o# f3 a  P" }& {) _! ~{  K2 H/ t- ~5 K' t1 q5 b: p
  Uint32 sample;
0 K9 ~2 l' @/ G5 e1 Y6 L
4 {/ W- s* a: S9 h  }: ]# Y  sample = input_sample(); // read L + R samples from ADC
* S2 i* U% H* \! [) B  output_sample(sample);   // write L + R samples to DAC - L: \/ [# s0 j
  return;
% }, x5 l# c" f5 Z$ d5 n}) j! Y. E, g! K! o3 R
3 u8 w! @- T3 ]7 B0 w( Z
int main( void )
" D) Q( R1 A6 m, g" J2 L2 E4 ]7 k{" \, |" a0 {+ e5 _' d5 t

9 S! C  ]+ q9 e* N    /* Initialize BSL */) t2 X0 B7 Z  S
    EVMC6747_init( );9 M3 ?3 c' ^5 @/ M
        /* Call evmc6747_intr function */
1 P% M( S9 I; J! l    aic3106_init( );
( ]# t0 h) ~5 t8 i        while(1);* R, y2 z2 O# Z+ x
}; J2 U2 A  j; U& {( Y

+ }% s9 I, u! a4 }( O& |5 U  C7 v, Y' N# |2 }" v5 |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 J; o6 ~6 k6 h
/* Initialize MCASP1 */
3 M, t8 O& S) X# ^    mcasp = &MCASP_MODULE_1;
/ L8 F$ H8 Q4 s    mcasp->regs->GBLCTL  = 0;       // Reset$ O$ f- V( _% W6 A2 }$ Q3 E6 S$ W2 i& V
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ _1 s% f8 G, `& Z) q    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 G, P2 H3 F' f4 w$ Y& C: N! h    mcasp->regs->PWRDEMU = 1;       // Free-running
( g- i% j3 `, m9 z( L# K   // configure McASP0 receive registers
6 V+ {( O8 n& h    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% a3 S+ @- z- U! ?# L1 V" E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" o" H1 Y/ k3 r+ ^6 x8 {9 B- |1 N3 B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 k2 M1 h6 C4 T! s
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, N( v  [8 C; i: a    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 d: U( r1 h. k0 U# Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" _; l# x+ o3 \    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& F+ t. u3 [/ p" \  ?    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 l* X* J7 _  }1 l* z% A

7 S* U1 z4 y9 d    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 M# p. a& {7 e3 K" s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 ~- \% [* c" f  ]$ h! U$ s6 q! J$ W/ O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& ^7 p1 ]4 ]  b+ l: F) x* b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 m/ `* Y' V4 H- q) Z/ a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* I, g7 U$ p% `: X1 p4 p0 H% n. c
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 `8 Y$ F0 P  d1 G5 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) G8 |1 M, \; v+ U4 d7 g+ s
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: ~1 F8 h/ a8 y# {: H
5 y) m* ~; D7 g: J3 D9 _9 ~    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 I/ w5 {3 k& F' E5 r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: z8 l" @% `1 V4 `+ [$ \    mcasp->regs->PFUNC      = 0;          // All MCASPs
! e9 s7 ~9 y$ F; ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 u% q5 i* r5 t8 s5 s9 s, G# D

9 o' _8 a0 f0 @$ u8 W4 ?    mcasp->regs->DITCTL     = 0x00000000; // Not used
# r3 ]% X% I7 f, o    mcasp->regs->DLBCTL     = 0x00000000; // Not used& F. G) t0 o4 }1 e
    mcasp->regs->AMUTE      = 0x00000000; // Not used: R! }6 p8 U2 V4 P+ ^! V# k
3 V9 I9 Y5 m4 f( _) Z
/* Starting sections of the McASP*/0 Z+ |  K! i: }3 e( u7 ~8 p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / M  l$ {3 Q7 s7 V' K6 F! m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) i$ O0 s6 s" `" u! h    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 e1 {1 n$ {  z( T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ O5 P' {; d  `( u  e% Q9 I  j8 C6 _
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( K5 i, Q% ~' B- M5 N- O; d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ f) W* n0 }* ?, z3 u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& Z, j0 X* _% D- p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 B( C# ]# |8 H6 M3 l

( h7 }2 J% F' \- O: J/ R( X( K( W    mcasp->regs->XSTAT = 0x0000ffff; 9 O# ^9 y: h! M  U/ r& W
    mcasp->regs->RSTAT = 0x0000ffff; + `+ W4 ~) E& N5 p8 q' M! @; ]
5 E" T( l! T0 b; L7 c0 |9 }5 {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 _4 U, f% O7 y& @2 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 b  P' `- ^) a3 M: W& h/ }1 P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( I- G( v/ c% u/ [1 r- J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  b+ F4 Z- Q3 s

6 q& o' B5 H# D2 U    /* Write a 0, so that no underrun occurs after releasing the state machine */' ~6 o7 z7 _0 o4 {
    mcasp->regs->XBUF5 = 0;
: j0 V# {6 q. N5 l! R/ \, d1 F    mcasp->regs->RBUF0 = 0;
$ O1 j! `2 E! C7 S3 l* b7 U- a/ P& |0 C
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 `5 z8 Z& {/ Q6 L' B! y: S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 d# P! l# Q) |    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; n5 v$ J5 G2 a- R6 G' y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, p& V9 u+ h- G1 V
, O& m8 V" R* }; t! b$ p0 P4 _
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : k! M6 k& j- _% T2 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% D2 w# p+ U  `0 @5 S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 E) K" r& g" M0 x& _: Z2 h# s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 Z% c* o$ P9 X- n* |  t% Q/ H

0 O. g: u, k2 u; o# ]0 \+ M8 H    CSR = 0x0000;
: v, N% ^: Q; Q8 L    INTC_INTMUX1 = 0x3d;
5 c" S6 g9 C/ ^# n% p5 A    ISTP = (unsigned int)vectors;
7 M8 F) p: o+ z3 y3 W. M    ICR = 0xFFF0;  % d( e  n  n) C* i4 f
    IER |= 0x12;  8 X! B) j( F+ ]& m' V
    CSR |= 0x01;  
6 [3 |& c  h% n
+ I0 ]5 ], ?' x& k1 J4 g
3 C  t: n# s. ^% k# y  N9 S/ T$ x9 j, ?
还有就是两个输入输出函数:/ N' M& K3 w( u" C1 T8 y
void output_sample(Int32 out_data)
' \! ?7 J; A) M- x& f{+ K8 T. f0 _2 |9 L
  AIC31_data.uint = out_data;  
4 s8 o8 I& P+ {6 t4 G9 }: p  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ j2 h  ?1 |6 e' e' ?6 o}
; X: h4 j" c2 F, z& K8 ^
# R2 ~1 {" l1 s& N5 pInt32 input_sample(void)
, L! ~  i# J1 @$ `# M% }6 s5 _+ X{  
+ d! S& h8 N9 ^+ m9 N4 o  AIC31_data.uint = MCASP1_RBUF0_32BIT;- Q$ O8 |/ C* p3 b9 A. F3 E
  return (AIC31_data.uint);6 r9 R0 {! R; {* \0 M0 }) O) V0 G
}
! }' A, T9 H+ x" v) v7 H9 ?/ p
# e/ P" Q3 X; d* |
分享到:  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-1-22 07:13 , Processed in 0.041171 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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