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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ S. @6 V* y& Y! E) e- k+ ^) [% u) \main文件:$ o# I$ ]+ m" e5 C  H
interrupt void interrupt4(void)  
, K. g0 j2 c2 W& O{6 H: L+ \7 Z. X* ?6 h
  Uint32 sample;
, ^4 W, @% m4 N5 @4 A  j
4 B/ Z" U, N# D+ R3 _  sample = input_sample(); // read L + R samples from ADC
9 M1 _+ \8 ^$ D' B  output_sample(sample);   // write L + R samples to DAC 8 _% e3 x2 y' W5 D0 X( S$ q
  return;6 q; C1 e/ ?0 q; M6 d6 o
}# A% U. }1 _' P6 h+ z* T

$ U, o% o5 N4 h/ jint main( void )+ @# g$ ]7 E) \( `* E! ~& I
{
* C7 `' m( ]% Z9 y2 A$ L' Z' P; X, P; _9 \% K
    /* Initialize BSL */
1 m, A. [) S$ l# x    EVMC6747_init( );# P: T: R) v+ J8 Y& }8 O
        /* Call evmc6747_intr function */
3 H1 Z: R/ L. k5 b3 ?    aic3106_init( );% ]6 U$ e5 C6 k$ n# ]
        while(1);
/ x8 p9 J% o1 s9 z, l" N}, u5 ~7 V, Q; V0 r# R: v$ b

5 F( G( M3 k) ~* X- x% b* Y9 s7 A$ T1 @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) n. y/ Q8 w: y$ `2 M8 z  f& p, a/* Initialize MCASP1 */0 e. f) h9 H" I8 w  x' n- \
    mcasp = &MCASP_MODULE_1;4 ]# _. V$ y* i5 ?  x$ p6 e
    mcasp->regs->GBLCTL  = 0;       // Reset
# B+ U) J, u' \( X0 c    mcasp->regs->RGBLCTL = 0;       // Reset RX
; t, z( ~! ]. y0 Z1 m    mcasp->regs->XGBLCTL = 0;       // Reset TX
* Y3 s- u1 m2 Z& o# _' E! Y7 b  r    mcasp->regs->PWRDEMU = 1;       // Free-running
$ f4 i0 a; v* k, W5 g- a" ~4 N1 m   // configure McASP0 receive registers# K- `+ e- l5 U6 e3 x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% V$ D( I; L! v( [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, f  R1 {( N2 @7 D$ k) L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' r) X) ~) T/ H& f  o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- }  P3 r5 ~: l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): D. f4 B: _8 U
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 z7 e0 k( D, Z  z    mcasp->regs->RINTCTL    = 0x00000000; // Not used# z% f$ G6 ~3 e) |9 q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) ]" F1 L+ K4 w# G1 h% c; a  W9 A: {9 Y5 u  F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" N$ n5 p7 Y3 G$ y' v+ Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 F3 p6 R: n/ Q, ^7 k  ~4 h7 B6 A0 ~
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 G6 F' S" A4 z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& F2 u1 b' n  }* T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) D. d% x6 g- K. A) |4 F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" r: Q4 H" o# L2 j9 y9 o9 F1 V% q( Z. B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 w4 Q! |4 z1 W
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ~; u" m) e. Z' A5 n/ b. m* K, T' Z

* y" h0 ^' f; o3 ?: `: a# Z4 p    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* B+ r  r$ D# ^7 ~' m$ C# |! J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! U; }& u7 e. `+ J0 h/ J" T    mcasp->regs->PFUNC      = 0;          // All MCASPs
; h# L0 ?0 ~4 q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' ~2 C- \8 j2 L" ^) V1 K

) N" \" }7 r& k$ X" |    mcasp->regs->DITCTL     = 0x00000000; // Not used6 C) c$ b. f! W: R! {. ?) [4 i
    mcasp->regs->DLBCTL     = 0x00000000; // Not used" a) h, G8 R% s
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 a) X( P# {% ]) x2 W* Q+ s8 C5 z
: U. Z" M' y; S& v# k( `6 L0 W
/* Starting sections of the McASP*/
9 B1 {" J9 p  Y$ ~0 h  N  y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 g- I, a7 {4 M' k( X, x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ U- w; V  K. ^. u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" s& e5 R' ~/ I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, W7 y( [/ W  u7 a9 q# E& ~, i6 j' `( _6 h9 e% d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) I( z) }5 H( [1 ~6 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 p0 `7 ?& E  z& e$ n    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! P2 N& e& ?1 V6 K/ Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 d9 k# ~6 K' f% u$ T3 ]" G7 {' }1 g) f" M0 O# D# r
    mcasp->regs->XSTAT = 0x0000ffff; 3 r- q) J% ^. C- Z
    mcasp->regs->RSTAT = 0x0000ffff; ) r: h( R' e" S, \. B
; s/ J2 s2 Z& S: y$ z0 F4 a1 V
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) p  d# k8 ?* o( ?1 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 [. Z9 O( L! h% p' V" t$ A+ W
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! W: S; G1 O0 K& x  R$ N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# a8 [4 x- B! p& c9 H" N
; o  N) M; F% ^2 X& _3 S  {) e    /* Write a 0, so that no underrun occurs after releasing the state machine */. M1 j9 n% w7 R
    mcasp->regs->XBUF5 = 0;
5 }+ Y; u0 r2 F; ^4 y8 ^    mcasp->regs->RBUF0 = 0;
2 T' C9 A' Y4 m8 [2 R" q- R5 I7 z- P. N- A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + W- t2 o# B* U$ L5 k* ]% H, U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 V$ v3 ?7 f0 B8 s8 J" T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 h0 U: h  h! v! `+ ^- z5 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% Q' ^! q+ ^* r# B; f; s0 w- K
: _( k# C+ U" M+ y5 s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # V1 @+ w3 Y- ]! Z! F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. `/ K  H. Q/ z7 t    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 Q$ H. X8 o/ `" V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 ]- r1 U) j2 u- R* E1 A7 l1 D1 F- W2 B

' A" T% |& L" q" g  z( ]2 `' [    CSR = 0x0000;
9 Z# D# Q; w! e5 e( _$ J- u    INTC_INTMUX1 = 0x3d;1 L" e; r; g. }' o
    ISTP = (unsigned int)vectors;
5 u: P+ t6 u3 w  Z8 ?  t5 p0 W* A  f    ICR = 0xFFF0;  ' n; I# ?% {* r" y, _1 K
    IER |= 0x12;  ) `) z) v! k% p% B- T2 A9 _/ B  [
    CSR |= 0x01;  
; U8 H$ f* d+ N1 ^+ o8 V3 E  u( C! |0 E  @) b& K$ p
, H' {9 _! X, _( J# ?0 E

4 @; Q0 o: K4 [  |% I  O4 O还有就是两个输入输出函数:5 P( _, H0 Q( i3 x
void output_sample(Int32 out_data)- f9 B1 V. Y9 x1 X4 @$ C
{3 Q4 N1 k4 t3 H7 w" G. b) f0 `, D
  AIC31_data.uint = out_data;    O" p, u1 w) S6 e% C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 S2 \9 k  g6 ~; |% R  e& ~}
9 Z+ t6 X1 _7 S! y* H+ x& v7 S# s- x0 M1 E
Int32 input_sample(void)5 H/ ]$ a1 R) w8 J
{  
; u* b8 J4 G1 `: e  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 G6 ^) {( h  _  V% \
  return (AIC31_data.uint);
4 G! N% l  ?) Z4 I& F0 v  u}7 S; B; c* n) t$ ^0 A3 u" p: K

7 L/ Z0 O( q" z4 K
分享到:  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-2-21 11:00 , Processed in 0.041497 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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