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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 ?: {0 o2 Z/ h$ F
main文件:! q' n  U+ Q" k2 ^' F! ]+ ~( B
interrupt void interrupt4(void)  " n  ]0 S3 g7 L+ x" D- M5 l4 i
{+ i% I; j* g- x. y' [
  Uint32 sample;% P* m" u  o- [4 q$ l% \7 ^
0 C* W1 s7 \! G
  sample = input_sample(); // read L + R samples from ADC
6 R! S6 b! n0 U5 P  output_sample(sample);   // write L + R samples to DAC $ O4 r' V9 ~9 H2 a2 W0 U
  return;. F5 @' m( t% L. k6 `- k& D
}$ i5 b# [" t# _! B+ [
% w! w: n: C1 ^3 J
int main( void )8 v" ~, W0 z# ?1 d! m( {
{
# r+ B' u' E3 Y8 [8 E- v) P" {7 \" N3 d/ t
    /* Initialize BSL */% _$ I0 G2 H' H2 T; ~# a' ?0 b4 Y
    EVMC6747_init( );- P  w2 n" P$ U2 t2 Z
        /* Call evmc6747_intr function */6 U  h. x1 H1 `' N2 w5 F
    aic3106_init( );5 I6 {, \& @; E
        while(1);/ W" K. a& c' r$ Y' E
}4 D6 B: r" Z+ f

# I* Q, K6 X  G- K- h6 X, E+ E
5 y% h: ?9 n! X; Y( N6 k5 X! daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  l- S$ X) [( I6 h: x: |  P+ T8 k4 f
/* Initialize MCASP1 */
* T. q: R- g& x& x5 V. i3 Q    mcasp = &MCASP_MODULE_1;. H' `0 d  v. v4 l
    mcasp->regs->GBLCTL  = 0;       // Reset
. V3 F! q$ }) ~3 O- Q0 V    mcasp->regs->RGBLCTL = 0;       // Reset RX9 ^- b! _8 _. t" v- m  G; ^. p$ T
    mcasp->regs->XGBLCTL = 0;       // Reset TX  A: S# {& L) o2 y
    mcasp->regs->PWRDEMU = 1;       // Free-running
, U+ a" j' T* B5 [5 ~   // configure McASP0 receive registers4 v! b, K- B5 ]1 L3 e4 F
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 r5 J5 [/ p" `: v    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& Q$ O2 A) d: O7 R/ Z6 E* ?, W1 z9 c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 p8 m% E% h! M, O; m- ~7 ]6 J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 \. ?: a& H4 P: _( G    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 M, d0 E8 ]$ {; H5 u4 \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! U! A2 U9 J* U" \    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( {" E& w, ~% l8 B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 n# b# d# L# b9 ^' S7 |. n/ k3 V" B5 o; k3 U, `6 S  h. V5 s
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 A5 r5 l% Y# Q& o7 I    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 ~* h% s* J" l  r+ y) C' \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, Z% K2 e! r: C! I3 R$ p
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& Y1 H* {  r0 f3 s
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# T* ~" _# C5 o4 \4 Q, J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& Y& R& W! Y4 X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) ^, N5 o/ ], l" N    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; H7 O0 c* p2 d: }8 @' h1 d3 J# K' r( J' D/ S  g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# d5 U  c" N& Z: J4 m
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 l2 A3 T* r/ z) _* Q    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 |! b: s+ a% F& @* G" {0 c& D& W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 x( P) t/ L: f9 q$ a6 z; Z4 i
+ ^( a) @$ \; v
    mcasp->regs->DITCTL     = 0x00000000; // Not used, ?! I$ s. |2 Q3 z/ P& L% g( p" |8 m
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ \! y' R( K" ]9 D+ O1 ~# z, N+ Z    mcasp->regs->AMUTE      = 0x00000000; // Not used
, x$ X; J. t" |; [, l) u9 j( F' h  P
/* Starting sections of the McASP*/
" H' d- O9 s5 C+ c) [# C    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " D: k% `' s" Z8 }5 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 F) b, T: |" C; F$ t    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   Z+ N# ~$ V, s; p3 j7 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' w6 p9 q# B. m
5 w6 }6 G& W0 w6 p! Z( g
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . B7 Q  U* _6 o9 q% O3 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ O( P* T0 E5 n! H& a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; [1 ~5 ?5 A6 `% }4 X0 g! }: D6 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- W! u5 D2 h" V0 i# q8 b% ^2 `
$ A2 l( ?3 Z' J$ L* u# \3 }
    mcasp->regs->XSTAT = 0x0000ffff;
2 l/ t% P$ i0 u' b    mcasp->regs->RSTAT = 0x0000ffff;
( Z; Z, j+ Z9 y/ V6 K0 L# J. R
7 t# v- F% \5 z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ }2 D; U, {) E: G) i, S' v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: h' R4 B5 b9 U1 ?8 O9 ?; O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # G7 o) G* Z' h, H& H; p- r: A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 \# [8 g* A3 P  T3 G8 z$ @6 Z) h- A' D
    /* Write a 0, so that no underrun occurs after releasing the state machine */# k( ]1 m; x( i4 G. @7 ?
    mcasp->regs->XBUF5 = 0;+ c- s! a2 @# M* B" U" `! `3 L
    mcasp->regs->RBUF0 = 0;
- o% f/ P) V8 F" L4 e# s) h* g' D
, R- v$ x. b+ j% p* [, P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 Z4 t) I/ |! e/ F% k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ O! H" m8 E4 W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / I' P0 H/ z" F0 n4 a$ E1 r, ^7 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* V* V6 G$ Y2 R0 t
0 A$ o7 N' j" \1 J, ]% Q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) Z/ b, |5 L# f) S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 r  Z8 X3 E' }5 @% B4 n2 I    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : Q& M2 z) e, w$ f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ P& r( \3 r$ y. G# w' Z+ ~1 S
, t) o5 G' l" Z$ p$ y& K4 [
    CSR = 0x0000;( ?, ^/ y: w4 v  W+ C
    INTC_INTMUX1 = 0x3d;
- w2 h( N. M2 \, k6 ]    ISTP = (unsigned int)vectors;. Z, p+ D2 L2 b4 O
    ICR = 0xFFF0;  
5 M0 N5 F6 D% X" }! [    IER |= 0x12;  0 h# v" [$ `% |3 |+ P4 N1 X7 ~
    CSR |= 0x01;  7 H$ Q% U: ]3 m; m6 e! G0 K

& B7 I+ Z3 N$ r# a2 i5 W. M& |5 d/ F. q5 n" c2 h# ]

. R+ I) y4 b2 b* j8 y7 l还有就是两个输入输出函数:7 K% l/ b; k( e% g) x
void output_sample(Int32 out_data)& o) c$ A8 A$ z4 n0 n$ B; t9 n
{
* S! y) n1 T! a& n- G' m, c  AIC31_data.uint = out_data;    h& Q0 u3 y, c' F+ p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ G" ^. F9 K" M8 _* b}
0 t6 `/ }. t, n, B  P$ w/ T
: [- o! e0 E3 |; B2 L5 [6 w- {, k; RInt32 input_sample(void)8 ^0 P1 f& O, y5 l( w) ~
{  ) v: _1 x3 _' O6 o6 u4 ?7 S1 Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;. J% S" W, }9 ]1 L, o1 g
  return (AIC31_data.uint);
# k! Z$ K# t; ^* z3 M4 T* a}
, S4 L. o! W! J7 K' \$ }" e2 U5 h  v- P$ z2 n1 n
分享到:  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-9-17 08:26 , Processed in 0.045058 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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