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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* I- `0 G$ H7 ]+ `
main文件:
; b5 w( [+ B  E) Jinterrupt void interrupt4(void)  
8 a0 o! S8 H, F2 E7 h# J( |{
+ z5 Y9 J) _, N/ ^( H  Uint32 sample;
0 m* D- w# y3 y7 B& ]" a/ q$ i  l" ?+ }; z9 }. `- N
  sample = input_sample(); // read L + R samples from ADC+ ]' x- t- T) s4 x
  output_sample(sample);   // write L + R samples to DAC 9 n" V3 e2 c+ P6 s/ ]& j$ w
  return;
- G  ~& y% U$ Q6 @2 g}
2 W7 D& J7 z& D; @/ C8 a
  ]5 w- }7 N; ?* X0 @0 v, u% |# Kint main( void )
& @, O5 Q; Y4 \{8 R3 O6 j9 J9 J# i8 o6 K
$ t" f9 V  A1 w& t; N7 k5 @9 m, O
    /* Initialize BSL */! z: g; `" M! w5 ^
    EVMC6747_init( );
1 o' Z1 l* y. e- z& j* O        /* Call evmc6747_intr function */: p/ h. z! _! G2 e" f
    aic3106_init( );& _' b: R$ H/ Y. @+ ~+ D
        while(1);
7 V/ A5 e/ ^; v- L% L; Z}
6 c7 e( j: s' U; ~0 u+ q& }" |
# L& k' W; S1 ^2 E/ A, N# M4 t! V- T3 g9 F# P/ D' A! o3 m6 s  M: s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 W* w/ s6 I8 Y3 O8 C8 n
/* Initialize MCASP1 */( }! o/ k4 K7 [; q! d' v
    mcasp = &MCASP_MODULE_1;4 n. t% b# Y5 d- X
    mcasp->regs->GBLCTL  = 0;       // Reset
+ O9 G. F3 Z* W! T4 j( I# k7 O    mcasp->regs->RGBLCTL = 0;       // Reset RX3 z2 I! C. v7 N! f
    mcasp->regs->XGBLCTL = 0;       // Reset TX9 X4 d0 P6 q) P. q5 K2 d
    mcasp->regs->PWRDEMU = 1;       // Free-running
) J# O. B4 Z4 i/ L   // configure McASP0 receive registers7 Q% a4 [& W' z7 ~# d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 I5 y, K5 K7 k2 B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* c/ H5 f- H. z, x; K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) v  e2 O# s# ?
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& s$ \: m7 z0 M$ `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 [$ h: H* W3 f
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) A, V4 E9 O, f  d! Q+ I" O; h
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ H4 H6 A* n' J. Q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 e3 m# a1 O; H. T3 p+ m% e

6 E) w* l# M" ], d    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ q% G* Q7 A/ ~7 d, [    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% A( O$ r7 g0 i6 q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 d9 {0 }$ ^1 `  X% ]' E6 O2 N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 Y6 l+ U/ _8 S$ D, T" Q7 S
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 Y1 q  w9 v2 [( G0 r, @  N7 y# C
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 A* M' c3 v  }    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 B+ {3 X0 ]& ~3 i: }- D5 W3 }2 G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, G9 N" e/ |4 Z/ X. c4 R6 ?" |: P8 L1 I- k+ h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; C4 D# g# Q( r8 S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' _7 |+ B) Q* r; P. [4 N* S    mcasp->regs->PFUNC      = 0;          // All MCASPs$ D$ ^; l. _/ G5 p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; z" X" B% M6 o
! b9 `! g: |3 s( ?2 D, N+ ^# e
    mcasp->regs->DITCTL     = 0x00000000; // Not used& u& X0 K3 T2 q6 |& q2 i
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 w1 i# v# e) E3 M+ e2 Y    mcasp->regs->AMUTE      = 0x00000000; // Not used
) }% x0 D9 @$ I' W! Y5 H
" o5 W8 G: w, Z& N/ m) g$ @/* Starting sections of the McASP*/8 m3 k0 t0 ]9 @% ?) D0 \9 `$ D1 K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 z; \. P) \, L1 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, P+ u2 ]% J3 r' q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ J4 T4 {* y; q- L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! J/ z( G, Y$ g3 Y9 o( u. }, G, B* i7 r' r; E4 a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - I6 J4 Y0 B0 C; a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 a' d- K- Q& S; J% O6 q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; _& V: b1 G0 o7 O1 N7 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  J; L7 p7 D6 p9 x" B! |1 D

1 {0 V+ k. k+ X/ a    mcasp->regs->XSTAT = 0x0000ffff; * m% @0 l# j. o1 W. c1 [8 e
    mcasp->regs->RSTAT = 0x0000ffff;
' u  x# A& H% D+ Z! ^, h3 V4 x" k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, e; L, L6 W$ G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" H% \  f8 @) M- h  ?" V1 h. R: F    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % u+ c( A+ w5 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. t2 a+ y) S3 J* R
) v5 p# Q0 U4 ?: x. t
    /* Write a 0, so that no underrun occurs after releasing the state machine */
% M0 c2 Y' t4 y* n3 l2 W! y, Y    mcasp->regs->XBUF5 = 0;) p8 ^+ ?" R- C1 ?) G: m0 \# N! \; N
    mcasp->regs->RBUF0 = 0;7 g3 f4 m' i4 y. _' Y
) w& C5 T* T* A% D- @% S1 W
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 x" r; b% b% T5 G! \' t8 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. z' d1 k& B" z+ R" D# @$ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 A; S. P% x  H6 q5 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 \# R+ [3 T6 K$ Z; T1 M5 I) R6 e) y% d# z3 [5 Z$ `- Y( B
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 P8 z) R2 L2 ^( {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 y1 p% Y0 J) N6 e: A/ j1 u    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   u( Q; k& i6 R( y: L! t2 q% r, \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# p6 M  L  I7 i/ S7 D! C2 y6 x& i: V) {- q' x; u: c3 w
    CSR = 0x0000;
2 @( R0 }6 [" ~- M: W% H0 C% e    INTC_INTMUX1 = 0x3d;+ ?; S' ]! I, i) T( |2 [6 Q
    ISTP = (unsigned int)vectors;
& `( Z0 V, J, X# @    ICR = 0xFFF0;  
( p3 h0 G: v" q  D5 {2 D    IER |= 0x12;  
: n5 K0 d: U) A% X' D# d  O    CSR |= 0x01;  
5 _8 ?! b% F" H) I0 }6 D5 _# F1 r4 n
( H% \% t+ h. G$ g. J+ A

6 p7 Z5 s. }% T; y* X8 `; k还有就是两个输入输出函数:' l6 w( o# E+ q% a/ _$ [' M
void output_sample(Int32 out_data)* Z$ h' a; [4 X+ @+ e! c# v/ o2 s
{
+ E  ]# {0 R, ^2 S. Y& h$ C  AIC31_data.uint = out_data;  ; ?; }; b! X9 c5 j9 k
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, W) M7 N# n1 q8 ~/ d. T+ s
}  |# I2 b4 [6 c* E+ r
7 e+ a) S* g/ X6 ^) Y
Int32 input_sample(void)
' I9 U+ A& S1 U3 D4 f{  
( _8 \& l' I$ x  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; T$ j) Z5 p- }7 d' t" x  return (AIC31_data.uint);' m% X" _  J6 P- W6 \9 m
}4 {: Z/ I) a! k: i
. [9 ]& f- u9 x, z  [
分享到:  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-15 15:28 , Processed in 0.040545 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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