C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. T( Y* C3 g" ?  b+ ]# s8 i' l- R0 D' G
main文件:
7 q$ M/ {; ]4 pinterrupt void interrupt4(void)  7 r7 x; O8 l: ~( x  ]; V, G
{0 }3 ]0 D- J! v. r0 X5 w* t0 B/ I
  Uint32 sample;4 v% N% S. R. o. ?4 R" \8 n. j, J
8 D/ l, U6 h! k, I7 k6 M
  sample = input_sample(); // read L + R samples from ADC
3 f  K5 \, u4 w  c& ]  output_sample(sample);   // write L + R samples to DAC 3 V7 x  [+ }. X4 b: B; |
  return;
3 A9 p3 u* \# C- L/ K" u1 B5 i}
. I7 a/ k( k, ?1 \/ \% a6 G* c: x( ]6 F0 B) {
int main( void )
. A3 ?/ P! w' `5 a2 R# r{  L& f3 K/ W) M6 f, y
$ _& z! L  b" g% u- [
    /* Initialize BSL */# G( M1 s' |1 `1 ^9 A4 ?
    EVMC6747_init( );
1 E" y9 t, V# I$ }3 ?  ^( _5 C        /* Call evmc6747_intr function */2 n) P  |% J2 k+ t  T: E) ]
    aic3106_init( );( b7 t9 E8 t( Z( f% H
        while(1);7 j( \4 Z$ ~1 K! m# p$ E5 M
}- p; u# W" q# ?6 D8 p1 T, K
" L7 N& L: \; l
8 X3 v: T, _2 A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 I; C* |1 X$ g( ^1 {
/* Initialize MCASP1 */9 i% y5 t7 Z7 I, H
    mcasp = &MCASP_MODULE_1;
, }2 s0 E' E5 J( Q1 p) Q    mcasp->regs->GBLCTL  = 0;       // Reset
2 Y! ^: u. h4 o5 v+ @; U    mcasp->regs->RGBLCTL = 0;       // Reset RX
% u$ l. H# p# ?$ o4 {! I2 _3 ]( ~    mcasp->regs->XGBLCTL = 0;       // Reset TX* S& B# C# E0 Z$ }# T" B) z- u
    mcasp->regs->PWRDEMU = 1;       // Free-running# h" j- M2 J6 v; Y2 A7 t) y3 S) H0 @
   // configure McASP0 receive registers8 q) W: |5 P* r& [3 y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ r% P- c* c& P+ L9 s
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" W- x/ v! q" Q, B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 Y- j/ M7 z2 k
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 i& @# m6 d% g4 d; \$ J5 Y& |
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 ^. l* D/ u' l5 h% u( a: A+ `    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% u3 X, }( ~4 w& Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) C, c# g% C: z% `- L    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) Q& L- t$ X% ~2 Z+ M- v9 n

5 f3 E/ K$ x9 t8 l+ C8 c    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 B' v2 U1 a6 x# N9 B    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# C/ w) t/ I( h7 C4 A! H    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 V% u1 D! L* l- A. m2 G, ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 D& ]: g6 P- F% s' c  i# U+ \+ f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- f  p% m* O; V
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, e7 ^. u3 m/ T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 t: |0 I8 g* E: q/ R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ T2 _$ b4 x2 h: M5 K* ]+ T8 F( d9 B, ?9 r# n
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" r) x1 C3 c% L2 ]! z$ C" H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 _) Y2 l7 y3 ]$ H# i( _! N! }    mcasp->regs->PFUNC      = 0;          // All MCASPs9 s: g0 O* j7 l9 j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& t2 [  R- z% z
, B4 q' C# ~: A; V- n; x' y    mcasp->regs->DITCTL     = 0x00000000; // Not used0 Q. n; K$ N# _7 _" O* e
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ t( |8 L6 d' t' Z) _    mcasp->regs->AMUTE      = 0x00000000; // Not used
- \+ X1 m( _3 p2 J- M2 p/ G; O$ R5 ~, e
/* Starting sections of the McASP*/) ~7 L' C4 {% d* m/ h  [# h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * ]- H8 c& e/ c/ p$ C! H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- L  X( M& _$ ~0 T# Y: S. l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) n4 k* a. J; D) `. Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ ~+ P. x9 U) A" I+ Q+ z3 g" \0 h* x9 T8 F6 n; F$ \# E/ H, ^& o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % E* t! e2 n1 f+ c  \4 a8 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 Y: i1 N& r( C  X' E* q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 C- t  I9 I. G! E1 [8 u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ w$ D9 i/ L3 c

! ~! L2 \& T1 L6 {  v4 G    mcasp->regs->XSTAT = 0x0000ffff; 2 B: T" U7 X% m9 {7 p
    mcasp->regs->RSTAT = 0x0000ffff; ' S5 S, I* w3 n1 M$ f
) ]6 ^* u8 ?: ^; s. F; q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( }5 S7 q: P5 Z" q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; Q5 S9 J1 c. p1 K' Q( k( H    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% ]- m2 E; W$ V+ g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 W0 A; ~0 m, r- a/ v' i5 w' f
3 {  t/ I5 Z- _% [( A    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 I% ~1 C3 f* R, G    mcasp->regs->XBUF5 = 0;1 L+ m: S. ?5 j6 ]
    mcasp->regs->RBUF0 = 0;& k4 g  `# P9 j9 }) R8 D5 a4 @
/ ?, u$ y: }& c5 c
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 h. b3 C# G4 ?7 [2 @( h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& d& N3 A3 g  y: V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 |, d2 Y# E+ e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! A  d/ J8 }% w; M+ f8 J9 H' e; f. A* B8 H) B* B* P/ |* r
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , r- n) j8 I* D# J7 A( W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ ^( A- [1 q- R; v7 R- g
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# ?% {- |% B+ r! g/ V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. ^5 v5 a, Q# z/ m# P
9 h; {3 c5 [5 h9 v
    CSR = 0x0000;
3 F4 t" ^+ I; `    INTC_INTMUX1 = 0x3d;
& M. d6 r8 V. w3 S    ISTP = (unsigned int)vectors;$ c  p. m' t, l
    ICR = 0xFFF0;  
* }3 v/ h$ @+ a  I    IER |= 0x12;  
; P( d5 F" I) H+ \) F# g    CSR |= 0x01;  ; ~; z& L1 u2 d) P6 _" L0 h$ ^2 z

& `$ E  D) Z* o8 l$ a( {6 Y3 c4 f1 D5 x- ?4 x) u! W5 ~
' w1 m) N( y$ c; d0 x- `  O
还有就是两个输入输出函数:
) }1 s. \% y6 _void output_sample(Int32 out_data)7 D, }2 v/ w6 Y) E
{; ~' t% N0 p+ O
  AIC31_data.uint = out_data;  
% S7 F  \: Q% i7 j& j  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 ~9 c* R3 L5 d& V6 H  U}+ d4 c. D+ \4 ]$ E. n' o
2 y( t& d9 v$ ^
Int32 input_sample(void)
2 Q/ N! F3 V0 _/ I& l4 q{  . _$ H5 J' [0 I' I; p0 b8 l
  AIC31_data.uint = MCASP1_RBUF0_32BIT;" R) s7 x; ]+ v2 w& t
  return (AIC31_data.uint);
8 s; e0 ?- R7 m}' o0 ?' d) `6 @8 H
% h0 Z& U% }9 I. U+ 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, 2025-12-2 06:16 , Processed in 0.039660 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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