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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" G! y0 H6 T8 q8 @
main文件:
8 r: E- ^! Y  J1 R) T- Ginterrupt void interrupt4(void)  5 t( y+ t8 O! o9 Y1 q& p+ H* s
{/ f- H. t7 ]- h4 ^
  Uint32 sample;
8 e, r: J; t$ y4 i
6 h: Q' r# o3 I) @  sample = input_sample(); // read L + R samples from ADC5 T  F2 e& [# |2 J8 a
  output_sample(sample);   // write L + R samples to DAC
: ?5 A; N4 Q. u  Q- A& I  return;4 l6 I- Z% [- K) b
}
$ |- [8 a, w- I+ |8 p9 i
: I, j0 P! R) }/ [0 U9 Q2 eint main( void )
# v5 I8 o6 N- O9 Y) k; U) G{
2 H' X# R' G9 b& |; O( N7 W) s0 R* b/ E
    /* Initialize BSL */
0 m& u4 i* j" q! c  B: `8 L4 X    EVMC6747_init( );
9 v; ~$ U$ k# E- N        /* Call evmc6747_intr function */- b' F# Q0 y0 [$ J
    aic3106_init( );
9 M: u0 y0 e/ G' V        while(1);1 g/ G+ S$ V# s* Y  [
}6 u+ q+ K; _5 C% E* L, J1 U

& F* b, V4 P, Y- N9 p' i( n+ J4 q" x9 x% W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& ]2 Q( R  W1 G/* Initialize MCASP1 */. I+ @! R' {( C1 V# I# v
    mcasp = &MCASP_MODULE_1;
5 L( R+ t, m& B9 ^    mcasp->regs->GBLCTL  = 0;       // Reset
3 j+ a+ t7 n2 [# M- h    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 z* f6 x* C9 f+ Y; |# H    mcasp->regs->XGBLCTL = 0;       // Reset TX5 o  x- O. L- w0 R$ }1 ]2 k) L$ A
    mcasp->regs->PWRDEMU = 1;       // Free-running+ K. ~/ l7 F' Z- n
   // configure McASP0 receive registers
' m6 w( ]% V. U; C. B% c% |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ N3 I) C; m! J+ i) A& W5 x" I
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" K; \/ v4 V% ^- @9 z3 D( X
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! R$ _$ q+ |# U6 y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  g7 z9 t1 `# F! O0 m8 n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 F' C% Z/ @8 f1 }# w0 w) N. F
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 d0 j/ K5 f# F7 \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ [, e/ M& V; k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" l& d2 b7 T( b4 Z; |) r
2 Z1 J, J" `# d9 J7 U( s+ X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 B* E; r9 b9 D0 ]+ ~
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 X5 D( x$ _% E! ?) a    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! P  Y# K1 C- o% U, I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 k! C" O4 z' f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 }: t) ^2 r* @7 N    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, O2 b" g9 t$ t8 d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  Y6 S, N4 w+ q% H    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! w& \0 b$ R/ k( r/ i9 i% k: J! K6 i  _& |# A" Y2 S9 V- V: @) P$ M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: `5 c$ P% _! V9 t    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 [7 B) v1 D% Q4 p; C1 ~- Q
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 F- O2 ?# {) I; [+ l& z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ ~, l. H: x6 {, |7 j# p) k7 y3 G% B: Y7 M. s( H( l7 F
    mcasp->regs->DITCTL     = 0x00000000; // Not used( r2 X3 }. p) v) B5 s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ Z" c/ |& E% {, P
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, J( I+ X7 }3 O8 C: _3 V8 a
" R+ U# b( {/ i2 i/* Starting sections of the McASP*/# t( p) o' ?) }' c7 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: {8 F! A& B1 H( F7 U/ }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 d/ h1 w1 {- ~( N7 @    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! S2 q7 [* h. q, J# Q1 }/ X& E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& Q: E- p; X# d2 P4 `5 y

3 a5 Q1 W4 R5 v9 y( w    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " @; h% J* m7 c( H3 w6 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& f. ~. r( S' j( E6 O9 A# P% `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 G& k# ~% u! }- @$ Y: h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% X0 R  Q% s/ P5 I

$ Q  t- v$ {: Q8 ?    mcasp->regs->XSTAT = 0x0000ffff;
' d1 m  J+ d% D( i5 T    mcasp->regs->RSTAT = 0x0000ffff; ; A% |9 h- S# u8 ^& ]! o

3 V9 z/ ~7 f8 i* H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ P6 _9 [1 l( B) D; Z/ |+ x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 v5 m$ t& V9 w4 f# X
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 H9 Q" z! @4 h9 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( P% ]" `; r. T* u$ v
* m+ w8 X/ y; |1 G, u4 T
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# [1 }! R/ r3 \    mcasp->regs->XBUF5 = 0;
# d8 p. Y4 A- p    mcasp->regs->RBUF0 = 0;3 K2 t- P8 H6 y1 u$ Z% Q, k

8 g  Q; X( O' L2 z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) Y' c% Z% [2 d& a5 M& e4 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 L7 f' c2 Z, \8 y. Y1 i7 H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! @' `6 a) z9 ^+ V* Z1 \% l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' k1 x( I! v3 w4 m
5 G0 s4 m  W% g9 g  J/ D
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 s2 S8 z- |" v/ e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, {7 J& d" Y) _3 d* f  ^  s* G' b    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 ^5 e: C$ M. @7 C) C8 @1 M6 t$ {- L  y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ @# O  `: I; r9 d& p
9 A9 E$ `& f1 P6 i" c, r    CSR = 0x0000;
0 z3 `6 K# Q# |* f. r8 q    INTC_INTMUX1 = 0x3d;
9 Q1 X3 R% S& a: V8 _  ?8 u, C    ISTP = (unsigned int)vectors;
7 w6 ]  U- r$ u! ~) ?    ICR = 0xFFF0;  : I% `, v" X& P" m2 J
    IER |= 0x12;  & X) U  F0 n; z  D+ {4 H4 J
    CSR |= 0x01;  
( v; }$ \3 f- [4 K3 [: g& @% n) E7 e7 k8 ~
) F1 l$ e2 L/ ]2 }: E  h1 h
: Q. q+ I" C2 c$ L5 h0 w% ]$ Y7 l
还有就是两个输入输出函数:
$ }+ k) e3 K( I% L6 L& Vvoid output_sample(Int32 out_data)
/ b& D! B- a: I/ y# C' ~{+ x1 f, L( m( Q+ ?+ K' D7 h, ?; n& t
  AIC31_data.uint = out_data;  , x( w2 Z4 e4 k% t8 _' m4 |
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 q4 g9 k! J" M9 g
}
8 h) l7 h$ a6 P8 _7 ?- C" M  s0 v. _$ [6 l+ w$ I3 ?- v
Int32 input_sample(void)
2 r' X- @/ r$ W7 E# O6 x& C# P+ \2 q{  / L- }& G/ d% N  A- u# G3 c' e5 b
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 h* k0 B' z$ u" I) P
  return (AIC31_data.uint);
% N: o) D  s$ [* ]& V}. U3 x! c+ C% M4 F" J- W

( z8 f5 w, E" U" ?5 c
分享到:  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-23 09:26 , Processed in 0.041054 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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