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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 Q2 A; R7 i/ @5 k! o7 fmain文件:
( b& \2 N/ A% |* L5 ^% C) \interrupt void interrupt4(void)  ( V7 L7 [! c2 P+ n% q* D$ H1 I7 U' _# f& ?
{
( v$ I' C& h" A) J# w* [  Uint32 sample;
+ C8 p4 U' W) D5 y/ L  l, V# ?+ K4 {9 d9 K9 k9 ]1 ^
  sample = input_sample(); // read L + R samples from ADC
& |, p) h& c" m+ ~  output_sample(sample);   // write L + R samples to DAC
& I# d) ~1 f0 E+ I. I  return;
2 F, o4 X6 J0 g5 [" Z6 ]! f" |}# K# @- e' z4 Y0 }5 ^. O) c  _
7 ?; a; O% {) v  O; Q* V( Q
int main( void )
) o3 W8 ]1 @6 }{, U. ~4 @5 B" V/ s
+ i6 W1 D6 K, ]( Q
    /* Initialize BSL */( [" @) E- O4 s% d
    EVMC6747_init( );
5 I" d2 i5 \/ J4 b% M5 F0 h        /* Call evmc6747_intr function */0 U2 y+ a# I: {5 B8 u
    aic3106_init( );
9 Z1 |2 y3 t  j4 l+ Q- a        while(1);
3 ^0 \: z8 \. F}- q- h# T+ l7 A4 V* @; M# }' ?

% U0 \* z9 J  ?3 }3 ~9 J2 R& Z7 D% `
( e# Z& y0 v2 f; \6 q# Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) D/ H0 ^# r2 m: O7 Z* W
/* Initialize MCASP1 */
; V: e/ C% c. G+ u; |    mcasp = &MCASP_MODULE_1;
- F9 B9 O7 R. d* @% O    mcasp->regs->GBLCTL  = 0;       // Reset
, r; @  n3 v( a; U    mcasp->regs->RGBLCTL = 0;       // Reset RX0 |  X  B& Y; o4 q3 Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 q( M! v  i( I    mcasp->regs->PWRDEMU = 1;       // Free-running& ]* T% r9 C! m# Z5 z* B
   // configure McASP0 receive registers
, N9 C3 a% O/ X4 h7 A    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 W& h1 g" o* S1 \! ?! b4 M
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 e% D+ ^* Q5 _4 z$ N    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 F: e$ W2 F( y& n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 W5 d  ]2 A/ N4 s( `7 g5 j    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 B: h; k: p0 \& p3 q* }: p( B! t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  b* {$ ^- d* O' d4 k  |0 T9 @    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: U1 @: e) f0 m) ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 A- w: n- b' T" `  ?, V
: w- i% \( }3 a$ `* x    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) o  j! T# ~  f9 h    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 F- g* z" w! ]  V( D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, U5 K, U3 C( G; d
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. b7 [3 |. R* q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; d5 q& E3 B& f1 v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 [# g9 I5 Z2 N0 B$ M% m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( O, y2 `: T7 a4 N( T1 C& a1 c/ ^    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  W+ {8 {; W* c4 l

( Y$ B% @3 M- P0 Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ i+ Q5 y1 R8 |$ c: \9 N: w% B# `
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 V! z' c4 ]9 g( ]0 m  x
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ k3 A) `9 \# t8 q+ C" ?( w  P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( [; X, W1 g! E6 P
( A' `- V+ `' z, e5 Q3 [' E* S    mcasp->regs->DITCTL     = 0x00000000; // Not used* @( z( C  W7 f# i1 o$ N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" E3 U7 v8 F' h! k. |& W2 X    mcasp->regs->AMUTE      = 0x00000000; // Not used/ \( m, ^/ v" ^
  j3 {( L" S$ }( R& {4 x9 [
/* Starting sections of the McASP*/
1 \3 I, {+ N7 L8 c9 s5 q2 o- ~( V    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 y6 l- ~, H- q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
% B/ D4 Q6 v5 Z7 I3 [) a! @7 C    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 R- m  V! c0 P" d$ T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 i4 V9 w) @0 J

4 d$ H. l) t; f! i) Y; b: L, C- \    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 ~) z4 R3 l; ^8 _- X6 o) W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 `7 v7 j7 q8 X+ }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " V5 Y  [4 g5 g( n4 j( Z! P1 ~# W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; }9 f- P! |1 J1 t) C3 z3 [, x% b+ }" ~: x
    mcasp->regs->XSTAT = 0x0000ffff; ( m- a: E3 E5 }) _; q+ ?+ R
    mcasp->regs->RSTAT = 0x0000ffff;
, a2 S3 z) t$ t2 V+ u! z1 s; c6 ?! n. t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- i) o$ i9 j2 n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; I/ }( o* J3 T    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, X  t1 P4 |( Q5 }) j& K3 p; V3 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 t4 X2 @" X. p! u! q8 A
0 R7 l6 m9 Z' F: w$ J- e4 v  w* Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
% z$ @" Z8 u. \) @    mcasp->regs->XBUF5 = 0;
5 p$ P9 s$ Q; [! u1 p7 R6 k    mcasp->regs->RBUF0 = 0;: M: O( a) K* h- J2 r& g% q
6 q( w+ }9 V; a' p# W
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) Y# [( d8 W" @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" V- d7 ~% c; D0 T' h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & K7 y/ D1 {$ I+ ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  l: n9 G$ ?, [4 m, J8 @
% O9 Y3 T+ |& A' o1 B2 q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 n: J) h% v8 A4 {" C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 a8 ?" G: h! b6 I0 s
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' n( f6 H3 S8 ]# b' ~5 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 A5 s$ x, P& [9 W

8 |& U( V7 ^! Q* d    CSR = 0x0000;
4 [7 `7 D' Q* j( M) w    INTC_INTMUX1 = 0x3d;
# n$ ^. s: Z5 [7 M& E7 a; V    ISTP = (unsigned int)vectors;1 C6 Y/ y( z) p/ v1 {* Y
    ICR = 0xFFF0;  
' c: ~3 k* v4 G    IER |= 0x12;  % ~3 z: `/ S. n8 J' V* a# \$ O
    CSR |= 0x01;  ) Q1 ^6 [; g; S: z" B; p# ?

) \! h4 n8 L1 }* r& q% ~0 ?
9 |( X  Y- Y" ?& Y& H7 W: W6 x7 G3 [% ?) [0 F7 p9 w
还有就是两个输入输出函数:( Z' P; ?4 r7 |0 e' L' P+ d
void output_sample(Int32 out_data)
* ^9 C% v4 m" P7 A$ ]{
% k  K8 d, M( x) T' Q. a  AIC31_data.uint = out_data;  
- h  k( F$ p. N! ?. J, i' F; D# R  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ t- X% y0 i4 p% q2 a) S" y: J% f1 e
}! I1 a. E2 x1 ^$ J0 Y3 P  }' m( \( |
  Q/ v- h. L! B0 f4 K
Int32 input_sample(void)
" U1 m6 W, E* u+ C4 S# Y; ^{  - D! \$ w; Y0 n, u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;# [. s. Y3 J# }; d6 T) k" S( `) y
  return (AIC31_data.uint);3 Z; p- |- h. P6 a( P1 {* ^( H
}
8 r. W3 J! [( F2 a4 }3 b2 o) P9 u+ U( B$ p; G
分享到:  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-7 19:23 , Processed in 0.041405 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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