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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) U' T7 F. T6 `4 e/ Q. e6 n
main文件:8 ]( O! G# q% p  b: \
interrupt void interrupt4(void)  
6 ~' i6 _" G2 _+ l# h{9 g' j0 x0 U* i% B# a
  Uint32 sample;
! F6 n" g' z. D5 K# ?
2 K$ r' Z3 V3 q5 z  sample = input_sample(); // read L + R samples from ADC! B: ~! }. a# T8 j( B6 l" G
  output_sample(sample);   // write L + R samples to DAC 8 N, K9 m& k! b. o- S
  return;
+ A' i( M+ @' _0 W* o8 u2 O}
# q" \* g7 W+ g( Z1 g  }- \/ z5 M% \# ]5 T. R% @. ^. w
int main( void ). c' b' \* u6 X6 v* I
{1 |. F' h# a) ?: A5 D

( r$ F) l% V* r( E8 T    /* Initialize BSL */
* M% o) n3 [: I    EVMC6747_init( );, d; A- y9 I" c8 S4 d" b3 \/ n
        /* Call evmc6747_intr function */
; L3 C2 ~; c% G$ l! `  D    aic3106_init( );
4 m* _' `  D9 R9 K7 o        while(1);3 l. `+ }2 D' D- B# \$ O8 `
}
+ R8 @; H  |0 T0 E* C7 c$ {- F5 R4 V* v4 t0 c0 P

1 p: I3 d1 x' ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 T2 F, J. [  B1 S/* Initialize MCASP1 */
1 `1 K) `; L% f9 o9 _    mcasp = &MCASP_MODULE_1;6 V8 B" Q8 q  O6 b, Y; J! l
    mcasp->regs->GBLCTL  = 0;       // Reset
9 U- n* g, h' U% L    mcasp->regs->RGBLCTL = 0;       // Reset RX6 H/ V& A2 n6 F- {/ Q' A7 s$ l
    mcasp->regs->XGBLCTL = 0;       // Reset TX, z! Y8 N: Z$ H' H" Q7 v
    mcasp->regs->PWRDEMU = 1;       // Free-running0 J; s+ X& l% Z
   // configure McASP0 receive registers) Q9 P* O. B2 ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 R. D2 E/ Q, q5 b) H( W7 ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 F' d$ S3 T( O& X- O, t* |6 p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: ]# D& g  u) y3 [5 a    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( q0 }) [/ J; Q1 y5 I4 d3 \    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), X) Z. j1 x2 d  X/ q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 B# g1 r, Y1 B+ ~. ]. k$ C. T    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 e! c, e/ H" _2 E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( v3 a1 ]4 F% j; F

- ^0 i; N, D: }# G9 t; ~+ t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# @& d1 V( u6 H+ U) U
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 E, Z. A# S0 R! C0 i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: Q* W' C  N* \( d+ x/ v" U
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 \9 Z& ^$ X6 O! W
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 |+ D5 M' p4 `) {- Q5 q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ J! G* A% }4 S6 O2 @- l" E; R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* `$ G3 ~, ^. u. i1 L1 {) t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& }  B; g+ r$ q1 |. F: ^! R2 j# Y+ }# `* w1 w* o- y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  K3 O" i# P" |8 K0 f0 t
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 y5 V9 o2 }, V7 b2 C0 l' s+ }* ~2 g
    mcasp->regs->PFUNC      = 0;          // All MCASPs
  V+ x0 G% [8 Z! V  \    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: K) y& o2 e. B3 u

  M. K+ X0 ^, h& R' f9 c    mcasp->regs->DITCTL     = 0x00000000; // Not used
- R' j' B- b9 _  ~; o  @    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 l2 @' [+ [: P    mcasp->regs->AMUTE      = 0x00000000; // Not used% {' S3 m/ y9 w  C) J

% u4 w/ `" G0 I) \/ \/* Starting sections of the McASP*/+ g+ U, L7 F4 j7 I8 r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 N% P% r" v% a. i$ C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& D  x8 S! U4 S% {    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 y0 k2 X  b$ D6 D1 c( [* P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 S0 c$ H* M* m/ y; }

& M9 ~+ d: o( x5 o  @: ], S    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   u  x- `# `4 o: h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: k" W4 E6 ~9 {7 X" ?+ i* T- t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % z( ~0 G+ Y' R! y1 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ G/ J& b2 E0 K2 ?  q# T! l
8 U8 H6 Q! a0 L0 X    mcasp->regs->XSTAT = 0x0000ffff; , Z7 K% l& l3 R  |+ q9 ~8 s1 @
    mcasp->regs->RSTAT = 0x0000ffff; $ V' ~7 @% x, v7 s6 l

3 A8 L& s8 i2 f' _    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 p" m8 v  \. ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" s5 B5 i. v4 D4 u; f5 [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  ^/ M0 J3 a  q" c9 F$ S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& }+ N2 k6 N0 l- \  m- Q; p* J' m! Y1 U2 M
    /* Write a 0, so that no underrun occurs after releasing the state machine */
, K& @- p( I3 {    mcasp->regs->XBUF5 = 0;
% o) S% ?+ V1 k+ r    mcasp->regs->RBUF0 = 0;$ i1 q' e& a/ l2 ]; D

( y& h, S) Q( h; ?% Q% a) J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * r0 m3 g  |# T9 b( f! {% Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 c- m3 L* M+ D! T) [2 ]" b# [; v
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 e: C. E' @9 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 S9 b: T$ h: Y2 f7 e: O  L- `9 O
3 z8 c6 Q$ j  S, m* [! f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. N4 }5 _6 x9 W* L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) Q! c& K4 c* y- a8 O2 Q  E- a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) D; q% |$ T" \- B2 D' R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: ~8 f2 e  J! }8 k/ b. t/ U6 R0 @

+ [. @; t  Y, K6 P( @1 T7 U% y+ ?) G    CSR = 0x0000;
! X& z, t7 l& q5 o    INTC_INTMUX1 = 0x3d;
; g8 g% A2 j) B+ {) g# D" [% l    ISTP = (unsigned int)vectors;" W% T2 S" s- C% J
    ICR = 0xFFF0;  + O1 }& ?+ Y1 c0 d  ?7 w0 u+ J6 J
    IER |= 0x12;  9 {, H( u: a( C
    CSR |= 0x01;  
4 D: e8 r) h- S4 H
: s' t/ }* d8 ?6 U' K0 U. e0 W
# r& c0 E7 n* p; s" F0 N# M' p2 g3 H
还有就是两个输入输出函数:
8 h5 T  a  K+ U/ F) Gvoid output_sample(Int32 out_data)! A2 o' [  g! U1 Q2 z
{
& L. v  [* {# [- S, }  AIC31_data.uint = out_data;  
/ e; S6 ~0 O2 [) z/ C/ S. p, r  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% C' e- d7 T8 I& D5 d}
& y, w; q+ F0 J7 a/ r$ Y* l# C" L% w2 X- ?: Y' ]
Int32 input_sample(void)
3 j, d* B+ v; \% v2 q6 q2 E{  , P9 H% r8 M$ Y3 P. V) R- l
  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ K3 r/ k( \7 H) Z0 w8 d, n
  return (AIC31_data.uint);
. I, H6 x; H$ q! E}
% z) j  c- x1 h& [0 N+ x6 L* V
$ \3 [6 ]5 g7 g  X' O7 b  M
分享到:  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-17 09:44 , Processed in 0.041635 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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