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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( y, ~9 |' o/ s- k& U9 `% }- Amain文件:& c$ E- }: O: ~6 M- b
interrupt void interrupt4(void)  
; @5 R3 [# I5 _) U% B% w{
7 K) L- `' g1 G* S  Uint32 sample;
/ @8 q7 ~) x+ H! _. g- q1 c" K* `' k2 P& K  r- ^$ d" |6 `0 p
  sample = input_sample(); // read L + R samples from ADC
! E) F! e2 C, @, r  output_sample(sample);   // write L + R samples to DAC
5 J2 J' |* ?( }$ g3 ?6 L  return;
& a. L8 m' ?  L* m6 H2 w& h6 b, I}7 g) r8 p  T$ k0 n  p' g1 W! I5 G

4 F4 r+ c0 d( p0 P, V& c" ^5 i* j3 g0 R0 jint main( void )" E/ p* g! C( g7 k
{2 J' g# j1 m+ e/ A  H
. e; W" d3 W* @) X- F# ]
    /* Initialize BSL */
0 w4 u$ X5 O6 e/ O( ?* c0 C    EVMC6747_init( );
9 E9 `4 D+ n( ?$ {/ A8 _        /* Call evmc6747_intr function */4 W5 w; e7 z* ?/ S4 |" \0 c* p* y
    aic3106_init( );
# V! a5 N+ x9 L2 @0 J" B5 y        while(1);
8 L. h) V0 }/ \  C0 G. q! ]# u}
& Z4 V. @) ]5 D( u9 g* }
/ s, x% t+ z* U$ o5 a4 e3 I- _2 o, h! Q7 g! `3 S' B1 P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 T) w( F4 ?5 \0 \% k2 r& A; o( }
/* Initialize MCASP1 */
8 ~" B8 e, d) ]+ l, s. g+ g6 W    mcasp = &MCASP_MODULE_1;
6 ~& k6 h' G% Y2 w* I' s6 n( [5 D    mcasp->regs->GBLCTL  = 0;       // Reset
: t; Y. `( @' \    mcasp->regs->RGBLCTL = 0;       // Reset RX6 L% T+ X" X1 X* w- {$ k- I
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 T/ h( v7 |" j% _6 f    mcasp->regs->PWRDEMU = 1;       // Free-running
$ ^3 \* b- d- E/ W   // configure McASP0 receive registers
* M4 B. N# T  K* J1 v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) w9 Q/ i3 @9 F& p* }, v1 `2 q( y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 g  q. V$ Y( T6 r% _+ |" _! r    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% b) E7 X+ Q8 {2 X
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 A% B; U8 B  c/ Q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% {, j+ d! U3 u/ m9 R
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' I8 S' H6 P4 ^0 l1 f; A" J8 C    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 e) v( M% a  i2 S2 H: @
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 E' B" w3 v- s5 b" Q/ t3 V
  _8 ^$ |- L2 l0 f* K
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ |( G+ Q$ q; s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. C1 c9 X( D; R$ p' f    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* z+ G4 T& b: a9 c$ W    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" z/ j# i$ ]3 T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- I6 E5 f% R& U; @! s
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) H6 B5 {5 C! _: A( z3 l- Y5 Z    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 G- z; |" F) X) {: H( N
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. y+ A" k# F/ E" V& s2 W# J  j
3 r. Z0 M" U: ^
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  V9 B7 s4 P8 U2 `3 E( V9 B2 r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 Z+ S8 s  q3 I, S7 ^3 n9 E
    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 n9 h- ?9 |5 g$ L3 i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ \8 S# l0 I3 v
: c& O8 P- v% K9 B9 p' I    mcasp->regs->DITCTL     = 0x00000000; // Not used+ L! X' [6 z1 X# F, `
    mcasp->regs->DLBCTL     = 0x00000000; // Not used* W* V2 j1 P  Y9 N
    mcasp->regs->AMUTE      = 0x00000000; // Not used% z- c. q% |5 L3 s  e

: x- n& j0 i$ b  y/* Starting sections of the McASP*/, p/ ?6 c1 d" z4 y; W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . O: z5 _4 u) x; ~* Z1 ^, a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: A8 f  I! c1 R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & t+ ]8 I# W' i# b3 P. W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, i$ F+ g. q& c8 r6 z! b, ]7 c( m) t7 R9 a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  c2 b$ W: R  ]- k& q3 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 O; l9 b, K+ T: n) z3 ?0 u4 w8 R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - V/ X3 P' g+ r$ q5 V' e' t2 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% S( S# B: ^; }0 m$ b& w' r% m. d* K) v: R7 T& n
    mcasp->regs->XSTAT = 0x0000ffff;
4 m& }: W' D6 n5 p    mcasp->regs->RSTAT = 0x0000ffff;
! R4 |$ |! |# X( f% M9 S8 G! ]
" B8 ]' ]( r& W# O0 n4 t% r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% e5 [' S, D& d# J: E6 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 a" |, S! Q& _6 S% }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 w! ~- v7 d6 _# F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# S+ U; X6 K% x. s
% ?+ t7 h. R/ Z) s* C4 ~& q    /* Write a 0, so that no underrun occurs after releasing the state machine */# J; v0 |! G9 U+ G3 G
    mcasp->regs->XBUF5 = 0;8 M* A" Q( ?4 L: e
    mcasp->regs->RBUF0 = 0;
  u. G% |. \2 N0 H1 e; g0 C) h8 M4 @+ {
! u6 V3 d1 C* b    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- ~( f  p" e7 w0 U# [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, O/ F3 H9 P: ?' z* `3 R8 j: Q6 F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 ^& C4 X. w) H- w4 i" P7 Z5 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 G# a1 t" z8 e; \( M

& }3 S3 [6 }! y$ _6 I. N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- J# m4 o7 F, _, Y  {" L; W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# ~; v8 x! c' L6 N6 G    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . m3 `% O. c( B" b8 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; X$ A6 L9 s4 [0 o2 f& |! Y2 D% A" A+ i# \/ x( V
    CSR = 0x0000;
3 K( N$ W) {2 ]/ l3 R* J- M    INTC_INTMUX1 = 0x3d;
: c: K/ A. t; b& t1 T$ B# ~1 I    ISTP = (unsigned int)vectors;- w# x$ v6 b/ @
    ICR = 0xFFF0;  0 h  Q( G# J) f: u$ s
    IER |= 0x12;  
! J- m) u4 z* v    CSR |= 0x01;  9 C( h% r& Y" m9 |1 D( `' f+ w! B
3 e+ q0 d. o* Z& z, n
2 b! d! h) `) A
) l( @' f/ i& |
还有就是两个输入输出函数:/ {6 O2 D$ N- L' A
void output_sample(Int32 out_data)+ Q# A: N% D$ Y4 V5 Q  i; a
{* c- b% N& x, X8 W& P' a% Y
  AIC31_data.uint = out_data;  . J. \; c- q1 O; V/ [+ ?. |
  MCASP1_XBUF5_32BIT = AIC31_data.uint;% U" @! a# V# }1 T; f4 g
}
2 M. E) I* U7 r; P+ k
  @8 D7 M* P. X* i; I$ j- S6 mInt32 input_sample(void)( b' q- F6 O9 R
{  ' V0 ]- z3 b2 y3 L- |  D: r1 P
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. n  G$ ^" _" H" I7 y, T# o) p$ {  return (AIC31_data.uint);
: k; O: C0 u, N( a6 ^! u/ C}
$ g' J4 C, T3 h( T$ p) X$ t4 U4 Z% I
分享到:  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-16 10:00 , Processed in 0.044310 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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